深入解析LM628/629运动控制芯片:从PID算法到梯形轨迹规划实战

📅 2026/7/27 16:54:41 👁️ 阅读次数 📝 编程学习
深入解析LM628/629运动控制芯片:从PID算法到梯形轨迹规划实战

1. 项目概述

在工业自动化、精密仪器和机器人领域,让一个电机(无论是伺服电机还是步进电机)精准、平滑地运动到指定位置,从来都不是一件简单的事。这背后涉及到复杂的数学计算和实时控制,传统上需要工程师用高性能的微控制器编写大量底层代码来实现PID算法和轨迹规划。而三十多年前,当德州仪器(TI)推出LM628和LM629这两颗芯片时,它们为工程师提供了一种“开箱即用”的硬件解决方案,将运动控制的核心——数字PID滤波器和梯形速度轨迹生成器——集成在了一颗专用的处理器里。即使到今天,理解这颗经典芯片的工作原理,对于深入掌握运动控制的底层逻辑,乃至设计现代基于FPGA或高性能MCU的运动控制器,都有着极高的参考价值。本文就将深入拆解LM628/629的内部架构、PID滤波器的实现奥秘以及轨迹生成的核心算法,并结合实际调参经验,让你不仅能看懂数据手册,更能真正用好它。

2. 芯片架构与核心模块解析

LM628和LM629可以看作是为运动控制量身定制的“协处理器”。它们独立于主控MCU运行,接管了最耗费计算资源的实时控制任务,让主控可以专注于更高层的逻辑和通信。

2.1 整体硬件架构与数据流

芯片的核心是一个专为控制算法优化的微程序控制器。其内部ROM存储了固定的控制算法指令,通过一个可编程逻辑阵列(PLA)进行解码和执行。整个数据通路围绕一个32位的算术逻辑单元(ALU)和一系列32位寄存器构建,以满足高动态范围和计算精度的要求。

数据流是理解其工作的关键:

  1. 轨迹生成:主控MCU通过8位数据总线,向芯片的轨迹轮廓生成器写入目标位置、目标速度和加速度。生成器在每个采样周期(例如256微秒)计算出一个新的“期望位置”。
  2. 位置反馈:电机轴上安装的正交编码器(A、B两相,可能还有索引Z信号)实时输出脉冲。芯片内部的位置解码器对这两路相位差90度的信号进行4倍频解码和方向判断,驱动一个16位可逆计数器,从而获得高分辨率的“实际位置”。
  3. 误差计算:在每个采样周期开始时,一个同步脉冲(Sync)锁存当前16位计数器的值,并将其累加到内部的32位实际位置寄存器中。随后,该实际位置值与轨迹生成器计算出的期望位置在求和节点相减,得到“位置误差”。
  4. PID滤波与输出:位置误差送入数字PID滤波器。滤波器根据预设的比例(Kp)、积分(Ki)、微分(Kd)系数进行计算,输出一个控制量。LM628将该控制量以8位或12位数字形式输出给外部DAC,进而驱动功率放大器;LM629则直接生成一个带符号的7位PWM(脉宽调制)信号,可直接驱动H桥电路。

这个闭环过程以最高3.9 kHz(8MHz时钟版本)的频率周而复始,实现了对电机位置的实时、高精度控制。

2.2 正交编码器解码原理与陷阱

位置解码是运动控制的“眼睛”。LM628/629的编码器接口支持标准的正交增量式编码器。其解码逻辑不仅计数脉冲,还通过判断A、B相的相对相位关系来确定方向,从而实现4倍频。例如,一个250线的编码器,经过4倍频后,每转可获得1000个计数,大大提升了位置分辨率。

