ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

SPWM正弦脉宽调制:载波比、采样法、单双极性与86.6%利用率

2026/9/19 2:20:46 拓冰建站 浏览量
SPWM正弦脉宽调制:载波比、采样法、单双极性与86.6%利用率 简介这份电力电子SPWM调制学习教案面向电气工程、自动化等专业的在校学生及逆变电源方向的初学从业者用于系统建立正弦波脉宽调制的理论框架。压缩包共1个pptx文件约569KB以28页图文讲稿形式组织配有波形示意图与公式推导便于课堂讲授或自学翻阅。内容先从冲量等效原理切入说明SPWM的工作机理再对比同步调制与异步调制的载波比关系、脉冲对称性及开关频率变化规律并延伸到自然采样法与规则采样法等实现思路最后落到高频性能好、低频性能差以及输出滤波器参数设计等工程特点结合UPS逆变电源、三相正弦波逆变器说明应用场景。已有87人学习适合作为电力电子技术课程的配套讲义与复习提纲帮助读者厘清调制方式的选择依据。1. 从一份 28 页教案说起SPWM 到底在解决什么问题很多人第一次接触逆变电路都会疑惑同样是开关管导通截止为什么方波逆变器带不动电机、带不动变压器而 SPWM 一上就能把电流波形做得接近正弦那份 28 页的《电力电子 SPWM 调制学习教案》给的答案是冲量等效原理——大小、波形不同的窄脉冲作用于惯性系统只要冲量电压对时间的积分也就是面积相等输出响应就基本一致。这句话是整个正弦波脉冲宽度调制Sinusoidal Pulse Width ModulationSPWM的地基。换句话说我们不需要真的产生一个连续正弦电压只要用一串等幅不等宽的方波去凑出正弦的面积包络后级的电感、电机绕组这些惯性环节自然会把高频开关纹波滤掉留下低频正弦分量。教案把内容拆成三块SPWM 工作原理、单极性 SPWM 控制、双极性 SPWM 控制中间穿插同步/异步调制和自然采样、规则采样两种数字实现方式。学完这套东西你能看懂变频器、UPS 逆变电源、三相并网逆变器里那套调制逻辑也能自己用单片机或者 Simulink 把波形跑出来。它适合电力电子、电气工程方向的学生也适合做电机驱动、储能 PCS 的工程师补基础。2. SPWM 载波比与同步/异步调制的参数选择2.1 载波比 N 的定义与两条技术路线教案里把载波频率记作 f_c调制波频率记作 f_r二者之比 N f_c / f_r 称为载波比。N 是 SPWM 里最有分量的一个参数它直接决定了开关损耗、谐波分布和数字实现的难度。按载波与调制波是否保持同步、N 是否恒定调制方式分成两类。同步调制任意调制波频率下 N 保持恒定f_c 与 f_r 严格成正比。f_r 升高f_c 跟着升高所以开关频率不固定同时一个调制波周期里的脉冲数固定不变。当 N 取奇数时正负半个周期以及每个半周期前后 1/4 周期的脉冲波形具有对称性基波相位不会跳动。异步调制f_c 固定不变f_r 变化时 N 随之反比变化。优点是开关频率固定输出滤波器比如 UPS 里的 LC 滤波器参数好设计缺点是调制波半周期内脉冲数不固定起始和终止脉冲的相位角也不固定波形不对称会造成基波相位跳动三相系统里表现为三相输出不对称。2.2 同步与异步的取舍对照对比项同步调制异步调制载波频率 f_c随 f_r 变化固定不变载波比 N恒定随 f_r 反比变化半周期脉冲数固定变化波形对称性N 为奇数时对称半周期内不对称基波相位不跳动存在跳动滤波器设计困难容易高低频表现高频好、低频差提高 f_c 后可兼顾表里的结论落在工程上就是一句话变频调速这类 f_r 大范围变化的场合会在低频段用异步调制、高频段切同步调制切换点通常卡在 N 降到某个下限的位置教案提到的思路是异步调制时尽量提高载波频率使 f_r 较高时仍能保持较大载波比。具体阈值取决于开关器件能力IGBT 一般把 f_c 放在 210 kHzSiC 器件可以往上走到几十 kHz。2.3 用一段 Python 把两种调制的波形算出来光看结论容易忘把波形画出来印象最深。下面这段代码用同一套正弦调制波分别按同步和异步生成 SPWM 占空比序列。import numpy as np def spwm_duty_sync(f_r, N, fs, M0.8): 同步调制载波比 N 恒定f_c N * f_r f_c N * f_r # 载波频率随调制波频率走 t np.arange(0, 2 / f_r, 1 / fs) # 采样两个调制波周期 tri 2 * np.abs(2 * (t * f_c - np.floor(t * f_c 0.5))) - 1 # 三角载波幅值[-1,1] sine M * np.sin(2 * np.pi * f_r * t) # 正弦调制波 return t, sine, tri, (sine tri).astype(int) # 比较得到开关序列 def spwm_duty_async(f_r, f_c, fs, M0.8): 异步调制载波频率 f_c 固定载波比 N 随 f_r 变化 N f_c / f_r return spwm_duty_sync(f_r, N, fs, M) # 复用上面的逻辑N 由 f_c 反推 t, s, c, g spwm_duty_sync(f_r50, N21, fs200e3, M0.8) print(同步调制 载波比 N , 21, 载波频率 f_c , 21 * 50, Hz) print(一个调制波周期内脉冲数约 , int((g[:int(200e3/50)]).sum())) # 统计正半周脉冲逻辑说明spwm_duty_sync先由 N 和 f_r 算出 f_c再构造幅值在 -1 到 1 之间的三角载波和幅值为 M 的正弦调制波逐点比较得到开关状态。参数方面N取 21、51、99 这类奇数是为了拿到奇对称、基波不跳动的波形M是调制度取值范围 01超过 1 会进入过调制区输出出现削顶失真fs是仿真采样率至少要取 f_c 的 20 倍以上否则比较出来的脉宽台阶太粗。把f_r从 50 Hz 改成 5 Hz同步调制下 f_c 会从 1050 Hz 掉到 105 Hz低频谐波立刻恶化这正是教案说同步调制低频性能较差的原因。改成spwm_duty_async(f_r5, f_c2000, ...)f_c 锁死在 2 kHzN 从 400 掉到 40滤波器不用重设计但半周期脉冲数在变。工程上怎么选就看你的 f_r 波动范围和对滤波器体积的容忍度。3. 自然采样与规则采样从超越方程到单片机可执行3.1 自然采样法的数学本质与它的死穴自然采样法做的事很直白把三角载波和正弦调制波的函数式联立解出两条曲线的交点时刻交点之间的时间就是脉宽。用几何相似三角形关系令三角载波幅值为 1、调制度为 M、正弦调制波角频率为 ω₁可导出脉宽表达式近似为t₂ (T_c / 2) · [1 (M / 2)(sin ω₁t_A sin ω₁t_B)]其中 T_c 是载波周期t_A、t_B 分别是脉冲前后沿对应的采样时刻。问题在于t_A 和 t_B 本身就是未知量方程两边都含未知量这是一个超越方程没有解析解只能迭代求根。对基于微处理器的数字控制系统来说每个开关周期都跑一次迭代CPU 开销和定时抖动都受不了所以自然采样法基本只作为原理参照实际产品里很少直接落地。3.2 规则采样法的简化与工程实现规则采样法的简化思路是把正弦调制波用阶梯波拟合并且规定每个载波周期内只在固定的时刻采样一次一般取三角载波峰顶或谷底对应的中心线时刻。这样交点 A、B 对中心线对称脉宽计算就退化成一次乘加运算。课上的结论是规则采样脉宽 t₂ (T_c / 2)(1 M·sin ω₁t_e)其中 t_e 是采样时刻。因为 M、ω₁、t_e 全是已知量单片机一个周期只要算一次正弦值可直接查表或者用 CORDIC 定点化实现。/* 规则采样法每个 PWM 周期计算一次比较值STM32 高级定时器场景 */ #define TC_HALF 4000 /* 半载波周期对应的计数值对应 T_c/2 */ #define SIN_TAB_LEN 1024 /* 正弦表长度覆盖 0~2pi */ extern const uint16_t sin_tab[SIN_TAB_LEN]; /* 预存 (1sin)*TC_HALF/2 的定点值 */ void spwm_update(uint32_t phase_idx, uint16_t M_q15, uint32_t *ccr) { /* M_q15 为 Q15 格式调制度phase_idx 为当前采样点在正弦表中的索引 */ uint32_t s sin_tab[phase_idx % SIN_TAB_LEN]; /* 已含直流偏置与半周期缩放 */ uint32_t duty ((uint64_t)s * M_q15) 15; /* 定点乘避免浮点开销 */ *ccr duty; /* 写入定时器比较寄存器 CCR */ }逻辑说明sin_tab预先存好(1 sinθ)/2 × TC_HALF把直流偏置和半周期缩放一次做完中断里只剩一次乘法和移位。参数上TC_HALF由定时器时钟和载波频率决定比如 168 MHz、载波 10 kHz、中央对齐模式下计数周期对应 168e6 / (2×10e3) 8400半周期即 4200取整要留死区余量。M_q15用 Q15 定点0x7FFF 对应 M1这样整个计算无浮点适合在中断里跑。注意规则采样法在载波比 N 较低比如低于 15时阶梯波拟合正弦的误差会明显放大输出电压的低次谐波抬升。异步调制时 N 会随 f_r 下降低频段如果 N 掉得太狠要么提高 f_c要么切回同步调制。3.3 三种实现路线的对比教案把 SPWM 实现方法归成计算法自然采样、规则采样和专用 SPWM 集成电路、模拟比较法几类。落到实际项目常见做法是模拟比较法正弦波和三角波直接送比较器电路简单但频率、幅值调整靠硬件灵活性差适合小批量或教学演示。查表 定时器把规则采样的占空比表固化在 Flash中断里查表写 CCR是 STM32、DSP 上最常见的方式CPU 占用低谐波可预测。专用集成电路与硬件 PWM 外设让芯片内部的载波发生器和比较单元干活CPU 只负责更新调制波采样值适合三相逆变器、变频器这类多路输出场景。选哪条路核心是看你对波形质量、开关频率上限和成本的三者权衡。数字查表方式的可复现性最好也是后面仿真和实测能对得上的前提。4. 单极性与双极性 SPWM 的桥臂开关逻辑4.1 单极性调制两桥臂一路共用调制波单极性 SPWM 的特征是输出脉冲只有单极性输入正半周时输出全是正极性脉冲负半周时全是负极性脉冲。实现上需要三角载波极性与正弦调制波极性相同也就是单极性三角载波。控制逻辑是对 T1/T2 桥臂和 T3/T4 桥臂分别做双极性 SPWM 调制两桥臂共用同一个调制波 V_r。区别在载波——T1/T2 用 V_cT3/T4 用反相或移相得到的 -V_c。这样V_r V_c 时 T1 通、T2 断V_an V_D/2V_r V_c 时 T1 断、T2 通V_an -V_D/2同理 T3/T4 由 -V_c 比较在 V_r -V_c 时 T4 通V_r -V_c 时 T3 通最终输出电压 V_ab V_an - V_bn可能取 V_D、-V_D、0 三种状态其中 0 状态出现在 T1 与 T3 同时导通、或 T2 与 T4 同时导通的时候。4.2 双极性与单极性的关键差别双极性调制下同一桥臂上下管严格互补V_ab 只在 V_D 和 -V_D 之间跳没有零电平。单极性因为引入了零电平输出电压的等效开关频率翻倍同样的开关频率下谐波位置更高、更靠近开关频率附近滤波器可以做小。代价是控制逻辑多一路反相载波且需要注意死区对零电平区间的影响。对比项单极性 SPWM双极性 SPWM载波V_c 与 -V_c 两路单路 V_c输出电平V_D、0、-V_DV_D、-V_D等效开关频率2 倍1 倍低次谐波少多控制复杂度稍高低典型场合单相并网、UPS教学、低成本逆变注意单极性调制在过零点附近由于零电平状态的存在共模电压和漏电流表现和双极性不同做光伏并网逆变器时要专门处理这个区间。4.3 在 Simulink 里把两种波形跑出来用 Simulink 复现教案结论最省事的搭法是正弦波 三角波 → 比较器 → 桥臂逻辑。要点载波比 N 取奇数如 21单极性时用两路反相三角波双极性只用一路。求解器用定步长步长取 1/(100·f_c) 量级避免比较器过零抖动。调制度 M 从 0.5 扫到 1.1观察过调制时 V_ab 的削顶。对应的 MATLAB 脚本可以先把占空比序列算好再喂给仿真便于和上一章 Python 结果对照f_r 50; N 21; fs 1e6; M 0.8; t 0:1/fs:2/f_r - 1/fs; tri 2*abs(2*(t*f_r*N - floor(t*f_r*N 0.5))) - 1; % 三角载波 sine M*sin(2*pi*f_r*t); % 调制波 g1 double(sine tri); % T1/T2 桥臂 g3 double(sine -tri); % T3/T4 桥臂反相载波 Vab (2*g1 - 1) - (2*g3 - 1); % 归一化输出电平 F abs(fft(Vab)); F F(1:floor(end/2)); % 看频谱 [m, idx] max(F(2:end)); fprintf(基波在 %d 次\n, idx1);逻辑说明g1是 T1 相对 T2 的开关状态g3用-tri得到反相载波下的状态两者相减就是归一化的 V_ab。fft那两行是为了确认基波落在 1 倍频、最低次谐波落在 N 次附近。参数上fs要远大于 N·f_r否则三角波本身就被采成折线频谱会冒出假谐波。跑完对比单极性两路载波和双极性只用 g1能看到前者最低次谐波位置翻倍。5. 线电压利用率 86.6% 的来历与几个验证技巧5.1 从相电压峰值倒推 86.6%热搜里常问SPWM 的线电压利用率最高只有 86.6% 是怎么算的。推法不复杂。SPWM 线性调制区里调制波幅值不能超过载波幅值否则进入过调制。设三角载波峰峰值为 V_D对应母线电压正弦调制波幅值上限就是 V_D/2于是相电压基波峰值 V_ph M·V_D/2M 最大取 1即相电压峰值上限 V_D/2。三相星形接法下线电压峰值是相电压峰值的 √3 倍V_ll √3·V_D/2 ≈ 0.866·V_D。也就是说线电压基波峰值最多到母线电压的 86.6%。换成有效值线电压基波有效值约为 0.612·V_D。想突破这个值就得用三次谐波注入SVPWM 等效把线性区扩大到 V_D/√3 的相电压峰值线电压利用率提到 100%这就是为什么变频器普遍用 SVPWM 而不是纯 SPWM。5.2 三个能立刻上手的验证动作教案是静态文档但结论都可以自己跑出来。给几个不费事的验证技巧一、用上一章的 MATLAB 脚本把 M 从 0.9 慢慢加到 1.2记录 V_ab 基波峰值画一条 M 对基波幅值的曲线。M ≤ 1 时曲线是直线M 1 后开始变弯弯曲点就是线性区边界对应 86.6% 那个上限。二、统计半周期脉冲数验证同步/异步差异。把 f_r 从 50 Hz 扫到 5 Hz同步调制下脉冲数恒定、载波频率跟着掉异步调制下脉冲数从多到少地变。拿 Python 脚本里的g数组按半周期切片计数一眼就能看出差别。三、看基波相位跳动。异步调制时把相邻两个调制波周期的正半周波形叠在一起起始脉冲的相位角对不齐叠加图上能看到错位同步调制取 N 为奇数时两周期几乎完全重合。这个现象在三相系统里就是三相不对称的根因做电机驱动时如果低速段有转矩脉动先查载波比是不是设得不合适。5.3 数字实现里最容易翻车的地方最后说一个实操坑规则采样法的采样时刻必须严格对准三角载波的中心线或峰谷一旦定时器重载值和中断触发点错开半个周期算出来的脉宽会整体偏移谐波位置全乱。常见的验证方式是输出一个 GPIO 翻转信号用示波器和 SPWM 输出脚一起看确认翻转点落在三角载波顶点上而不是斜边上。另外M 接近 1 时如果定时器比较值取整方向不一致正负半周脉宽会出现不对称输出电压里会多出偶次谐波这个用示波器的 FFT 功能一看就露馅——遇到偶次谐波先怀疑脉宽对称性而不是去改滤波器。本文还有配套的精品资源点击获取