【探索STM32F303VC-EVAL开发板】系列之四 ——步进电机驱动 Fengye5340 STM32F303C-EVAL开发板,带有两路专业电机驱动端口,可惜目前手头无现成的电机,考虑到STM32F3定时器资源丰富,具有两路高级定时器TIMER1/TIMER8,支持12路互补输出带死区的PWM。另有3路通用定时器TIMER2/TIMER3/TIEMER4,可实现普通PWM波形输出。为了验证定时器性能,特用了一下通用定时器的PWM输出功能。TIMER2/TIMER3/TIEMER4这3路通用定时器,每路可以输出4个PWM波形。在这个部分中,验证了两个地方,一个是用TIMER3输出4路不同的PWM,并调整其频率和占空比,通过示波器验证,发现占空比步进能够实现1%的精度,跟程序预设想符合。第二个部分,就是用两个定时器的各2路PWM波组成一个4路波形,驱动常见的28BYJ-48-5型步进电机,这个电机是一款具有1/64的减速步进,转速非常慢,用于验证定时器性能尚可,无任何实际应用。下面介绍一下第二部分的实现过程。 第一 电机介绍 步进电机是一种将电脉冲转化为角位移的执行机构。通俗一点讲:当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(及步进角)。您可以通过控制脉冲个来控制角位移量,从而达到准确定位的目的;同时您可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。 28BYJ48型四相八拍电机,电压为DC5V—DC12V。当对步进电机施加一系列连续不断的控制脉冲时,它可以连续不断地转动。每一个脉冲信号对应步进电机的某一相或两相绕组的通电状态改变一次,也就对应转子转过一定的角度(一个步距角)。当通电状态的改变完成一个循环时,转子转过一个齿距。 步进电机常见的通电方式有单(单相绕组通电)四拍(A-B-C-D-A),双(双相绕组通电(四拍AB-BC-CD-DA-AB)和八拍(A-AB-B-BC-C-CD-D-DA-A),本人现在用的是DC5V的电机,图片如下:
技术参数如下:
第二 程序说明
在这里,为了方便演示,采用了双四拍(AB-BC-CD-DA-AB)的控制方式。单四拍的方式采用IO翻转的方法比较容易实现,八拍的方式和双四拍的控制方式类似,都是采用两个定时器各输出2路PWM,然后通过一个定时器延时相位的方法实现。
具体点就是:利用1个定时器A实现CH1/CH3,1个定时器B实现CH2/CH4,它们具有共同的周期P,然后再利用一个定时器C实现一个定时,延时时间是P/4。
步骤如下:
1、配置好3路定时器A,B, C,
2、启动定时器A,定时器C,关闭定时器B,
3、定时P/4时间到,关闭定时器C,启动定时器B。这样就能输出所要的波形了,我拍了一张示波器采集的波形图:如下:
通过波形,可以看出,相位延时的效果还是比较明显的。在实现定时器输出PWM方面,这里用到了TIMER2/TIMER3来输出,因为这些引脚都在开发板上引出了端口,方便插线。刚开始,采用了TIMER3/TIMER4作为输出,在波形中,看到了这样的问题:
TIMER4的通道输出的不是矩形波,奇怪了。这个问题放在以后研究,现在忽略。
采用TIMER2/TIMER3的CH3/CH4来输出PWM,TIMER4来进行定时。占空比固定50%,采用八拍方式的占空比就变了,不是50%了。 在本程序中,实现了步进电机的加减速,和正反转。反转顺序(DA- CD-BC- AB)。通过改变TIMER3的PWM输出模式来实现。 第三 程序实现 A 定时器初始化 1、定时器4初始化:
2、定时器3初始化—生成2路PWM
3、定时器2—初始化—生成2路PWM
B、定时器资源设置: 1、定时器3打开,定时器2关闭,打开定时器4计时。
2、定时器4中断函数实现,定时时间到,打开定时器2,关闭定时器4
C、步进电机正反转/加减速处理 1、在按键中断里处理步进电机正反转
2、在按键中断里处理加减速:
由于电机速度较慢,仅做了简单的设计,没有设计复杂的加减速算法及平滑处理。 第三 后记 STM32F3系列定时器资源非常强大,这里仅用了一小部分资源,还有更强大的高级定时器1/8没有验证。另外,在控制步进电机过程中,未增加的功能有控制步进电机的停止和启动,这个因为简单没有增加,控制步进电机实现一定的位置移动,也即实现一定数量的脉冲计数,这个比较复杂,实现需要不少时间,这个留给感兴趣的朋友来深入和探究。
|