这里有几个实操中必须注意的细节:

  • 最大跟踪速度:芯片解码每个编码器状态需要至少8个时钟周期。对于8MHz时钟的型号,最高解码频率为1MHz。这意味着,对于上述250线(1000计数/转)的编码器,电机最高转速不能超过1,000,000 计数/秒 / 1000 计数/转 = 1000 转/秒,即60,000 RPM。这在绝大多数工业场景下是绰绰有余的,但在一些超高速主轴应用中需要核算。
  • 信号质量:芯片内部只有简单的边沿同步逻辑,没有内置数字滤波器。这意味着如果编码器信号线受到严重噪声干扰(例如,与电机动力线并行走线),可能会产生误计数,导致位置漂移或控制失稳。因此,布线时必须将编码器信号线双绞、采用屏蔽电缆,并尽可能远离噪声源。
  • 索引信号(Index)的使用:索引信号每转出现一次,用于确定机械零位。芯片会在A、B、Index三线同时为低电平时,锁存当前位置值。这个功能对于上电后寻找“回家”位置(Homing)至关重要。在初始化流程中,通常会让电机缓慢向一个方向运动,直到触发Index信号,然后将该点设为零位。

2.3 输出接口:LM628的DAC与LM629的PWM

这是两款芯片的主要区别,也决定了它们驱动后级电路的方式。

LM628 - 数字到模拟转换(DAC)输出

  • 模式:复位后默认为8位输出模式。通过发送PORT12命令可切换为12位模式。
  • 时序:在12位模式下,输出数据分时复用。低6位(LSBs)和高6位(MSBs)分两次出现在同一组引脚上,并通过一个专用引脚(24脚)的电平来指示当前是低字节还是高字节。用户需要利用芯片提供的选通信号(25脚,低有效)的上升沿,将这两个6位数据锁存到外部的12位锁存器中,再送给DAC。这是一个容易出错的硬件连接点,如果锁存时序不对,DAC会收到错误的数据,导致电机抖动或失控。
  • 编码格式:输出为偏移二进制码。零点对应数字量0x800(12位)或0x80(8位)。这意味着当控制量为零时,DAC应输出中间电压(通常是0V或Vref/2),对应电机零扭矩。

LM629 - 脉宽调制(PWM)输出

  • 输出:直接提供两路信号:SIGN(方向)和MAGNITUDE(幅值,即PWM占空比)。
  • 优势:PWM方式非常适合直接驱动MOSFET或集成H桥驱动器(如LM18293),效率高,无需外部DAC,简化了电路。
  • 细节:其PWM频率是采样频率的4倍。在8MHz时钟、3.9 kHz采样率下,PWM频率约为15.6 kHz。这个频率需要权衡:频率太低,电机噪音大(音频范围内);频率太高,开关损耗增加。15.6kHz是一个折中的选择,通常已超出人耳听觉范围。
  • 死区时间:芯片本身不产生死区时间。当使用H桥驱动时,必须在外部硬件或驱动芯片中配置死区时间,以防止上下桥臂直通,烧毁功率管。这是使用LM629时电路设计的关键。

3. 梯形速度轨迹生成器深度剖析

轨迹生成器是运动控制的“大脑”,它规划了电机从起点到终点的整个运动过程,核心是生成一条平滑的速度-时间曲线。

3.1 梯形速度曲线与参数解析

LM628/629生成的是最经典、应用最广的梯形速度曲线。这条曲线分为三段:匀加速段、匀速段、匀减速段(减速度绝对值等于加速度)。

  • 加速度:决定了电机启动/停止的“急促”程度。加速度越大,系统能更快达到目标速度,但对机械结构的冲击也越大,也可能超出电机和驱动器的扭矩能力。
  • 目标速度:运动过程中达到的最高速度。
  • 目标位置:整个运动过程需要走过的总位置增量(计数)。

芯片内部的计算逻辑是:它会在加速过程中,实时计算已经走过的位移。当“剩余距离刚好够以当前减速度减速到零”时,就会自动触发减速段开始。这意味着,如果目标位置很近,可能来不及加速到预设的目标速度,就会直接进入减速段,整个速度曲线会变成一个三角形。

3.2 核心寄存器:位置、速度、加速度的表示与计算

