1、引言步进电机是通过输入脉冲信号来进行控制,电机的总转动角度由输入脉冲数决定,而电机的转速由脉冲信号频率决定。随着计算机技术的进步和生产自动化程度的提高,步进电机在国民经济各领域中被广泛使用。在很多的实际应用中,常常需要多台步进电机工作于同一个系统中,但是每台步进电机的传动距离却各不相同。这种情况下,可以采用每台电机单独运行,顺序控制的方法,这种方法明显的缺点是效率低。针对这种情况,本文提出利用 STM32 系列单片机的先进特性如 DMA 以及多条 PWM 输出通道,在同一系统内进行多台步进电机同步运行的优化控制系统研究。系统硬件设计本系统采用 STM32F10X 系列单片机作为主控芯片,该芯片
2、是一款 ARM Cortex-M3 内核的处理器,很适合在控制领域应用,具有速度快,效率高,价格低,以及丰富的外设功能等优点。同时 STM32 具有自己独特的优点:在 Cortex-M3 架构上进行了多项改进,在提升性能的同时,所有新功能都具有较低的功耗,其内核电压为 1.8V,芯片电压为 3.3V,可以选择睡眠模式、待机模式,保证低功耗应用的要求;相对于 ARM 系列的其他芯片,STM32 运行速度更快;7 个 TIM 最多可以产生 28 个精准的 PWM 信号,方便地用于步进电机控制;丰富的通信模块便于上位机进行通信1。另外 STM32 还配备了相当完善的DMA 资源:两个 DMA 控制器
3、共有 12 个通道(DMA1 有 7 个通道,DMA2 有 5 个通道) ,每个通道专门用来管理来自于一个或者多个外设对存储器访问的 DMA 请求,还有一个仲裁器来协调各个 DMA 请求的优先权。根据使用步进电机的实际情况,应该采用相对于的步进驱动器。步进驱动器分为 2 相步进驱动器、3 相步进驱动器、5 相步进驱动器等不同种类,通常情况下,其驱动电流可调,驱动电流的细分数也可调。本系统采用 3 台两相四线制步进电机,采用 2HB504MA 来驱动。系统总体方案如图 1所示。系统软件设计2.1 多台步进电机同步运行控制方法要实现多台步进电机的同步运行,就需要实现多台步进电机的同时启动、加速、匀
4、速、减速及制动。然而众所周知,步进电机在启动、停止以及改变速度都需要一个渐进的过程,它受到迁入频率、迁出频率等技术指标的限制,因此,控制步进电机驱动器的步进脉冲信号必须是一种频率可控,脉冲数量可控的脉冲信号。一个典型的步进电机的运行过程如图2 所示,T1 之前的时刻是步进电机的加速段,步进频率从 V0 上升到了 V1,这里可以是线性升速或者其他升速曲线。T1 到 T2 是匀速运行阶段,步进频率不变。T2 到 T3 时刻是步进电机减速段2 。如图所示如果两台步进电机每次调整的 PWM 信号频率运行的时间相同,同时启动后的加速、匀速、减速过程经过相同的调整次数,则同时停止运转。即 A 电机各次调整
5、后运行时间为:,B 电机各次调整后运行时间为: ,使121,nttA 212,ntt,则两电机可同步完成整个运动过程。2,nt A要实现对 PWM 脉冲频率的控制,就要先明确它的决定因素。我们已知其决定因素包括 :f(时钟频率) 、M(预分频值) 、T(计数周期) 。其中 f 和 T 通常是不变的,这样我们只有通过改变 M 来实现输出脉冲频率的调整。首先把其中一台电机作为基准,结合实际需求给电机依次设定 6 个 M 值来完成运行过程,其值为 。根据公式 可求出各预分频值1,261()(1fV对应的电机步速 。 ,V每个步速运行下所走过的步数分别设置为 。在各步速1,8,2,N下运行时,步进电机
6、走过的步速占总步速的比重可以调整。进一步可得出 11()(T,6MNtVfA 第 2 台步进电机每个步速运行下所走过的步进分别设 。2,8,21,N12()(T1(1)(TNNtf fAKede 122(M),6在程序设计中,通过计算并设计并设定 , , t,即可实现对步进电机的同12MA步控制。依照此类方法可以实现对多台步进电机的同步控制。2.2 通过 DMA 功能实现优化控制通常是通过定时器中断方式产生脉冲,升速或减速的频率和步数已经以数组的方式存储在单片机的 FLASH 中,数组中的数据必须结合电机的资料和反复的实验来确定最佳的值。把升减速表的第一个值装入定时器 TIM1 的装载寄存器,
7、启动定时器 TIM1,而后在每个定时器中断到来时,首先输出一个脉冲信号,然后根据已走的步数查表得出下一步进脉冲信号需要的频率来更新定时器的装载值,最后退出中断。这种方法的优点是适应性好,在中断中可以实现各种算法。缺点是 CPU 的占用率高,尤其是控制那些使用高细分数的步进电机控制器在高转速时,需要很高频率的脉冲信号,单片机运算时间被定时器中断大量占用,特别是系统中存在多台步进电机同时运行的情况。如图 3 所示,定时器中断与步进脉冲的关系。定时器中断与步进脉冲的关系针对这种多台步进电机同时运行,CPU 占用率过高的情况,提出通过 DMA 功能实现优化控制。CPU 最重要的工作是进行数据的运算,搬
8、运数据是其众多职能中比较不重要的一种。DMA 就是存储器直接存取,在搬运数据的效果上,使用 DMA 比使用 CPU 来执行显得快速而高效得多。这种方法的基本思想就是:首先把存放步进脉冲频率表值得地址作为 DMA 通道的源地址,而把定时器的自动装载寄存器的地址作为 DMA 通道的目的地址;然后把定时器配置为 PWM 输出,使用主从触发模式,当定时器被更新时,输出一个 PWM 脉冲。每通过DMA 自动装载定时器一次,就会输出一个 PWM 脉冲。如图 4 所示,DMA 中断与步进脉冲的关系。DMA 中断与步进脉冲的关系这种方法的优点就是:CPU 占用率极低。同时,使用 DMA 的缺点就是灵活性差,需
9、要在电机启动前计算好整个运动轨迹。这种控制方法无需 CPU 过多的干预,可以控制多台步进电机的运动,完成较为复杂的系统动作。2.3 程序流程控制系统中步进电机所控制的设备从初始位置开始运行,但步进电机的实际位置相对初始位置常常会有一定的误差,因此软件系统中应该有回零功能,使步进电机启动前回到初始位置。系统初始化中包括了 DMA 的配置,完成初始化后,通过硬件中断来触发回零程序。然后根据串口中断的方式不断接收上位机指令,在中断服务程序中把指令的距离信息 L1,L2 计算后转化为电机运行 N1,N2,然后再按照设计好的程序,求出 M1、M2,电机运行 时间后,实时读取相关位置信息通过计算并转化为步
10、进电机运行步数,结合控制指令的步数,采取偏差控制的方法。若偏差 L1、L2 超出规定值,那么程序就会把 L1、L2 分别赋值给 L1、L2 ,接下来循环执行上述程序,直至偏差达到允许值。实现目标的位置移动之后,返回信息给上位机,上位机就会把接下来的目标位置以及距离信息发到 STM32 主控板,如此循环下去直到完成总目标位置移动。系统程序流程控制图如图所示。实验结果用两台步进电机作为研究对象,使用步进电机拖动摄像头多次间断运行一定距离,每次间断时间设定为 4s,每次运行距离分别设定为 60cm,40cm,同时根据上次运行结果修正下次要运行的距离。在所有运行数据中选取连续的 5 组数据,如表 1、表 2 所示。