电机控制:电流检测、电流控制

背景

电流检测是矢量控制的基础,一般通过电流传感器实现. 常用电流传感器:霍尔电流传感器,分流器,电流采样电阻等. 不同传感器区别:性能、价格、安装方式等. 根据实际需求选择.

霍尔电流传感器:利用霍尔效应来测量电流的装置,是一种非接触式测量电流方式.

分流器:利用欧姆定律,测量直流电流的低阻值精密电阻. 对比电流采样电阻,分流器通常指大电流、独立封装的元件,检测电流几十A~上万A,阻值通常更小,微欧到毫欧级.

电流采样电阻:同分流器,都是利用欧姆定律,专门用来测量电流的精密低阻值电阻. 封装通常贴片、插件,体积小,检测电流mA~几十A,阻值毫欧级到几欧姆.

大多小功率电机控制,都会用电流采样电阻检测电流,其电阻精度、功率比普通电阻的更高,一般串联在驱动电流近地端. 根据采样电阻数量,可分为3种方案:三电阻、双电阻、单电阻采样.

实际电流采样,还有哪些问题需要解决?

  1. 确定采样时刻:要保证采样时刻的电流信息正确.

  2. 标幺化:采样后,软件要对电流采样值进一步处理,因为工作电流范围变化大,对于定点芯片,要兼顾大范围、精度,用标幺化可能是最好办法,同时也能提升软件通用性.

目前电流控制普遍使用传统PI控制器,结构简单、参数调试方便. 简单应用,基础PI控制器即可;复杂应用,可建立较精确的电流环模型,针对性确定增益Kp,还能增加解耦、抗卷饱、扰动观测、谐波注入等.

电流采样

采样点选择

电流采样方式取决于硬件电路方案:

1)对于霍尔电流传感器,理论上可在PWM周期任意时刻采样;
2)对于电流采样电阻,因为某些开关状态下,电机相电流并没有对应的电流采样电阻,所以不能采样.

三相下桥电流采样电阻:

img

如果某一相下桥臂实际导通时间最短,那么可能会导致采样偏差最大.

这是因为:

1)ADC 采样保持电容来不及充到稳定值;
2)开关噪声尚未衰减完;
3) 死区和振铃占用窗口.

振铃:信号在跳变(开关)后,围绕其最终稳定值来回振荡、逐渐衰减的过程.

电流计算、标幺化

采样电流偏置:FOC控制中,采样电流绝对会有正有负,而我们的AD模块并不能直接识别电流正负,因此需要考虑偏置,测出负电压. 硬件工程师引入偏置,在电流采样电路(通常是运放电路)中,人为地加入一个 \(v_{ref} /2\) 的直流偏置电压.

例,对于3V3 MCU,12bit ADC,

  • 0电流:运放输出 \(v_{ref} /2\) (如 1.65V ),AD读取到中间值 2048;
  • 正电流:运放输出在 1.65V以上值,AD读取到大于2048值;
  • 负电流:运放输出在 1.65V以下值,AD读取到小于2048值.

电流方向规定(软件):电流以流入电机绕组为正,流出电机绕组为负.

如果令MCU AD采样模块参考电压 \(v_{ref}\),

当电流为0时,AD口的中点电压 \(v_{ref}/2\)(取决于具体偏置电路);
当电流不为0时,AD口电压:

\[v_x=\frac{1}{2}v_{ref} + k\cdot i_x R_{shunt} \tag{1} \]

其中,k 为电流采样调理电路的放大倍数;\(R_{shunt}\) 电流采样电阻阻值;\(i_x\) 流过电流采样电阻的电流(下标x表示对应电流和电压位置);

注意:硬件决定偏置,后面软件需要去掉偏置,即 真实电流 = (AD采样值 - 偏置对应的AD值) * 比例系数;直流偏置是硬件导致的,软件不能忽视.

因为AD口电压最大值为 \(v_{ref}\),所以采样电流最大值 \(i_{max}\):

\[v_{x,max}=v_{ref}=\frac{1}{2}v_{ref} + k\cdot i_{x,max} R_{shunt} \\ \implies i_{x,max}=\frac{v_{ref}}{2kR_{shunt}} \tag{2} \]

假设AD采样模块12bit,那么电流 \(i_x\) 通过时对应AD采样值 \(AD\_i_x\):

\[AD\_i_x = \frac{v_x}{v_{ref}}\times 2^{12}=(\frac{1}{2} + \frac{ki_xR_{shunt}}{v_{ref}}) \times 2^{12} \tag{3} \]

(1)(2)代入(3),

\[AD\_i_x = (\frac{1}{2} + \frac{1}{2}\frac{i_x}{i_{x,max}})\times 2^{12} \tag{4} \]

去掉直流偏置,得电流 \(i_x\) 真正对应的AD采样值 \(AD\_i\_x\_1\):

\[AD\_i\_x\_1 = (\frac{1}{2} + \frac{1}{2}\frac{i_x}{i_{x,max}} - \frac{1}{2})\times 2^{12} = \frac{i_x}{i_{x,max}}\times 2^{11} \tag{5} \]

如果MCU采用左对齐存储AD采样值,即(5)结果左移4bit,

\[AD\_i\_x\_15 = \frac{i_x}{i_{x,max}}\times 2^{11} << 4 = \frac{i_x}{i_{x,max}}\times 2^{15} \tag{6} \]

此时,AD采样值 \(AD\_i\_x\_15\) 是以最大电流 \(i_{max}\) 为基值的标幺化数据,且以Q15格式表示.

Q15格式:16bit, 1 位符号 + 15 位小数. 用 16 bit(不用FPU),表示 [-1.0, +1.0] 之间的小数. 有符号16bit整数范围 [-32768, +32767],+32767 代表 +1.0,-32768 代表 -1.0,0 代表 0.0. 也就是说,小数放大 32768 倍得到Q15格式存放的整数.