理解芯片内部的数值表示是进行精确控制的基础。所有参数都以“计数”和“采样间隔”为单位。

  • 位置:32位有符号整数。最高位(MSB)为符号位,第30位是“环绕”标志位(用于检测32位溢出),剩余30位提供了高达±10.7亿计数的动态范围。
  • 速度:32位无符号数,但被解释为整数部分.小数部分的定点数。高16位是整数部分(0-65535 counts/sample),低16位是小数部分(分辨率1/65536)。这允许速度可以远小于1个计数每采样周期。例如,速度值0x00010000表示1.0counts/sample,而0x00008000表示0.5counts/sample。
  • 加速度:同样为32位无符号定点数,单位是 counts/sample²。其格式与速度寄存器相同。

计算过程:在每个采样周期,算法执行以下操作:

  1. 如果处于加速/减速段,则将加速度寄存器值加到速度寄存器。
  2. 将速度寄存器值加到位置寄存器(这是一个48位的加法:32位整数位置 + 16位分数位置)。
  3. 位置寄存器的整数部分输出给求和节点,与反馈的实际位置比较。

分数位置的重要性:假设使用8MHz时钟(采样周期256μs)和1000线/转的编码器(4000计数/转)。如果没有分数部分,最小速度就是1 count/256μs,约等于15.6转/秒(936 RPM)。这对于需要极低速平稳运行的应用(如显微镜载物台)是不可接受的。分数位置允许速度以极精细的步进变化,是实现平滑低速运动的关键。

3.3 速度模式与位置模式的区别

  • 位置模式:这是主要工作模式。给定目标位置、速度、加速度后,芯片自动完成从起点到终点的整个梯形轨迹规划,并在到达目标位置后停止。
  • 速度模式:此模式下,目标位置被忽略。芯片会持续以设定的速度(和加速度)运行,直到收到停止命令。这里有一个巨大的隐患:在速度模式下,轨迹生成器会不断累加“期望位置”。如果电机因故卡住(堵转),实际位置停滞不前,但期望位置仍在飞速增长,误差会急剧累积。一旦堵转解除,PID控制器会试图以巨大的控制输出让电机“追上”这个巨大的期望位置差,可能导致电机飞车或机械冲击。因此,在速度模式下,外部必须要有可靠的堵转检测和急停逻辑

4. 数字PID滤波器:从理论到芯片实现

PID是运动控制的心脏,LM628/629将其数字化并固化在硬件中。

4.1 离散PID算法在芯片中的实现

芯片实现的是位置式PID算法。其差分方程可以简化为:输出(n) = Kp * 误差(n) + Ki * 积分和(n) + Kd * [误差(n) - 误差(n-1)]其中,误差(n)是当前采样周期的位置误差。

  • 比例项 Kp:直接放大当前误差。增大Kp能减小稳态误差,提高系统刚度,但过大会引起振荡。
  • 积分项 Ki:累积历史误差,用于消除稳态误差(如恒速运行时的速度滞后、恒定负载下的位置偏差)。但积分环节会引入相位滞后,过量会导致系统响应变慢、超调增大甚至不稳定。
  • 微分项 Kd:预测误差变化趋势,提供阻尼,抑制超调和振荡。它对噪声非常敏感。

芯片的独特之处在于其系数缩放。数据手册和AN-706应用笔记中给出了从连续域S传递函数到离散域Z传递函数的转换公式,以及芯片内部的定点数缩放因子。简单来说,用户写入的Kp、Ki、Kd值,并不是直接的增益系数,而是需要根据采样周期和内部数据格式进行换算的整数。

4.2 PID系数整定实战步骤与心得

