ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

SPWM算法原理与Simulink仿真:调制比、谐波及SVPWM等效性验证

SPWM算法原理与Simulink仿真:调制比、谐波及SVPWM等效性验证 做逆变器、电机驱动、UPS 或者并网变流器SPWM正弦脉宽调制是绕不开的基础算法。很多初学者第一反应是“用正弦波和三角波比大小输出就是 PWM”但真正要回答的问题是调制比和基波幅值到底是什么关系谐波集中在哪单极性和双极性差在哪为什么说注入三次谐波后 SPWM 能等效成 SVPWM这些如果只靠看波形去猜效率很低。这篇文章从 SPWM 的数学模型出发直接推到 Simulink 仿真模型先讲清楚调制波、载波、调制度、载波比这几个核心参数再手把手搭出双极性 SPWM 和单极性 SPWM 的仿真模型然后用 FFT 脚本分析输出电压谐波最后用批量仿真脚本扫描不同调制比下的 THD 变化并把 SPWM 注入三次谐波后与 SVPWM 的幅值关系一次性验证清楚。内容适合电机控制、电力电子、嵌入式电源方向的学生和工程师不需要额外硬件只要一台能运行 MATLAB/Simulink 的电脑就能复现。1. SPWM 调制算法核心能力速览能力项说明算法类型正弦脉宽调制属于载波类 PWM 调制技术数学模型正弦调制波与三角载波实时比较输出脉冲宽度按正弦规律变化主要功能逆变器输出电压控制、电机调速、并网变流器调制、电源谐波优化关键技术参数调制度调制比m、载波比 N、载波频率 f_c、死区时间谐波特性谐波能量集中在载波频率整数倍附近低频段谐波小仿真平台MATLAB / Simulink部分逻辑模块可移植到 C 代码生成资源占用纯仿真模型占用很低主要看仿真时长、步长和数据记录量支持批量任务支持可通过 MATLAB 脚本批量修改参数并调用 sim 命令输出方式PWM 数字脉冲信号可连接 IGBT 桥、MOSFET 桥或直接观察电压波形适合场景单相/三相逆变器设计、电机 FOC 调制单元、电源课程实验、算法对比研究SPWM 最大的优点是原理直观、实现简单、谐波可控性好。相比 SVPWMSPWM 不需要扇区判断和矢量作用时间计算在单相逆变器、低端 MCU 和 FPGA 工程中非常常见。后面所有仿真验证都围绕这个模型展开。2. SPWM 调制原理与数学模型2.1 基本比较规则SPWM 的核心思想是用一个低频正弦波作为调制波一个高频三角波作为载波两个信号经比较器后输出方波脉冲。当正弦波幅值大于三角波时输出高电平反之输出低电平。输出电压的平均值在一个载波周期内等于调制波的瞬时值这就是“脉冲宽度按正弦变化”的含义。设调制波为$$u_r(t) U_r \sin(\omega_r t)$$载波为三角波 $u_c(t)$峰值固定为 $U_c$频率为 $f_c$。定义调制度调制比$$m \frac{U_r}{U_c}$$载波比$$N \frac{f_c}{f_r}$$其中 $f_r$ 是正弦调制波频率。当 $0 \le m \le 1$ 时系统工作在线性调制区输出脉冲宽度与正弦波瞬时值近似成正比。当 $m 1$ 时进入过调制区输出基波幅值不再随调制比线性增长同时低频谐波明显增加一般工程上应尽量避免。2.2 双极性 SPWM 数学模型双极性 SPWM 是最基础的调制方式。以单相全桥逆变器为例输出电压在 $U_{dc}$ 和 $-U_{dc}$ 之间来回切换开关规则可写为$$ u_o(t) \begin{cases} U_{dc}, u_r(t) \ge u_c(t) \ -U_{dc}, u_r(t) u_c(t) \end{cases} $$对输出电压做傅里叶分析可以得到基波幅值与调制比的关系$$U_{o1m} m U_{dc}$$也就是说在线性调制区内基波电压幅值等于调制比乘以直流母线电压。如果采用半桥结构并以直流母线中点为参考则基波幅值为 $m U_{dc} / 2$这点在做仿真时需要根据模型结构注意区分。双极性 SPWM 的谐波成分主要集中在载波频率及载波频率整数倍附近的边带区域低频段小于 $f_c - f_r$几乎没有明显谐波。因此如果载波比足够高输出的低频分量非常接近理想正弦波这也是 SPWM 在工程中被广泛采用的原因之一。2.3 单极性 SPWM 数学模型单极性 SPWM 的特点是在正弦调制波的正半周期输出只有 $U_{dc}$ 和 0 两种电平在负半周期输出只有 $-U_{dc}$ 和 0 两种电平。与双极性相比输出电压在一个载波周期内平均电平变化更平缓谐波含量更低尤其在载波频率较低的场合优势明显。单极性调制需要桥臂配合。仍以单相全桥为例左桥臂由调制波 $u_r$ 与三角载波 $u_c$ 比较右桥臂由 $-u_r$ 与 $u_c$ 比较$$ S_1 \begin{cases} 1, u_r \ge u_c \ 0, u_r u_c \end{cases} $$$$ S_3 \begin{cases} 1, -u_r \ge u_c \ 0, -u_r u_c \end{cases} $$输出电压为$$u_o U_{dc}(S_1 - S_3)$$当调制波为正且幅值大于载波时$S_1 1$、$S_3 0$输出 $U_{dc}$当调制波为正但小于载波时$S_1 0$、$S_3 0$输出 0。负半周对称。这样输出电平只在 $U_{dc}$、0、$-U_{dc}$ 之间切换不会出现双极性那种从 $U_{dc}$ 直接跳到 $-U_{dc}$ 的情况因此 dv/dt 更小电磁干扰也更低。2.4 SPWM 与 SVPWM、三次谐波注入的关系关于热搜里反复出现的问题SPWM 注入三次谐波或零序分量后与 SVPWM 究竟是怎样的幅值关系答案可以一次性说清。在三相系统中如果只把三个相差 120° 的正弦波分别与同一个三角载波比较调制波峰值为 $m$ 时刚好进入线性调制区上限。但三相的零序分量在输出线电压中不会出现可以在调制波中注入三次谐波来“压低”调制波峰值从而在不进入过调制的前提下提高基波幅值。设原调制波为$$u_1 m \sin(\omega t)$$注入幅值为基波 1/6 的三次谐波$$u_3 m \cdot \frac{1}{6} \sin(3\omega t)$$叠加后$$u_r(t) m\left[\sin(\omega t) \frac{1}{6}\sin(3\omega t)\right]$$数学上可以证明当三次谐波系数取 1/6 时叠加波形的峰值最小最小峰值为$$U_{peak} \frac{\sqrt{3}}{2}m$$这意味着在载波峰值不变的条件下可以让 $m$ 继续增大到原来的 $\frac{2}{\sqrt{3}} \approx 1.1547$ 倍而不过调制。对应电压利用率提升约 15.47%。这个结论就是 SVPWM 与 SPWM 最核心的差异SVPWM 在调制波中隐含了三次谐波和零序分量等效于注入了 1/6 基波幅值的三次谐波后的 SPWM因此线性调制范围更宽、直流母线电压利用率更高。理解了这个关系后面仿真验证 SVPWM 等效性时就不需要真的搭建扇区判断和矢量计算模块直接用“SPWM 三次谐波注入”就可以得到与 SVPWM 一致的电压利用率结论。3. Simulink 仿真模型搭建准备3.1 环境准备本次仿真只需要基础 MATLAB/Simulink 环境不依赖 Simscape Electrical 工具箱也能完整跑通。建议环境如下项目要求MATLAB 版本R2020a 及以上均可低版本模块名称可能略有差异Simulink基础 Simulink 模块库所需模块Sine Wave、Repeating Sequence、Relational Operator、Gain、Scope、To Workspace、Logical Operator操作系统Windows / Linux / macOS 均可磁盘占用单个模型极小几十 KB 级别内存占用纯仿真模型通常不超过 1 GB长时间高采样率仿真除外不建议一上来就加 PowerGUI、IGBT 全桥模型因为电路级仿真涉及代数环和求解器选择反而不利于理解 SPWM 本身的调制逻辑。先用“比较器 开关逻辑 电压映射”的方式搭出等效模型等调制逻辑验证无误后再换到 Simscape 电路模型做更贴近实际的带载测试。3.2 模型总体结构SPWM 仿真模型可以抽象成四个部分调制波生成、三角载波生成、比较与逻辑处理、输出与数据记录。功能推荐模块正弦调制波Sine Wave三角载波Repeating Sequence比较Relational Operator逻辑组合Logical Operator / Switch电压映射Gain / Constant输出观察Scope、To Workspace三角载波使用 Repeating Sequence 模块时只需要定义两个时间点和两个幅值点即可生成三角波。例如载波频率 1050 Hz、幅值 1则一个周期约为 0.000952 s前半周期从 -1 线性升到 1后半周期从 1 线性降到 -1。4. 搭建双极性 SPWM 仿真模型4.1 新建模型并配置正弦波打开 Simulink新建空白模型命名为spwm_double.slx。从模块库中拖入一个 Sine Wave 模块。这里需要注意Sine Wave 默认是连续时间信号输出幅值默认 1频率默认 2π rad/s需要改成实际需要的参数。正弦波参数按如下设置参数值说明Sine typeTime based基于时间产生正弦波Amplitude0.8对应调制比 m 0.8Bias0无直流偏置Frequency2pi5050 Hz 调制波注意 Simulink 默认单位是 rad/sPhase0初始相位Sample time0连续时间信号4.2 配置三角载波拖入 Repeating Sequence 模块。Repeating Sequence 的配置方式是给出输出波形的折线点。如果载波频率为 1050 Hz周期 $T_c 1/1050 \approx 9.5238 \times 10^{-4}$ s。三角波先上升再下降则配置为Time valuesOutput values[0, Tc/2, Tc][-1, 1, -1]其中 $T_c/2 \approx 4.7619 \times 10^{-4}$。在 MATLAB 中可以直接用表达式生成模块参数填[0, 1/1050/2, 1/1050] [-1, 1, -1]这样载波峰值就是 1和调制比 m 直接可比。4.3 比较器与输出从模块库中拖入 Relational Operator将第一个输入口接 Sine Wave第二个输入口接 Repeating Sequence。比较条件选择。Relational Operator 输出为布尔值 1/0需要用 Gain 模块和偏移来映射到 $U_{dc}$ / $-U_{dc}$。最简单的映射方式先用一个 Gain 模块乘以 2再减去 1这样原来的 1/0 就变成 1/-1最后再乘以 $U_{dc}$。具体连线顺序Sine Wave → Relational Operator 第一个输入Repeating Sequence → Relational Operator 第二个输入Relational Operator → Gain乘 2 → Bias减 1 → Gain乘 Udc → 输出最终输出接到 Scope 和 To Workspace假设 $U_{dc} 400$ V则最终输出在 400 V 和 -400 V 之间切换。基波幅值理论上应为 $m \times 400 320$ V。4.4 设置仿真参数并运行仿真步长建议使用固定步长离散求解器方便后续 FFT 分析。仿真参数设置如下参数值Solverdiscrete (no continuous states)Fixed-step size1e-6 sStop time0.2 sSave to workspace勾选输出信号0.2 s 正好是 10 个 50 Hz 基波周期采样率 1 MHzFFT 频率分辨率可以做到 5 Hz基波和谐波信标都能准确定位。运行仿真后Scope 中可以看到典型的双极性 PWM 波形波形在 400 V 和 -400 V 之间高频切换正脉宽在正弦波峰值附近最宽过零附近最窄。5. 搭建单极性 SPWM 仿真模型单极性模型可以复制双极性模型修改得到。新建模型spwm_single.slx整体结构如下正弦波 Sine Wave参数与双极性模型相同。三角载波 Repeating Sequence参数相同。第一路比较Sine Wave 与 Repeating Sequence 通过 Relational Operator 比较输出 S1。第二路由 Gain 模块将 Sine Wave 取反然后与 Repeating Sequence 通过 Relational Operator 比较输出 S3。输出电压公式为 $U_{dc}(S_1 - S_3)$用 Sum 模块做减法再乘以 $U_{dc}$。将输出接到 Scope 和 To Workspace。这里关键的一步是取反后的比较结果 S3 暗含了半周期方向判断。当正弦波为正时它的相反数是负值不可能大于正三角载波因此 S3 恒为 0当正弦波为负时取反后变为正值才能与三角载波比较。从数学上看这个结构等价于用 $|u_r(t)|$ 和载波比较同时用 $u_r(t)$ 的符号决定输出方向。运行仿真后Scope 中应看到单极性 PWM 的特征正半周只有 400 V 和 0 V负半周只有 -400 V 和 0 V。与双极性波形相比电压跳变幅度少了一半输出谐波能量会更集中在载波频率附近。单极性与双极性的谐波差异在相同载波比和调制比下用 FFT 对比最能说明问题。普通 Scope 观察只能看“像不像”FFT 能看出“谐波到底在哪”所以下一节把 FFT 分析脚本放进去。6. 输出波形质量验证与 FFT 分析6.1 用 To Workspace 保存仿真数据为了对 PWM 波形做 FFT需要把输出电压数据导入 MATLAB 工作区。在模型中放置 To Workspace 模块命名变量为uoSample time 设为 -1继承仿真步长输出格式选择 Array 或 Timeseries 均可。建议选择 Timeseries这样时间和数据自动对应脚本处理更方便。双击 To Workspace 模块设置 Variable name 为uoSave format 为 Timeseries。6.2 FFT 谐波分析脚本仿真结束后在工作区中已经存在uo变量。下面这个脚本计算基波幅值和 THD同时绘制频谱图%% SPWM 输出 FFT 分析脚本 % 读取仿真数据Timeseries 格式 t uo.Time; v uo.Data; % 计算采样率 Fs 1 / (t(2) - t(1)); L length(v); % FFT 计算 Y fft(v); P2 abs(Y / L); P1 P2(1:floor(L/2) 1); P1(2:end - 1) 2 * P1(2:end - 1); freq Fs * (0:floor(L/2)) / L; % 基波频率 f0 50; % 找到基波幅值 [~, idx_fund] min(abs(freq - f0)); fund_amp P1(idx_fund); % 计算 2 到 50 次谐波能量 N_harm 50; harmonic_energy 0; for h 2:N_harm [~, idx_h] min(abs(freq - h * f0)); harmonic_energy harmonic_energy P1(idx_h)^2; end % THD 计算 THD sqrt(harmonic_energy) / fund_amp * 100; fprintf(基波幅值: %.2f V\n, fund_amp); fprintf(THD(2-50次): %.2f %%\n, THD); % 绘制频谱 figure; plot(freq, P1, b-, LineWidth, 1); xlim([0, 20000]); xlabel(频率 (Hz)); ylabel(电压幅值 (V)); title(SPWM 输出频谱); grid on;从理论上说当 m 0.8、$U_{dc}$ 400 V 时基波幅值应接近 320 V。如果 THD 脚本计算出的 THD 在几十个百分点以上先不要惊讶这是 PWM 波形本身的特性谐波能量集中在载波频率及其整数倍附近THD 偏高是正常现象重点要看谐波分布位置是否符合理论预期第一次大谐波群应出现在 $f_c 1050$ Hz 附近后面的谐波群在 2 倍、3 倍载波频率附近。6.3 判断仿真是否正确的标准模型是否搭对可以按下面的标准检查检查项预期结果基波幅值约等于 m × Udc误差在 2% 以内波形电平双极性为 Udc / -Udc单极性为 Udc / 0 / -Udc谐波分布第一次大谐波群出现在载波频率附近低频段谐波小载波比载波频率 1050 Hz50 Hz 基波对应 N 21如果基波幅值明显小于理论值优先检查调制比 m 设置是否超过 1或者载波幅值是否不是 1。当过调制发生时基波幅值不再等于 mUdc而是低于线性期望值。7. 批量仿真与参数扫描实际工程中经常需要比较不同调制比、不同载波比下的谐波表现。手动修改模块参数再重新运行效率太低。Simulink 支持通过set_param修改模型参数配合sim函数批量运行可以一次性得到完整的对比曲线。7.1 批量仿真脚本框架下面脚本以双极性 SPWM 模型为例扫描调制比 m 从 0.3 到 1.0 的基波幅值和 THD%% SPWM 调制比扫描脚本 clear; clc; % 扫描调制比 m_list [0.3, 0.5, 0.7, 0.8, 0.9, 1.0]; fund_list zeros(size(m_list)); thd_list zeros(size(m_list)); for i 1:length(m_list) m m_list(i); % 修改模型中的正弦波幅值 set_param(spwm_double/Sine Wave, Amplitude, num2str(m)); % 运行仿真 simOut sim(spwm_double, StopTime, 0.2); % 读取输出数据 uo simOut.uo; t uo.Time; v uo.Data; % 计算基波幅值和 THD调用之前封装好的脚本函数 [fund, thd] calc_spwm_thd(v, t, 50, 50); fund_list(i) fund; thd_list(i) thd; fprintf(m%.1f, 基波幅值%.2f V, THD%.2f %%\n, ... m, fund_list(i), thd_list(i)); end % 绘制结果 figure; yyaxis left; plot(m_list, fund_list, -o, LineWidth, 1.5); ylabel(基波幅值 (V)); yyaxis right; plot(m_list, thd_list, -s, LineWidth, 1.5); ylabel(THD (%)); xlabel(调制比 m); title(SPWM 调制比扫描); grid on; legend(基波幅值, THD, Location, best);注意这个脚本依赖一个函数calc_spwm_thd可以把上一节的 FFT 脚本内容封装成函数返回fund和thd两个值。这样每个仿真点都能输出量化结果比一个个看 Scope 波形高效得多。7.2 扫描结果的理论预期从仿真结果看可以预期以下现象m 在 0.3 到 1.0 范围内基波幅值随 m 近似线性增长曲线接近一条过原点的直线。THD 在调制比较低时相对较高因为此时输出脉冲很窄谐波占比大随着 m 增大到 0.7 到 0.9 区间THD 总体下降。m 超过 1 之后基波幅值不再线性增长出现饱和趋势THD 明显回升。这说明过调制区进入后调制收益迅速恶化。7.3 批量保存结果批量仿真结束后建议把结果保存到工作区或导出为表格方便写报告或后续分析% 保存扫描结果 result_table table(m_list, fund_list, thd_list, ... VariableNames, {ModulationIndex, FundamentalAmplitude, THD}); writetable(result_table, spwm_scan_results.csv);导出的 CSV 可以用 Excel、Python 或者其他工具直接读取不用每次重新跑仿真。8. SPWM 与 SVPWM 等效性仿真验证这是很多刚接触 SVPWM 的读者最关心的问题。前面数学模型部分已经推导过SPWM 注入 1/6 基波幅值的三次谐波后调制波峰值从 m 降低到 0.866m线性调制范围可扩大 15.47%。下面在 Simulink 中直接验证这个结论。新建一个模型或者复制双极性 SPWM 模型修改 Sine Wave 部分的调制波使其变成“基波 三次谐波”的形式。由于 Sine Wave 模块只能输出单一频率正弦波需要两个 Sine Wave 相加Sine Wave 1幅值 m频率 50 HzSine Wave 2幅值 m/6频率 150 HzSum 模块相加后作为调制波例如 m 1 时基波幅值为 1三次谐波幅值为 1/6。将调制波接入 Relational Operator与三角载波比较其余部分不变。运行仿真后用 FFT 脚本同样计算基波幅值。理论上在 m 1 且注入三次谐波的条件下基波幅值应接近 $U_{dc}$而普通 SPWM 在线性区最大只有 0.866 倍的等效效果。这里的差值 15.47%就是 SVPWM 相对 SPWM 电压利用率提升的来源。可以用一组对比实验来强化结论调制方式调制波形式最大线性调制比 m输出基波幅值上限相对 Udc普通 SPWM$m\sin(\omega t)$1.01.0SPWM 1/6 三次谐波$m[\sin(\omega t) \frac{1}{6}\sin(3\omega t)]$1.15471.1547SVPWM参考值隐含三次谐波与零序分量1.15471.1547因此在讨论“SPWM 与 SVPWM 等效”时更准确的说法是不注入谐波的普通 SPWM 线性调制范围小于 SVPWM但当 SPWM 注入最优三次谐波后两者在线性调制能力和输出基波幅值上限上等价。实际工程中SVPWM 往往以零序分量注入的形式实现本质也是在调制波中加入了共模性质的分量。9. 仿真性能与资源占用观察SPWM 模型本身非常简单不涉及电路级求解因此仿真资源占用很低。但在长时间仿真或批量扫描时仍需注意以下几点步长选择。固定步长从 1e-5 s 改为 1e-6 s数据量扩大 10 倍仿真时间也会明显增加。对纯调制逻辑模型1e-5 s 通常已经足够如果还要观察电流纹波或连接实际电力电子电路再考虑 1e-6 s。建议先采用大步长跑通流程再逐步缩小步长验证精度。数据记录量。To Workspace 输出如果记录整个仿真过程每个采样点都会占内存。0.2 s 仿真在 1e-6 s 步长下会产生 20 万个采样点每个采样点 8 字节单路输出约 1.6 MB问题不大但如果仿真时长到 10 s数据量就会膨胀到 80 MB 级别。可以通过 Set Sample Time 降采样或者只保存最后几个周期的数据。求解器选择。强烈建议使用discrete (no continuous states)求解器避免不必要的微分方程结算仿真速度比连续求解器快很多。批量仿真时可以在每次仿真后清空变量缓存避免多个仿真结果累积占用内存。建议用clear temp_var清理临时变量。端口占用问题。Simulink 模型本身不涉及网络端口但如果同时打开多个模型实例并开启外部模式或代码生成需要注意 MATLAB 工作区冲突尽量一次只跑一个批量脚本。10. 常见问题与排查方法问题现象可能原因排查方式解决方案Scope 中看不到 PWM 波形正弦波频率设置成了 rad/s不是 Hz检查 Sine Wave 的 Frequency 参数设置 2pi50改为2*pi*50或使用50*2*pi载波不是三角波Repeating Sequence 时间点设置错误检查 Time values 是否覆盖完整周期确保 [0, Tc/2, Tc] 三段时间连续输出电平与预期不符没有做 1/0 到 ±Udc 的映射检查 Gain 和 Bias 的数值先乘 2 再减 1最后乘 UdcTHD 计算结果异常偏大仿真时长太短导致 FFT 频率分辨率不足检查 FFT 基波定位是否准确仿真时长至少 10 个基波周期批量脚本运行报错模型名或模块路径不存在检查 set_param 中的模块路径用get_param查看实际模块路径单极性模型输出全为 0取反比较逻辑接反检查 S3 比较器的比较条件确保使用 -u_r 与 u_c 比较基波幅值小于理论值调制比 m 设置超过 1检查 Sine Wave 幅值是否大于 1将 m 调整到 0.9 以下对比仿真速度很慢连续求解器导致步长过小查看求解器设置改为离散固定步长求解器过调制输出波形畸变严重m 1脉冲宽度出现缺失检查输出波形和频谱避免长期工作在过调制区如果遇到模型文件打不开或模块版本不兼容优先检查 MATLAB 版本是否过低。Repeating Sequence、Relational Operator、To Workspace都是基础模块版本兼容性较高一般不会出错。11. 工程实践建议与合规说明SPWM 仿真跑通之后真正要到工程中使用还有几个建议值得记住。第一次先做最小验证。不要一上来就搭完整的三相逆变器模型。先用单相、双极性、固定调制比 0.8 的模型验证调制逻辑结果符合理论值后再增加复杂度。保留一套最小可运行模型。批量扫描脚本会不断修改模型参数建议保留一份没有改动的原始模型文件避免脚本跑完参数回不去。关注死区时间。仿真模型中的理想开关没有死区但实际 IGBT/MOSFET 驱动必须加入死区时间否则同一桥臂上下管直通。在 Simulink 中可以用 Transport Delay 模拟死区时间在 MCU 工程中死区时间通常由 PWM 外设寄存器直接配置。死区会使输出电压出现少量低次谐波在追求高性能的驱动系统中需要做死区补偿。代码生成前检查离散化。如果要把 SPWM 算法移植到 DSP 或 MCU建议在 Simulink 中先把模型设置为离散求解器使用Rate Transition处理不同采样率信号再进行 Embedded Coder 代码生成避免移植后出现时序不一致。在实际系统中注意安全边界。在真实逆变器上验证 SPWM 算法时必须带隔离、限流和过流保护。仿真里调制比设到 1.2 可能只是波形变差但在真实功率电路中可能触发过流或损坏功率器件。合规与授权提醒。本文中的仿真模型和脚本用于技术学习与算法验证。如果将 SPWM/SVPWM 算法用于商业产品或专利项目请确认相关知识产权的适用许可。使用真实电机、电源或并网设备进行测试时须遵守设备厂商的安全操作规范和所在地区的电气安全法规。12. 总结SPWM 是电力电子和电机控制方向最基础也最实用的调制算法之一。从数学模型角度看双极性 SPWM 的基波幅值线性关系是 $U_{o1m}mU_{dc}$谐波能量集中在载波频率整数倍附近单极性 SPWM 通过增加零电平减少了开关跳变幅值谐波表现优于双极性注入 1/6 基波幅值的三次谐波后SPWM 的线性调制范围可以提升 15.47%这个幅度关系正是 SVPWM 电压利用率优势的来源。本文给到的 Simulink 模型搭建流程、FFT 分析脚本和批量扫描脚本建议直接保存一份作为自己的 SPWM 算法模板。后续做三相逆变器、FOC 电机调速或者并网变流器时只需要在这个基础上扩展三相分支和死区补偿就能快速完成调制层验证。最容易踩的坑有两个一是 Sine Wave 的频率单位没有从 rad/s 换算到 Hz二是 FFT 分析前仿真时长太短导致谐波定位不准。先跑通单相双极性模型再做批量扫描和三次谐波注入对比整个 SPWM 知识链就完整了。
返回列表