基于STM32F407ZGT6对步进电机的控制(单脉冲+重复计数)有代码

时间:2024-04-02 16:39:01

1.步进电机
步进电机是将电脉冲控制信号转变为角位移或线位移的一种常用的数字控制执行元件,又称为脉冲电机。在驱动电源的作用下,步进电机受到脉冲的控制,其转子的角位移量和速度严格地与输入脉冲的数量和脉冲频率成正比。步进电机每接收一个电脉冲,转子就转过一个相应的角度(步距角)。改变通电顺序可改变步进电动机的旋转方向;改变通电频率可改变步进电动机的转速。**因此,通过控制输入电脉冲的数目、频率及电动机绕组的通电顺序就可以获得所需要的转角、转速及转向,利用单片机就可以很容易实现步进电机的开环数字控制。
传统的步进电机控制方法是由触发器产生控制脉冲来进行控制的,但此种控制方法工作方式单一而且难于实现人机交互,当步进电机的参数发生变化时,需要重新进行控制器的设计。因此适合于单片机控制,单片机通过向步进电机驱动电路发送控制信号就能实现对步进电机的控制。

2.PWM调速方法
在步进电机控制系统中可以通过输人PWM波的方法来对步进电动的运动进行控制。PWM波的产生可以通过时钟频率、自动重装值等参数进行设置,从而调节PWM波的占空比和输出频率
脉冲宽度调制(PWM),是英文“Pulse Width Modulation” 的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。简单一点,就是对脉冲宽度的控制, PWM 原理如图:
基于STM32F407ZGT6对步进电机的控制(单脉冲+重复计数)有代码
我们假定定时器工作在向上计数 PWM模式,且当 CNT小于CCRx 时,输出 0,当 CNT大于等于CCRx 时输出 1。那么就可以得到如上的 PWM示意图:当 CNT 值小于 CCRx 的时候, IO 输出低电平(0),当 CNT 值大于等于 CCRx 的时候,IO 输出高电平(1),当 CNT 达到 ARR 值的时候,重新归零,然后重新向上计数,依次循环。改变 CCRx 的值,就可以改变 PWM 输出的占空比,改变 ARR 的值,就可以改变 PWM 输出的频率,这就是 PWM 输出的原理。
通过控制脉冲占空比来改变电机的电枢电压.改变占空比的方法有3种:(1)定宽调频法,这种方法是保持t1不变,只改变t2,这样周期(T或频率)也随之改变;(2)调宽调频法,保持t1不变,而改变t2,这样也使周期T(或频率)改变;(3)定频调宽法,这种方法是使周期(T或频率)不变,而同时改变t1和t2.由于前两利,方法都改变了周期(或频率),当控制频率与系统的固有频率接近时,将会引起振荡,用的比较少,因此本系统用的是定频调宽法.在脉冲作用下,当电机通电时,速度增加.电机断电时,速度逐渐减小.只要按一定规律,改变通断电时间,即可实现对电机的转速控制。

3.系统硬件电路
系统硬件电路设计框图如下:
基于STM32F407ZGT6对步进电机的控制(单脉冲+重复计数)有代码

通过对STM32F4单片机(此程序用的正点原子)编写程序实现对步进电机的控制,并且可以利用计算机和单片机的串口通信,接收到单片机所反馈回来的控制数据,包括:**步进电机的正向转动、反向转动、步进电机的定位功能以及调速功能。要实现上述功能需要对STM32F4的以下模块进行设置,主要包括:串口通信模块、按键输入模块、电机驱动模块三大部分。
以下为STM32F407ZGT6,也可以使用其他的板子,原理相似,修改其中的引脚即可。
基于STM32F407ZGT6对步进电机的控制(单脉冲+重复计数)有代码
电机和驱动器选择的是57步进电机+TB6600驱动器(这个可以在淘宝上买到)-

基于STM32F407ZGT6对步进电机的控制(单脉冲+重复计数)有代码
接线方法与基本参数如下图
基于STM32F407ZGT6对步进电机的控制(单脉冲+重复计数)有代码
基于STM32F407ZGT6对步进电机的控制(单脉冲+重复计数)有代码
4.程序,话不多说,直接上程序
4.1.首先来看一下主函数
基于STM32F407ZGT6对步进电机的控制(单脉冲+重复计数)有代码
主要是三部分,串口,电机驱动和TMI1定时器,按键和LED灯配置比较简单,请自行配置了。主函数里面主要是通过按键控制电机的顺时针和逆时针旋转以及回到原点,这里涉及两个函数,相对定位函数和绝对定位函数
4.2.串口
基于STM32F407ZGT6对步进电机的控制(单脉冲+重复计数)有代码
基于STM32F407ZGT6对步进电机的控制(单脉冲+重复计数)有代码
4.3.驱动器函数
基于STM32F407ZGT6对步进电机的控制(单脉冲+重复计数)有代码
4.4.定时器TIM1
基于STM32F407ZGT6对步进电机的控制(单脉冲+重复计数)有代码
基于STM32F407ZGT6对步进电机的控制(单脉冲+重复计数)有代码
基于STM32F407ZGT6对步进电机的控制(单脉冲+重复计数)有代码
这里给大家讲一下驱动器细分的原理,我们选择的其驱动器TB6600有1-32的细分,脉冲数相对应的从200到6400,对于1细分,200脉冲对于的是转了一圈,这个我们选择32细分,则对应的就是6400脉冲为一圈,大家可以根据这个来选择需要转过的角度,细分越大,电机的精准的也就越大,对于电机的步距1.8°,细分越大其运行的越稳定,对于的电流也不相同。

5.实验结果:

设置驱动器细分和电流, 完成硬件接线, 然后给开发板上电(USB232 接口), 打开 XCOM 调试助手,找到对应COM,设置波特率 115200,1 位停止位,8位数据位,无校验,勾上发送新行,然后打开串口,最后给驱动器上电。按下 KEY-UP, 电机以 500Hz 频率回到绝对原点; 按下 KEY0, 电机以 500Hz 频率顺时针走 200 个脉冲; 按下KEY1,电机以 500Hz 频率逆时针走 400 个脉冲;依次按下KEY_UP, KEY0, KEY1,可以在串口打印出电机运动的状态,可以设置电机每一次所运行的圈数。
基于STM32F407ZGT6对步进电机的控制(单脉冲+重复计数)有代码
点击发送条目后边的数字就可调用该函数, 这儿的相对的定位函数 Locate_Rle 最后
一个参数用于设置电机旋转方向的, 0(CCW) 表示逆时针方向, 1(CW) 表示顺时针方向,实验时, 如果电机旋转方向和设置方向相反, 只需更改 driver.h 下的CW=0,CCW=1;每调用一次函数,串口打印当前的位置。 然后我们依次调用这 4 个函数, 根据串口的打印, 可以看到当前位置的变化情况,如图所示
基于STM32F407ZGT6对步进电机的控制(单脉冲+重复计数)有代码
以上就是利用STM32F4精准控制步进电机的一般步骤