调参是PID控制的艺术。对于LM628/629,建议遵循以下步骤:

  1. 安全检查与相位确认

    • 将所有PID系数(Kp, Ki, Kd)和积分限幅(IL)设为0。
    • 设置一个极小的Kp值,例如Kp = 1
    • 发送STT命令启动闭环。此时电机应被微弱地“吸”在零位附近。
    • 关键操作:用手轻轻转动电机轴然后松开。如果系统是稳定的,电机应缓慢回到原位。如果电机反而加速向一个方向转动,说明反馈极性反了(即正反馈)。必须立即切断电机驱动电源,然后交换电机驱动器的方向信号(或编码器A、B相接线)。这是调试的第一步,也是最重要的一步,错误的相位会导致剧烈振荡,损坏机械。
  2. 初步建立刚度

    • 确认相位正确后,逐步增大Kp(例如每次增加5-10),直到用手感觉电机轴有明显的“刚度”,即难以转动,且松开后能快速回到原位。
    • 观察电机是否有高频抖动或持续振荡。如果有,说明Kp过大,已接近系统固有频率,需要略微降低。
  3. 引入微分阻尼

    • 在现有Kp下,系统可能仍有轻微振荡或过冲。此时逐步加入Kd。Kd的效果立竿见影,能有效抑制超调。通常Kd的数值范围可能与Kp在同一数量级或略小。一边微调Kd,一边用主控MCU读取实际位置,发送一个小的位置阶跃(如1000 counts),观察位置响应曲线是否变得平滑且快速。
  4. 引入积分消除静差

    • 在位置模式,让电机执行一个长距离移动。到达目标后,观察实际位置是否稳定在目标值。由于摩擦等因素,可能有一个很小的静态误差。
    • 设置一个积分限幅IL(例如1000),然后加入一个很小的Ki值(例如0.1)。积分的作用是缓慢累积误差来修正输出。Ki太大会导致系统不稳定或在停止时产生低频抖动。务必谨慎调整Ki
  5. 动态测试与优化

    • 使用不同的速度、加速度和负载进行测试。利用芯片的“数据报告命令”(如RDPOSRDVEL)实时读取期望位置和实际位置,绘制跟踪误差曲线。
    • 理想的响应是“临界阻尼”状态:快速到达目标且无超调。如果响应慢,可适当增加Kp;如果有超调,增加Kd;如果到达终点后有稳态误差,微调Ki。

实操心得:调参时,优先保证稳定性,再追求性能。一个轻微过阻尼(响应稍慢但绝无超调)的系统,通常比一个临界阻尼但边界不稳定的系统更可靠。另外,负载的惯量变化会极大影响PID参数。如果负载惯量会变(如机械臂拾取不同工件),可能需要准备多组PID参数,并在负载变化时通过主机动态更新LM628/629的滤波器系数。

4.3 “忙”位(Busy Bit)机制与可靠通信

LM628/629与主控MCU通过一个8位双向数据端口和若干控制线通信。其中最关键的是“忙”位(状态字节的Bit 0)。

  • 工作原理:每当主机发送一个命令字节或一对数据字节,芯片内部的微码需要时间来处理这些指令。在此期间,它会将“忙”位置1。主机在发送下一个字节(无论是命令还是数据)之前,必须读取状态字节并检查“忙”位是否为0。
  • 为什么必须遵守:如果在“忙”位为1时强行写入,命令会被忽略;强行读取,得到的是无效数据。这会导致参数加载错误,进而引发不可预知的运动。
  • 时序考量:芯片的采样周期是固定的(如256μs),其中滤波计算、轨迹计算、输出更新会占用大部分时间。频繁地打断这些计算进行通信,可能会导致控制环路计算超时,引发错误。因此,主机程序应优化通信策略,例如,只在非实时关键阶段(如运动开始前设置参数)进行大量数据写入,在运动过程中仅进行必要的最小查询。

5. 命令集详解与软件框架实现

与LM628/629的交互全部通过一系列单字节命令及其附属数据完成。

5.1 核心命令流程:以启动一次运动为例