归一化:Q15格式限制小数在-1.0 ~ +1.0,而实际物理量可能远超这个范围,因此需要归一化处理,将其范围进行限制. 具体操作为:

\[归一化值 = \frac{实际物理量}{基准值(最大值)} \]

电流PI控制器设计

基础设计

参数设计、离散化

三相PMSM电机数学模型参见MBD笔记:三相PMSM数学模型 同步旋转坐标系下的数学建模. 为方便讨论,我们简化模型.

简化模型:假设设耦合项和反电势项已经被精确地补偿,那么电机在 dq 坐标系中的电气模型可以简化为一个一阶惯性环节.

简化后的模型,在同步电机dq轴模型基础上,去掉了2个复杂干扰项:

  1. 耦合项:d轴、q轴磁场相互影响产生的电压;
  2. 反电动势项:电机旋转时切割磁感线产生的电压(与转速相关).

PMSM电机简化模型传递函数:

\[G(s)=\frac{I(s)}{U(s)} = \frac{1}{L_s s + R_s} = \frac{\frac{1}{L_s}}{s+\frac{R_s}{L_s}} \tag{7} \]

推导:

电机定子绕组本质由电阻 \(R_s\)(电机相电阻),电感 \(L_s\)(电机相电感)组成的线圈. 根据KVL定律,加在绕组上的电压u = 电阻上的压降 \(i\times R_s\) + 电感压降 \(L_s\times \frac{di}{dt}\),即:

\[u = R_s i + L_s \frac{di}{dt} \]

u作为输入,i作为输出,KVL方程变形成标准一阶微分方程:

\[L_s\frac{di}{dt} + R_si = u \\ \implies \frac{L_s}{R_s}\frac{di}{dt} + i(t) = \frac{1}{R_s}u(t) \]

假设初始条件为0(\(i(0)=0,u(0)=0\)),对方程进行拉氏变换:

\[\frac{L_s}{R_s}\mathcal{L}[\frac{di}{dt}] + I(s) = \frac{1}{R_s}U(s) \]

由拉氏变换微分性质,\(\mathcal{L}[\frac{di}{dt}] = sI(s)-i(0) = sI(s)\)

所以,

\[\frac{L_s}{R_s}sI(s) + I(s) = \frac{1}{R_s}U(s) \\ (\frac{L_s}{R_s}s + 1)I(s) = \frac{1}{R_s}U(s) \\ \therefore G(s)=\frac{I(s)}{U(s)} = \frac{1}{L_s s + R_s} = \frac{\frac{1}{L_s}}{s+\frac{R_s}{L_s}} \]

并联式PI控制器传递函数:

\[C(s)=k_p + \frac{k_i}{s} = \frac{k_p(s+k_i/k_p)}{s} \tag{8} \]

推导:

PI控制器在时域上总输出:\(u(t)=k_p e(t) + k_i\int_{0}^t e(\tau)d\tau\),其中,\(k_p,k_i\) 为比例系数,积分系数,\(e(t)\) 当前误差.

两边进行拉氏变换:

\[U(s) = k_p E(s) + k_i\mathcal{L}\left[ \int_0^t e(t) dt \right] \]

由拉氏变换的积分性质和零初始条件,\(\mathcal{L}\left[ \int f(t) dt \right] = \frac{1}{s}F(s) + \frac{1}{s} f^{(-1)}(0), f^{(-1)}(0)=0\),有,

\[\mathcal{L}\left[ \int e(t) dt \right] = \frac{1}{s}E(s) + \frac{1}{s} e^{(-1)}(0) = \frac{1}{s}E(s) \]

所以,

\[U(s) = k_p E(s) + k_i\left[ \frac{1}{s}E(s) \right] = \left(k_p + \frac{k_i}{s} \right) E(s) \]

传递函数为

\[C(s) = \frac{U(s)}{E(s)} = k_p + \frac{k_i}{s} \]

其中,\(U(s)\) 输出,\(E(s)\) 输入.

证毕.

问题:并联式PI控制器和串联式PI控制器什么区别?

答:PI 控制器有两种常见结构:串联式(Series) 和 并联式(Parallel). 主要用来区分 PI 控制器在硬件电路或软件算法中的不同结构形式.

  • “并联式”:比例(P)和积分(I)两个环节是独立并行计算,最后再相加;

时域表达式:\(u(t)=k_p\cdot e(t)+k_i\int_0^t e(\tau)d\tau\)
传递函数(复频域,s域):\(C(s)=k_p + \frac{k_i}{s}\)

  • “串联式”:P 和 I 是“父子”关系,一个环节的输出是另一个环节的输入

时域表达式:\(u(t)=K_c\left(e(t) +\frac{1}{T_i}\int_0^t e(\tau)d\tau \right)\),其中,\(K_c\) 整体增益,\(T_i\) 积分时间常数
传递函数:\(C(s)=K_c(1+\frac{1}{T_i s})=K_c\frac{T_i s + 1}{T_i s}\)


由(8),并联式PI传递函数的零点 \(-k_i/k_p\);由(7),电机模型的极点 \(-\frac{R_s}{L_s}\)

电机电流环控制中,电流环PI控制器和电机模型是串联(相乘)关系,系统控制框图如下:

目标电流 I_ref 
    │
    ▼
[ PI控制器 C(s) ] ──► 输出电压 U(s) ──► [ 电机模型 G(s) ] ──► 实际电流 I(s)
    ▲                                                          │
    └──────────────────── 反馈(负反馈) ────────────────────────┘

开环传递函数:\(C(s)\times G(s) = \dfrac{k_p(s+k_i/k_p)}{s}\times \dfrac{\frac{1}{L_s}}{s+\frac{R_s}{L_s}} = \dfrac{k_p/L_s(s+k_i/k_p)}{s(s+R_s/L_s)}\)

