分享STM32驱动步进电机的方法
步进电机和直流电机可以说是我们平时最常用的俩种电机,相比直流电机,步进电机可以实现的精准控制也让其可以做到很多直流电机无法做到的事情。这篇文章会详细介绍四线俩相步进电机的驱动方法和一些调试方法。
1.步进电机和TB6560的接线图
步进电机驱动TB6560都有俩个接口,一端为输出,一端为输入,输出部分接步进电机,输入部分接单片机IO口,辨别俩个端口的方法是,看俩个端口旁标注的接口定义,笔者的输出口六个接口分别为VCC GND A+ A- B+ B-,输入口分别为EN- EN+ DR- DR+ CP- CP+(如图)
输出端接线的时候只需要注意,将步进电机的同相的线接到一起(同为A或同为B,如图),确定哪跟线只需要用万用表测即可,短接的俩根线为同相。
输入端接线的方法有俩种,一种是共阳法,另一种是共阴法,我使用的是共阳接法,所以只介绍共阳法,共阴类似共阳,请读者自己参照共阳研究。共阳法接线要把EN+ DR+ CP+短接,然后接到VCC(STM32的VCC为3.3V,如图)。
2.TB6560的参数说明
首先要说明的是输入端口的几个字母的意思,EN为使能端,当EN端为高电平时,为工作状态;CP为脉冲输入端,该端口有脉冲时步进电机转动;DR为方向信号端,高电平和低电平时方向相反。然后驱动上有一排开关,驱动生产厂家不同,开关的功能也会有所区别,但共同的特点是都会有“细分设置”和“工作电流”,细分设置指的是步进电机每一步转多少度,以一整步为最大,分的越小,那么一步转过的角度就会越少,这里需要注意的是,最开始调的时候,最好调到整步,如果细分太多的话,即使步进电机转动了,可能你也不会有所察觉;工作电流要注意,设置电流不能超过电机的额定电流。具体设置这些参数根据驱动上的说明,打开相应开关即可。
3.程序设计思路
a.让电机转起来
在测试的时候,首先要确保单片机和驱动接线是正确的,使能端接高电平或悬空,方向端接高电平或低电平或者悬空,脉冲管脚接一个STM32的IO口,这个管脚通过延时函数输出一个脉冲,但是这个脉冲的频率不能太快,否则电机不能正常启动,这个管脚最好接一个小灯,小灯每闪一次,步进电机会走一步,如果小灯在闪,步进电机没转的话,就可以排除程序问题,检查接线就好了。
b.改变电机转速
等步进电机可以转起来的时候,就可以把延时函数改成定时器中断了,通过定时器控制脉冲频率。这时候改变计数器装入的值就可以改变频率快慢,就可以实现电机的转速控制,还要注意:步进电机速度越快,提速的加速度必须越小,否则步进电机就会卡死。
c.电机的启动截至、改变转动方向
实现步进电机的转速控制,电机转动方向和启动截至就简单多了,只需要将另外俩个端口接到IO口:改变使能口的电平,即可控制启动截至;改变转动方向的电平就可以改变转动方向。
4.总结
通过上面的调试,已经可以实现步进电机的加速、减速、反转、截至和启动功能了,至于代码部分,还是很简单的,只需要稍微改一下定时器程序的参数即可实现,我就不贴出来了。希望大家调试顺利!
【注】以上所有过程都建立在共阳接法的基础上。大家步进电机驱动可能和我的不同,这里也只是希望可以让读者达到参考的目的。
STM32控制步进电机
STM32控制步进电机
电机方面主要包括控制运动、加减速、限位。下面介绍一下在电机控制方面的心得,由于对于电机的控制不需要很精确,并且自身能力有限,相比于大牛有很大的差距。
实现功能
主要是控制滑块的运动,开始运动时需要加速,当稳定在最高速度时匀速运动,检测到下端限位信号时,开始减速直到停止,然后进行反向加速,匀速,检测到上端限位时停止运动。
加速——匀速——减速——停止——反向——加速——匀速——停止硬件部分
本次电机为两相四线步进电机,两相:电机有两个线圈(绕组),四线:电机有四根线,一般是A+ A- B+ B-。有些电机不会标注出线的极性,其实可以用万用表测,短接的就是同一个绕组,或者短接之后电机转动很费力,也代表是同一个绕组。
驱动电机的运动需要较大的电流,这取决于电机本身和负载,所以通常需要驱动芯片。而且驱动芯片可以实现许多附加的功能,包括细分、休眠、保护等。本次采用的是DRV8825驱动芯片模块。模块的介绍图如图所示:
引脚介绍:
ENABLE/:使能引脚,高电平停止工作,低电平正常工作;M0-M2:代表细分,最大可以达到32细分,这部分可以参考datasheet;RESET/ 、SLEEP/:低电平会休眠和复位,因此电机正常工作时,两个引脚接高电平;STEP:最重要的引脚,通过单片机给这个引脚PWM信号,控制电机运动;DIR:0和1控制电机方向;VMOT:供电引脚,一般用12-20V就可以了;B2-A1:接电机四根线;FAULT/:接高电平工作;光电限位光电限位采用的反射型,型号为sy1200,感应距离为1-4mm,当没有遮挡时,输出低电平;有遮挡时,代表有光反射回来,输出高电平;测试过程中,发现最好采用白色的平面反射,效果更好。
3软件部分
软件主要就是通过stm32输出PWM脉冲,脉冲的频率决定了电机的速度。
PWM通过定时器产生,决定频率的主要是arr重装载值,以及psc预分频值。最终输出的PWM频率为72000k/(arr*psc)。
加减速由于需要做到加减速,也就意味着PWM的频率是改变的,因此arr的值需要改变。参考网上对于加减速的一些方法:主要有T型加减速和S型加减速,实现方法有公式法或者查表法。由于公式法比较麻烦,就直接采用了查表法。所以根据需要的频率,计算出不同频率下的arr值,写到数组里,就可以实现频率的改变。不过这种方法下,频率的改变是根据时间做线性或者S型变化,这种方法对吗?还是根据步数来改变?
S型加减速:T型加速就是匀加速,固定加速度。S型加速需要根据公式计算,详细说明如下:
其中Fcurrent代表某个点的频率:Fmin代表最小频率;Fmax代表最大频率;Flexible为S曲线区间系数,越大代表压缩的最厉害,中间(x坐标0点周围)加速度越大;越小越接近匀加速。理想的S曲线的取值为4-6;num:频率点/2;
例如想要从1kHz加速到40kHz,中间经过40个点,Fmin=1kHz,Fmax=40kHz,num=40/2=20,最后通过excel计算出各个频率值,可以发现在末端的加速是非常缓慢的,中间加速比较大。问题就是,初始速度并不是1khz了,它取决于系数的取值,取6时,初始速度就越小。
软件中实现:
采用定时器3输出PWM脉冲,定时器2用于计数中断(更精确的控制可以通过定时器2来计算出给出多少个脉冲,也就是电机运动的步数,那样的话就可以精确控制电机运动,形成开环反馈)
欢迎的大家关注微信公众号【零基础玩嵌入式】和我们一起学习嵌入式知识
点击下方了解更多即可加入嵌入式技术交流群交流群
相关问答
stm32是怎么连接多个舵机、步进电机和直流马达的?
stm32是怎么连接多个舵机、步进电机和直流马达的?
STM32编码器捕捉频率并同步到步进电机问题请教?
1.测量三五个脉冲的时间计算速度.用于控制步进电机输出.2.测量长时间的编码器,计算速度.用于修正步进电机速度.3.用5楼的办法产生更多的计数器溢出.使用溢出...
好基友们求解!步进电机?
[回答]步进电机细分stm32用什么功能实现据本人所知,步进电机不能用PWM控制。三相、直流电机可以用PWM(脉冲调宽)来控制电机的转速。而步进电机是用步进脉...
如何用STM32单片机控制LED灯带的颜色改变?
RGB三原色LED彩灯,由红色、绿色和蓝色三个独立的灯珠构成,常见的有四个引脚,一个公共端和三个颜色控制端。三个颜色任意组合可以产生其他颜色,如红色和绿色同...
stm32定时器类型最大的不同?
高级定时器是专门用来做控制用的,高级定时器和通用定时器的区别是它可以输出7路PWM波形和比较输出,可以驱动无刷电机,步进电机,和直流电机等,它还可以外部触发...
mco芯片干什么的?
MCO是microcontrollerclockoutput的缩写,是微控制器时钟输出引脚,在STM32F1系列中由PA8复用所得,主要作用是可以对外提供时钟,相当于一个有......
20个引脚的芯片有哪些?
20个引脚的芯片有很多种类,以下是一些常见的:1.ATtiny20:一款低功耗的8位微控制器芯片。2.PIC16F1936:一款8位微控制器芯片,具有运行速度快、内存和引脚丰...
我想问单片机,你了解多少?
还好,做过一年stm32,能跑前后台程序,懂一点UCOSII,外围模块搞过液晶超声波蓝牙wifi步进电机伺服电机舵机,做过音乐频谱,光立方,在做Robomasters只有了解它...
stm32单片机用USART串口跟电脑通信,单片机的TX跟与电脑相连...
如何跳转到stm32f的bootloader105浏览0回答如何用STM32来控制语音芯片isd1730呢77浏览0回答如何用Stm32系列单片机实现控制稳压电源0~15V输出,步进为...
stm32的usb接口外接u盘什么芯片比较好-ZOL问答
STM32F105、STM32F107、STM32F2xx系列,STM32F4xx系列。这些芯片都有USBOTG这个外设,可进行U盘的文件读写,其中STM32F407算是用得很多了,淘宝上有大量的...