文章目录
-
- [1 PI控制器传递函数](#1 PI控制器传递函数)
- [2 电流传递函数](#2 电流传递函数)
- [3 零极点对消](#3 零极点对消)
- [4 零极点对消与电流环带宽的关系](#4 零极点对消与电流环带宽的关系)
-
- 维度一:如果没有"零极点对消",带宽根本无法设计
- [维度二:实现"零极点对消", K p K_p Kp 成为掌控带宽的唯一油门](#维度二:实现“零极点对消”, K p K_p Kp 成为掌控带宽的唯一油门)
- 维度三:动态运行中,"对消失效"会如何反噬带宽?
- [5 电流环带宽的本质](#5 电流环带宽的本质)
-
- 电流环带宽本质上就是两个子系统的闭环系统截止频率。
- [f c = K p 2 π L f_c = \frac{K_p}{2\pi L} fc=2πLKp:软硬件力量的终极对撞](#f c = K p 2 π L f_c = \frac{K_p}{2\pi L} fc=2πLKp:软硬件力量的终极对撞)
- [为什么另外两个部分( K i K_i Ki 和 R R R)不见了?](#为什么另外两个部分( K i K_i Ki 和 R R R)不见了?)
1 PI控制器传递函数
🛑 第一步:明确时域(Time Domain)的物理原型在实际物理世界里,时间是连续流逝的,我们称之为时域。
PI 控制器的核心输入是误差信号 e ( t ) e(t) e(t),输出是控制信号 u ( t ) u(t) u(t)。
它由两路并联组成:
比例项(P):只对当下的误差进行放大,公式为: K p ⋅ e ( t ) K_p \cdot e(t) Kp⋅e(t)
积分项(I):对过去积攒的所有误差进行历史累加,公式为: K i ∫ 0 t e ( τ ) d τ K_i \int_{0}^{t} e(\tau) d\tau Ki∫0te(τ)dτ
把这两路加在一块,就得到了你在课本上、或者单片机底层最本质的时域数学原型: u ( t ) = K p ⋅ e ( t ) + K i ∫ 0 t e ( τ ) d τ u(t) = K_p \cdot e(t) + K_i \int_{0}^{t} e(\tau) d\tau u(t)=Kp⋅e(t)+Ki∫0te(τ)dτ📡 第二步:使用拉普拉斯变换(Laplace Transform)穿越到 s s s 域时域方程里带着一个讨厌的积分号 ∫ \int ∫,这导致输出和输入之间没办法直接做除法(也就是没法求传递函数)。
为了把积分号消掉,我们需要对公式两边同时进行拉普拉斯变换,把时间变量 t t t 映射为复频率变量 s s s。这里我们要请出拉普拉斯变换最著名的积分定理:
💡 积分定理的直观理解:在拉普拉斯的世界里,对时间求导数 d d t \frac{d}{dt} dtd 等同于乘以 s s s;因为积分是微分的逆运算,所以在时域里做积分 ∫ \int ∫,在 s s s 域里就等同于除以 s s s。即:
L { ∫ 0 t e ( τ ) d τ } = 1 s E ( s ) \mathcal{L}\left\{ \int_{0}^{t} e(\tau) d\tau \right\} = \frac{1}{s} E(s) L{∫0te(τ)dτ}=s1E(s)
我们将时域的原型公式,左边和右边整体打包进行拉普拉斯变换: L { u ( t ) } = L { K p ⋅ e ( t ) + K i ∫ 0 t e ( τ ) d τ } \mathcal{L}\{u(t)\} = \mathcal{L}\left\{ K_p \cdot e(t) + K_i \int_{0}^{t} e(\tau) d\tau \right\} L{u(t)}=L{Kp⋅e(t)+Ki∫0te(τ)dτ}变换完之后,微积分方程奇迹般地变成了普通的代数方程: U ( s ) = K p ⋅ E ( s ) + K i ⋅ 1 s E ( s ) U(s) = K_p \cdot E(s) + K_i \cdot \frac{1}{s} E(s) U(s)=Kp⋅E(s)+Ki⋅s1E(s)📐 第三步:提取公因式与代数通分到了 s s s 域后,剩下的事情就全是初中数学的代数整理了。1. 提取公因式 E ( s ) E(s) E(s)观察等式右边,两项都乘了 E ( s ) E(s) E(s),我们把它提到外面: U ( s ) = ( K p + K i s ) ⋅ E ( s ) U(s) = \left( K_p + \frac{K_i}{s} \right) \cdot E(s) U(s)=(Kp+sKi)⋅E(s)根据控制理论对传递函数(Transfer Function)的严格定义: 传递函数 G ( s ) = 输出信号 输入信号 = U ( s ) E ( s ) \text{传递函数 } G(s) = \frac{\text{输出信号}}{\text{输入信号}} = \frac{U(s)}{E(s)} 传递函数 G(s)=输入信号输出信号=E(s)U(s)两边同时除以 E ( s ) E(s) E(s),就得到了公式的前半部分: G P I ( s ) = U ( s ) E ( s ) = K p + K i s G_{PI}(s) = \frac{U(s)}{E(s)} = K_p + \frac{K_i}{s} GPI(s)=E(s)U(s)=Kp+sKi2. 分式通分为了在工程中方便求出控制器的零极点,或者为了和电机线圈的分式公式做"极点对消",工程师必须把它通分,挤进同一个分数线里。我们把前面的 K p K_p Kp 乘以 s s \frac{s}{s} ss(分子分母同乘,值不变): G P I ( s ) = K p ⋅ s s + K i s G_{PI}(s) = \frac{K_p \cdot s}{s} + \frac{K_i}{s} GPI(s)=sKp⋅s+sKi由于分母都是 s s s,分子直接相加,就得到了最终你看到的量产工程形态: G P I ( s ) = K p s + K i s G_{PI}(s) = \frac{K_p s + K_i}{s} GPI(s)=sKps+Ki
2 电流传递函数
第一步:写出时间域的物理方程电机的每相线圈,本质上都可以等效看作一个电阻 R R R 串联一个电感 L L L。当我们往这个线圈两端灌入电压 v ( t ) v(t) v(t) 时,根据电学基础理论,这个电压会被两大家族瓜分:
电阻消耗的电压: R ⋅ i ( t ) R \cdot i(t) R⋅i(t)
电感对抗电流变化产生的感应电动势: L d i ( t ) d t L \frac{di(t)}{dt} Ldtdi(t)
把它们加起来,就得到了时间域的电压方程: v ( t ) = L d i ( t ) d t + R ⋅ i ( t ) v(t) = L \frac{di(t)}{dt} + R \cdot i(t) v(t)=Ldtdi(t)+R⋅i(t)❓ 等等,反电动势 K e ⋅ ω K_e \cdot \omega Ke⋅ω 去哪了?在大厂设计电流环时,转速 ω \omega ω 相对电流来说变化极慢。算法工程师在研究"电压怎么瞬间催生电流"时,会把反电动势看作一个外部的独立系统扰动。在控制前级,我们会用"前馈补偿(Feed-forward)"把反电动势直接抵消掉。所以,电流环 PID 控制器真正面对的"肉体大底",就只有这个纯粹的 RL 串联电路。
第二步:拉普拉斯变换(穿越到 s s s 域)微积分方程(带有 d i d t \frac{di}{dt} dtdi 的方程)在数学上很难直接做除法。为了把微积分变成简单的加减乘除,我们需要对公式两边同时进行拉普拉斯变换。在控制理论中,有一个公认的变换魔术:时间域的信号 v ( t ) v(t) v(t) 变成复频域的 V ( s ) V(s) V(s)时间域的信号 i ( t ) i(t) i(t) 变成复频域的 I ( s ) I(s) I(s)核心魔法:时间域的"对时间求导"符号 d d t \frac{d}{dt} dtd,在复频域直接变成乘以 s s s(假设初始状态为0)。也就是说: d i ( t ) d t → L s ⋅ I ( s ) \frac{di(t)}{dt} \xrightarrow{\mathcal{L}} s \cdot I(s) dtdi(t)L s⋅I(s)把这个魔法套进第一步的物理方程里,方程突变成: V ( s ) = L ⋅ s ⋅ I ( s ) + R ⋅ I ( s ) V(s) = L \cdot s \cdot I(s) + R \cdot I(s) V(s)=L⋅s⋅I(s)+R⋅I(s)第三步:提取公因式,求出传递函数观察等式右边,两项都带有 I ( s ) I(s) I(s),我们把它像提公因式一样提取出来: V ( s ) = ( L s + R ) ⋅ I ( s ) V(s) = (Ls + R) \cdot I(s) V(s)=(Ls+R)⋅I(s)在控制工科学派中,传递函数(Transfer Function)的严格定义是:输出信号 / 输入信号。在这个系统里,输出是电流 I ( s ) I(s) I(s),输入是电压 V ( s ) V(s) V(s)。我们把等式两边挪一下位置,让 I ( s ) I(s) I(s) 除以 V ( s ) V(s) V(s): G m ( s ) = I ( s ) V ( s ) = 1 L s + R G_m(s) = \frac{I(s)}{V(s)} = \frac{1}{Ls + R} Gm(s)=V(s)I(s)=Ls+R1至此,公式完美闭环。
3 零极点对消
🏛️ 1. 为什么要对消?电机的"基因缺陷"我们在讲二阶系统时提到,电机的定子线圈是由电感 L L L 和 电阻 R R R 串联组成的。当我们给线圈施加电压时,线圈的传递函数是: G m ( s ) = 1 L s + R G_m(s) = \frac{1}{Ls + R} Gm(s)=Ls+R1在控制理论里,让分母为 0 的点叫做极点(Pole)。令 L s + R = 0 Ls + R = 0 Ls+R=0,可以算出电机的固有极点在: s = − R L s = -\frac{R}{L} s=−LR
这个极点有什么坏处? 它代表了线圈的电学惯性( τ = L / R \tau = L/R τ=L/R)。因为有它的存在,电流的响应会非常慢,而且它会和外层的机械系统"勾结"在一起,把系统变成一个很难调参、容易高频震荡的二阶系统。
🛠️ 2. 怎么对消?PI 控制器祭出"解药"为了降服这个极点,算法工程师祭出了普通的 PI(比例-积分)控制器。PI 控制器的数学表达式为: G P I ( s ) = K p + K i s = K p s + K i s G_{PI}(s) = K_p + \frac{K_i}{s} = \frac{K_p s + K_i}{s} GPI(s)=Kp+sKi=sKps+Ki我们稍微做个变形,把 K p K_p Kp 提出来: G P I ( s ) = K p ( s + K i K p ) s G_{PI}(s) = \frac{K_p \left( s + \frac{K_i}{K_p} \right)}{s} GPI(s)=sKp(s+KpKi)在控制理论里,让分子为 0 的点叫做零点(Zero)。可以看出,PI 控制器自带了一个零点: s = − K i K p s = -\frac{K_i}{K_p} s=−KpKi💥 3. 见证奇迹的时刻:数学上的完美抹杀现在,我们将 PI 控制器 和 电机线圈 串联在一起(开环传递函数 = 两者相乘): 开环传递函数 = G P I ( s ) ⋅ G m ( s ) = K p ( s + K i K p ) s ⋅ 1 L ( s + R L ) \text{开环传递函数} = G_{PI}(s) \cdot G_m(s) = \frac{K_p \left( s + \frac{K_i}{K_p} \right)}{s} \cdot \frac{1}{L \left( s + \frac{R}{L} \right)} 开环传递函数=GPI(s)⋅Gm(s)=sKp(s+KpKi)⋅L(s+LR)1注意看分子上的 ( s + K i K p ) \left( s + \frac{K_i}{K_p} \right) (s+KpKi) 和分母上的 ( s + R L ) \left( s + \frac{R}{L} \right) (s+LR)。这时候,大厂工程师玩了一个极其高明的操作:
我们在写单片机代码时,强行让 K p K_p Kp 和 K i K_i Ki 的比例,等于电机物理参数 L L L 和 R R R 的比例! 即: K i K p = R L ⟹ K i = R L K p \frac{K_i}{K_p} = \frac{R}{L} \implies K_i = \frac{R}{L} K_p KpKi=LR⟹Ki=LRKp当这个公式成立时,分子上的括号和分母上的括号变得一模一样!它们在数学上被直接约掉了(对消了)!消完之后的开环传递函数变成了干净得让人想哭的: G open ( s ) = K p L s G_{\text{open}}(s) = \frac{K_p}{Ls} Gopen(s)=LsKp接着推导闭环传递函数( G 1 + G \frac{G}{1+G} 1+GG): G close ( s ) = K p L s 1 + K p L s = K p L s + K p = 1 L K p s + 1 G_{\text{close}}(s) = \frac{\frac{K_p}{Ls}}{1 + \frac{K_p}{Ls}} = \frac{K_p}{Ls + K_p} = \frac{1}{\frac{L}{K_p}s + 1} Gclose(s)=1+LsKpLsKp=Ls+KpKp=KpLs+11
🎯 4. 极点对消后,给工程带来了什么神级体验?完成对消后,整个电流环发生了脱胎换骨的变化:
二阶降一阶:分母上的 s 2 s^2 s2 彻底消失了,二阶系统被生生打回原形,变成了绝对稳定、绝不超调、没有任何共振峰的纯一阶低通滤波器。
调参变成傻瓜式:原本你要调 K p K_p Kp 和 K i K_i Ki 两个参数,它们互相牵制,能把你调到抓狂。对消之后, K i K_i Ki 彻底失去了独立性(直接绑定 K i = R L K p K_i = \frac{R}{L} K_p Ki=LRKp)。
带宽一手掌控:一阶系统的分母时间常数是 τ = L K p \tau = \frac{L}{K_p} τ=KpL。它的截止频率(角带宽)就是 ω c = K p L \omega_c = \frac{K_p}{L} ωc=LKp。 (拉普拉斯算子 s = j ω s = j\omega s=jω)
你想要大厂标准的 1000 Hz 1000\text{ Hz} 1000 Hz 带宽?
第一步:直接令 ω c = 2 π × 1000 \omega_c = 2\pi \times 1000 ωc=2π×1000。
第二步:代入公式,代码里的 K p K_p Kp 直接秒杀出来: K p = 2 π ⋅ 1000 ⋅ L K_p = 2\pi \cdot 1000 \cdot L Kp=2π⋅1000⋅L。(拉普拉斯算子 s = j ω s = j\omega s=jω)
第三步: K i K_i Ki 自动配齐: K i = K p ⋅ R L K_i = K_p \cdot \frac{R}{L} Ki=Kp⋅LR。
4 零极点对消与电流环带宽的关系
维度一:如果没有"零极点对消",带宽根本无法设计
我们先来看看,如果算法不做对消,直接拿一个普通的 PI 控制器去控电机线圈,闭环传递函数会变成什么鬼样子: G close_no_cancel ( s ) = K p s + K i L s 2 + ( R + K p ) s + K i G_{\text{close\_no\_cancel}}(s) = \frac{K_p s + K_i}{Ls^2 + (R + K_p)s + K_i} Gclose_no_cancel(s)=Ls2+(R+Kp)s+KiKps+Ki分母上出现了一个大大的 s 2 s^2 s2,这是一个标准的二阶系统。
灾难发生:此时如果你想调出 1000 Hz 1000\text{ Hz} 1000 Hz 的带宽,你会发现带宽同时受到 K p K_p Kp、 K i K_i Ki、电感 L L L、电阻 R R R 四个变量的共同拉扯。你动一下 K p K_p Kp,带宽变了,阻尼比(抖动程度)也变了;你动一下 K i K_i Ki,不仅稳态误差变了,带宽和共振峰也跟着乱跳。
在这种状态下,想要通过手调参数让电流环精准达到某个目标带宽,在工程上几乎是不可能完成的任务。
维度二:实现"零极点对消", K p K_p Kp 成为掌控带宽的唯一油门
正如我们之前推导的魔法,当我们在底层 BSW 或算法中强行配置 K i = K p ⋅ R L K_i = K_p \cdot \frac{R}{L} Ki=Kp⋅LR 时,二阶分式直接退化为干净的一阶低通滤波器: G close ( s ) = 1 L K p s + 1 = ω c s + ω c G_{\text{close}}(s) = \frac{1}{\frac{L}{K_p}s + 1} = \frac{\omega_c}{s + \omega_c} Gclose(s)=KpLs+11=s+ωcωc这时候,神奇的事情发生了:积分增益 K i K_i Ki 和电阻 R R R 在带宽公式里彻底消失了!系统的角带宽(物理切断频率 ω c \omega_c ωc)变得极其纯粹,只由 K p K_p Kp 和电感 L L L 说了算: ω c = K p L ( rad/s ) \omega_c = \frac{K_p}{L} \quad (\text{rad/s}) ωc=LKp(rad/s)换算成我们挂在嘴边的频率域带宽(单位: Hz \text{Hz} Hz): f c = ω c 2 π = K p 2 π L f_c = \frac{\omega_c}{2\pi} = \frac{K_p}{2\pi L} fc=2πωc=2πLKp
💡 这给大厂调参带来了什么神级体验?因为有了零极点对消, K p K_p Kp 变成了控制带宽的"唯一单轴油门":
目标先行:总工程师下发指标,本款车规主驱电流环带宽定死为 f c = 1000 Hz f_c = 1000\text{ Hz} fc=1000 Hz。 K p K_p Kp 秒杀出来:你根本不需要去台架上瞎猜,直接用公式反推: K p = 2 π ⋅ 1000 ⋅ L K_p = 2\pi \cdot 1000 \cdot L Kp=2π⋅1000⋅L。
K i K_i Ki 自动绑定:既然 K p K_p Kp 定了,为了维持完美的零极点对消, K i K_i Ki 别无选择,必须自动对齐: K i = K p ⋅ R L K_i = K_p \cdot \frac{R}{L} Ki=Kp⋅LR(可能带有比例)。
大厂工程本质:零极点对消的真正价值,就是把"带宽"和"阻尼(稳定度)"这两件事彻底解耦。通过对消,系统永远处于最完美的无共振一阶状态(阻尼比天然最优秀),而你只需要通过调整 K p K_p Kp 这一个做功部件,就能像调音量一样,精准、线性地放大或缩小电流环的带宽。
维度三:动态运行中,"对消失效"会如何反噬带宽?
在汽车或无人机高负荷运行中,电感 L L L 和电阻 R R R 会随着电流饱和、线圈发热而剧烈漂移。一旦参数对不上,零极点对消就会退化为"不完全对消"。这时候,电流环的实际带宽就会发生剧烈偏离。
5 电流环带宽的本质
电流环带宽本质上就是两个子系统的闭环系统截止频率。
在工程上有一个更精准的黑话,叫做"软硬件合体后的闭环系统截止频率(Closed-loop Bandwidth)"。
这两个子系统分别是
1 控制软件子系统(你写的 PI 算法、 K p K_p Kp 和 K i K_i Ki,也就是控制器 Controller)。
2 物理硬件子系统(电机的线圈、电阻 R R R 和电感 L L L,也就是被控对象 Plant)。
f c = K p 2 π L f_c = \frac{K_p}{2\pi L} fc=2πLKp:软硬件力量的终极对撞
仔细看这个秒杀出来的带宽公式,分子和分母刚好各代表了一个子系统:
分子 K p K_p Kp ------ 软件子系统的"灵魂":它存在于单片机代码里。 K p K_p Kp 越大,代表软件算法对误差的放大倍数越高,给逆变器下达的纠偏指令就越凶狠。这是软件给系统的"控制动力"。
分母 L L L ------ 硬件子系统的"肉体":它存在于定子铁芯里。电感 L L L 越大,说明线圈对抗电流变化的电磁惯性越大。这是硬件阻碍系统变快的"物理阻力"。
所以,这个 f c f_c fc 本质上就是:软件子系统的指令动力( K p K_p Kp),去揉捏、对抗硬件子系统的物理阻力( L L L)之后,最终妥协出来的、整套闭环系统一秒钟内能做出的最快电磁响应频率。
为什么另外两个部分( K i K_i Ki 和 R R R)不见了?
你可能会纳闷:软件子系统明明还有个 K i K_i Ki,硬件子系统明明还有个电阻 R R R,怎么合体之后的总响应频率 f c f_c fc 里没有它们的位置?
因为它们在合体的瞬间,触发了"灵魂契约",互相把对方的副作用给洗掉了。
硬件线圈的电阻 R R R,天生会和电感 L L L 勾结在一起,产生一个让电流慢吞吞的"硬件时间常数( τ = L / R \tau = L/R τ=L/R)"。
软件算法的积分 K i K_i Ki,天生会在原点产生一个"历史累加效应",用来消除静差。
当大厂工程师强制让软件的 K i K p \frac{K_i}{K_p} KpKi 等于硬件的 R L \frac{R}{L} LR 时(极点对消),软件的积分效应刚好反向把硬件电阻带来的迟钝感给活活毒死了。它们双双退场后,剩下的干净世界里,就只剩下 K p K_p Kp(软件脑力)和 L L L(硬件体力)在赤裸裸地决定整个系统的总响应频率 f c f_c fc。