为了将系统里 “不好” 的极点给掩盖掉,改变闭环动态,改善响应,我们进行零极点对消:

\[k_i/k_p = R_s/L_s \Rightarrow k_i =\frac{R_s}{L_s} k_p \tag{9} \]

对消后,系统闭环传递函数:

\[M(s)=\frac{G(s)C(s)}{1+G(s)C(s)} = \frac{\frac{k_p}{sL_s}}{1+\frac{k_p}{sL_s}}=\frac{1}{sL_s/k_p+1} \tag{10} \]

这是典型的一阶惯性系统(参见自动控制:频率域方法).

电感参数固定时,系统性能取决于比例增益 \(k_p\). 系统的上升时间(惯性系统阶跃响应上升到95%终值所用时间) \(t_r\) :

\[t_r = 3\times \frac{L_s}{k_p} \Rightarrow k_p = \frac{3L_s}{t_r} \tag{11} \]

证明:

由标准一阶惯性系统传递函数 \(G(s) = \dfrac{K}{Ts+1}\),其中,\(T\) 为系统的时间常数
再对比(10)可知,时间常数 \(T=L_s/k_p\).

当给该一阶系统输入单位阶跃信号时,输出响应(时域):

\[y(t) = 1 - e^{-t/T} \]

其中,假设稳态终值为1(即100%)

根据 \(y(t_r)=1 - e^{-t/T}=0.95\) 求出 \(t_r = -T\ln 0.05 ≈ −2.9957\),为方便计算 取整数 3.
那么,\(t_r = 3T\) 时,代入 时间常数 \(T=L_s/k_p\),有\(t_r = \dfrac{3L_s}{k_p}\)

证毕.

由(11) 可知,由上升时间 \(t_r\) 可确定比例增益 \(k_p\). (11)代入(9),可确定积分增益 \(k_i\):

\[\begin{cases} k_i = \dfrac{3R_s}{t_r}\\ k_p = \dfrac{3L_s}{t_r} \end{cases} \tag{12} \]

实际应用中,上升时间 \(t_r\) 的设定不是任意的,在一些激进设计方案中,\(t_r\) 为4 ~ 5个采样周期 \(T_s\). 令,

\[\begin{aligned} k_i &= \frac{3R_s}{t_r} \\ k_p &= \frac{3L_s}{t_r} \end{aligned} \quad \xrightarrow{t_r=5T_s} \quad \begin{aligned} k_i &= \frac{3R_s}{5T_s} \\ k_p &= \frac{3L_s}{5T_s} \end{aligned} \tag{13} \]

此时,可求得系统带宽约为采样频率的 \(1/10\),即,

\[t_r = 3\times T = 3\times \frac{1}{2\pi f_c} = 5T_s\\ \implies f_c = \frac{3}{10\pi}\frac{1}{T_s} ≈ 0.0955f_s ≈ \frac{1}{10} f_s\tag{14} \]

其中,\(f_c\) 系统截止频率,\(f_s\) 系统采样频率,\(T_s\) 采样周期.

问题:为什么一阶惯性系统在时域的单位阶跃响应是 \(y(t)=1-e^{-t/T}\)?

答:参见自动控制:频率域方法 惯性环节(一阶系统),系统微分方程:

\[T \dot{y}(t) + y(t) = u(t) \]

其中,\(T\) 时间常数,\(u(t)\) 输入信号,\(y(t)\) 输出信号(响应信号),\(\dot{y}(t)=dy(t)/dt\) 是 \(y(t)\) 的一阶导数.

对于单位阶跃响应,\(u(t)=1\)

所以,

\[T\frac{dy(t)}{dt}+y(t)=1\\ \therefore \frac{dy(t)}{dt} = \frac{1-y(t)}{T}\\ \frac{dy}{1-y} = \frac{dt}{T}\\ \int \frac{1}{1-y} dy = \int \frac{1}{T}dt\\ -\ln (1-y) = \frac{t}{T} + C, C为常数\\ 1-y=e^{-(t/T+C)} \]

令常数 \(A=e^{-C}\),有

\[1-y=Ae^{-t/T}\\ \therefore y(t) = 1-Ae^{-t/T} \]

初始条件 \(y(0)=0=1-A\cdot 1 \implies A=1\)

所以, \(y(t)=1-e^{-t/T}\)

系统的截止频率(带宽)\(f_c\): 指系统能够有效处理的频率范围. 对于一阶惯性系统,幅频特性(增益)下降到 -3dB 时的频率,即幅值降到原来的 \(1/\sqrt 2 ≈ 0.707\) 对应频率.

一阶惯性系统的时间常数 T 与截止频率的关系?

对于一阶惯性系统 \(G(s)=\frac{1}{\tau s + 1}\),时间常数 \(\tau\) (与前面 \(T\) 一致)

系统对数幅频特性:\(20\lg A(\omega) = 20\lg |G(j\omega)| = -3dB\)

所以,幅值:\(|G(j\omega)| = 10^{-0.15} ≈ 0.707 ≈ \frac{1}{\sqrt 2}\)

代入 \(s = j\omega = j2\pi f\),

又由
1)分式的模等于分子分母分别求模再相除\(|\frac{Z_1}{Z_2}| = \frac{|Z_1|}{|Z_2|}\);
2)复数 \(a+jb\) 的模为 \(\sqrt{a^2 + b^2}\)

可得,

\[|G(j2\pi f)| = \left | \frac{1}{j2\pi f\tau + 1} \right | = \frac{|1|}{\sqrt{(2\pi f\tau)^2 + 1}} = \frac{1}{\sqrt{(2\pi f\tau)^2 + 1}} ≈ \frac{1}{\sqrt 2} \]

所以,\(2\pi f_c \tau = 1 \implies T = \tau = \frac{1}{2\pi f_c}\)

