基于XC2267M的仪表盘步进电机控制
摘要: 随着现代电子技术的发展,中高档汽车上的组合数字仪表越来越多地采用“机电一体化”的步进电机。步进电机又称脉冲电动机,它能将输入的脉冲信号变成不连续的机械动作,是一种将电脉冲转化为角位移的执行机构。对步进电机的每一相来讲,输入的是一个脉冲列,只要控制好电脉冲,就能精确控制步进电机的角位移量,转速和转矩。从这个意义上来说,步进电机控制的核心是PWM(脉冲宽度调制)细分控制技术。
用单片机来控制步进电机已有近15年的发展历史。出于降低总体成本的考虑,长期以来所采用的芯片都是8位单片机。由于单片机自身性能的局限性,对于步进电机的控制常常采用不彻底的细分控制或带外设的细分控制。不彻底的细分控制一般是将步进电动机的控制位置数(以两相步进电机为例)的四拍通电逻辑顺序变为八拍通电逻辑顺序,从而将步进角降为原来的一半。这种方法细分度有限,电机运行极不平滑,而且对步进电机也有损伤。带外设的细分控制能够使步进电机的运行平滑稳定,但增加了外部设备(如恒流斩波电路等),使得硬件设计趋于复杂,并且提高了成本。随着科技的进步和单片机的进一步发展,16位单片机的价格不断降低,使得其在步进电机控制上的广泛应用成为可能。由于单片机自身功能曾强了,繁琐的外部设备不再需要,软件编程也变得相对简单。这里即采用 16位英飞凌单片机XC2267M实现步进电机的平稳控制。
硬件选择
Infineon XC2267M属于XC2200微控制器系列,集成了电压调节器和多种振荡器,是全功能的16位单片CMOS微控制器。此方案主要使用的是XC2267M 的CC2(Capture/Compare Unit2 捕获/比较单元2)模块。
CC2模块提供了16个捕获/比较通道以及同它们相配合的2个16位定时器,能支持16个内部中断。每个CC2通道都可捕获内部或外部事件,也可以比较计时器的内容与给定值,并修改输出信号。这里采用的是其中的8个通道配合8个I/O口控制4个步进电机。其中,SIN+和COS+为CC2通道,输出 PWM波形,SIN-和COS-为I/O口,进行0-1变化。
表1 CC2模块各通道功能列表
由于单片机可以直接输出几路互不影响的PWM,所以无需依靠任何外部设备就可以同时实现对几个步进电机的控制。
图1 基于XC2267M的仪表盘步进电机控制示意图(仪表盘其他模块图中未标明)
汽车仪表中应用的主要是两相步进电机,即步进电机中有两个独立绕组(定子两个相对极上的线圈串联成为独立绕组)。步进电机两个绕组的夹角一般有90°和60°两种样式,实验采用的是60°样式的VID29-05,内置减速比180:1的齿轮系,输出轴的步距角最小为1/12°,最大角速度 600°/s。
软件编程
1确定细分度,建立变量赋值表
● 确定步进电机每圈的细分度,并根据细分度建立电机在每个位置的两相PWM占空比表。这里采用的是15细分,即每步间隔24°。
● 根据两相电压表,结合所选用的单片机的特性建立对应的PWM寄存器赋值表,储存在全局数组里。
● 根据所选用的步进电机型号的特性曲线,建立速度等级数组。步进电机的转速完全和PWM寄存器赋值的速度有关。根据VID29-05的特性,速度数组里包含 255个元素。这255个元素定义了PWM寄存器赋值的时间间隔,元素值越大,步进电机转速越慢。
2 仪表盘步进电机驱动的编程注意事项
指针的运动要有“惯性”的视觉效果。即,指针从任意位置甲移动到目标位置乙的时候,在开始阶段,要进行加速运动,运动至接近位置乙的时候,要进行减速,最后稳定在位置乙。
加速减速的幅度与当前位置和目标位置的间距以及步进电机的选型相关。在指针转动的过程中,对目标位置的变化要实时反应。只有在当前位置和目标位置的差距大于一定范围时,指针才运动。步进电机不允许旋转方向的突变,比如,电机正转时接到反转请求,一定要匀减速至0后才能反转。
考虑到EMC的要求,PWM的频率不要超过20kHz。
3 算法
主程序对当前步数和目标步数比较判定,决定是否转动,以及转动的速度大小。为达到这个目的,引入变量Move-time 与转动一步标志位Move_One_Step_Enable,实际转动的速度控制通过在主循环最后Move_One_Step_Enable置1和依据当前步进电机速度级别从速度数组里取相应的元素对Move-time的赋值和来实现。只有当Move-time=0时,才再一次进入主循环对其进行赋值。
中断程序对走步计时递减,并根据标志做马达转动一步处理。每进入一次中断,只要Move-time不为0,则Move-time减1。如果 Move_One_Step_Enable为1,步进电机赋值一次,否则不赋值,中断时间为200μs。
比如,最低的速度等级元素为100,则在主循环里,Move_One_Step_Enable被置为1,Move-time赋值为100。在此后的第一个中断里,电机运行一步,Move_One_Step_Enable=0,同时Move-time减为99。此后,主程序和中断程序都不进行任何操作,直到第100次中断发生,Move-time减为0,才再一次进入主循环对Move-time赋值。也就是说,在(200×100)μs的时间里,步进电机只行动了一次。相反,如果速度等级高,则Move-time的赋值相应小,电机会在更短的时间内再次行动,使步进电机转速看上去“提高”了。
为保证速度之间过渡的平滑性,防止突变对步进电机造成的损伤,每3次进入主循环才允许更改一次速度等级,即每个速度等级步进电机至少走3 步。
4 主函数详解
首先判断指针是否需要转动,如果否,直接跳到结束,等待新一轮判断。如果判定结果为需要转动,继续判断上一步是正向还是反向运动。
图2 主函数流程图
若判定结果为正向运动,进入正向运动模块,继续判断当前位置和目标位置是否一致。
如果目标位置和当前位置一致,则表明指针已到达指定位置,此时进入防抖模块,并将Move-time 置为1。
如果目标位置和当前位置不一致,则要进一步判断目标位置是否大于当前位置。如果目标位置小于当前位置,则表明在步进电机的正向运动中检测到反向运动的请求。此时,进入反向运动需求相应模块,逐渐减小步进电机转速,最后改变步进电机运行方向标志位。
如果目标位置大于当前位置,则表示运动需求仍为正向,此时需要判断目标位置和当前位置之差的大小。如果位置差很大,而步进电机转速没有到达最大,则提速;如果转速已达到最大,则保持该速度。如果位置差小于某一特定值,则进入减速状态。
5中断函数详解
首先判断指针是否需要转动,如果是,表明上次转动尚未完成,直接跳出中断,等待下一次中断。如果判定结果为不要转动,继续判断上一步是正向还是反向运动。
图3 中断函数流程图
若判定结果为正向,则继续进行下一步判断:目标位置和当前位置是否一致。结果为反向则进入反向运动中断处理模块,流程结果类似。
判断转动一步标志位是否为1。若为1,依据当前位置从PWM数组里赋新值给PWM寄存器,步进电机行动一步,当前位置前进一步(若为反向则退后一步)并清零转动一步标志位。这样下次进入中断时,若转动一步标志位没有在主循环里重新赋值为1,步进电机就不会再次转动。
每次进入中断,当Move_time不为0时,Move_time减1,直至减为0为止。
实验结果
经过巴特沃斯二阶低通滤波后,步进电机两相电压波形都为比较平滑的正弦波,波形相位差为120°,与理论的细分波形相吻合。
步进电机从位置A移动到位置B的过程中,先加速(如果AB距离足够大,步进电机将加速到最大转速后匀速运行)。在接近位置B时,步进电机将减速,最后停止在位置B。从上图可以看出,加速阶段正选的波长逐渐变窄,减速时则逐渐变宽。
结论
利用单片机可方便的对步进电机的速度和位置进行控制,可靠地实现各种步进电机的操作,完成各种复杂工作。这里提出的步进电机分步控制方法,依靠Infineon最新的XC2267M单片机CC2模块强大的16个PWM输出通道,同时驱动4个步进电机,成功通过软件编程代替驱动芯片实现仪表盘步进电机的细分控制,运行结果稳定可靠,并节省了外部设备,降低了成本。
暂无评论