用PWM实现仪表步进电机的微步细分驱动
仪表步进电机应用较早的是瑞士SWITEC公司的XC5系列步进电机,随着国产同类产品的成熟,小型仪表步进电机应用更加广泛。目前,国内外常用的几种仪表步进电机电气参数、驱动原理基本相同:MCU发脉冲给驱动芯片,电机会根据脉冲数转动相应的步数。也有将步进电机驱动模块集成在MCU中的,如飞思卡尔的HY64系列。这种应用中,软件编程较为简单,但需要专用的硬件模块。在某些应用场景中,我们可能会因为PCB布线空间、成本等因素,需要尽量减少电机驱动的硬件、简化驱动软件。这里就以伟力VID2905仪表步进电机为例,分析在分步和微步细分两种模式下的驱动原理及用单片机PWM直接驱动电机的实现方法。
VID2905仪表步进电机原理简述
如下图,电机有两组定子绕组线圈,1,2脚为一组,3,4脚为一组。和大多数电机基本原理一样,给定子绕组加上特定的交变信号而产生旋转磁场,转子在磁场中受力转动。绕组驱动电流电最大20mA。内置180:1齿轮减速器,即转子转180度时,输出轴转动1度。
分步驱动原理及实现方法
上图是产品规格书中,分步驱动的图解说明。从图中可以看出,每个分步转子转动60度;一个全步是3个分步,转子转动180度;一个周期是6个分步,转子转动360度;经180:1减速,输出轴转动角度分别是1/3度、1度、2度。(至于为什么每分步是60度,不必去深究,这是由电机的结构决定的)根据上图的驱动脉冲时序,在每个分步给两组线圈加上相应极性的驱动电压,就可以实现电机的转动。改变脉冲序列的递增或递减顺序,就可以控制电机的转动方向。两组线圈共占用4个IO口。下表是4个IO的电平变化时序。H表示高电平,L表示低电平。
以下是分步驱动函数(相关的宏定义、初始化部分省略了),已在STM32F407上调试过,读者可以移植到自己的开发平台上直接使用。入口参数是转动方向和分步数,分步数乘以1/3就是电机轴的转动角度。实际应用中,只需要根据采集到的模拟量值,按量程关系换算为电机轴的角度,就可以现模拟量值的变化指示。分步模式驱动完全可以满足如简单的车载仪表等一些要求不高的应用。
/*---------------------------------------------------------------------
电机分步式运行
入口参数:
M_Dir:转动方向,1--正转 0--反转
M_Step:转动的分步数
----------------------------------------------------------------------*/
void Motor_RunStep(u8 M_Dir,u16 M_Step)
{
static u8 M_Phase=1;
u16 i;
for(i=0;i<M_Step;i++)
{
if