一个典型的位置模式运动流程如下:

  1. 复位与初始化:硬件复位或发送RESET命令。如果使用LM628且需要12位DAC输出,紧接着发送PORT12命令。
  2. 加载PID参数
    • 等待“忙”位为0。
    • 发送LFIL命令(加载滤波器)。
    • 发送滤波器控制字(指定加载哪些系数)。
    • 依次发送Kp, Ki, Kd, IL的32位数据(每个系数分两个16位字,先高后低)。每发送一对16位数据前,都需检查“忙”位。
  3. 加载轨迹参数
    • 等待“忙”位为0。
    • 发送LTRJ命令(加载轨迹)。
    • 发送轨迹控制字。这是关键一步,需要按位设置。例如,要加载绝对位置、绝对速度、绝对加速度,则控制字应为0x0027(二进制:位5=1加载加速度,位3=1加载速度,位1=1加载位置)。
    • 依次发送加速度、速度、位置的32位数据。同样,每对数据前检查“忙”位。
  4. 启动运动
    • 等待“忙”位为0。
    • 发送STT命令。此命令会将步骤2和3中加载到“缓冲寄存器”的参数,一次性传递到“工作寄存器”,运动立即开始。

5.2 轨迹控制字的位操作精讲

轨迹控制字(16位)的每一位都至关重要,错误设置会导致运动异常。

  • 位0-位5(参数加载与模式):这是最常用的部分。位1=1表示加载位置数据,位0=1表示该位置数据是相对于当前位置的增量(相对移动),位0=0表示是绝对位置。速度和加速度位同理。
  • 位8-位10(停止命令)特别注意:这些位仅在LTRJ命令中与轨迹参数同时设置时才生效,用于紧急停止。它们不是独立的停止命令。
    • 位8=1:立即关闭电机输出(零扭矩)。电机自由滑行停止。
    • 位9=1:以最大减速度紧急停止。芯片会瞬间将目标位置设为当前位置,并开始减速。
    • 位10=1:以当前用户设定的加速度值平滑停止。
  • 位11-位12(速度模式)位11=1使能速度模式,位12决定初始方向。

一个常见的错误是:想在运动过程中暂停,于是发送了一个带有位9=1LTRJ命令,但没有同时提供有效的加速度、速度数据(即位5位3为0)。这样操作可能无法达到预期效果。更可靠的做法是,在需要停止时,发送单独的STT命令(其本身会使用已加载的轨迹参数完成停止),或者通过主机计算一个新的、当前位置附近的目标位置,再发起一次新的LTRJ+STT来实现“跳转”停止。

5.3 在线参数更新与双缓冲机制

这是LM628/629的高级特性,能实现更复杂的运动控制。

  • 双缓冲:当使用LFILLTRJ命令时,数据首先被写入一组“影子寄存器”(缓冲寄存器)。只有当STT命令执行时,这些数据才会被复制到真正参与计算的“工作寄存器”。
  • 在线更新:利用双缓冲,可以在电机当前运动尚未结束时,就为下一段运动提前准备好参数(位置、速度、新的PID系数)。在当前运动结束的瞬间发送STT,即可无缝切换到新的运动状态,实现连续轨迹(如多段S曲线)或根据负载变化自适应调整PID。
  • 加速度更新的限制一个重要的约束:加速度参数不能在运动过程中通过STT命令更新。如果尝试这样做,芯片会产生一个命令错误中断。正确的方法是:先发送一个带位8=1(关闭电机)的LTRJ命令和STT命令让电机停止输出,然后再加载新的加速度参数并启动。

6. 系统设计要点与常见故障排查

基于LM628/629构建一个稳定可靠的系统,硬件和软件都需要精心设计。

6.1 硬件设计注意事项

  1. 电源与去耦:数字部分和模拟部分(如果使用LM628+DAC)的电源要分开,并尽可能靠近芯片电源引脚放置高质量的瓷片电容(如100nF)进行高频去耦,同时并联一个电解电容(如10μF)进行低频滤波。
  2. 编码器接口:如前所述,编码器信号线必须采用屏蔽双绞线。可以在信号进入芯片前,增加一个RC低通滤波器(如100Ω + 1nF),以滤除高频噪声,但需注意RC时间常数不能影响对最高频率信号的响应。
  3. 时钟信号:外部提供的时钟(CLK)需稳定、干净。时钟抖动会影响采样周期的精度,进而影响控制性能。
  4. LM629的PWM输出驱动SIGNMAGNITUDE输出通常需要经过缓冲器(如74HC14)再驱动H桥的隔离光耦或驱动器输入,以提高驱动能力和抗干扰性。务必确保H桥驱动器已正确配置死区时间。

