杜绝失步:通过闭环步进控制实现精准定位
每月为您发送最具参考价值的行业文章
我们会保障您的隐私
引言
双极步进电机在开环运行时能实现精确的位置控制。工业自动化设备(如机器人、加工与包装机械)以及消费类产品(如3D 打印机和办公设备)都充分利用了步进电机固有的位置保持特性,从而无需依赖复杂的传感技术、高处理能力或复杂的控制算法。
然而,采用开环法驱动步进电机要求运动曲线毫无误差。因为任何负载的突然变化都可能导致电机失步,从而使电机的实际位置与控制系统感知的位置不同步。在多数应用中,这种位置误差会造成严重的问题。例如,在标签打印机中,失步可能导致打印内容与标签错位,造成标签打印歪斜。本文将介绍一种简单的实现方法,让步进电机能够感知自身位置,并主动校正驱动过程中可能累积的任何误差。
假设条件
假设用一台每转 200 步的双极步进电机,来驱动生产线中控制阀门或挡板开合的装置。为了实现更平滑地运动,我们选用支持 8 步微步进的双极步进驱动器,转子每转一圈需要 1600 个步进命令。要完全打开或关闭该装置,转子需要旋转多圈。为简单起见,我们假设需转动 10 圈才能驱动装置,则控制器在每个方向上都需要发送 16,000 个步进命令。
当驱动电流足以克服扭矩波动时,电机会准确响应指令,完全打开和关闭控制面,位置得以保持。然而,一旦发生失步,控制器与电机不能同步,驱动动作就将受到影响。部分新型驱动器通过在外加旋转磁场过零时测量电机绕组的反电动势来实现堵转检测,但这种方法只能判断电机是否在转动,却无法确定具体丢失了多少步。在这种情况下,利用传感技术实现电机位置闭环控制是一个更值得探索的方向。
传感器选择
在部分设计中,使用简单的限位开关(例如磁感应、光学或机械式)即可定义电机的运动范围。但在空间受限设备中,往往难以安装这些开关。在电机后端轴加装光学轴编码器(增量式或绝对式)是一个可行的方法,但成本偏高。相比之下,采用无接触式角度位置传感器是一种更经济的选择。此类传感器利用现成磁体元件,结合采用霍尔传感器的精密半导体,可测量分辨率高达 15 位的转子角度。即每转可分为 215 = 32,768 个位置,对应角度精度为 0.01°(360/32,768)。
在本例中,选择 11.5 位分辨率足以对 1600 个微分步进行编码,可对应 2,896.31个有效角度区段。基于霍尔效应的无接触式MA732传感器,可提供11.5位分辨率的绝对位置编码。
当与径向磁化圆磁铁配合使用时,该传感器可通过串行外设接口(SPI)以 1 ms 周期进行采样,每次返回 16 位数据(其中有效位为 11.5 位)。
图1:MA732 与 MCU 的连接
功率级选择
驱动双极步进电机需要两个完整的 H 桥电路,主要实现方式有两种:一种是由带微控制器单元(MCU)的双H 桥功率级生成正弦/余弦波对;另一种是使用支持微步进的全集成步进索引器。前者在调节正弦波电流方面灵活性更高,但系统复杂度大。本文的示例中选用了具备16步微步进精度的全集成步进索引器MP6602(如图2所示)。该器件最大输出电流 4A,可驱动 NEMA 17 和 NEMA 23 双极性步进电机。同时,MCU 负责产生控制信号,通过 SPI 端口与 MP6602 通信并采集故障状态。
图2:双极步进索引器连接
最终实现
在闭环系统中,传感器与功率级均由一颗通用 ARM Cortex-M4F MCU 控制。MCU 通过SPI 接口(带两个片选)与两者通信,内部定时器产生步进脉冲。电路板尺寸仅 1.35 × 1.35 英寸,可安装在 NEMA 17 电机后方(见图3)。该参考设计也适用于更大规格的电机,如 NEMA 23。
a) 顶部
b) 底部
图3:PCB布局
图4展示了电机组装体,其中图4a为带有径向磁化圆磁铁并面向MA732传感器的示意图,图4b展示了最终方案外观。
4a) 电机组装体
4b) 最终方案(外壳未展示)
图4:电机组装体
绝对位置与传感器溢出
无接触磁性传感器虽为绝对位置编码器,但其绝对性仅限于单圈范围。也就是说,在转子的一次完整旋转过程中,传感器输出一个 16 位角度值,MCU 读取该值后即可得知转子当前的绝对角度。
然而,电机旋转时,传感器无法区分是第几圈,因此要获得整体绝对位置,需要将角度读数持续累加为一个更大的变量,即 Rotor_Angle_Absolute,它记录了转子跨圈的连续角位移。该变量为 32 位有符号整数。电机正转时递增,反转时递减。假设采样为 16 位、每转 1600 个微步且转速为 1000 rpm,则该变量约需 22.37 小时才会溢出。MCU 必须确保传感器读数经过溢出区域时仍能正确进行累加运算。无论电机顺时针或逆时针转动(即传感器位置递增或递减),都必须执行此绝对位置校正。
图5显示了角度位置随时间的变化情况。
图5:角度位置随时间的变化
如图5所示,角位移(MA732_Angle_Delta,在图5中表示为AD)以固定时间间隔(1ms)计算。在每个采样期间,上一次的读数存储在 MA732_Angle_Prev(在图5中表示为 Prev Angle)中,新的采样值存储在 MA732_Angle_New(在图5中表示为 New Angle)中。MA732_Angle_Delta 可通过公式(1)计算:
\[ \mathrm{MA732\_Angle\_Delta} = (\mathrm{MA732\_Angle\_New} - \mathrm{MA732\_Angle\_Prev}) \]公式(1)的结果被加到 MA732_Angle_Absolute 上。如果转子顺时针移动(向前),则位移为正;如果电机逆时针转动(反向),则位移为负。
在角度传感器溢出期间必须进行特殊处理。如果传感器向前移动超过最大值 0xFFFF(在图5中表示为 OvF+AD),或者传感器递减其位置超过 0x0000(在图5中表示为 OvF-AD),则前面的公式不再适用。在这两种情况下,固件逻辑根据正在处理的情况选择以下公式之一。如果角度位移在向上计数时溢出并超过最大值(OvF+AD),则 MA732_Angle_Delta 可通过公式(2)计算:
\[ \mathrm{MA732\_Angle\_Delta} = 65535 + \mathrm{MA732\_Angle\_Delta} \]如果角度位移在向下计数时溢出并低于最小值(OvF-AD),则 MA732_Angle_Delta 可通过公式(3)计算:
\[ \mathrm{MA732\_Angle\_Delta} = -\left(65535 - \mathrm{MA732\_Angle\_Delta}\right) \]位置控制算法
一旦从传感器采样中获得了转子的绝对位置,我们就可以通过比较将当前实际位置与目标位置指令(Position_Command),来实现位置闭环控制。在本方案中,使用一种简单的串行通信协议,通过外部控制器将位置指令发送到电机的 MCU。例如,在本文的步进电机应用中,该电机用于控制挡板的开启与关闭。假设当前传感器读数为 0,则可以向电机下达目标位置 655,530 的指令,这代表电机从当前位置顺时针转动 10 圈。每次采样获得新的绝对位置后,都可以通过下式(公式 4)计算绝对位置指令误差(POS_Command_Error):
\[ \mathrm{POS\_Command\_Error} = \mathrm{POS\_Command} - \mathrm{MA732\_Angle\_Absolute} \]如果误差为正值,则将 MP6602 的 DIR 输入信号设为高电平;如果误差为负值,则将 DIR 输入信号设为低电平。此时,将 POS_Command_Error 转换为其绝对值(ABS_Error)。接下来,通过一个定时器来产生步进指令脉冲,使得误差逐渐减小直到接近 0。该定时器的输出频率由比例增益控制:当误差较大时,步进频率较高;随着误差减小,步进频率逐渐降低。当误差接近零时,电机停止运行,整个执行动作结束。
为避免在维持目标位置时产生不必要的振动,系统设置了约 3 个微步的死区。如果需要使误差进一步接近零,可以采用多阶比例增益控制(multiple-order proportional gain)。例如,当误差较大时,可使用较高的增益以加快电机的响应速度;当误差减小到接近 3 个微步时,改用较小的增益,从而使电机最终回到目标位置,精度达到 ±1 微步范围内。
结语
利用现有 MCU,我们可以通过 SPI 接口将步进电机驱动器与基于霍尔传感的角度传感器相连接。固件随后可以持续读取位置传感器数据,并实时推算出电机转子的当前位置。通过将当前实际位置与目标位置进行比较,电机即可被换相控制,以在合适的时间内到达指定位置。如果外力导致电机失步,传感器信息可以检测出丢失的步数, 从而使微控制器能够重新进行位置闭环控制,并最终将步进电机精确地恢复到目标位置。
尽管步进电机传统上多用于开环应用,但闭环控制能够带来诸多优势。借助高性价比的霍尔传感方案(如MA732)及易于使用的、带索引功能的步进电机驱动器(如MP6602),步进系统能够具备类似伺服系统的性能。MPS 提供丰富的位置传感器与步进电机驱动器产品,可以满足不同设计的应用需求。
_______________________
您感兴趣吗?点击订阅,我们将每月为您发送最具价值的资讯!
直接登录
创建新帐号