1、速度环基础:什么是速度环?它在无感FOC中扮演什么角色?
大家好,我是你们的老朋友。今天咱们正式开始聊无感启动速度环调参。第一节课,我打算先把速度环的底裤扒干净——它到底是什么?在无感FOC里干嘛用的?跟电流环又是啥关系?
很多刚入行的朋友,一上来就盯着PI参数调,调了半天电机要么抖得像筛子,要么转起来软绵绵。其实啊,根子往往不在参数上,而是你对速度环的理解还停留在“调个Kp、Ki就行”的层面。咱们先把地基打牢,后面调参才能有的放矢。
1.1 速度环的本质:一个“闭环纠偏”的指挥官
说白了,速度环就是一个闭环控制器。它的任务很简单:让电机的实际转速,死死咬住你给的目标转速。
你想想看,你给电机发了个指令:“转3000转!” 但电机可能因为负载、摩擦力、电压波动等原因,实际只转了2800转。速度环这时候就跳出来了:它算出“目标3000 - 实际2800 = 200转的误差”,然后根据这个误差,输出一个调整量,去推电机一把,让它加速到3000转。
这个过程是持续不断的。速度环以固定的频率(比如1kHz)反复执行:采样实际速度 → 计算误差 → 输出调整量。这就是一个标准的闭环负反馈系统。
核心公式(你心里有数就行):
速度环输出 = Kp × 速度误差 + Ki × ∫速度误差 dt
Kp决定“反应快不快”,Ki决定“最终准不准”。
我在项目里见过有人把Kp调得巨大,结果电机一启动就“嗡嗡”响,像得了帕金森。这就是典型的比例过大导致的震荡。嗯,这里要注意,速度环不是越快越好,稳定才是第一位的。
1.2 速度环在无感FOC中的角色:承上启下的“腰部力量”
在无感FOC(无传感器磁场定向控制)的架构里,速度环的位置非常特殊。它夹在位置环(如果有)和电流环之间,是整个控制链路的中枢。
你可以把FOC控制想象成一个三层指挥链:
- 顶层(位置环): 告诉你要去哪。比如机器人关节要转到30度。
- 中层(速度环): 决定以多快的速度去。比如“以3000转/分钟的速度转过去”。
- 底层(电流环): 负责执行,提供多大的力(扭矩)来实现这个速度。
在无感FOC中,速度环的角色尤其关键。因为没有位置传感器(比如编码器),我们只能通过观测器(比如滑模观测器、龙伯格观测器)来估算转子的位置和速度。这个估算出来的速度,就是速度环的“实际速度”反馈。
所以,速度环在无感FOC里,不仅要对抗负载扰动,还要忍受速度估算不准带来的噪声。我刚开始做无感FOC时,就吃过这个亏。速度估算值里有一堆高频噪声,速度环一闭环,电机就跟着高频抖动,电流波形惨不忍睹。后来我不得不在速度环前面加了个低通滤波器,才把问题压下去。
避坑指南:
我曾经在一个风机项目里,为了追求极致的动态响应,把速度环带宽设得很高。结果电机在低速时,因为反电动势太小,速度估算值波动很大,速度环直接“抽风”,导致电机反转。后来我学乖了:速度环的带宽,一定要低于速度估算的可靠带宽。这是无感FOC的铁律。
1.3 速度环与电流环的关系:老板与员工
这个问题我问过很多面试者,十个有八个答不清楚。其实关系很简单:速度环是老板,电流环是员工。老板(速度环)只下目标(给电流环一个电流指令),不关心员工怎么干。员工(电流环)负责执行,确保实际电流死死跟踪老板给的指令。
咱们用一张图来直观感受一下这个层级关系:
从这张图你能看到:
- 速度环的输出,就是电流环的输入(目标)。速度环说“我要100A的扭矩电流”,电流环就拼命去实现这100A。
- 电流环的响应速度,必须远快于速度环。一般电流环的带宽是速度环的5~10倍。如果电流环反应慢,速度环就会觉得“我下了指令,你怎么不动?”然后继续加大输出,导致超调。
- 电流环是速度环的“内环”。内环不稳,外环必乱。我见过有人速度环怎么调都调不好,最后发现是电流环的PI参数没整定好,电流响应有滞后。先把电流环调利索了,速度环的问题往往迎刃而解。
我的调参习惯:
我个人习惯是先调电流环,再调速度环。电流环调好了,速度环的“执行力”就有了保障。调速度环时,我会先给一个很小的Kp,Ki设为0,然后慢慢加大Kp直到电机出现轻微震荡,再退回70%左右。最后加一点Ki消除静差。这个“先P后I”的方法,在大部分项目里都管用。
1.4 速度环的输入与输出:到底在交换什么?
咱们再细化一下速度环的接口。搞清楚它吃什么、拉什么,你调参时心里就有谱了。
| 信号方向 | 信号名称 | 说明 | 单位 |
|---|---|---|---|
| 输入 | 目标转速 (ω*) | 用户或上位机给定的期望转速 | RPM 或 rad/s |
| 输入 | 实际转速 (ω̂) | 由观测器估算出的当前转速 | RPM 或 rad/s |
| 输出 | 电流指令 (iq*) | 给电流环的q轴电流目标值,代表扭矩需求 | A |
你看,速度环的输入是两个转速(目标和实际),输出是一个电流值。这个电流值直接决定了电机输出多大的扭矩。所以,速度环本质上是一个“转速-扭矩”转换器。
在实际代码里,速度环的执行频率通常比电流环低。比如电流环跑16kHz,速度环可能只跑1kHz~4kHz。为什么?因为机械时间常数比电气时间常数大得多,转速变化没那么快,没必要每个电流环周期都算一次速度环。
// 伪代码示例:速度环与电流环的调度关系
// 假设电流环中断频率 16kHz,速度环中断频率 2kHz
void CurrentLoop_ISR() // 每 62.5us 执行一次
{
// 1. 采样相电流
// 2. Clark/Park 变换
// 3. 电流环 PI 控制 (id, iq)
// 4. 反Park变换
// 5. SVPWM 输出
}
void SpeedLoop_ISR() // 每 500us 执行一次 (每8个电流环周期执行一次)
{
// 1. 获取估算速度 ω̂ (来自观测器)
// 2. 计算速度误差 = ω* - ω̂
// 3. 速度环 PI 计算
// 4. 输出 iq* 给电流环
}
这个调度关系,你在调参时一定要心里有数。速度环的执行频率,决定了它能处理多快的转速变化。频率太低,动态响应就慢;频率太高,CPU负担重,而且可能被速度估算噪声淹没。