4、电机控制基础:FOC矢量控制原理、电流环/速度环/位置环三环PID调试、PWM死区补偿

电机控制,说白了就是机器人的“肌肉”。没有它,运动学算得再准,机器人也动不起来。这一章我们聚焦FOC(磁场定向控制),这是目前做机器人关节最主流的方案。我最早接触FOC是在一个六轴协作臂项目上,当时被三环PID调得头皮发麻,但调通之后那种丝滑的感觉,确实让人上瘾。

4.1 FOC矢量控制原理

FOC的核心思想,就是把三相交流电机模拟成直流电机来控制。你想想看,直流电机控制多简单——调电压就是调转速。但三相电机呢?三个绕组,电流相位还差120°,直接控制很麻烦。

FOC通过两次坐标变换(Clark变换和Park变换),把静止的三相电流Ia、Ib、Ic,转换成旋转坐标系下的Id(励磁分量)和Iq(转矩分量)。这样一来,控制Iq就能直接控制力矩,控制Id就能控制磁场强弱。

关键公式(Park逆变换):

Vα = Vd * cos(θ) - Vq * sin(θ)
Vβ = Vd * sin(θ) + Vq * cos(θ)

其中θ是转子电角度,由编码器或观测器提供。

我在项目中遇到过一个问题:编码器安装有偏差,导致θ不准,电机低速时抖得像筛子。后来加了角度校准流程才解决。所以,FOC的第一步,不是调PID,而是确保角度反馈准确。

个人习惯:每次上电先做一次编码器零位校准,记录偏移量,在代码里补偿。这能省掉后面80%的调试时间。

4.2 三环PID调试:电流环、速度环、位置环

FOC控制器的标准结构是三个闭环嵌套:最内层是电流环,中间是速度环,最外层是位置环。调试顺序也有讲究——从内往外调。

4.2.1 电流环(最内层)

电流环的响应速度最快,通常带宽设置在1kHz~5kHz。它的任务就是让实际Iq和Id快速跟踪给定值。

  • 比例系数Kp:先给一个较小的值,比如0.1,然后逐渐增大,直到电流响应出现轻微振荡,再回调到70%。
  • 积分系数Ki:一般取Kp的1/10到1/20。太大容易积分饱和,太小稳态误差消不掉。

我曾经踩过的坑:电流环Ki调得太大,电机堵转时积分项疯狂累积,一松开直接飞车。后来加了积分限幅和抗饱和处理才稳住。

4.2.2 速度环(中间层)

速度环的带宽通常是电流环的1/5到1/10,比如200Hz~500Hz。它的输入是目标转速和实际转速的差值,输出作为电流环的Iq给定。

参数 作用 调试经验
Kp(速度环) 决定响应速度 先调Kp到电机不尖叫、不抖动
Ki(速度环) 消除稳态误差 低速时Ki适当加大,高速时减小
前馈系数 提升动态响应 对惯量大的关节很有用

我记得有一次调一个重载关节,速度环Kp怎么加都追不上目标。后来加了速度前馈,把目标加速度直接补偿到电流给定上,效果立竿见影。

4.2.3 位置环(最外层)

位置环的带宽最低,一般10Hz~50Hz。它的输出是速度环的目标值。位置环调试最怕超调——机器人到位后晃两下,这在工业现场是不能接受的。

  • 纯P控制:很多场合位置环只用比例,不加积分。加积分容易产生位置过冲。
  • 加微分:如果系统阻尼不够,可以加一点微分项(Kd),抑制振荡。

我的调试口诀:电流环求快,速度环求稳,位置环求准。三个环的带宽至少拉开3~5倍,否则会互相打架。

4.3 PWM死区补偿

死区,是逆变器上下桥臂同时关断的那段短暂时间。为了防止直通短路,硬件必须加死区。但死区会带来电流畸变、转矩脉动,尤其在低速时特别明显。

死区补偿的原理很简单:根据电流方向,在PWM占空比上叠加一个修正量。电流流出相,死区导致实际电压偏低,需要补偿;电流流入相,死区导致实际电压偏高,需要削减。

补偿公式(以A相为例):

if (Ia > 0) {
    DutyA_comp = DutyA + DeadTime / PWM_Period;
} else {
    DutyA_comp = DutyA - DeadTime / PWM_Period;
}

但这里有个坑:电流过零点附近,方向判断不准,补偿反而会引入更大的畸变。我曾在零点附近做过滞环处理——电流绝对值小于某个阈值时,不补偿。

死区时间 影响 补偿效果
0.5μs 轻微电流畸变 补偿后THD降低约30%
1.0μs 明显转矩脉动 补偿后低速平稳性提升明显
2.0μs 电机发热增加 必须补偿,否则无法低速运行

注意:死区补偿不是万能的。如果死区时间超过PWM周期的5%,建议先优化硬件设计,而不是全靠软件补。

4.4 FOC控制整体流程

下面这张图,是我做FOC项目时自己画的流程图,每次调试都会对着它走一遍。你把它理解成FOC的“导航地图”。

FOC矢量控制整体流程图 电流采样 (Ia, Ib, Ic) Clark变换 (Iα, Iβ) Park变换 (Id, Iq) 三环PID控制 位置环 → 速度环 → 电流环 Park逆变换 (Vα, Vβ) SVPWM + 死区补偿 调试顺序 ① 电流环(最内层) ② 速度环(中间层) ③ 位置环(最外层) 关键反馈 电角度 θ(编码器) 转速 ω(速度观测器)

整个流程走下来,你会发现FOC其实不复杂——就是“采样→变换→控制→逆变换→调制”的循环。但每个环节都有细节,尤其是三环PID的带宽匹配和死区补偿的零点处理,直接决定了机器人关节的力控精度和低速平稳性。

最后说一句:FOC调试没有捷径,但有个好习惯——每次只改一个参数,记录波形变化。我习惯用DAC输出Iq和速度的实时值,用示波器看响应,比看串口数据直观得多。