6.2 软件框架与状态管理

一个健壮的主机软件应该包含以下状态机:

  • 初始化状态:配置I/O口,复位芯片,加载初始PID参数。
  • 空闲状态:等待用户指令或上位机命令。
  • 参数设置状态:接收新的目标位置、速度、PID参数等。
  • 运动执行状态:发送LTRJSTT命令,并周期性读取状态字节,检查“错误中断”、“到位中断”、“索引中断”等标志。
  • 错误处理状态:一旦检测到错误中断(状态字节Bit 7),立即读取错误寄存器,根据错误类型(命令错误、轨迹错误等)进行相应处理,如紧急停止、报警。

6.3 常见问题与排查指南

下表列出了调试过程中最常见的问题及排查思路:

现象可能原因排查步骤
电机上电后啸叫或剧烈振荡1. 反馈极性错误(正反馈)
2. PID参数Kp过大
3. 编码器信号噪声大,导致位置反馈跳变
1. 检查电机相序/编码器A、B相接线,用极小的Kp测试相位。
2. 大幅降低Kp值。
3. 用示波器观察编码器信号质量,检查接地和屏蔽。
电机运动时抖动、不平滑1. 机械传动部件间隙大(背隙)
2. 微分增益Kd设置不当(可能过大引入噪声)
3. 电源功率不足或电压波动
4. PWM频率处于机械共振点
1. 检查联轴器、丝杠等机械连接。
2. 尝试降低Kd,或在前端对误差信号进行低通滤波(需在主机端实现)。
3. 监测电机驱动电源电压。
4. 对于LM629,可尝试改变时钟频率以微调PWM频率。
电机无法到达指定位置,存在固定偏差1. 积分增益Ki为0或太小,无法克服静摩擦力
2. 电机扭矩不足,带不动负载
3. 控制输出已饱和(达到DAC或PWM极限)
1. 适当增加Ki和积分限幅IL。
2. 检查电机选型,增大驱动电流。
3. 读取实际误差,检查PID输出是否已到极限值。
高速运行时丢步或位置漂移1. 编码器计数频率超过芯片1MHz上限
2. 主机通信过于频繁,打断了控制计算
3. 运动轨迹的加速度设定超出电机/驱动器能力
1. 计算最高转速时的编码器频率,确保低于1MHz。
2. 优化主机代码,减少在运动过程中的查询操作。
3. 降低加速度设定值,观察是否改善。
LM628 DAC输出异常,电机乱转1. 12位模式下的分时复用锁存时序错误
2. DAC参考电压或运放电路有问题
3. 偏移二进制码零点未校准
1. 用逻辑分析仪检查D0-D5A0(字节选择)、/STROBE的时序是否符合图7要求。
2. 测量DAC输出端电压是否随控制量线性变化。
3. 确认当控制量为0时,DAC输出应为中间电压(Vref/2)。

6.4 超越梯形:实现S型曲线的思路

LM628/629硬件只支持梯形速度曲线,其加速度是阶跃变化的,这会在启动和停止瞬间产生冲击(加加速度无穷大)。对于高端应用,需要更平滑的S型曲线(加速度连续变化)。

虽然芯片硬件不支持,但可以通过主机MCU进行“模拟”:

  1. 将一段长的S型曲线离散成许多段小的梯形曲线。
  2. 主机MCU实时计算下一小段的目标位置和速度。
  3. 利用LM628/629在线更新速度、位置(不能在线更新加速度)的特性,在当前段运动结束前,提前将下一小段的参数通过LTRJ命令写入影子寄存器。
  4. 在精确的时刻发送STT命令,切换到新的小段运动。 通过足够高的分段频率,可以近似实现平滑的S型曲线规划。这需要主机MCU有较强的实时计算能力和精准的定时,但展示了如何利用芯片的基础功能构建更复杂的控制系统。