无刷直流电机(带霍尔)简单入门(STM32实例)

STM32 带霍尔BLDC
dc0beb0d8c2d62a8
发布时间: 2019-06-12
阅读: 37597
第一次在网站上投稿,写的不好请大家不要见怪。
在日常生活中,无刷直流电机是很普遍的,无刷直流电机的好处主要是免维护,无需维护。有刷直流电机在连续使用一段时间后需要更换碳刷的,而且碳粉也会对电机不好。
转入正题, 无刷直流电机简单的可以分成有传感器和无传感器两种,而有传感器分霍尔传感器和编码器两种。由于编码器的无刷直流电机我没实践过,所以我在这里就只讲讲带霍尔无刷直流电机。
 
入手一个带霍尔的无刷直流电机(下文简写成BLDC),选用合适的力矩、转速、霍尔安装角度和磁极对数等重要参数后,可以观察一下的的线序。一般我们接触的BLDC,其A、B、C相(或者U、V、W相)的线是比较粗的。霍尔传感器的线是比较细的,一般包含+5V、GND、HA、HB、HC五根线,具体说明请根据说明书确定。
这些都搞掂后,就开始上电?NO!NO!NO!(重要的事说三遍,我听说有人真的直接上三相交流电,后果很严重)。我们先检查BLDC是否正常,在检查 BLDC之前先简单下面讲解一下BLDC。
霍尔安装角度分60°和120°两种,当BLDC转动时,霍尔传感器就会发送指定的信息确定电机转子位置。
60°(HC、HB、HA 顺序): 100 、 000、 001、 011、 111 、 110 ;(即 4、 0、 1、 3、 7、 6)
120°(HC、HB、HA 顺序): 101、 001、 011、 010、 110、 100(即 5、 1、 3、 2、 6、 4);
霍尔有标示 H3/H2/H1, 也有标示 SA/SB/SC 的,记住 H3 或 SA 为编码的高位;
我们将霍尔传感器的+5V和GND接上5V电源和GND,用万用表测量HA、HB、HC的电平。慢慢的转一下电机转子,万用表测量到数据应对应上述数据。
________________________________________
接下来我们就是把BLDC的线序整理出驱动方式。(以霍尔安装角度120°为例)
 霍尔输出波形与绕组导通规律对应关系.PNG

图一

从图一可以看出电机转子处于其中一个区间时应导通绕组,比如当霍尔状态为5(101)时,应导通绕组A+ B-;霍尔状态为1(100)时,应导通绕组A+ C-。
当然了,如果你需要反转的话,霍尔状态为5(101)时,应导通绕组B+ A- ;霍尔状态为1(100)时, 应导通绕组C+ A-。
为了大家好记我就做成了一个表

  顺转.PNG


逆转.PNG


确定好后就是开始搭设硬件电路了。
实例的电机是BG65x75;该电机的霍尔安装角度是60°


 电机.PNG

电机驱动桥选用IR2136S,为什么用这个驱动桥呢?主要原因是这个桥是集成了三相桥臂的,可以简化电路。

IR2136S.PNG

输入输出时序逻辑图

捕获.PNG

霍尔传感器电路我们简单的使用74HC14即可。

霍尔电路.PNG
确定好电路后就是主菜STM32了,打开STM32CubeMX,选用STM32F103单片机。

定时器 1配置 PE9/PE11/PE13为上桥臂PWM输出 ,PE8/PE10/PE12 为下桥臂 高电平导通

/捕获.PNG

1.PNG



TIM1 设置  一般BLDC的PWM频率为16-22KHz之间。根据电机选用合适的频率


1.PNG

1.PNG


选择好电机驱动设置后,再设置霍尔信息读取电路,这里我采用外部中断的方式,当然也可以用定时器输入捕获的方式。

1.PNG

1.PNG


同理,HB/HC 也是这样简单的配置就完成了霍尔信息读取。接下来就是stm32的编程部分



电机驱动函数,根据上面的电机表导通对应的绕组

PS: motor_driver_Period*PID_PWMout_duty/100 就是PWM的占空比,电机启动的时候应从占空比10-20之间,建议不要过高或者过低,以免损坏电机

1.PNG

1.PNG

1.PNG




霍尔信息函数

1.PNG



当设备一上电,初始状态,是需要读取霍尔信息的,所以添加一个霍尔信息读取函数并使能IR2135S 

1.PNG



以上函数完成后

在main主函数里设置高级定时器1     这里才能调用TIM1设置的PWM ,为什么后面都是0,是因为单片机是需要根据霍尔信息选择指定的驱动方式,所以单片机在主函数里设置为关断状态。

1.PNG

while(1)

{

    start_motor();   //这里就可以读取霍尔信息

    motor_driver();    //启动电机

}

使用这两个函数就可以简单驱动BLDC了,如果需要按键启动话,添加按键函数后调用start_motor()和motor_driver()即可。


原创作品,未经权利人授权禁止转载。详情见转载须知 举报文章

点赞 (2)
评论(3)

登录后可评论,请 登录注册

xbk_231897 82天前...
不错
0   回复
5bd5586610fdfa3e 321天前...
毕设就是做的这个
0   回复
xbk_619187 174天前...
ST 原装正品现货,有价格优势!欢迎咨询 QQ:53358029
0   回复
相关文章推荐
X
你的打赏是对原创作者最大的认可
请选择打赏IC币的数量,一经提交无法退回 !
100IC币
500IC币
1000IC币
自定义
IC币
确定
X
提交成功 ! 谢谢您的支持
返回

我要举报该内容理由

×
请输入您举报的理由(50字以内)