这说明:一阶惯性系统的时间常数 \(\tau\) 越小,系统惯性越小,带宽 \(f_c\) 就越大,系统响应就越快.

系统惯性:系统在受到输入信号(比如目标值突然改变)后,其输出不能立刻跟上,而是表现出一种“迟滞”、“抗拒改变”和“慢慢过渡”的特性.

问题:既然一阶系统的时间常数 T 是个固定不变的物理属性,为什么要去频率域找截止频率,再求 T?

答:如果是Simulink上的时域仿真系统,可以直接设置 T;但如果是在实验室调试真实电机,通常手里只有频率响应分析仪,测出来的就是截止频率(带宽),很难直接测出T,然后根据 \(T=\frac{1}{2\pi f_c}\) 求出T.


将PI控制器离散化,可得离散传递函数:

\[C(z) = \frac{Y(z)}{X(z)} = k_p + \frac{T_s k_i}{1-z^{-1}} \tag{15} \]

其中,z 定义为 \(z=e^{sT}\),即延迟运算;\(Y(z),X(z)\) 分别为系统输出和输入.

证明:

时域中,标准PI控制器的 输出 \(y(t)\) 与输入 \(x(t)\) 关系:

\[y(t) = k_p x(t) + k_i \int_0^t x(\tau)d\tau \]

其中,\(k_p\) 比例增益,\(k_i\) 积分增益.

拉氏变换,可得连续域传递函数(参见(8)):

\[C(s)=\frac{Y(s)}{X(s)}=k_p+\frac{k_i}{s} \]

根据采样系统理论,可知拉普拉斯算子s和z算子替换关系,可将连续信号转变成离散的采样信号(s域 -> z域):

\[s=\dfrac{1-z^{-1}}{T_s} \]

其中,\(T_s = \frac{1}{f_s}\) 采样周期,\(f_s\) 采样频率.

于是,我们对 连续域的传递函数 \(C(s)\) 式子两边离散化:

\[C(z)=\frac{Y(z)}{X(z)}=k_p+\frac{k_iT_s}{1-z^{-1}} \]

证毕.

注意:

1)\(k_p+\frac{k_i}{s}\) 描述的是 s 域(连续)行为,记作 \(C(s)\);
\(k_p+\frac{k_iT_s}{1-z^{-1}}\) 描述的是 z域(离散)行为,记作 \(C(z)\).

算子从 s 换成了 \(z^{-1}\),函数记号自然从 \(C(s)\) 变成 \(C(z)\).

2)\(z=e^{sT}\) 是算子s和z精确关系,\(s=\dfrac{1-z^{-1}}{T_s}\) 是一阶近似.


由(15),

\[Y(z)(1-z^{-1}) = k_p(1-z^{-1})X(z) + T_sk_i X(z)\\ Y(z)-z^{-1}Y(z) = k_pX(z) - k_pz^{-1}X(z) + T_sk_iX(z) \]

已知z变换对 \(x_k\longleftrightarrow X(z), y_k\longleftrightarrow Y(z)\)

由采样系统理论 延迟定理,可知,

\[z^{-1}X(z)\longleftrightarrow x_{k-1}, z^{-1}Y(z)\longleftrightarrow y_{k-1} \]

逐项做z反变换,可得差分方程形式的离散PI表达式:

\[y_k - y_{k-1} = k_p x_k - k_px_{k-1} + T_sk_i x_k \\ \therefore y_k = \underbrace{k_p x_k}_{\text{当前比例项}} + \underbrace{(y_{k-1} - k_p x_{k-1})}_{\text{上一次的“积分累积量”}} + \underbrace{T_s k_i x_k}_{\text{本次积分增量}} \tag{16} \]

其中,\(x_k\) 第k个采样周期(当前采样周期)的输入值,\(y_k\) 第k个采样周期的输出值,\(y_{k-1}\) 第k-1个(上一个)采样周期的输出值.

这与PI控制器的连续域表达式 \(y(t)=k_px(t) + \int_0^t xd\tau\) 完全对应,其中积分 \(\int\) 被离散成了 “历史积分 + 矩形增量”.

\(T_sk_i,T_s\) 一起可构成新的积分增益 \(k_i'\):

\[k_i' = T_sk_i = \frac{3R_s}{t_r} T_s = \frac{3R_s}{5T_s}T_s = \frac{3R_s}{5} \tag{17} \]

新离散积分增益 \(k_i'\) 与采样周期 \(T_s\) 无关.

注意:

  1. 开环系统和闭环系统都是一阶滞后环节,但开环系统的时间常数取决于电机参数(固定),闭环系统的时间常数由PI控制器参数决定(可调节);

一阶滞后环节 即一阶惯性系统,由(7),开环传递函数:\(G(s)=\frac{I(s)}{U(s)} = \frac{1}{L_s s + R_s}\),稳态增益 \(K=1/R_s\),时间常数 \(T=L_s/R_s\).

由(10),闭环系统的传递函数:\(M(s)=\frac{G(s)C(s)}{1+G(s)C(s)} = \frac{1}{sL_s/k_p+1}\),增益 \(K=1\),时间常数 \(T=L_s/k_p\)

  1. 开环增益不为 1,输出不能精确控制,没有实际意义;闭环系统则可以保证输出跟踪输入

e.g. 开环调速时:给定 u ,输出 ω=K u(稳态). 问题:

1)\(K\neq 1\) 且不确定,K随电机参数、温度、负载变化而漂移;
2)无抗扰能力:负载突然加大(阻转矩增加),转速会掉下去,开环系统毫无办法;
3)无积分作用消除静差:稳态误差永远存在.

  1. 配置PI控制器参数时,时间常数配得太小没有意义

