本文主要介绍了一种基于STM32的混合式步进电机控制方案,STM32产生PWM(脉宽调制信号),利用PWM完成DAC转换,通过PWMDAC的输出电压实现对步进电机的多细分控制。该设计相比利用DAC数模转换芯片的设计方案具有电路简单,费效比高的优点,而且可实现步进电机十六分之一步的驱动控制,精度较高。
1、硬件设计
硬件设计框图如图1所示,主要由PC上位机给STM32F103发送控制命令,通过STM32F103控制A3988,从而驱动两个步进电机转动。其中,STM32F103是意法半导体公司生产的基于ARMCortex—M3内核的微控制器,内核架构先进,性能优越,主频可达72MHz,执行效率高,具有较高的运算能力及数据处理功能,拥有丰富的外设接口,在硬件设计中,上位机与STM32F103之间的RS—422串行通信,就是通过外接MAX3079电平转换芯片来实现的。
图1硬件设计框图
STM32F103控制定时器产生PWM,通过LPF(低通滤波器)实现PWM的DAC转换,并由PWMDAC来提供A3988的4个基准电压,设计中,定时器TIM1的输出通道在经过滤波器后与A3988的参考电压VERFx接口相连,PC0~3,PB12~15,PB6~9为通用GPIO输出端口,接A3988的逻辑控制信号输入脚I0x、I1x和Phasex,PC0~3和PB12~15分别置低,Phasex用于控制流过电机各相电流的方向。选用的步进电机的步距角为0.9,额定电流为0.5A。
2、多细分控制原理分析与实现
2.1、多细分控制原理分析
选用电机为两相步进电机,假设为A、B相,通过两相的电流在相位上相差为90,控制流过两相的电流大小和方向就可以控制电机转动。A3988是一个4DMOS全桥脉宽调制电机驱动器,可以同时驱动两个步进电机,每个全桥输出电流最大可达到1.2A。流过电机的每一相电流可以通过UREFx,I0x,I1x,Phasex和接SENSEx引脚的电阻Rx进行控制。工作电流通过公式(1)可以得到。
ITripMax=UREFx/(3RSx)(1)
由式(1)可知,最大电流ITripMax是由UREFx和RSx共同决定,UREFx为PWM-DAC的输出的电压,其最大值为1.1V,RSx选用1欧的电阻。
ITrip=(%ITripMax/100)ITripMax(2)
式(2)中,ITrip为实际输出的电流,逻辑接口I0x,I1x控制%ITripMax,由A3988的用户文档可知,当I0x,I1x控制逻辑都为低时,实际输出电流就等于最大电流,由上述公式可知,ITrip最大输出约为367mA。
为实现步进电机多细分控制,必须能够控制流过步进电机的两相电流,在参考电压UREFx一定的情况下,使用逻辑接口I0x,I1x,Phasex仅可实现步进电机整步、半步和四分之一步的驱动控制,这样的细分控制并不能满足设计需求,为了得到更多的细分,设计采用动态改变UREFx的方法来输出动态变化的电流,通过对UREFx的多细分控制,来实现对ITrip的多细分,从而实现对步进电机多细分控制。
UREFx由PWM-DAC输出,其值在0~1.1V变化,将其按0~π的正旋曲线32等分得到32个电压值,令PWM-DAC输出的值为这32个值,从而对应得到0~1.1V的32个电压值和按正弦规律变化的32个电流值,通过Phasex控制电流方向,可实现步进电机1/16步的驱动控制。
2.2、PWM实现DAC转换的原理及设计
虽然大容量的STM32F103具有内部DAC,但是更多的型号是没有DAC的,本文中所用到的STM32F03就没有DAC外设功能。不过STM32所有的芯片都有PWM输出,因此,可以用PWM+LPF来实现PWM-DAC输出,从而节省成本。
PWM本质上是一种周期一定而高低电平的占空比可以调制的方波信号,实际电路中典型的PWM波形如图2所示。
图2典型的PWM波形
图2的PWM波形可以用分段函数表示为式(3)。
式(3)中,T是STM32定时器TIM1的计数频率(最高可达72MHz)的倒数,N是PWM波一个周期的计数脉冲个数,也就是STM32的ARR—1的值,n是PWM波一个周期中高电平的计数脉冲个数,也就是STM32的CCRx的值,VH和VL分别是STM32产生PWM波的高低电平电压值,高电平为3.3V,低电平为0V,k为谐波次数,t为时间。将式(3)展开成傅里叶级数,得到式(4)。
从式(4)可以看出,式(4)中第1个方括弧为直流分量,第2项为1次谐波分量,第3项为大于1次的高次谐波分量。直流分量与n成线性关系,并随着n从0到N,直流分量在0~3.3V变化。这正是电压输出的DAC所需要的。因此,如果能把式中除直流分量外的谐波过滤掉,则可以得到从PWM波到电压输出DAC的转换,即:PWM波可以通过一个低通滤波器进行解调。其中,第2项的幅度和相角与n有关,频率为1/(NT),其实就是PWM的输出频率。该频率是设计低通滤波器的依据。如果能把1次谐波很好过滤掉,则高次谐波就基本不存在了。
选用RC二阶低通滤波器实现PWM波的解调,电路设计如图3所示。
图3二阶低通滤波器调理电路
当N取值为256时,PWM-DAC的分辨率为log2(N)=8位,在8位分辨条件下,要求1次谐波对输出电压的影响不要超过1个位的精度,也就是3.3/256=0.01289V。由式(4)可知,一次谐波的最大值是2×3.3/π=2.1V,所以,RC滤波电路要提供至少-20lg(2.1/0.01289)=-44dB的衰减。
当STM32的定时器TIM1的计数频率是72MHz,分辨率为8的时候,PWM频率为72/256=281.25kHz。如果是1阶RC滤波,则要求截止频率为1.77kHz,如果为2阶RC滤波,则要求截止频率为22.34kHz。相比之下,2阶滤波器的信号抑制能力更强,滤波效果更好。由分析可知,2阶RC滤波截止频率计算公式为:
7.96×10-5,可确定电路参数值,令R1=R2=2.4kΩ,C1=C2=3300pF,可计算出图3的截止频率为21.9kHz,略小于22.34kHz,符合设计需求。PWM波调制后,输出的直流分量最大值为3.3V,而UREFx可操作的电压的范围是只有0~1.5V,可利用一个2.4kΩ的电阻R3与滤波器串联,从而实现对直流分量的分压调理。
3、软件设计
软件设计主要是电机驱动软件的相关设计,通过对定时器的控制,实现电机的转动方向和速度的调节,其次是PC上位机控制软件设计,主要利用C++Bulider平台开发,完成对步进电机的测试。
3.1、PWM信号产生的设计
STM32F103中的7个定时器,每个定时器均有4个独立可编程通道输出的PWM信号。选用高级定时器TIM1,它由APB2总线提供时钟,设置为72MHz,向上(增)计数,自动装载寄存器ARR—1的值为256,所以,PWM波的占空比的取值范围为0~256,不同占空比的取值存储在每个通道的捕获比较寄存器CCRx中,编程时,通过改变寄存器CCRx的值来改变PWM波的占空比。占空比值的计算如式(6)所示。
这样就得到正旋曲线0~π范围内的32个点对应的占空比的值。将得到的占空比的值放在定义的数组Sequence[32]内,通过查表的方法,使定时器TIM1输出占空比变化的PWM波,通过滤波器后产生UREFx的波形如图4。
图4PWM产生UREFx波形图
从图中可以看出,输出信号UREFx波形达到了预期目标。由于选择了合适的滤波器参数,PWM波和UREFx几乎不存在大的相位差。
3.2、Phasex信号产生的设计
Phase1~Phase4用于控制流过电机各相电流的方向,当Phase1为1时,电流从OUT1A流向OUT1B流向,当Phase1为0时,电流从OUT1B流向OUT1A,其他三相控制原理相同,下面就以Phase1为例加以阐述。
STM32F103通过PB6来控制Phase1信号,配置PB6为推挽输出端口,在UREFx奇数次周期时,将PB6置1,偶数次周期时,PB6置0,在0~2π区间内,PB6将变化两次。Phase1信号变化如图5所示。
图5Phase1信号变化波形
通过Phasex信号对电流方向的控制,可实现实际输出电流ITrip以2π为周期的正弦曲线变化,在0~2π共产生64个电流值,从而实现了步进可实现步进电机十六分之一步的驱动控制。
3.3、步进电机正反转和变速控制
由于通过步进电机A、B相的电流在相位上相差为90,当A相超前B相时,电机正转,而当B超前A时,则电机反转。所以,控制流过A、B相电流的相位差,即可实现对步进电机的方向控制,也就是控制输入参考电压的相位差。在软件设计时,定时器TIM1通过查表法输出PWM波,在占空比数组的初始下标取值时,让A、B相对应的PWM输出相差90。例如,当A相对应的PWM输出的初始占空比为Sequence[0]时,B相为Sequence[16],这样使得输入各相的参考电压在相位上相差了90。
在步距角已知的情况下,通过控制相邻两个取值的变化时间间隔,便可以控制电机的转动速度,时间间隔越小,转动速度越高,时间长则转速低。为了得到两个取值变化之间精确的时间间隔,设计通过定时器TIM2进行精确的定时控制,TIM2中ARR—1的取值通过等分0~π2正弦曲线的办法计算得到,在这里不再赘述,定时器产生定时中断,中断响应中改变PWM占空比的值,实现了速度10级可调。可知,在步进电机实现变速控制时,Phasex和UREFx的频率都发生了变化。
3.4、上位机控制和实验测试
STM32F103提供功能强大的USART串口功能,在本设计中,通过外接电平转换芯片实现了上位机与MCU之间的RS—422串行通信,RS—422是一种全双工的通讯总线。STM32F103通过计算PWM占空比变化的次数和TIM2的中断周期,将电机的位置点和速度信息发送至上位机,上位机利用增量式PID算法,向步进电机发送控制命令,实现对电机的实时控制。
为了确定系统能否按照设计需求工作,需要对系统进行测试。上位机模拟生成一段目标航路,控制步进电机跟踪,测试结果如图6所示。
图6模拟航路跟踪误差曲线
由测试结果可知,步进电机跟踪精度在2mil之内,达到了模型设计的需求。
4、结束语
本文介绍了基于STM32F103和A3988的步进电机多细分控制系统,较传统的利用DA转换芯片的方案,具有结构简单,灵活性较好等优点,充分利用了A3988技术应用特点和STM32F103芯片优越的性能,极大提高了系统的性能和可扩展性。经实际实验表明,该系统工作稳定,精度高,且具有较高精度及效费比,达到了设计要求,为步进电机控制提供了一种新的方法,具有一定推广价值。