找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 302|回复: 4
打印 上一主题 下一主题
收起左侧

求基于51单片机开发的带霍尔无刷电机电机驱动

[复制链接]
跳转到指定楼层
楼主
ID:1125252 发表于 2024-7-13 15:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近想学无刷电机,有谁发表过相关的帖子或是做过项目吗?求分享下
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:1034262 发表于 2024-7-13 22:27 | 只看该作者
可以去STC看看,他们有完整的例子,带霍尔和不带霍尔的都有。
回复

使用道具 举报

板凳
ID:401564 发表于 2024-7-15 11:40 | 只看该作者
带霍尔的只要理解互补带死区PWM的应用和中断的应用就可以了
抄一下别人的代码,基本也就能理解整个思路了
不带霍尔的就不是那么好搞的了,过零检测那一块有点难,要滤波
你可以看一下我以前学无刷电机向别人提问的帖子,里面有资料,我电脑上有很多这方面的资料
回复

使用道具 举报

地板
ID:1128908 发表于 2024-7-19 18:18 | 只看该作者
#include <reg51.h> // 包含51单片机的寄存器定义   // 假设霍尔传感器连接到P1.0, P1.1, P1.2 // PWM输出连接到P2.0, P2.1, P2.2(对应电机的三相)   // 初始化函数 void Init() {     // 初始化IO口和定时器     // ... }   // 读取霍尔传感器状态 unsigned char ReadHallSensors() {     // 读取P1.0, P1.1, P1.2的状态,并返回一个编码值     // ... }   // 根据霍尔传感器状态和电机状态更新PWM输出 void UpdatePWM() {     unsigned char hallState = ReadHallSensors();     // 根据hallState和电机状态确定PWM输出     // ...     // 更新P2.0, P2.1, P2.2的状态以输出PWM信号     // ... }   void Timer0_ISR() interrupt 1 { // 定时器0中断服务程序,用于PWM信号生成     // ...     // 更新PWM占空比或其他与PWM相关的操作     // ... }   void main() {     Init();     EA = 1; // 开启全局中断     ET0 = 1; // 开启定时器0中断     TR0 = 1; // 启动定时器0       while(1) {         UpdatePWM(); // 不断更新PWM输出以控制电机         // 可以加入其他功能或任务     } }
回复

使用道具 举报

5#
ID:1128908 发表于 2024-7-19 18:20 | 只看该作者
你可以参考51单片机的PWM输出示例代码、ADC的实例代码以及基本的PID控制算法来构建你的程序
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表