STM32 电机教程 7 - 步进电机开环速度控制

前言

      上一讲我们已成功实现对步进电机的正反转动控制,并简单的通过调节节拍间的延时时间实现了简单的转速控制(开环),这一节将继续给大学介绍在STM32中通过定时器方式来实现节拍间的精确延时操作,并通时调节定时器定时中断产生的时间来实现对步进电机的开环速度控制。

 

      本节演示步进电机实物图如下,因没有找到电机的详细参数,只能从型号中大致猜测一些(电机工作电压4V),结合万用表实测,得知该步进电机为两相四线电机,具体接线关系如下图所示。

STM32 电机教程 7 - 步进电机开环速度控制

STM32 电机教程 7 - 步进电机开环速度控制

STM32 电机教程 7 - 步进电机开环速度控制

 

示例详解

本节用到ST官方推出的NUCLEO-F103RB和MPS的EV8049S-U-00A 电机控制评估板 ,EV8049S-U-00A评估板使用MP8049双通道全桥芯片,可同时控制两个有刷直流电机或两个喇叭或一个步进电机,本节将用它来控制一个步进电机,手头没有EV8049S-U-00A评估板的可以用专门的步进电机驱动板(tb6560等)代替,也可以用L298N电机驱动板来控制

 

 

STM32 电机教程 7 - 步进电机开环速度控制

STM32 电机教程 7 - 步进电机开环速度控制NUCLEO-F103RB对应的大致原理接线图:

STM32 电机教程 7 - 步进电机开环速度控制

EV8049S-U-00A 电机控制评估板原理图:

 

STM32 电机教程 7 - 步进电机开环速度控制

 

 

    1. 准备操作
      1. MP8049驱动芯片工作电压是5-26V,因不太确定步进电机工作电压具体是多少,本示例以该驱动支持的最低电压5V控制步进电机(电压越低,电机电流越小,电机越不容易烧坏,但出力也越小),关于EV8049S-U-00A评估板及MP8049双通道全桥芯片的详细数据手册可在mps官网下载),连接好NUCLEO-F103RB与EV8049S-U-00A及电机:

STM32 电机教程 7 - 步进电机开环速度控制

 

需要用到的信号

对应MCU引脚

PWM1A

PA0

PWM1B

PA1

PWM2A

PA4

PWM1B

PB0

GND

GND

本节将直接使能PA0,PA1,PA4,PB0引却配置成通用输出模式 ,直接以接高或拉低方式控制步进电机的各相通电状态,步进电机的节拍控制放在定时器中断中完成,通过控制定时器定时时间便可实现对步时电机的速度控制。

 

关于两相步进电机的控制节拍:

正转:

(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.

反转为正转的逆序,本节将演示以上两种控制方式的步进电机正反控制。

 

      1. 在STM32CubeMX中,有专门的NUCLEO-F103RB工程模板,新建一个Cube工程,芯片型号为st32f103rb:

STM32 电机教程 7 - 步进电机开环速度控制

STM32 电机教程 7 - 步进电机开环速度控制

生成一个简单的工程模板实现了RCC,SYS,USART2接口的配置,同时还实现了LD2(LED)引脚的配置。接下来手动配置PA0,PA1,PA4,PB0为普通输出功能:

STM32 电机教程 7 - 步进电机开环速度控制

配置定时器1,用来产生定时中断,并在定时中断函数中完成步进电机的节拍换向操作,这里在定时器分频系数为(71+1)=72,默认定时时长为(999+1)=1000us ,即1ms,可实现的定时时间范围是1us 到 65.535ms。

STM32 电机教程 7 - 步进电机开环速度控制

同时开启定时器更新中断,中断等级选择默认即可:

STM32 电机教程 7 - 步进电机开环速度控制

 

生成工程:

STM32 电机教程 7 - 步进电机开环速度控制

 

 

      1. 打开工程,为工作加入stepmotor.c(放于src文件夹下) 和stepmotor.h(放于inc文件夹下)文件,并在tim.c中加入开启定时器更新中断代码:

STM32 电机教程 7 - 步进电机开环速度控制

STM32 电机教程 7 - 步进电机开环速度控制

修改stm32f1xx_it.c中代码

STM32 电机教程 7 - 步进电机开环速度控制

STM32 电机教程 7 - 步进电机开环速度控制

最后在main.c 中加入如下测试代码:

STM32 电机教程 7 - 步进电机开环速度控制

STM32 电机教程 7 - 步进电机开环速度控制

设置工程下载后自动运行:

STM32 电机教程 7 - 步进电机开环速度控制

STM32 电机教程 7 - 步进电机开环速度控制

编译代码,下载程序运行可直以看到步时电机成功转动起来,可以看到步进电机成功实现了三种速度正转及反转功能,结合已编写好的stepmotor.c中的代码及定时器功能,可以很方便实现步进电机的速度,方向及使能控制,操作mymotor.EN变量可以实现步进电机的起停控制,控制mymotor.Dir 变量值就可以实现步进电机的方向控制,映射好mymotor.Delay 变量的值如程序中( mymotor.Delay= &(htim1.Instance->ARR); )后操作 *mymotor.Delay  的值就可实现步进电机的速度控制( 如程序中的 *mymotor.Delay = 500; )。

通过本节内容,我们已经可以实现对步时电机速度的较为精确的控制,不过需在注意的是,本节对步进电机的速度控制是开环控制,如果步进电机不丢步,则速度是比较准确的,为了防止步进电机丢步,控制节拍间的间隔一定不能太小,否则很有可能发生步进电机跟不上(丢步)甚至不转的情况。OK,本期内容完成!下一期将给大家介绍步进电机的开环电流控制,如果大家有什么疑问或是有想了解的其它内容,也欢迎大家留言!!最后喜欢这个公众号的同学们记得加关注了,每天都会有技术干货推出!!

 

文中源码及资料下载,关注十三公众号:

STM32 电机教程 7 - 步进电机开环速度控制

在公众号里给十三发送 “下载|STM32 电机教程 7” :

STM32 电机教程 7 - 步进电机开环速度控制