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