系统除了惯性滞后,还有纯延迟(死区时间)\(\tau_d\):PWM 更新、电流环响应、采样计算、滤波等. 精确模型:\(G(s)=\dfrac{K}{Ts+1}e^{-\tau_d s}\),而我们前面讨论忽略了 \(e^{-\tau_d s}\) 项. 只有延迟 \(\tau_d \ll T\) 时,响应曲线的"慢"由惯性主导,才能忽略该项.

电流环PI标幺化

电流环PI 输入为电流偏差,输出为控制电压,所以传递函数:

\[\frac{U}{\Delta I} = k_p + \frac{k_i}{s} \tag{18} \]

其中,\(\Delta I\) 电流偏差,\(U\) 电流环输出电压.

设电压基值 \(U_b\),电流基值 \(I_b\)(b表示base). (18)电压、电流转换为标幺值:

\[\frac{U/U_b\cdot U_b}{\Delta I/I_b\cdot I_b}=\frac{U/U_b}{\Delta I/I_b}\cdot \frac{U_b}{I_b} = \frac{U^*}{\Delta I^*}\cdot \frac{U_b}{I_b} = k_p + \frac{k_i}{s} \tag{19} \]

其中,\(*\) 表示标幺化的量.

所以,

\[\frac{U^*}{\Delta I^*} = \frac{I_b}{U_b}(k_p + \frac{k_i}{s}) = \frac{I_b}{U_b}k_p + \frac{I_b}{U_b}k_i \frac{1}{s} \tag{20} \]

标幺化后PI增益:

\[\begin{cases} k_p^* = \frac{I_b}{U_b}k_p \\ k_i^* = \frac{I_b}{U_b}k_i \\ \end{cases} \tag{21} \]

电压基值,电流基值是人为选定的,通常取电机额度电压 \(U_N\),电流额定电压 \(I_N\):\(U_b=U_N,I_b=I_N\).

(13)代入(21),

\[\begin{cases} k_p^* = \frac{I_b}{U_b}k_p = \frac{I_b}{U_b}\frac{3L_s}{5T_s} \\ k_i^* = \frac{I_b}{U_b}k_i =\frac{I_b}{U_b}\frac{3R_s}{5T_s} \\ \end{cases} \tag{22} \]

其中,定子电阻的标幺值 \(R_s^* = \frac{R_s}{Z_b} = \frac{R_s}{U_b/I_b} = R_s\frac{I_b}{U_b}\).

我们将(16)所示方程的输入、输出,分别替换为电流环PI控制器的电压 \(u_k^*\),电流 \(i_k^*\) (标幺化后):

\[u_k^* = k_p^* \Delta i_k^* + (u_{k-1}^* - k_p^* \Delta i_{k-1}^*) + T_s k_i^* \Delta i_k^* \tag{23} \]

抗积分饱和处理

由于电机控制系统输出电压有限,因此电流环PI 控制器的输出将受到限制. 限幅环节的存在导致饱和后PI 控制器的输出与控制对象实际输入不相等,由此引起系统闭环响应变差的现象称为卷饱现象.

什么是积分饱和(卷饱)?

电机控制中,PI 控制器的积分环节会不断累积偏差. 如果偏差长期存在(比如负载突变、给定变化很大),积分量会累积到非常大,使 PI 输出超出系统实际能达到的限幅值(如电压上限),此时控制器"饱和"了:

  • PI 的理论输出还在积分增大,但实际输出已被限幅,两者不再相等;
  • 偏差方向一旦反转,巨大的积分量需要很长时间才能"泄放"掉,导致系统出现严重的超调、振荡甚至失稳——这就是"卷饱"现象,也是系统闭环响应变差的一种典型表现.

饱和电压和母线电压的关系?

电机控制中,电流环PI输出(相)电压上限由母线电压决定,但不是相等关系.

  • SPWM,最大相电压 \(U_{dc}/2\)
  • SVPWM,最大相电压 \(U_{dc}/\sqrt 3 ≈0.577U_{dc}\),比 SPWM 高 15%

如何抗饱和?

核心方法:积分钳位式PI控制器. 步骤:

  1. 检测 PI 是否饱和:pi_out ≠ y_out(实际输出被限幅了);
  2. 判断偏差是否还在"助长"饱和:pi_out × e > 0(偏差和输出同号,积分还在往饱和方向3. 推);
  3. 如果是,则暂停积分(switch 切到 In2 通道,停止累加);
  4. 直到偏差符号反转(pi_out × e < 0),积分才恢复,这样控制器能快速退出饱和,减小超调.

如下图:

img

其他方法:

  • 积分分离:偏差大时去掉积分只留比例,偏差小才引入积分 —— 简单但大偏差时响应偏慢;
  • 变速积分:积分系数随偏差大小变化 —— 平滑但响应也偏慢,且改变控制器结构会导致响应曲线畸变;

采样频率

对控制而言,系统最大带宽与采样频率正相关,由采样造成的滞后相对于系统总的滞后应该是可以忽略的. 具体地,采样频率 一 般要取到带宽指标的10~20倍以上.

理论要求:对信号采样而言,香农定理要求采样频率必须高于信号最高频率的2倍.

实际要求:实际中一般要求采样值连续,即要求相邻的采样值之间变化不大但又有一定的差别,这需要采样频率为信号频率的10倍或更高.

电机控制中,采样频率一般不关注,因为很容易达到. 如电流采样,实践中一般选择在PWM周期中进行采样,(PWM开关频率)频率达 kHz ~ 几十kHz,而电流频率(电流的基波频率) 几百Hz.

电机电流频率由转速决定:
电机电流基波频率 = 电频率 = 极对数 × 转速 / 60,即:

\[f = \frac{p\cdot n}{60} \]

编码实现

(22)所示标幺化后的PI 控制器的增益,变量的单位均为国际单位. 在使用定点芯片编程时,为保证精度,许多物理量需要用较小的单位表示,此时,必须考虑单位换算.

