直流电机有着广泛的应用,大到农业机械化、工业、自动化行业,小到各类家具、自动控制装置都能见到它的身影。本文将采用STM32进行直流电机的控制研究,并进一步利用STM32的编码器模式进行反馈控制,实现电机的定时正反转以及速度控制,并加入简易的反馈使电机具有更强的环境适应性。
一、问题回顾及简要分析本课题所要解决的问题在于,利用STM32实现直流电机的定时正反转控制。为了使电机有更好的环境适应性,本文进一步提出了简易的反馈控制,在电机转动受到一定程度的阻碍时,会加大转速,以模拟电机驱动的车辆在路面受阻时的加速越野功能。若要使用单片机驱动直流电机,首先应该解决电源问题。目前,大多数单片机的电源为5V或3.3V,本课题采用的STM32电源为3.3V,所用直流电机额定电压12V,并附带额定电压5V的磁感应霍尔编码器,故考虑采用12V干电池驱动,并配合DC-DC芯片MP1584、LM1117_3.3获取5V、3.3V电压用于驱动编码器和主控芯片。同时,为了实现电机的正反转定时控制及速度控制,本课题考虑采用STM32的定时器实现定时控制功能,并采用A4950单H桥芯片并对其输入两路PWM实现正反转控制。二、所用器件清单及简介本课题采用的器件有:STM32F103最小系统板*1、MP1584稳压芯片*1、LM1117_3.3稳压芯片*1、MG513P20_12V直流减速电机*1(带霍尔编码器)、A4950驱动芯片*1、SS34肖特基二极管*2、SI4435MOS管*1、LED发光二极管*1、机械开关*1、电容电阻电感若干、12V干电池*1。STM32F103为意法半导体的中低端32位ARM微,本文采用的CPU为STM32F103RCT6,具有高达72MHz的晶振频率,256K的FLASH容量,8个定时器以及PWM输出功能,其定时器具有编码器模式实现编码器输出脉冲数的精确计算。MP1584稳压芯片可以实现12V转5V稳定电压输出对编码器供电,LM1117_3.3可以实现3.3V电压稳定输出以对主控芯片供电。MG513P20直流电机带有霍尔编码器,霍尔编码器线ppr,线数代表了电机每转动一圈编码器输出的脉冲数。A4950驱动芯片是美国爱格罗公司生产的一款单H桥电击驱动芯片,可驱动8-40V的电机,最大输出电流3.5A。本课题用此芯片实现利用主控芯片的PWM输出控制直流电机正反转以及转速控制的作用。其余二极管、MOS管、发光管以及电阻电感电容用于组成经典电路并实现电路的保护及电源提示的功能,在此不予赘述。三、硬件系统设计直流电机控制的硬件设计如下:
电源模块经两级降压得到5V、3.3V电源后驱动主控芯片及直流电机,主控芯片通过定时器控制PWM输出实现对电机的正反转指定转速控制,直流电机工作时利用霍尔编码器通过脉冲形式反馈当前转速到主控芯片。3.1 电源模块结合两块稳压芯片的参考手册附带的经典电路[1][2],本课题提出了下述电源系统设计:
如图3.2为电源系统部分的设计。电源系统采用了两级降压的方式分出5V、3.3V为系统常用硬件部分供电。使用时,于J1处插入12V干电池,K1闭合后,MOS管导通MP1584开始工作,5V电压由SW端输出,为了避免电压输出的尖峰脉冲,D11应尽可能靠近SW引脚。LM1117_3.3输出3.3V电压为主控芯片供电。此时,LD2被点亮,表示电源已接通。3.2 直流电机驱动直流电机部分,本课题采用了单H桥的A4950芯片驱动电机。根据芯片手册的经典电路,本课题电机驱动部分设计如下:
其中,IN1、IN2为H桥逻辑输入端,VREF为参考电压,一般接5V,此处接6V。VBB为电机驱动电压12V,J4处接直流电机。主控芯片对PB6、PB7进行PWM输出,实现对电机的控制。根据文献[3],IN1、IN2逻辑控制表如下:
若不要求速度控制,IN1为1,IN2为0时,电机正转;IN1为0,IN2为1时,电机反转,此时电机处于全速工作状态。进一步的,借助PWM可以实现对电机转速的控制:
此时,电压的平均值决定了电机转速的大小,对应地,即PWM的占空比决定了电机的转速大小,占空比越大,转速越快。一般而言PWM频率选择5k-20kHz,本文以9kHz输出为例。在此,硬件系统实现了对编码器、电机、主控芯片的供电,并提供了软件控制电机正反转的思路。四、软件系统设计为了实现对直流电机的闭环控制,本文参考PID控制法的思路简要设计了一种实时反馈的直流电机控制方法。将PA0、PA1接入电机编码器的A、B相,利用STM32自带的编码器模式进行脉冲计数得出转速。
在主函数中,芯片执行完初始化相关程序后于while(1)死循环中改变转动方向。在转速保持阶段,利用串口向上位机发送转速信息,此处的上位机为个人PC,通过可视化串口调试软件Minibalance观察转速关于时间的波形,以便于进行相关参数的调节。中断程序方面,本文将TIM6作为10ms的中断周期改变电机转速。程序根据设定的转速输出相应的PWM值后,主控芯片根据编码器反馈的差值计算出当前电机转速,并与设定的转速对比,实时调整PWM输出值。STM32定时器具有编码器接口模式,是定时器的一种高级应用,其具体初始化配置见文献[4],在此不予赘述,仅介绍其大致原理。在编码器模式下,计数器依照增量编码器的速度和方向被自动修改,计数器内容始终指示着编码器的方向。其计数方向与编码器信号的关系如下:
本程序将以在TI1、TI2上计数为例,该模式常被称为编码器模式3。霍夫编码器在输出时,AB相的脉冲相位差为90°,根据表格可以计算出,编码器每一个脉冲,编码器计4个数。其向上向下的计数逻辑使编码器计数对毛刺的抗干扰能力非常强:
给定上图波形下,若某一相出现了毛刺,如第二个脉冲以后TI1处出现毛刺,此时TI2保持,可以认为此时电机处于停转状态,而编码器的值基本不变,毛刺所引起的计数误差最多仅为1。因此可以认为,STM32编码器接口模式读取的值相当可靠。反馈控制方面,本文借鉴了PID控制法的思想,输出的PWM值与当前误差、历史总误差、当前误差与上一次误差的差值各乘以固定系数后得出。三个系数记为变量_p、_i、_d并参考文献[5]、文献[6]、文献[7]所给出的方法进行调试得出。即先调_p观察转速输出波形,使之在给定值的60%-70%间波动,然后适当给出_i值,所得波形有一个适度的上冲(约为给定值1/4)后迅速收敛。_d则可以适当给定,但不宜过大,否则波形容易出现高频振荡。五、实际测试结果经调试,所得的_p、_i、_d参数为9、1.1、0.1。运行过程如图5.1,图5.2所示。图5.1电机正转,白色塑料滑片被滑到一侧,图5.2电机反转,白色塑料滑片被滑到另一侧。
使用Minibalance观察编码器计数计算后的转速波形可以发现,输出的波形为方波,最大最小值的绝对值基本一致,说明转速比较稳定。脉宽基本一致,说明正反转改变时间基本一致。