【硬核推导+源码复现】永磁同步电机(PMSM)矢量控制(FOC)全流程解析:数学建模、PI参数整定与七段式SVPWM仿真
专栏导读 / 文章摘要 :永磁同步电机(PMSM)磁场定向控制(Field-Oriented Control, FOC)是现代高性能伺服与新能源汽车电驱系统的核心基石。本文拒绝"只会连线调参"的黑盒式教程,从三相自然坐标系(ABC)出发,完整推导等幅值 Clarke 与 Park 坐标变换矩阵、 d − q d-q d−q 同步旋转坐标系下的电压/磁链/电磁转矩方程,并利用零极点对消法(内模原理)与典型 I 型/II 型系统理论给出电流环与转速环 PI 参数的解析整定公式 。在此基础上,深入拆解七段式空间矢量脉宽调制(SVPWM)的扇区判断、基本矢量作用时间与鞍形波切换点计算,最后提供一套 零依赖可直接运行的 MATLAB 闭环仿真与 Simulink Function 代码(
.m文件),助你彻底打通从理论公式到工程仿真的最后一公里!推荐 CSDN 标签 :
MATLABSimulink电机控制PMSMFOCSVPWM
一、 引言:为什么 FOC 是电机控制的必修课?
在工业伺服、无人机电调以及新能源汽车驱动系统中,永磁同步电机(Permanent Magnet Synchronous Motor, PMSM)凭借高功率密度、高效率和优异的动态响应特性占据了统治地位。然而,PMSM 在三相静止坐标系(ABC)下是一个强耦合、非线性、多变量的时变系统------定子三相电流之间存在复杂的互感耦合,无法像直流电机那样直接独立控制励磁电流与电枢电流。
磁场定向控制(Field-Oriented Control, FOC)通过坐标变换将三相静止坐标系下的定子电流投影到随转子磁链同步旋转的 d − q d-q d−q 坐标系(直轴-交轴坐标系)中,将定子电流解耦为产生磁场的直轴分量 i d i_d id 和产生转矩的交轴分量 i q i_q iq,从而实现类似他励直流电机的线性解耦控制。
先来看一眼本文完整复现的 PMSM 双闭环矢量控制系统架构:
#mermaid-svg-XkhJd64Q6lBRuG3P{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-XkhJd64Q6lBRuG3P .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-XkhJd64Q6lBRuG3P .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-XkhJd64Q6lBRuG3P .error-icon{fill:#552222;}#mermaid-svg-XkhJd64Q6lBRuG3P .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-XkhJd64Q6lBRuG3P .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-XkhJd64Q6lBRuG3P .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-XkhJd64Q6lBRuG3P .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-XkhJd64Q6lBRuG3P .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-XkhJd64Q6lBRuG3P .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-XkhJd64Q6lBRuG3P .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-XkhJd64Q6lBRuG3P .marker{fill:#333333;stroke:#333333;}#mermaid-svg-XkhJd64Q6lBRuG3P .marker.cross{stroke:#333333;}#mermaid-svg-XkhJd64Q6lBRuG3P svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-XkhJd64Q6lBRuG3P p{margin:0;}#mermaid-svg-XkhJd64Q6lBRuG3P .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-XkhJd64Q6lBRuG3P .cluster-label text{fill:#333;}#mermaid-svg-XkhJd64Q6lBRuG3P .cluster-label span{color:#333;}#mermaid-svg-XkhJd64Q6lBRuG3P .cluster-label span p{background-color:transparent;}#mermaid-svg-XkhJd64Q6lBRuG3P .label text,#mermaid-svg-XkhJd64Q6lBRuG3P span{fill:#333;color:#333;}#mermaid-svg-XkhJd64Q6lBRuG3P .node rect,#mermaid-svg-XkhJd64Q6lBRuG3P .node circle,#mermaid-svg-XkhJd64Q6lBRuG3P .node ellipse,#mermaid-svg-XkhJd64Q6lBRuG3P .node polygon,#mermaid-svg-XkhJd64Q6lBRuG3P .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-XkhJd64Q6lBRuG3P .rough-node .label text,#mermaid-svg-XkhJd64Q6lBRuG3P .node .label text,#mermaid-svg-XkhJd64Q6lBRuG3P .image-shape .label,#mermaid-svg-XkhJd64Q6lBRuG3P .icon-shape .label{text-anchor:middle;}#mermaid-svg-XkhJd64Q6lBRuG3P .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-XkhJd64Q6lBRuG3P .rough-node .label,#mermaid-svg-XkhJd64Q6lBRuG3P .node .label,#mermaid-svg-XkhJd64Q6lBRuG3P .image-shape .label,#mermaid-svg-XkhJd64Q6lBRuG3P .icon-shape .label{text-align:center;}#mermaid-svg-XkhJd64Q6lBRuG3P .node.clickable{cursor:pointer;}#mermaid-svg-XkhJd64Q6lBRuG3P .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-XkhJd64Q6lBRuG3P .arrowheadPath{fill:#333333;}#mermaid-svg-XkhJd64Q6lBRuG3P .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-XkhJd64Q6lBRuG3P .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-XkhJd64Q6lBRuG3P .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-XkhJd64Q6lBRuG3P .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-XkhJd64Q6lBRuG3P .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-XkhJd64Q6lBRuG3P .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-XkhJd64Q6lBRuG3P .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-XkhJd64Q6lBRuG3P .cluster text{fill:#333;}#mermaid-svg-XkhJd64Q6lBRuG3P .cluster span{color:#333;}#mermaid-svg-XkhJd64Q6lBRuG3P div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-XkhJd64Q6lBRuG3P .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-XkhJd64Q6lBRuG3P rect.text{fill:none;stroke-width:0;}#mermaid-svg-XkhJd64Q6lBRuG3P .icon-shape,#mermaid-svg-XkhJd64Q6lBRuG3P .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-XkhJd64Q6lBRuG3P .icon-shape p,#mermaid-svg-XkhJd64Q6lBRuG3P .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-XkhJd64Q6lBRuG3P .icon-shape .label rect,#mermaid-svg-XkhJd64Q6lBRuG3P .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-XkhJd64Q6lBRuG3P .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-XkhJd64Q6lBRuG3P .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-XkhJd64Q6lBRuG3P :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 电机本体与采样反馈
调制与逆变器
电流内环与前馈解耦
转速外环
i_q_ref
u_d
u_q
u_α, u_β
T_cm1, T_cm2, T_cm3
u_a, u_b, u_c
i_a, i_b, i_c
i_α, i_β
i_d
i_q
θ_e, ω_m
θ_e
ω_m
转速给定 ω_ref
+-
转速环 PI
+-
i_d_ref = 0
+-
d轴电流 PI
q轴电流 PI
Anti-Park 逆变换
七段式 SVPWM
三相两电平逆变器
PMSM 电机本体
Clarke 变换
Park 变换
二、 PMSM 坐标变换与数学模型严密推导
2.1 三相静止(ABC)到两相静止( α − β \alpha-\beta α−β):Clarke 变换
设三相定子绕组对称分布,互差 120 ∘ 120^\circ 120∘ 电角度,且满足星形连接无中线约束 i a + i b + i c = 0 i_a + i_b + i_c = 0 ia+ib+ic=0。在工程实现与 Simulink Motor Control Blockset 中,最常用的是等幅值变换(Amplitude-Invariant Transformation) ,即变换前后的相电流峰值与 α − β \alpha-\beta α−β 轴电流幅值保持一致(系数为 2 3 \frac{2}{3} 32):
i α i β = 2 3 1 − 1 2 − 1 2 0 3 2 − 3 2 i a i b i c \begin{bmatrix} i_\alpha \\ i_\beta \end{bmatrix} = \frac{2}{3} \begin{bmatrix} 1 & -\frac{1}{2} & -\frac{1}{2} \\ 0 & \frac{\sqrt{3}}{2} & -\frac{\sqrt{3}}{2} \end{bmatrix} \begin{bmatrix} i_a \\ i_b \\ i_c \end{bmatrix} iαiβ=3210−2123 −21−23 iaibic
利用基尔霍夫电流定律 i c = − i a − i b i_c = -i_a - i_b ic=−ia−ib,上式可简化为工程中最常见的两相电流采样形式:
{ i α = i a i β = 1 3 ( i a + 2 i b ) \begin{cases} i_\alpha = i_a \\ i_\beta = \frac{1}{\sqrt{3}}(i_a + 2i_b) \end{cases} {iα=iaiβ=3 1(ia+2ib)
2.2 两相静止( α − β \alpha-\beta α−β)到两相旋转( d − q d-q d−q):Park 变换及逆变换
设转子永磁体 N 极轴线( d d d 轴)与静止 α \alpha α 轴之间的电角度为 θ e \theta_e θe, q q q 轴超前 d d d 轴 90 ∘ 90^\circ 90∘ 电角度。通过旋转矩阵将静止坐标系变量投影到同步旋转坐标系,得到 Park 变换:
i d i q \] = \[ cos θ e sin θ e − sin θ e cos θ e \] \[ i α i β \] \\begin{bmatrix} i_d \\\\ i_q \\end{bmatrix} = \\begin{bmatrix} \\cos\\theta_e \& \\sin\\theta_e \\\\ -\\sin\\theta_e \& \\cos\\theta_e \\end{bmatrix} \\begin{bmatrix} i_\\alpha \\\\ i_\\beta \\end{bmatrix} \[idiq\]=\[cosθe−sinθesinθecosθe\]\[iαiβ
同理,控制器的输出电压指令 u d ∗ , u q ∗ u_d^*, u_q^* ud∗,uq∗ 需要通过 Anti-Park(Park 逆变换) 转换回 α − β \alpha-\beta α−β 静止坐标系以驱动 SVPWM 模块:
u α u β \] = \[ cos θ e − sin θ e sin θ e cos θ e \] \[ u d u q \] \\begin{bmatrix} u_\\alpha \\\\ u_\\beta \\end{bmatrix} = \\begin{bmatrix} \\cos\\theta_e \& -\\sin\\theta_e \\\\ \\sin\\theta_e \& \\cos\\theta_e \\end{bmatrix} \\begin{bmatrix} u_d \\\\ u_q \\end{bmatrix} \[uαuβ\]=\[cosθesinθe−sinθecosθe\]\[uduq
2.3 d − q d-q d−q 同步旋转坐标系下的电压、磁链与转矩方程
忽略铁芯饱和、涡流与磁滞损耗,在 d − q d-q d−q 同步旋转坐标系下,PMSM 的定子磁链方程为:
{ ψ d = L d i d + ψ f ψ q = L q i q \begin{cases} \psi_d = L_d i_d + \psi_f \\ \psi_q = L_q i_q \end{cases} {ψd=Ldid+ψfψq=Lqiq
将其代入定子电压平衡方程,得到 d − q d-q d−q 轴定子电压微分方程:
{ u d = R s i d + L d d i d d t − ω e L q i q u q = R s i q + L q d i q d t + ω e ( L d i d + ψ f ) \begin{cases} u_d = R_s i_d + L_d \frac{\mathrm{d}i_d}{\mathrm{d}t} - \omega_e L_q i_q \\ u_q = R_s i_q + L_q \frac{\mathrm{d}i_q}{\mathrm{d}t} + \omega_e \left( L_d i_d + \psi_f \right) \end{cases} {ud=Rsid+Lddtdid−ωeLqiquq=Rsiq+Lqdtdiq+ωe(Ldid+ψf)
其中:
- R s R_s Rs 为定子相电阻( Ω \Omega Ω);
- L d , L q L_d, L_q Ld,Lq 分别为直轴与交轴电感( H \mathrm{H} H),对于表贴式永磁同步电机(SPMSM)满足 L d = L q = L s L_d = L_q = L_s Ld=Lq=Ls;
- ψ f \psi_f ψf 为永磁体基波磁链幅值( W b \mathrm{Wb} Wb);
- ω e = p n ω m \omega_e = p_n \omega_m ωe=pnωm 为电角速度( r a d / s \mathrm{rad/s} rad/s), p n p_n pn 为电机极对数, ω m \omega_m ωm 为机械角速度。
由于采用了等幅值变换(系数 2 3 \frac{2}{3} 32),在计算功率与转矩时需乘以系数 3 2 \frac{3}{2} 23。由此推导出 PMSM 电磁转矩方程:
T e = 3 2 p n ψ f i q + ( L d − L q ) i d i q T_e = \frac{3}{2} p_n \left \\psi_f i_q + (L_d - L_q) i_d i_q \\right Te=23pnψfiq+(Ld−Lq)idiq
当采用 i d = 0 i_d = 0 id=0 控制策略 (或者对于表贴式电机 L d = L q L_d = L_q Ld=Lq)时,磁阻转矩项为零,电磁转矩完全简化为与 i q i_q iq 成正比的线性关系:
T e = 3 2 p n ψ f i q = K t i q T_e = \frac{3}{2} p_n \psi_f i_q = K_t i_q Te=23pnψfiq=Ktiq
配合电机的机械运动方程:
J d ω m d t = T e − T L − B ω m J \frac{\mathrm{d}\omega_m}{\mathrm{d}t} = T_e - T_L - B \omega_m Jdtdωm=Te−TL−Bωm
至此,PMSM 的非线性强耦合模型被完美转化为与直流电机一致的线性模型!
三、 前馈解耦控制与双闭环 PI 参数解析整定
很多读者在搭建 Simulink 模型时,PI 参数全靠"盲猜试凑",导致电流超调巨大甚至发散。下面给出标准的工程解析整定方法。
3.1 旋转反电势交叉耦合项与前馈解耦
观察 d − q d-q d−q 轴电压方程可以发现, d d d 轴方程中含有 − ω e L q i q -\omega_e L_q i_q −ωeLqiq, q q q 轴方程中含有 ω e ( L d i d + ψ f ) \omega_e(L_d i_d + \psi_f) ωe(Ldid+ψf)。当电机高速旋转时,交叉耦合项显著增大,严重劣化电流环独立性。因此,在电流 PI 调节器输出端引入前馈解耦补偿:
{ u d ∗ = ( K p d + K i d s ) ( i d ∗ − i d ) − ω e L q i q u q ∗ = ( K p q + K i q s ) ( i q ∗ − i q ) + ω e ( L d i d + ψ f ) \begin{cases} u_d^* = \left( K_{pd} + \frac{K_{id}}{s} \right)(i_d^* - i_d) - \omega_e L_q i_q \\ u_q^* = \left( K_{pq} + \frac{K_{iq}}{s} \right)(i_q^* - i_q) + \omega_e (L_d i_d + \psi_f) \end{cases} {ud∗=(Kpd+sKid)(id∗−id)−ωeLqiquq∗=(Kpq+sKiq)(iq∗−iq)+ωe(Ldid+ψf)
引入前馈补偿后, d d d、 q q q 轴电流环的被控对象完全退化为一阶 RL 惯性环节:
G p ( s ) = 1 L s + R s G_p(s) = \frac{1}{L s + R_s} Gp(s)=Ls+Rs1
3.2 电流内环 PI 参数整定(零极点对消 / 内模原理)
采用并联型 PI 控制器 G P I ( s ) = K p + K i s = K p s + K i / K p s G_{PI}(s) = K_p + \frac{K_i}{s} = K_p \frac{s + K_i/K_p}{s} GPI(s)=Kp+sKi=Kpss+Ki/Kp,电流环开环传递函数(忽略逆变器微小延时)为:
G o p e n _ i ( s ) = K p s + K i / K p s ⋅ 1 / L s + R s / L G_{open\_i}(s) = K_p \frac{s + K_i/K_p}{s} \cdot \frac{1/L}{s + R_s/L} Gopen_i(s)=Kpss+Ki/Kp⋅s+Rs/L1/L
利用零极点对消原则 ,令控制器的零点抵消电机的电磁时间常数极点,即令 K i K p = R s L \frac{K_i}{K_p} = \frac{R_s}{L} KpKi=LRs。此时开环传递函数简化为纯积分环节 K p L s \frac{K_p}{L s} LsKp,闭环传递函数成为标准的一阶低通滤波器:
G c l o s e _ i ( s ) = 1 L K p s + 1 = ω c i s + ω c i G_{close\i}(s) = \frac{1}{\frac{L}{K_p} s + 1} = \frac{\omega{ci}}{s + \omega_{ci}} Gclose_i(s)=KpLs+11=s+ωciωci
其中 ω c i = 2 π f c i \omega_{ci} = 2\pi f_{ci} ωci=2πfci 为期望的电流环带宽 ( r a d / s \mathrm{rad/s} rad/s)。工程上通常取开关频率 f p w m f_{pwm} fpwm 的 1 20 ∼ 1 10 \frac{1}{20} \sim \frac{1}{10} 201∼101。由此直接得出电流环 PI 参数整定公式:
K p d = ω c i L d , K i d = ω c i R s K p q = ω c i L q , K i q = ω c i R s \boxed{\begin{aligned} K_{pd} &= \omega_{ci} L_d, \quad &K_{id} &= \omega_{ci} R_s \\ K_{pq} &= \omega_{ci} L_q, \quad &K_{iq} &= \omega_{ci} R_s \end{aligned}} KpdKpq=ωciLd,=ωciLq,KidKiq=ωciRs=ωciRs
3.3 转速外环 PI 参数整定(典型 II 型系统 / 带宽配置法)
由于电流内环带宽远高于转速外环(通常 ω c i ≥ 10 ω c s \omega_{ci} \ge 10 \omega_{cs} ωci≥10ωcs),在整定转速环时可将电流内环近似为增益为 1 1 1 的小惯性环节 1 / ( τ i s + 1 ) 1/(\tau_i s + 1) 1/(τis+1),其中等效小时间常数 τ i = 1 / ω c i \tau_i = 1/\omega_{ci} τi=1/ωci。忽略阻尼系数 B B B,转速环开环传递函数为:
G o p e n _ ω ( s ) = ( K p ω + K i ω s ) 1 τ i s + 1 K t J s , K t = 3 2 p n ψ f G_{open\\omega}(s) = \left( K{p\omega} + \frac{K_{i\omega}}{s} \right) \frac{1}{\tau_i s + 1} \frac{K_t}{J s}, \quad K_t = \frac{3}{2} p_n \psi_f Gopen_ω(s)=(Kpω+sKiω)τis+11JsKt,Kt=23pnψf
按照典型 II 型系统"中频宽 h h h 法" (通常取中频宽 h = 5 h = 5 h=5 以兼顾超调量与抗扰性能),或者设定转速环截止频率 ω c s = h + 1 2 h 2 τ i \omega_{cs} = \frac{h+1}{2 h^2 \tau_i} ωcs=2h2τih+1,可得转速环 PI 参数公式:
K p ω = J ω c s K t = ( h + 1 ) J 2 h τ i K t K i ω = K p ω h τ i = ( h + 1 ) J 2 h 2 τ i 2 K t \boxed{\begin{aligned} K_{p\omega} &= \frac{J \omega_{cs}}{K_t} = \frac{(h+1) J}{2 h \tau_i K_t} \\ K_{i\omega} &= \frac{K_{p\omega}}{h \tau_i} = \frac{(h+1) J}{2 h^2 \tau_i^2 K_t} \end{aligned}} KpωKiω=KtJωcs=2hτiKt(h+1)J=hτiKpω=2h2τi2Kt(h+1)J
| 控制环路 | 推荐带宽选取准则 | 比例增益 K p K_p Kp 公式 | 积分增益 K i K_i Ki 公式 |
|---|---|---|---|
| d d d 轴电流内环 | ω c i = 2 π ⋅ ( 0.05 ∼ 0.1 ) f p w m \omega_{ci} = 2\pi \cdot (0.05 \sim 0.1) f_{pwm} ωci=2π⋅(0.05∼0.1)fpwm | K p d = ω c i L d K_{pd} = \omega_{ci} L_d Kpd=ωciLd | K i d = ω c i R s K_{id} = \omega_{ci} R_s Kid=ωciRs |
| q q q 轴电流内环 | ω c i = 2 π ⋅ ( 0.05 ∼ 0.1 ) f p w m \omega_{ci} = 2\pi \cdot (0.05 \sim 0.1) f_{pwm} ωci=2π⋅(0.05∼0.1)fpwm | K p q = ω c i L q K_{pq} = \omega_{ci} L_q Kpq=ωciLq | K i q = ω c i R s K_{iq} = \omega_{ci} R_s Kiq=ωciRs |
| 转速外环 | ω c s = ( 0.05 ∼ 0.15 ) ω c i \omega_{cs} = (0.05 \sim 0.15) \omega_{ci} ωcs=(0.05∼0.15)ωci | K p ω = J ω c s 1.5 p n ψ f K_{p\omega} = \frac{J \omega_{cs}}{1.5 p_n \psi_f} Kpω=1.5pnψfJωcs | K i ω = K p ω ω c s h K_{i\omega} = \frac{K_{p\omega} \omega_{cs}}{h} Kiω=hKpωωcs ( h ≈ 5 h \approx 5 h≈5) |
四、 七段式 SVPWM 算法全流程拆解
空间矢量脉宽调制(Space Vector Pulse Width Modulation, SVPWM)通过三相逆变器的 6 6 6 个非零基本电压矢量( U 1 ∼ U 6 U_1 \sim U_6 U1∼U6)和 2 2 2 个零矢量( U 0 ( 000 ) , U 7 ( 111 ) U_0(000), U_7(111) U0(000),U7(111))合成任意方向的旋转电压空间矢量,其直流母线电压利用率比传统 SPWM 提高了 2 3 ≈ 15.47 % \frac{2}{\sqrt{3}} \approx 15.47\% 3 2≈15.47% (线性调制区最大相电压幅值可达 U d c 3 \frac{U_{dc}}{\sqrt{3}} 3 Udc)。
4.1 扇区判断法( N = A + 2 B + 4 C N = A + 2B + 4C N=A+2B+4C)
给定 α − β \alpha-\beta α−β 坐标系下的参考电压 u α , u β u_\alpha, u_\beta uα,uβ,定义三个辅助判断变量 U r e f 1 , U r e f 2 , U r e f 3 U_{ref1}, U_{ref2}, U_{ref3} Uref1,Uref2,Uref3:
{ U r e f 1 = u β U r e f 2 = 3 2 u α − 1 2 u β U r e f 3 = − 3 2 u α − 1 2 u β \begin{cases} U_{ref1} = u_\beta \\ U_{ref2} = \frac{\sqrt{3}}{2} u_\alpha - \frac{1}{2} u_\beta \\ U_{ref3} = -\frac{\sqrt{3}}{2} u_\alpha - \frac{1}{2} u_\beta \end{cases} ⎩ ⎨ ⎧Uref1=uβUref2=23 uα−21uβUref3=−23 uα−21uβ
令符号标志位:
- 若 U r e f 1 > 0 U_{ref1} > 0 Uref1>0,则 A = 1 A = 1 A=1,否则 A = 0 A = 0 A=0;
- 若 U r e f 2 > 0 U_{ref2} > 0 Uref2>0,则 B = 1 B = 1 B=1,否则 B = 0 B = 0 B=0;
- 若 U r e f 3 > 0 U_{ref3} > 0 Uref3>0,则 C = 1 C = 1 C=1,否则 C = 0 C = 0 C=0。
计算特征值 N = A + 2 B + 4 C N = A + 2B + 4C N=A+2B+4C,则特征值 N N N 与几何扇区号 Sector ∈ { 1 , 2 , 3 , 4 , 5 , 6 } \text{Sector} \in \{1, 2, 3, 4, 5, 6\} Sector∈{1,2,3,4,5,6} 的映射关系如下表所示:
| 特征值 N = A + 2 B + 4 C N = A + 2B + 4C N=A+2B+4C | 3 3 3 | 1 1 1 | 5 5 5 | 4 4 4 | 6 6 6 | 2 2 2 |
|---|---|---|---|---|---|---|
| 实际几何扇区 Sector | I (1) | II (2) | III (3) | IV (4) | V (5) | VI (6) |
4.2 基本矢量作用时间计算与过调制饱和限幅
设 PWM 开关周期为 T s T_s Ts,直流母线电压为 U d c U_{dc} Udc。定义中间计算变量 X , Y , Z X, Y, Z X,Y,Z:
{ X = 3 T s U d c u β Y = 3 T s U d c ( 3 2 u α + 1 2 u β ) Z = 3 T s U d c ( − 3 2 u α + 1 2 u β ) \begin{cases} X = \frac{\sqrt{3} T_s}{U_{dc}} u_\beta \\ Y = \frac{\sqrt{3} T_s}{U_{dc}} \left( \frac{\sqrt{3}}{2} u_\alpha + \frac{1}{2} u_\beta \right) \\ Z = \frac{\sqrt{3} T_s}{U_{dc}} \left( -\frac{\sqrt{3}}{2} u_\alpha + \frac{1}{2} u_\beta \right) \end{cases} ⎩ ⎨ ⎧X=Udc3 TsuβY=Udc3 Ts(23 uα+21uβ)Z=Udc3 Ts(−23 uα+21uβ)
在各个扇区中,相邻两个非零基本矢量的作用时间 T 1 , T 2 T_1, T_2 T1,T2 直接由 X , Y , Z X, Y, Z X,Y,Z 查表赋值:
| 特征值 N N N | 1 1 1 (扇区II) | 2 2 2 (扇区VI) | 3 3 3 (扇区I) | 4 4 4 (扇区IV) | 5 5 5 (扇区III) | 6 6 6 (扇区V) |
|---|---|---|---|---|---|---|
| T 1 T_1 T1 | Z Z Z | Y Y Y | − Z -Z −Z | − X -X −X | X X X | − Y -Y −Y |
| T 2 T_2 T2 | Y Y Y | − X -X −X | X X X | Z Z Z | − Y -Y −Y | − Z -Z −Z |
过调制保护 :当合成电压矢量超出正六边形内切圆导致 T 1 + T 2 > T s T_1 + T_2 > T_s T1+T2>Ts 时,需按比例缩减:
T 1 _ s a t = T 1 T 1 + T 2 T s , T 2 _ s a t = T 2 T 1 + T 2 T s T_{1\sat} = \frac{T_1}{T_1 + T_2} T_s, \quad T{2\_sat} = \frac{T_2}{T_1 + T_2} T_s T1_sat=T1+T2T1Ts,T2_sat=T1+T2T2Ts
4.3 七段式对称调制切换时间点计算
为减少开关损耗并抑制谐波,七段式 SVPWM 将零矢量作用时间 T 0 = T s − T 1 − T 2 T_0 = T_s - T_1 - T_2 T0=Ts−T1−T2 均匀分配在周期首尾( U 0 U_0 U0)与正中间( U 7 U_7 U7)。定义三个时间切换点 T a , T b , T c T_a, T_b, T_c Ta,Tb,Tc:
{ T a = T s − T 1 − T 2 4 T b = T a + T 1 2 T c = T b + T 2 2 \begin{cases} T_a = \frac{T_s - T_1 - T_2}{4} \\ T_b = T_a + \frac{T_1}{2} \\ T_c = T_b + \frac{T_2}{2} \end{cases} ⎩ ⎨ ⎧Ta=4Ts−T1−T2Tb=Ta+2T1Tc=Tb+2T2
根据不同扇区将 T a , T b , T c T_a, T_b, T_c Ta,Tb,Tc 分配给三相桥臂的定时器比较值 T c m 1 , T c m 2 , T c m 3 T_{cm1}, T_{cm2}, T_{cm3} Tcm1,Tcm2,Tcm3:
| 特征值 N N N | 1 1 1 (扇区II) | 2 2 2 (扇区VI) | 3 3 3 (扇区I) | 4 4 4 (扇区IV) | 5 5 5 (扇区III) | 6 6 6 (扇区V) |
|---|---|---|---|---|---|---|
| T c m 1 T_{cm1} Tcm1 (A相) | T b T_b Tb | T a T_a Ta | T a T_a Ta | T c T_c Tc | T c T_c Tc | T b T_b Tb |
| T c m 2 T_{cm2} Tcm2 (B相) | T a T_a Ta | T c T_c Tc | T b T_b Tb | T b T_b Tb | T a T_a Ta | T c T_c Tc |
| T c m 3 T_{cm3} Tcm3 (C相) | T c T_c Tc | T b T_b Tb | T c T_c Tc | T a T_a Ta | T b T_b Tb | T a T_a Ta |
将 T c m 1 , T c m 2 , T c m 3 T_{cm1}, T_{cm2}, T_{cm3} Tcm1,Tcm2,Tcm3 与幅值为 T s / 2 T_s/2 Ts/2 的对称三角载波比较,观察波形即可看到经典的马鞍波(Saddle Wave)!
五、 Simulink 建模实战与完整 .m 源码复现
为了让你既能直接在 MATLAB 中一键跑出全套波形,又能把核心模块直接复制进 Simulink 的 MATLAB Function 模块,配套提供了完整独立的 .m 脚本文件 pmsm_foc_svpwm_sim.m。
5.1 如何在 Simulink 中嵌入 SVPWM 模块?
在 Simulink 中拖入一个 MATLAB Function 模块,将配套 .m 文件中的 svpwm_7seg 函数粘贴进去即可直接生成三相占空比或切换时间点:
matlab
function [Tcm1, Tcm2, Tcm3, sector] = svpwm_7seg(u_alpha, u_beta, Udc, Ts)
%#codegen
% 七段式 SVPWM 核心算法 (可直接放入 Simulink MATLAB Function 模块)
sqrt3 = 1.732050807568877;
Uref1 = u_beta;
Uref2 = (sqrt3 * u_alpha - u_beta) * 0.5;
Uref3 = (-sqrt3 * u_alpha - u_beta) * 0.5;
A = double(Uref1 > 0);
B = double(Uref2 > 0);
C = double(Uref3 > 0);
N = A + 2*B + 4*C;
% 映射实际几何扇区 1~6
sector_map = [2, 6, 1, 4, 3, 5];
sector = sector_map(N);
k = sqrt3 * Ts / Udc;
X = k * u_beta;
Y = k * (sqrt3 * u_alpha + u_beta) * 0.5;
Z = k * (-sqrt3 * u_alpha + u_beta) * 0.5;
switch N
case 1, T1 = Z; T2 = Y;
case 2, T1 = Y; T2 = -X;
case 3, T1 = -Z; T2 = X;
case 4, T1 = -X; T2 = Z;
case 5, T1 = X; T2 = -Y;
otherwise, T1 = -Y; T2 = -Z;
end
% 过调制饱和保护
if (T1 + T2) > Ts
T1_tmp = T1;
T1 = T1_tmp * Ts / (T1_tmp + T2);
T2 = T2 * Ts / (T1_tmp + T2);
end
Ta = (Ts - T1 - T2) * 0.25;
Tb = Ta + 0.5 * T1;
Tc = Tb + 0.5 * T2;
switch N
case 1, Tcm1 = Tb; Tcm2 = Ta; Tcm3 = Tc;
case 2, Tcm1 = Ta; Tcm2 = Tc; Tcm3 = Tb;
case 3, Tcm1 = Ta; Tcm2 = Tb; Tcm3 = Tc;
case 4, Tcm1 = Tc; Tcm2 = Tb; Tcm3 = Ta;
case 5, Tcm1 = Tc; Tcm2 = Ta; Tcm3 = Tb;
otherwise, Tcm1 = Tb; Tcm2 = Tc; Tcm3 = Ta;
end
end
5.2 仿真工况设计与结果分析
在配套的 pmsm_foc_svpwm_sim.m 脚本中,我们设置了如下极具代表性的动态测试工况:
- t = 0 s t = 0\,\mathrm{s} t=0s :电机空载启动,给定目标转速 n r e f = 1000 r / m i n n_{ref} = 1000\,\mathrm{r/min} nref=1000r/min;
- t = 0.15 s t = 0.15\,\mathrm{s} t=0.15s :在稳态下突加额定负载转矩 T L = 5 N ⋅ m T_L = 5\,\mathrm{N\cdot m} TL=5N⋅m,检验转速环抗扰恢复能力与 i q i_q iq 快速跟踪性能;
- t = 0.30 s t = 0.30\,\mathrm{s} t=0.30s :带载状态下给定转速阶跃升至 n r e f = 1500 r / m i n n_{ref} = 1500\,\mathrm{r/min} nref=1500r/min。
运行配套 .m 脚本后,你将直接获得 4 组高清工程级分析图窗:
- 子图 1(机械转速响应) :启动过程平滑无超调, 0.15 s 0.15\,\mathrm{s} 0.15s 突加 5 N ⋅ m 5\,\mathrm{N\cdot m} 5N⋅m 负载时转速跌落小于 15 r / m i n 15\,\mathrm{r/min} 15r/min 并在 15 m s 15\,\mathrm{ms} 15ms 内迅速恢复稳态;
- 子图 2( d − q d-q d−q 轴解耦电流) :得益于精确的前馈解耦与零极点对消整定, i q i_q iq 阶跃响应迅速,而 i d i_d id 始终牢牢钳位在 0 A 0\,\mathrm{A} 0A 附近,实现了彻底的磁链-转矩解耦;
- 子图 3(三相定子电流 i a , i b , i c i_a, i_b, i_c ia,ib,ic):标准正弦波,幅值随负载转矩与加速转矩动态调节;
- 子图 4(七段式 SVPWM 马鞍波与扇区跳变) :清晰展示 T c m 1 , T c m 2 , T c m 3 T_{cm1}, T_{cm2}, T_{cm3} Tcm1,Tcm2,Tcm3 的三次谐波注入马鞍形包络线以及 1 ∼ 6 1 \sim 6 1∼6 扇区的周期性循环切换。
六、 参考文献与官方权威资源
- MathWorks Official Documentation: PMSM Field-Oriented Control (Simscape Electrical)
- MathWorks Motor Control Blockset: Implement Motor Speed Control by Using Field-Oriented Control (FOC)
- MathWorks Technical Discovery: Space Vector Modulation (SVM) for Motor Control
- 袁雷 等,《现代永磁同步电机控制原理及MATLAB仿真》,北京航空航天大学出版社。
程序运行结果如下:
==================== FOC PI 参数自动整定结果 ====================
电流环带宽: 666.7 Hz (4188.8 rad/s)
Kp_d = 35.6047, Ki_d = 12042.77
Kp_q = 35.6047, Ki_q = 12042.77
转速环带宽: 55.6 Hz (349.1 rad/s)
Kp_w = 0.3324, Ki_w = 23.21