假设电阻单位Ω,电流0.01A,电压V,积分增益用Q16格式表示,那么积分增益:

\[T_sk_i^* \times 2^{16} = \frac{I_b}{U_b}\frac{3R_s}{5} \times 2^{16} = \frac{I_{b\_prg}/100}{U_{b\_prg}}\frac{3R_{s\_prg}/1000}{5}\times 2^{16} ≈ \frac{I_{b\_prg} R_{s\_prg}}{U_{b\_prg}} \frac{1611}{2^{12}} \tag{24} \]

其中,下标 prg = program,表示中程序代码中使用的;常数项 \(1611/2^{12}\) 实现 \(3\times 2{16}/5/1000/100\) 快速近似计算.

带 _prg 变量跟不带的,是同一物理量,但单位、大小可能不同(也可能相同):

1)\(U_{b}, U_{b\_prg}\) 都表示电压标幺基值,并且其单位与数值大小也相同;
2)电机定子电阻 \(R_{s},R_{s\_prg}\):\(R_{s}\) 单位Ω,\(R_{s\_prg}\) 单位mΩ,\(R_s=R_{s\_prg}/1000\)

Q16格式:32bit, 1 位符号 + 1 位整数 + 16 位小数. 缩放因子 \(2^{16}\)

对应代码:

temp = (int64_t) SysParas.Ibase * MotorParas.RsPm >> 12;
temp = (int64_t) temp * 1611 / Sysparas.Ubase;
temp = __IOsat(temp, 60000, 100); // 限幅 saturation [100, 60000],  TI C2000 系列 DSP 的 IQmath 定点数学库里的一个饱和限幅函数
ACR.Id_Kits = temp; // d轴电流环的 ki

注:使用64bit,先右移12bit,能有效避免溢出.

假设电感单位 \(μH\),比例增益用Q12格式表示,那么比例增益:

\[k_p^* \times 2^{12} = \frac{I_b}{U_b}\frac{3L_s}{5T_s}\times 2^{12} = \frac{I_{b\_prg}/100}{U_{b\_prg}}\frac{3L_{s\_prg}/10^6}{5(1/f_{s\_prg})}\times 2^{12} ≈ \frac{I_{b\_prg} R_{s\_prg}}{U_{b\_prg}} \frac{f_{s\_prg}}{2^{16}}\frac{6597}{2^{12}} \tag{25} \]

其中,电流采样周期 \(T_s = 1/f_{s\_prg}\),\(f_{s\_prg}\) 电流采样频率.

temp = (int64) SysParas.Ibase * MotorParas.LsPm / SysParas.Ubase;
temp = (int64) temp * SysParas.PwmFrq >> 16; // PwmFrq 为PWM 频率,即电流采样频率
temp = (int64) temp * 6597L >> 12;
temp = __IQsat(temp, 60000, 100); // 限幅
ACR.Id_Kp = temp;  // d轴电流环的 kp

电流环PI控制器输出幅值,SVPWM 线性区输出的最大相电压有效值:

\[v_{max} = \frac{U_{dc}}{\sqrt 2 \times \sqrt 3} \tag{26} \]

其中,\(U_{dc}\) 母线电压;\(v_{max}\) 是abc 坐标系内的电压,需要将其转换到dq坐标系内.

证明:

  • 对于SVPWM线性区
  1. 相电压基波最大幅值(峰值)= U_dc/√3

三相两电平逆变器中,每个桥臂输出只有 0 和 U_dc 两个电平(6 个开关状态). 8 个开关状态映射到 αβ 平面,得到电压空间矢量六边形(基本空间电压矢量),参见MBD笔记:SVPWM技术 :

  • 6 个有效矢量端点构成正六边形,半径 \(2U_{dc}/3\)(等功率Clarke变换系数);
  • 2个零矢量(000,111)在中心点.

SVPWM 需要用相邻两个有效矢量 + 零矢量按时间比例合成目标矢量. 要保证合成结果不失真(不进入六边形过调制区),目标矢量的轨迹不能超出六边形的内切圆.

合成矢量 \(U_{out}=\frac{2}{3}(u_a+u_b e^{j120°}+u_c e^{j240°})=U_m e^{j\theta}\),其中\(U_m\) 相电压幅值,\(\theta\) 电角度.(参见电机控制笔记:理解直流无刷电机矢量控制 合成矢量的推导、克拉克变换)

相电压 \(u_a=U_m cos\theta,u_b=U_m cos \theta-120°, u_c = U_m cos \theta + 120°\)

以 \(U_4(100)\) 为例求外接圆半径,\(\vec{U_4} = \frac{2}{3}U_{dc}(1+e^{j120°}\cdot 0+e^{j240°}\cdot 0)= \frac{2}{3}U_{dc}\)
所以,外接圆半径 \(|\vec{U_k}|=\frac{2}{3}U_{dc}\)

而 内切圆半径 = 六边形半径 × cos 30°,即:

\[U_m=\frac{2}{3}U_{dc} \times \frac{\sqrt 3}{2} = \frac{U_{dc}}{\sqrt 3} \]

即相电压基波能达到的最大幅值(峰值).

  1. 峰值 ÷ √2 = 有效值

相电压基波是正弦波,最大相电压有效值 = 峰值 / √2,即:

\[v_{max} = \frac{U_m}{\sqrt 2} = \frac{U_{dc}}{\sqrt 6} ≈ 0.408U_{dc} \]

  • 对于SPWM线性区

相电压基波能达到的最大幅值(峰值):

\[U_m=\frac{U_{dc}}{2} \]

最大相电压有效值:

\[v_m=\frac{U_m}{\sqrt 2}=\frac{U_{dc}}{2\sqrt 2} ≈ 0.354 U_{dc} \]


如果代码中母线电压 \(U_{dc}\) 单位0.01V,PI控制器输出限幅值用Q24格式表示,那么 \(v_{max}\) 标幺化的限幅:

