基于ARM的多输入步进电机驱动器设计
2021-09-07孟令伟管德永卢兴华万永乐
孟令伟,管德永,赵 刚,卢兴华,万永乐
(山东科技大学交通学院,山东青岛 266590)
0 引言
随着制造业和电子产业的发展,步进电机的应用领域越来越广泛。步进电机驱动器是步进电机控制系统中的重要部分,传统的步进电机驱动器多采用DSP或专用步进电机驱动器芯片作为控制芯片,成本较高,且大多只能支持脉冲输入或CAN总线通信。
众多学者对步进电机驱动展开了不同方面的研究。周永明等基于DSP对两相步进电机细分驱动器进行了设计[1];马秀娟等提出了基于FPGA的步进电机控流细分驱动系统[2];陈祖霖等提出了结合STM32和FPGA 的步进电机运动控制系统[3],但DSP和FPGA开发难度大,成本高;陈向奎等提出了基于CAN总线步进电机控制系统[4];廖平等提出了基于STM32多步进电机驱动控制系统[5];黄英等提出了基于PWM的汽车仪表步进电机控制算法[6],但输入方式单一,只支持CAN或PWM等通信形式中的一种,通用性差。
为此,基于ARM设计了一种具有多种输入模式的步进电机驱动器,将控制器集成于驱动器中,可同时支持单台控制和组网控制。选用STM32F103C8T6微控制器作为控制芯片,支持串口、CAN、PWM脉冲信号输入,并设计了上位机软件,可以通过上位机软件控制步进电机的转向、转速和细分。系统具有多种输入模式,通用性强,且成本较低,能够适用于多种工业应用场合。
1 系统整体架构
多输入步进电机驱动器由STM32主控电路、电源电路、脉冲输入电路、CAN通信电路、串口通信电路、反馈电路及H桥电路组成,其方案设计框图如图1所示。
图1 多输入步进电机驱动器方案设计框图
来自工控机或控制器的外部控制信息由脉冲输入电路、CAN通信电路或串口通信电路输入驱动器,STM32主控解析控制信息后通过PWM控制H桥,H桥输出两路相位差为90°的正弦波电压。两相四线步进电机的理想电流波形为相位差90°的两相电流,通过控制正弦波电压的频率和相位差控制步进电机的转速和转向,同时反馈电路将步进电机的相电流反馈到主控芯片,形成电流闭环控制。步进电机驱动器与外部设备连接图如图2所示。
图2 步进电机驱动器连接图
2 硬件电路设计
2.1 主控电路
驱动器主控芯片采用基于Cortex-M3内核的STM32系列处理器,它为实现MCU的需要提供了低成本的平台、减少的引脚数目、降低的系统功耗、改善的代码密度、丰富的开发工具和先进的中断系统响应等。STM32处理器使用了ARM V7-M体系结构,是一个通用性极强、高度可配置的处理器[7]。
STM32主控电路部分主要包含芯片、晶振电路、复位电路、BOOT电路,本设计中芯片采用STM32F103C8T6,芯片四周各外设1个去耦电容,用以滤除电源干扰;晶振电路采用8M外置石英晶振,用以提供准确时序;BOOT电路设置为FLASH启动,为此,将STM32的BOOT0引脚通过0 Ω电阻接地。主控电路结构图如图3所示。
图3 主控电路结构图
2.2 通信电路
通信电路由串口电路、CAN收发器电路和脉冲输入电路组成,接收来自外部控制器的控制信号,可以支持3种信号形式的输入,由主控判断决定采用的信号形式。
串口通信物理层最少只需要3根线缆,工业中常用的串口形式有TTL、RS232、RS485、RS422。为提高驱动器的通用性,采用TTL电平标准,由TTL接口直接接到主控芯片,信号形式不同时可以通过外接模块将TTL转换为其他信号形式。STM32F103C8T6内置3路串口,选用UART1作为TTL接口,图4为串口接口图。
图4 串口接口图
驱动器支持使用CAN总线进行控制,CAN总线可以有效降低智能控制系统中的数据流量和线路复杂程度,有利于精简系统结构,降低出错率[8]。CAN总线,支持多对多通信,可以在一条CAN总线上挂载多个设备,由仲裁机制决定数据流向。CAN控制器和总线之间电平标准不同,故采用MCP2551收发器芯片,将CAN控制器的逻辑电平转换为CAN总线的差分电平,最高支持1 Mb/s的运行速率,满足ISO11898标准物理层要求,适合12 V和24 V系统,自动检测TXD输入端的接地错误,上电复位和电压事件欠压保护,可连接节点高达112个,采用差分总线,具有很强的抗噪特性,温度范围为-40~85 ℃。STM32F103C8T6内部配置有一路CAN控制器,芯片引脚输入输出为TTL形式的CAN信号CANRX和CANTX,由CAN收发器芯片转换为差分信号CANH、CANL,电路如图5所示。
图5 CAN收发器电路
脉冲输入电路采用ADUM1201AR作为隔离芯片,隔离外部脉冲信号输入和驱动器控制芯片。ADUM1201AR是具有双通道的数字隔离器,能够在驱动板发生故障时防止外部控制器被来自驱动板的反向电流烧毁。外部输入有两路信号PWMIN和GPIOEN,经隔离芯片隔离后PWMINF和GPIOENF接入STM32的引脚。PWMIN是矩形波信号,定义电机的转速,GPIOEN是方向信号,定义电机的转向,隔离电路如图6所示。
图6 隔离电路
2.3 驱动电路设计
2.3.1 H桥驱动电路
采用H桥驱动电路作为电机驱动电路,单个H桥电路可以驱动一个直流电机实现正反转和调速,驱动器采用双路H桥,用以驱动一个两相四线步进电机。采用IR7843型N沟道MOS,最大栅-源电压VGS MAX=20 V,最大漏-源电压VDS MAX=30 V,最大瞬时电流100 A;采用IR2184S半桥驱动芯片,可将0~3.3 V范围的PWM脉冲转换为幅值为12 V的矩形波信号,将其输出端连接至IR7843的栅极,可正常开启关闭MOS管,IR2184S控制的半桥的MOS管始终一个处于导通状态,另一个处于关闭状态,由此2个半桥驱动电路组成1个H桥驱动电路,图7为H桥驱动电路示意图。
图7 H桥驱动电路示意图
2.3.2 电流反馈电路
为形成步进电机相电流的闭环控制,需要实时采集步进电机相电流。采用0.1 Ω采样电阻串联采集步进电机相电流,使用LM358集成运放将采样电阻两端的电压放大3倍后输出到STM32的ADC引脚,由欧姆定律计算出线圈的电流大小,进而实现电流闭环控制。
3 软件设计
3.1 下位机程序设计
STM32F103C8T6作为下位机主控,接收上位机发送的控制信息和采样电阻处的电压信息的同时,输出PWM信号到驱动芯片,控制H桥输出波形的频率和幅值。
3.1.1 通信算法设计
串口通信和CAN总线都是嵌入式系统中常用的通信形式,由于不同的特性应用于不同的场合,串口通信有多种信号形式,如RS232、RS485等,多用于一对一通信;使用CAN总线通信时,总线上添加和减少设备时,软硬件和应用层都无需修改,多用于组网控制。驱动器和外部控制设备通信时需要满足两设备通信设置相同,如波特率、数据宽度等,同时两者的信息格式需满足自定义的通信协议。
驱动器的串口设置为:波特率115 200 bit/s,8位数据位,无校验位,1位停止位,外部设备接入时需按照此设置配置串口。驱动器内部使用中断接收串口数据,每次进入中断接收1个字节数据,接收一次完整的串口指令需7次进入中断,顺序接收上位机的指令并存储在数组ComRxBuffer中。其中ComRxBuffer[0]和ComRxBuffer[5-6]分别作为包头包尾,ComRxBuffer[1]存储数据方向信息,ComRxBuffer[2]存储转速信息,ComRxBuffer[3]存储方向信息,ComRxBuffer[4]存储细分数。
CAN总线为多主方式工作,总线上任意一点在任意时刻都可以主动向网络上发送广播信息,而不分主从[9]。驱动器CAN总线接口设置波特率115 200 bit/s,外部设备需遵从此模式设置其波特率。CAN标准数据帧长度为64 bits,除在CAN标准帧的仲裁域中有身份识别信息,在数据帧中定义电机转向、细分数和转速。串口模式和CAN模式的通信协议见表1。
表1 通信协议
脉冲输入模式下分为2种输入模式,即脉宽调速模式和频率调速模式,共用图6中的输入接口PWMIN和GPIOEN,驱动器在脉冲输入模式下通过拨码开关选择工作模式和细分数。两种模式的区别为PWMIN的信号参数,脉宽调速模式下PWMIN的信号频率不变,占空比为变量,随目标转速变化而变化;频率调速模式下PWMIN的信号占空比不变,频率为变量,随目标转速变化而变化。2种模式下,GPIOEN接口电平含义相同,高电平为逆时针旋转信号,低电平为顺时针旋转信号。
设置为脉宽调速模式时,PWMIN输入的为脉宽调制信号,转速大小与脉宽大小呈线性关系,脉宽越大转速越高,转速与脉宽满足式(1):
v=k1·T
(1)
式中:v为转速,r/min;k1为脉宽转换系数;T为脉宽。
驱动器内部采用定时器中断采集脉宽信息,即矩形波上升沿时获取时间T1,下降沿时获取时间T2,采集到的脉宽T=T2-T1。
设置为频率调速模式时,PWMIN输入为频率调制信号,转速大小与频率大小呈线性关系,频率越高转速越大,转速与频率满足式(2):
v=k2·P
(2)
式中:k2为频率转换系数;P为脉冲频率,Hz。
驱动器采用外部中断采集频率信息,采用下降沿触发,采集1 s内进入中断的次数N,P=N。
3.1.2 细分驱动算法设计
步进电机是低速永磁同步电机,它的转子相当于一个永磁铁,对步进电机的定子各相绕组按照特定的时序通以阶跃式的电流,将产生一个步进式旋转的定子磁场,从而带动转子步进式地旋转[10]。虽然步进电机拥有良好的开环特性,便于控制,但也同时存在低频共振、噪音大的缺点,采用细分驱动技术能够提高步距分辨率,同时降低运行噪声[11]。
细分技术能有效地提高步进电机的运行精度,抑制低频共振。两相四线步进电机理想的电流波形为2个相位差为90°的正弦波,如图8所示。
图8 理想电流波形
实际使用时驱动电路很难生成理想波形,故常用多细分的阶梯波来代替正弦波,如图9所示。
图9 实际电流波形
不使用细分算法的两相步进电机多采用两相四拍运行方式,细分实际是将四拍中的每一拍分成多步来实现,将矩形波变为阶梯变化的模拟正弦波,每一拍中的阶梯数称为细分数。使用STM32进行控制时,阶梯波通过PWM信号来控制实现,通过PWM控制H桥输出端的电压呈阶梯状变化,进而实现电流阶梯状变化。
MCU根据接收到的信息控制产生特定占空比和频率的PWM信号,PWM本身的信号频率不需要变化,将其设定为10 kHz,但是需要通过调整改变占空比的频率来实现调速,占空比根据式(3)和式(4)变化。
(3)
(4)
式中:PWM为最大占空比;PWMA为A相线圈的占空比;PWMB为B相线圈的占空比;i为循环变量;j为细分数。
STM32F103C8T6内部有时钟TIM1~TIM4,本设计选用TIM2作为PWM输出口。针对50齿,步距角为1.8°的步进电机,转动1圈的时间T计算为
T=4N·j·Tstep
(5)
式中:N为步进电机齿数;Tstep为每一细分阶梯的时间。
经过换算,在rate(r/min)转速、j细分下,每一步的时间Tstep见式(6):
(6)
3.2 上位机软件设计
上位机软件使用Python和Qt开发,软件界面由Qt designer设计,内核服务函数使用Python设计,显著缩减了代码量。同时支持串口通信、CAN总线和脉冲输入模式,串口通信、CAN总线模式,支持步进电机调速、方向控制、细分控制,通过操纵界面中的按钮等控件向下位机发出指令。上位机软件界面如图10所示。
图10 上位机软件界面
4 实验及结果分析
完成驱动器下位机和上位机设计后,使用42型两相四线步进电机对驱动器进行测试,分别测试3种控制模式下步进电机驱动器的功能完整性。实验分为两部分:第1部分采用工控机通过2种通信转接板,即USB转TTL和USB转CAN,连接驱动器进行串口通信、CAN通信测试;第2部分采用外部控制电路板连接驱动器,进行脉宽调速测试和频率调速测试。由于3种信号输入方式对应相同的输出,所以转速和细分参数相同时,不同输入方式对应的电机输出相同,表2为串口模式下设定转速和细分数下的测试数据。
表2 驱动器测试数据
使用串口通信,设置60细分、转速30 r/min的参数对多输入驱动器进行测试,A相线圈电压波形如图11所示,图12为系统现场测试图,图13为多输入步进电机驱动器实物图。
图11 A相线圈两端电压波形
图12 多输入步进电机驱动器测试系统
图13 多输入步进电机驱动器实物图
测试结果表明:驱动器能够支持各种信号输入方式,电机转速精准,共振得到了很好抑制,能够适用于多种工业应用场合。
5 结束语
本文选用STM32F103C8T6、IR2814S等对两相四线步进电机驱动器进行了设计,同时支持多种输入模式,将控制器与驱动器集成于一体,可以在不添加外部控制器的情况下使用计算机直接对步进电机进行控制,降低了成本,提高了步进电机驱动器的通用性。详细介绍了细分驱动方案、H桥驱动电路、电流反馈电路。最后采用42型步进电机进行了多种输入模式实验,测试过程中电机运行平稳,不丢步,测试结果表明该步进电机驱动器通用性强,可靠性高,可满足多种工业环境的使用需求。