前言
上一讲我们已成功实现基于STM32定时器的步进电机开环速度控制,这一节将介绍步时电机的开环电流控制,步进电机内阻较大,在电机停机或堵转时其电流可近视为 I = U/R。其中R是常量,控制U就可以控制步时电机的最大电流I,也就控制了步进电机的最大输出力。
本节演示步进电机实物图如下,因没有找到电机的详细参数,只能从型号中大致猜测一些(电机工作电压4V),结合万用表实测,得知该步进电机为两相四线电机,具体接线关系如下图所示。
示例详解
本节用到ST官方推出的NUCLEO-F103RB和MPS的EV8049S-U-00A 电机控制评估板 ,EV8049S-U-00A评估板使用MP8049双通道全桥芯片,可同时控制两个有刷直流电机或两个喇叭或一个步进电机,本节将用它来控制一个步进电机,手头没有EV8049S-U-00A评估板的可以用专门的步进电机驱动板(tb6560等)代替,也可以用L298N电机驱动板来控制。
EV8049S-U-00A 电机控制评估板原理图:
需要用到的信号 |
对应MCU引脚 |
PWM1A |
PA8 |
PWM1B |
PA9 |
PWM2A |
PA10 |
PWM1B |
PA11 |
GND |
GND |
配置STM32 MCU引脚PA8,PA9,PA10,PA11为定时器1的 PWM1,PWM2, PWM3, PWM4输出控制,定时器1的PWM载波频率为5K, 控制PWM1,PWM2, PWM3, PWM4输出引脚上的占空就可以控制对应的输出平均电压,从而实现对步进电机的电流控制,关于步进电机的速度及节拍控制则放在定时器2的更新中断中完成。
关于两相步进电机的控制节拍:
正转:
(1)四拍:A 1000,A- 0010, B 0100, B- 0001.
(2)八拍:A 1000,AA- 1010, A- 0010,A-B 0110,B 0100,BB- 0101,B- 0001,B-A 1001.
反转为正转的逆序,本节将演示以上两种控制方式的步进电机正反控制。
生成一个简单的工程模板实现了RCC,SYS,USART2接口的配置,同时还实现了LD2(LED)引脚的配置:
配置定时器2,用来产生定时中断,并在定时中断函数中完成步进电机的节拍换向操作,这里在定时器分频系数为(71+1)=72,默认定时时长为(999+1)=1000us ,即1ms,可实现的定时时间范围是1us 到 65.535ms。
同时开启定时器更新中断,中断等级选择默认即可:
配置定时器1,用于产生载波频率为5KHZ的PWM,使能四个通道,各通道的默认产生50%(600)的点空PWM:
生成工程:
修改stm32f1xx_it.c中代码
最后在main.c 中加入如下测试代码:
设置工程下载后自动运行:
编译代码,下载程序运行可直以看到步时电机成功转动起来,可以看到步进电机成功实现了相同速度正转3秒反转3秒功能,同时正转用的PWM是600,反转用的PWM是 1000 ,在电源上可以看到,电机正转与反转时电流明显不一样。
结合已编写好的stepmotor.c中的代码及定时器功能,可以很方便实现步进电机的速度,方向及使能控制,操作mymotor.EN变量可以实现步进电机的起停控制,控制mymotor.Dir 变量值就可以实现步进电机的方向控制,映射好mymotor.Delay 变量的值如程序中( mymotor.Delay= &(htim1.Instance->ARR); )后操作 *mymotor.Delay 的值就可实现步进电机的速度控制( 如程序中的 *mymotor.Delay = 500; ), 通过setpwm函数接口可以调节pwm 的占空比范围是 0- 1199;。
通过本节内容,我们在步进电机开环速度控制的基上又实现了开环电流控制,实现了步进电机最大输出力的灵活控制。OK,本期内容完成!限于本人手中的实际研件条件,板子中没有电流或速度传感器,步进电机的闭环速度及电流控制不能给大家演示,不可相关的内容我们可以在PMSM及BLDC电机的相关内容中给大家介绍,下一期将给大家BLDC(直流无刷电机)基本控制原理,如果大家有什么疑问或是有想了解的其它内容,也欢迎大家留言!!最后喜欢这个公众号的同学们记得加关注了,每天都会有技术干货推出!!
文中源码及资料下载,关注十三公众号:
在公众号里给十三发送 “下载|STM32 电机教程8” :