\[v_{max\_prg}=\frac{v_{max}}{U_b}\times 2^{24}=\frac{U_{dc\_prg}/10}{\sqrt 6 U_{b\_prg}}\times 2^{24} ≈ \frac{U_{dc\_prg}}{U_{b\_prg}}\times 10702\times 2^6 \tag{27} \]

电流偏差与电流数据格式相同,都用 Q15格式,积分量用 Q24格式,积分增益用 Q16格式;比例部分用 Q24格式,比例增益用 Q12格式.

进阶设计

延迟环节模型

参见自动控制:频率域方法,延迟环节的传递函数:

\[G(s)=e^{-s\tau} \tag{28} \]

所以,幅频响应:

\[|G(j\omega)|=1\\ \angle G(j\omega) = 2\pi f\tau \tag{28-2} \]

其中,\(\tau\) 延迟时间,j 虚数单位,\(\omega\) 角频率.

输出幅值 / 输入幅值 = 1 => 延迟环节增益=1

泰勒级数展开传递函数:

\[G(s)=\frac{1}{e^{s\tau}}=\frac{1}{1 + \tau s + \tau^2 s^2/2! + \tau^3 s^3/3! + \cdots} \tag{29} \]

当延迟时间 \(τ\) 比较小时,忽略高次项,延迟环节简化为惯性环节:

\[G(s)=\frac{1}{1+\tau s} \tag{30} \]

电流环延迟定量估计

电流环总延迟约 \(3T_{pwm}\).硬件只会在特定更新事件(Update Event,计数器归零 / 到顶),才把影子寄存器的值加载到活动寄存器,然后新占空比才真正输出

  1. PWM输出延迟 \(0.5T_{pwm}\)

电压型逆变器建模为 周期T的零阶保持器(T时间内电压不变),其延迟为半个PWM周期\(T_{pwm}\). 我们取 t = 0处值,当做 T/2(时间区间重心) 处值,等效为一个周期区间的平均值.

  1. 电流采样延迟 \(0.5T_{pwm}\)

多数情况,电流采样周期 = PWM周期 \(T_{pwm}\)

为什么电流采样延迟是半个PWM周期?

FOC采样中心对齐PWM驱动电机,为避免开关毛刺,我们在PWM载波中点采样电流;该采样值,就代表整个PWM周期平均电流,等效延迟就是\(0.5T_{pwm}\)(半个PWM周期).

  1. 计算输出延迟 \(2T_{pwm}\)

从电流采样到PI控制器输出生效,有1~2个电流采样周期延迟.

为什么采样完,PI 结果生效要 1~2 个 \(T_{pwm}\) ?

1)触发ADC采样后,转换需要时间,不一定能在本周期及时读取、计算,因此采样数据只能放到下一个PWM周期跑Clarke/Park、PI计算;

2)PWM 影子寄存器更新机制:MCU PWM模块,占空比寄存器分为影子寄存器和活动寄存器:

  • 代码里写的是影子缓存,不是直接生效;
  • 硬件只会在特定更新事件(Update Event,计数器归零 / 到顶),才把影子寄存器的值加载到活动寄存器,然后新占空比才真正输出.

也就是说,程序读写的是缓存寄存器,并不是直接生效.

对于中心对齐PWM:

  • 如果配置成只在下一次载波零点更新,那么这次算出的占空比,要等到下一个PWM周期起点才加载生效. 约 \(1T_{pwm}\);

  • 如果出现代码调度慢,中断优先级不合理等情况,可能要等下一个周期才能加载,接近 \(1T_{pwm}\).

延迟电流环模型

如果考虑系统延时,结合式(7)(28),电流环传递函数变成:

\[H(s)= \frac{1}{L_s s + 1} \cdot e^{-sT_d} \]

其中,\(T_d\) 各种延迟之和(系统总延迟时间). \(\frac{1}{L_s s + 1}\) 电机本体环节,\(e^{-sT_d}\) 延迟环节.

如果用惯性环节 \(\frac{1}{Ts+1}\) 来近似延迟环节,由(7)和(30),那么传递函数可写成:

\[G_p = \underbrace{\frac{1}{T_d s + 1}}_{\text{延迟}} \cdot \underbrace{\frac{1}{L_s s + R_s}}_{\text{电机本体}} = \frac{1/R_s}{(T_d s+1)(L_s/R_s s+1)} \tag{31} \]

其中,延迟时间 \(T_d\),电机相电感 \(L_s\),电机相电阻 \(R_s\).

\(\tau = L_s/R_s\) 是电机的电磁时间常数:由电机绕组本身的物理特性决定,\(L_s\) 通常几毫亨 ~ 几十毫亨,\(R_s\) 零点几欧到几欧,所以 \(\tau ≈ 10 \sim 100ms\);

\(T_d\) 是系统的总延迟时间:主要由开关频率和采样频率决定. 如PWM开关频率10KHz(开关周期0.1ms),所以 \(T_d ≈ 0.1 \sim 1 ms\).

所以,\(\tau= L_s/R_s \gg T_d\).

开环传递函数(OL表示Open Loop):

\[OL(s)=C(s)\cdot G(s) \]

其中,PI控制器的传递函数 \(C(s)=k_p+\dfrac{k_i}{s}=k_p\cdot \dfrac{s+k_i}{s}\),被控对象的传递函数 \(G(s)=\dfrac{1/R_s}{(L_s/R_s s+1)(T_d s+1)}=\dfrac{1/R_s}{(\tau s+1)(T_d s+1)}\).

如果令 PI 控制器的零点 = 电机的时间常数极点,即:

\[k_i = \frac{R_s}{L_s}=\frac{1}{\tau} \]

零极点对消,

