第一次在网站上投稿,写的不好请大家不要见怪。
在日常生活中,无刷直流电机是很普遍的,无刷直流电机的好处主要是免维护,无需维护。有刷直流电机在连续使用一段时间后需要更换碳刷的,而且碳粉也会对电机不好。
转入正题, 无刷直流电机简单的可以分成有传感器和无传感器两种,而有传感器分霍尔传感器和编码器两种。由于编码器的无刷直流电机我没实践过,所以我在这里就只讲讲带霍尔无刷直流电机。
入手一个带霍尔的无刷直流电机(下文简写成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°为例)
图一
从图一可以看出电机转子处于其中一个区间时应导通绕组,比如当霍尔状态为5(101)时,应导通绕组A+ B-;霍尔状态为1(100)时,应导通绕组A+ C-。
当然了,如果你需要反转的话,霍尔状态为5(101)时,应导通绕组B+ A- ;霍尔状态为1(100)时, 应导通绕组C+ A-。
为了大家好记我就做成了一个表
确定好后就是开始搭设硬件电路了。
实例的电机是BG65x75;该电机的霍尔安装角度是60°
电机驱动桥选用IR2136S,为什么用这个驱动桥呢?主要原因是这个桥是集成了三相桥臂的,可以简化电路。

输入输出时序逻辑图

霍尔传感器电路我们简单的使用74HC14即可。
确定好电路后就是主菜STM32了,打开STM32CubeMX,选用STM32F103单片机。
定时器 1配置 PE9/PE11/PE13为上桥臂PWM输出 ,PE8/PE10/PE12 为下桥臂 高电平导通
/
TIM1 设置 一般BLDC的PWM频率为16-22KHz之间。根据电机选用合适的频率
选择好电机驱动设置后,再设置霍尔信息读取电路,这里我采用外部中断的方式,当然也可以用定时器输入捕获的方式。
同理,HB/HC 也是这样简单的配置就完成了霍尔信息读取。接下来就是stm32的编程部分
电机驱动函数,根据上面的电机表导通对应的绕组 PS: motor_driver_Period*PID_PWMout_duty/100 就是PWM的占空比,电机启动的时候应从占空比10-20之间,建议不要过高或者过低,以免损坏电机
霍尔信息函数
当设备一上电,初始状态,是需要读取霍尔信息的,所以添加一个霍尔信息读取函数并使能IR2135S
以上函数完成后
在main主函数里设置高级定时器1 这里才能调用TIM1设置的PWM ,为什么后面都是0,是因为单片机是需要根据霍尔信息选择指定的驱动方式,所以单片机在主函数里设置为关断状态。
在 while(1)
{
start_motor(); //这里就可以读取霍尔信息
motor_driver(); //启动电机
}
使用这两个函数就可以简单驱动BLDC了,如果需要按键启动话,添加按键函数后调用start_motor()和motor_driver()即可。