基于定时器的步进电机控制程序设计
2018-12-15赵成龙张春雷
赵成龙 张春雷 陈 龙
(四川大学 制造科学与工程学院 成都610065)
步进电机常常作为自动化设备中的重要动力元件,近年来针对步进电机的控制器产品也越来越多。定时器是单片机的重要功能模块之一,在检测、控制领域有广泛应用。定时器常用作定时时钟,以实现定时检测、定时响应、定时控制,并且可以产生ms宽的脉冲信号,驱动步进电机,开发一款基于定时器的控制器产品意义较大。此类控制器相比传统基于FPGA(Field-Programmable Gate Array,现场可编程门阵列)的步进电机控制器,具有硬件结构简单、成本低的巨大优势。
步进电机可以将脉冲信号转化为角位移或者线位移[1],其转速和位置分别由脉冲频率和脉冲数决定。根据这个特性,该程序设计使单片机引脚输出可控频率的脉冲数,可实现对步进电机速度和位置的精确控制。
1 基于定时器产生脉冲的原理
定时器有自下向上和自上向下两种计数模式。在本实验中,定时器采用向上计数模式,从零开始加到设定值后溢出,设定值由自己设置并存放在ARR(auto reload register,自动重装载寄存器)中[2],设定ARR的值就可以设定输出脉冲的频率。定时器由零开始向上计数的过程中,会先达到比较值,这个比较值存放在CCR(capture/compare register,捕获/比较寄存器)中,当定时器计数值和CCR的值相等时定时器映射引脚的 IO电平反转一次,即在本实验中,当计数器的值比 CCR值小,则输出低电平,比CCR值大,则输出高电平,设定CCR值就可以设定脉冲的占空比。在步进电机的控制中脉冲的占空比一般不影响步进电机的旋转特性,因此取占空比为50%,即CCR值为ARR值二分之一。
当定时器计数值小于CCR寄存器的值时IO逻辑为0,当计数值大于CCR寄存器的值时IO逻辑为1,这样不断地切换IO口的输出电平就形成了连续的方波脉冲,定时器计数值,如图1所示。
图1 定时器计数值与寄存器值比较IO逻辑图
2 多通道脉冲输出的实现
2.1 初始化设计
以高性能Cortex-M4为内核的STM32F4系列微控制器具有多个定时器,在本实验中,要使STM32F405芯片同时输出三路脉冲信号,参数初始化实现步骤:第一步先配置三个定时器的相关参数,分别是TIM2的通道2,TIM3的通道4,TIM4的通道 4;第二步将各定时器脉冲通道在芯片上映射的管脚进行初始化,通过查 STM32的技术手册可知TIM2的通道2映射的管脚为PA1,TIM3的通道4映射的管脚是PB1,TIM4的通道4映射的管脚是PB9,分别对这三个管脚的时钟使能,并设置管脚模式的为复用推挽输出,频率为50MHz;第三步初始化用于控制步进电机旋转方向的管脚。
2.2 脉冲输出算法设计
算法实现的步骤为:第一步判断轴号 tAxis,并跳转到对应轴号的case中执行程序;第二步判断插补周期内的脉冲数pulnum是否为正值,如果pulnum为正,方向管脚置1控制电机正转,否则方向管脚置0,pulnum取相反数,控制电机反转;第三步更新CRR和ARR值;第四步在中断函数中记录脉冲个数;第五步判断下一插补周期脉冲数是否为 0,如果是结束程序,否则继续循环。具体实现的流程如图2所示。
图2 输出脉冲流程图
3 步进电机位置控制的实现
步进电机位置取决于两个因素:初始相位和步距。初始相位与机械原点有关,在工程应用中常常可以由传感器,限位开关等实时监测反馈给控制器,电机转动步距则由步进电机驱动器接收到的脉冲数目决定。因此整体的设计思路是通过发准确数目的脉冲来控制步进电机的准确位置,在程序设计时还需要考虑步进电机驱动器的细分技术[3]。例如,驱动器的细分设为 10000,为了保证软件上的每发一个脉冲与执行部件运动的距离对应正确,需要在程序中设定每发出10000个脉冲步进电机转动一圈[4]。
在本实验中,定时器Counter从零开始计数达到 CCR值后会触发一次中断,程序会立即跳转到中端函数 TIMx_IRQHandler()中执行相应动作。利用这个特点在定时器中断里进行脉冲个数的记录是一种可靠的方法,即每发一个脉冲进入中断一次,记录脉冲数目的全局变量AbsPos[i]自增1,精确记录脉冲个数的核心代码如图3所示。
图3 精确记录脉冲个数的核心代码
4 步进电机速度控制的实现
步进电机的转速和步进电机驱动器接收的脉冲频率成正比,如果控制器发出的脉冲频率越高则步进电机的转速越快。利用这个特点通过设定发出脉冲的频率控制步进电机的转速是一种行之有效的方法。本实验中,在插补周期固定的情况下设定传入pulnum值即可设定脉冲频率。即在一个插补周期里如果传入 pulnum的值大,那么输出的脉冲频率就高。反之 pulnum的值小,那么输出的脉冲频率就低。换言之计算对应转速下每个插补周期的pulnum值即可实现步进电机速度的控制[4]。
T型加减速的速度,加速度,位移和时间关系可由式表示:
T型加减速的算法计算出每个插补周期pulnum值的具体步骤为:第一步初始化起始速度Vstar,终止速度Vend,最大速度Vmax,加速度a和运动距离Distance。 第二步判断减速距离。计算减速距离Ld,如果剩余距离Lr≤减速距离Ld,则进行减速,本插补周期的速度Vcurrent等于上一插补周期的末速度Vlast−aT ,a为加速度,T为插补周期,本实验中插补周期为0.001s。如果剩余距离Lr>减速距离Ld,则按照是否到达最大速度Vmax,分别进行匀速或者匀加速,Vcurrent=Vlast或者Vcurrent=Vlast +aT。第三步完成减速后,如果当前的速度Vcurrent 图4 T型加减速流程图 用逻辑分析仪采样实验平台输出的脉冲如图 5、图6所示。从图5所示的实验结果可以看出,输出脉冲的频率逐渐增大,加速过程明显,实现了步进电机由匀加速到匀速的控制。从图6所示的实验结果可以看出,输出脉冲的频率逐渐减小,减速过程明显,实现了步进电机匀减速的控制。 图5 加速过程脉冲输出 图6 减速过程脉冲输出 实验中用到的定时器分为两种,用于定时 1ms的定时器和产生脉冲的定时器。通过实验发现,如果将定时1ms的定时器中断优先级设置为0级,用于发脉冲的定时器中断优先级设置为1级,即用于定时1ms的定时器中断优先级高于用于产生脉冲定时器中断优先级,则会出现输出脉冲间断且丢脉冲的现象,步进电机运行不平稳产生抖动且定位不准。造成这种现象的原因是当定时1ms事件刷新时会优先进入中断,给 CCR值更新,而此时上一插补周期产生的脉冲还没有完成,因此会出现脉冲漏发少发现象。解决这一问题的方法是将用于产生脉冲的定时器中断优先级设置为最高级0级,而用于定时1ms的定时器中断的优先级则设置为较低的1级。这样就算定时1ms定时器产生刷新事件也不会先进入中断,而是等待脉冲产生完成后才进入中断给CCR值更新,从而保证了脉冲的连续性和脉冲数的准确性。 上述基于定时器的步进电机控制的程序设计,已经运用在了针对直角坐标机器人开发的运动控制器中,实现了对多轴直角坐标机器人的控制[6-7]。该控制器的硬件部分结构简单,成本低,软件部分可以对步进电机实现精确的位置和速度控制,应用行业领域广泛,在实际的工程项目中已经得到了检验。5 实验难点分析
6 结语