STM32编码器在光栅尺测速场合的实际应用
2013-04-29邓军
邓军
摘 要:STM32103F系列微控制器的定时器有一种特有工作模式——编码器接口模式,此模式可以用来反馈马达的实时转子位置,测量马达的转速,也可以反馈光栅尺的实时位置,测量光栅头的移动速度,在工业控制场合,尤其是需要精确定位的压机、机床等使用场合,有着非常实用的价值。现以STM32103F微控制器与海德汉(HEIDENHAIN)光栅尺LS1378C为例,详细介绍定时器的编码器工作原理,以及双定时器配合测速度的编程算法。
关键词:STM32编码器;光栅尺;测速
STM32103F系列是ST公司采用高性能的32位ARM Cortex-M3内核,主要面向工业控制领域推出的微控制器芯片。通用定时器有以下几种工作模式:计数器模式、输入捕获模式、输出比较模式、PWM模式、单脉冲模式、编码器接口模式。其中,编码器接口模式是一种有别于其他通用ARM控制器以及DSP控制器的特有模式,此模式可以用来反馈马达的实时转子位置,测量马达的转速,也可以反馈光栅尺的实时位置,测量光栅头的移动速度,在工业控制场合,尤其是需要精确定位的压机、机床等使用场合,有着非常实用的价值。
光栅尺位移传感器(简称光栅尺),是利用光栅的光学原理工作的测量反馈装置。光栅尺位移传感器经常应用于机床与现在加工中心以及测量仪器等方面,可用作直线位移或者角位移的检测。其测量输出的信号为数字脉冲,具有检测范围大,检测精度高,响应速度快的特点。例如,在数控机床中常用于对刀具和工件的坐标进行检测,来观察和跟踪走刀误差,以起到一个补偿刀具的运动误差的作用。
在这里需要说明的是,光栅尺只是一个反馈装置,它可以将位移量和位移方向通过脉冲信号输出的方式反馈出来,但它不能直接显示出来,它还需要一个显示装置,比如通过CPLD来识别,或者本文中的微控制器STM32103F来识别。光栅尺的输出信号为相位角相差90°的两路方波信号,如果A路超前B路90°,表示光栅尺在正向移动,反之,A路落后B路90°,表示反向移动。这两路方波信号都为差分信号,需要经过差分输入芯片,比如TI的MC3486,转化为TTL电平的方波之后,才能进定时器的输入引脚。此例中接入的是TIM3-CH1和TIM3-CH2两个引脚。
海德汉LS1378C为增量式直线光栅尺,量程220mm,信号周期1um,即一个方波对应1um,经后续电子设备进行4分频之后测量步距为0.25um。直观来说,STM32103F识别到一个周期的方波脉冲,计数器增长4次,表示光栅尺移动了1um。
此例中,定时器Timer3配置成编码器接口模式,提供传感器当前实时位置的信息。另外再开一个定时器Timer2,配置成10ms的定时工作模式,读取10ms之内的位置之差,即可获得动态的信息,比如速度、加速度。
这个算法思想的前提,也就是本文讨论的核心,是10ms内定时器3计数器不溢出,因为定时器为16位,最大可计数的范围为65535,如何保证10ms内实际增长的计数不超过这一最大值呢?我们通过计算来说明,比如已知光栅尺连接的机械运动部件的最大速度不可能超过1m/s,那么10ms内走的位移量为10mm,10mm/0.25um=40000次计数,40000小于65536,所以这一算法的前提成立。 如果运动部件的实际运动速度可能更快,那么把10ms定位改为5ms即可,以此类推,但定时间隔不可无限制缩小,以免加重CPU负荷。
首先,初始化定时器Timer3为编码器模式,同时在TI1和TI2边沿计数,PA口的6脚和7脚设置为浮空输入,用来连接编码器输入信号,定时器3计数周期Period设置为65535,预分频数设置为零(不分频)。
接着,Timer2配置为10ms的定时,计数周期Period设置为2000,预分频数设置为360,向下计数模式。
下面是编码器读取方法,在每次10ms定时调用此段:
#define MAX_COUNT 30000//10ms内不可能超过的计数器最大值
#define ENCODER_TIM_PERIOD 65535//定时器的period值,最好比MAX_COUNT要大
int16_t speed_max = 0; // 全局变量,统计瞬时速度最大值,需要在每次重新测量之前清零
int32_t currentCount = 0; // 全局变量,计数器实时值,有正负,总量程220mm对应88万个计数,1um对应4个计数
currentCount除以4000,即为光栅尺当前位置,单位为mm;
speed_max为最大瞬时速度,单位为mm/s。
结束语
在实际的项目使用中,如果光栅尺移动速度过快,超过了硬件反应速度,可能导致脉冲丢失,显示出一个错误的位移量,这种错误是不可接受的。为了避免超过光栅尺及硬件电路的极限处理能力,我们通过试验测出这一极限速度,并告知用户,用户可采用其他机械辅助的方法限制运动速度,在极限速度与生产效率之间找到一个合适的平衡点,使光栅尺工作在正常状态。如果实际生产中的最大瞬时移动速度超过这一限制,将发出报警以示提醒。
参考文献
[1]嵌入式系统及其应用-基于Cortex-M3内核和STM32F103微控制器的系统设计与开发[M].上海:同济大学出版社,2011,5.