\[\begin{aligned} OL(s) &= k_p\cdot \frac{s+1/\tau}{s}\cdot \frac{1/R_s}{(\tau s+1)(T_d s+1)} \\ &= \frac{k_p}{R_s\tau}\cdot \frac{1}{s(T_d s+1)} \\ &= \frac{k_p}{L_s s(T_d s+1)} \end{aligned} \]

所以,闭环传递函数(反馈通道H(s)=1):

\[M(s)=\frac{OL(s)H(s)}{1+OL(s)H(s)}=\frac{OL(s)}{1+OL(s)}=\frac{k_p}{L_s s(T_d s+1) + k_p} \tag{32} \]

显然,这是一个二阶振荡环节(参见自动控制:频率域方法). 而标准振荡环节:

\[G(s)=\frac{\omega_\mathrm{n}^{2}}{s^{2}+2\zeta\omega_\mathrm{n} s+\omega_\mathrm{n}^{2}}, \zeta \in (0, 1) \]

其中,\(\zeta\) 阻尼比,\(\omega_n\) 自然角频率.

比较系数,可得,

\[\begin{cases} \zeta = \sqrt{\dfrac{L_s}{4k_p T_d}} \\ \omega_n = \sqrt{\dfrac{k_p}{T_d L_s}} \end{cases} \tag{33} \]

于是,可得PI控制器参数:

\[\begin{cases} k_p = \dfrac{L_s}{4\zeta ^ 2 T_d} \\ k_i = \dfrac{R_s}{L_s} \end{cases} \tag{34} \]

工程上通常希望系统具有最佳阻尼比,即 \(\zeta = 0.707 = \frac{1}{\sqrt 2}\),此时超调量最小,响应最小. 此时,可得比例参数:

\[k_p = \dfrac{L_s}{2T_d} \tag{35} \]

\(\zeta = \frac{1}{\sqrt 2}\) 时,自然角频率:

\[\omega_n = \sqrt{\dfrac{k_p}{T_d L_s}} = \frac{1}{\sqrt{2} T_d} \]

由工程经验,系统调整时间 \(t_s\):

\[t_s = \frac{2.96}{\omega_n} = 2.96\sqrt{2} T_d ≈ 4.186 T_d \]

系统调整时间 \(t_s\):指系统接受到阶跃信号,输出值进入并一直保持在最终稳态值附近的一个很小的允许误差范围内,所经历的最短时间. 这个允许的误差范围,就叫误差带.

两种常用误差带:

  • 5% 误差带:输出值进入并保持在最终稳态值的 95% ~ 105% 范围内;
  • 2% 误差带:输出值进入并保持在最终稳态值的 98% ~ 102% 范围内(要求更严格).

从上式可看出,\(t_s ≈ 4T_d\),对应12~15 个采样周期(由电流延迟环模型). 此时,系统带宽:

\[\begin{aligned} \omega_b &= \omega_n\sqrt{1-2\zeta^2+ \sqrt{4\zeta^4 - 4\zeta^2 + 2}} \\ &\xlongequal{\zeta = 1/\sqrt 2}\omega_n\sqrt{1-1+\sqrt{1-2+2}}=\omega_n = \sqrt{\frac{k_p}{T_dL_s}} \end{aligned} \]

系统带宽 \(\omega_b\):闭环幅频特性 \(M(\omega)\) 衰减到 \(0.707M(0)\) (即 \(\frac{1}{\sqrt 2}M(0)\) )时的频率,此时,对应对数幅频特性 -3dB 衰减. 参见自动控制:频率域方法 用闭环幅频特性分析、估算系统性能.

系统超调:

\[\sigma = e^{-\pi\xi/\sqrt{1-\xi^2}} \times 100\% \quad \xRightarrow{\xi=1/\sqrt{2}} \quad \sigma \approx 4.33\% < 5\% \]

不到 5% 超调,对于大多数应用都可接受.

电流环指令前馈

参考延迟电流环传递函数(31),带有前反馈支路的电流控制框图:

img

取电机电感 \(L_s = 0.000534H, R_s = 0.021Ω\),取系统延迟 \(T_d = 3\times 1/8000s\),得电流环模型:

\[G_p = \frac{1}{T_d s + 1} \cdot \frac{1}{L_s s + R_s} = \frac{1}{3.75e^{-4}+1}\cdot \frac{1}{0.000534s + 0.021} \tag{36} \]

前馈控制的核心原理(不变性原理):如果在给定信号进入闭环之前,让信号先经过一个环节,使其特性正好抵消掉控制对象的滞后特性,那么系统就能实现“无延迟、无超调”的完美跟随.

完整的理想前馈必须是 \(G_p(s)\) 的全逆,而不能只是延迟环节的逆. 因此,为了完全抵消 \(G_p(s)\),前馈环节 \(G_f(s)\) 必须是它的倒数(逆):

\[G_f(s) = \frac{1}{G_p(s)} = (T_d s + 1)(L_s s + R_s) = (3.75e^{-4}s+1)(0.000534s + 0.021) \tag{37} \]

式(37)展开最高次出现 \(s^2\),根据 拉氏变换的微分性质 ,对应时域的二阶导数(微分),计算可能会带来较大干扰,因此增加2个一阶低通滤波器(\(\frac{1}{t_r+1}\)). 增加2个,是为了抵消二阶微分,所以,需要2个这样相乘的一阶滤波器:

\[\frac{1}{t_r+1}\times \frac{1}{t_r+1} \]

其中,时间常数 \(t_r=0.00005s\).

于是,加上2个一阶滤波器的前馈控制:

\[G_f(s)=\frac{(3.75e^{-4}s+1)(0.000534s + 0.021)}{5e^{-5}s+1} \tag{38} \]

参考

李贵, 童维勇. 电机控制算法实战[M]. 北京: 电子工业出版社, 2024.

posted @ 2026-10-20 22:50  明明1109  阅读(20)  评论(0)    收藏  举报