ARTICLE DETAIL

建站实战干货

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

从SG3525到STM32 SPWM:逆变器电路选型、调试与THD优化

2026/9/17 11:52:06 拓冰建站 浏览量
从SG3525到STM32 SPWM:逆变器电路选型、调试与THD优化 简介这份电鱼机与逆变器电路资料合集面向电子DIY爱好者与逆变电源初学者系统整理了新式、老式各类鱼机的电路结构。内容覆盖自激式、自激振荡、反激励自控、脉冲推动、传统多谐振荡、振上振、互推式、高频机、单边式、电子白金机等十余种机型并延伸到CD4011、NE555等芯片搭建的单边机方案以及TL494、SG3525的引脚功能、参数数据与50Hz正弦波、220V标准方波逆变器设计实例800W晶体管式、600W双硅机等功率级电路亦有涉及可帮助读者建立对振荡波形、脉宽与电压波形等关键问题的判断依据。资料为单个doc文档压缩包约4.54MB另有252人学习下载适合按机型检索电路图、对照芯片手册复盘设计思路的进阶参考。仅供电子技术学习请勿用于非法电捕鱼。1. 拆开两台机器先看清两代逆变器电路的分水岭拆一台用了七八年的车载逆变器里面大概率是 TL494 或 SG3525 加一对 MOS拖着线包粗大的工频变压器而同样两千瓦级别的储能离网机板子上找不见这些模拟芯片换成一颗单片机做 SPWM前级老老实实推挽升压后级全桥调制整机重量掉了一半。这两代电路不是简单的新替旧老式的抗冲击、好修、抗干扰强新式的效率高、波形干净、能并机、能通信各自在不同功率段和场景里都还站着。下面讨论的逆变器电路都限定在光伏、储能、车载、UPS 这类合法用途上只聊拓扑、参数和调试。要处理的问题很具体老式方案怎么选 SG3525 还是 TL494、振荡频率和死区怎么算新式单片机方案怎么用 STM32 定时器吐出 SPWM、LC 滤波截止频率定在哪、THD 为什么降不下去两电平全桥和三电平 NPC 在硬件上到底差多少钱以及从打样到带载采样链路、保护、自动化测试怎么搭。适合有点模拟电路底子、准备自己搭离网逆变器或者做硬件选型的人看。2. 老式逆变器电路SG3525 推挽升压的骨架与参数计算2.1 老式方案的三条典型骨架以及它为什么还没被淘汰第一类是纯工频机50Hz 方波或准正弦直接怼工频变压器电路最简单成本最低缺点也最明显铁芯大、空载电流大、方波输出带感性负载发热严重。第二类是目前见得最多的前级 SG3525 推挽把 12V/24V/48V 升到 300V 以上整流滤波成高压母线后级 H 桥再用 50Hz 调制输出还是走工频变压器或者直接 LC 滤波。第三类是前级高频升压、后级高频 SPWM变压器体积最小但对环路和 EMC 要求最高属于新式做法的范畴。老式模拟芯片方案能活到今天理由不复杂。SG3525 内部带误差放大器和软启动外围十几个件就能工作短路保护和过流保护靠外部比较器拉 shutdown 脚即可坏了换芯片就能修。更关键的是它天然适合推挽拓扑双端交替输出自带死区两路驱动可以直接推变压器或者经图腾柱去推 MOS。在 500W 到 3kW 这个区间用它的综合成本仍然比上一颗单片机的方案低。不过边界也很清楚。模拟 PWM 只能调占空比做不出正弦调制输出波形要么是方波要么靠后级 H 桥做 50Hz 方波换向THD 轻松超过 10%。要做纯正弦要么前级升压再加 SPWM 后级要么干脆整机数字化。对比项老式模拟方案新式单片机方案控制核心SG3525 / TL494STM32 等 MCU前级开关频率2050kHz50150kHz后级调制50Hz 方波换向20kHz SPWM输出 THD5%15%1%3%空载损耗偏高低可打间歇模式可维护性换件即修依赖固件与调试口并机与通信基本没有支持 CAN/485可并联2.2 SG3525 外围关键参数振荡频率、死区与软启动SG3525 的振荡频率由 RT、CT 和死区电阻 RD 共同决定数据手册给出的关系近似为 f_osc 1 / (CT × (0.7 × RT 3 × RD))双端输出的开关频率是 f_osc 的一半。实际布板和器件容差会带来偏差所以算完必须用示波器量。# sg3525_freq.py 估算 SG3525 振荡频率与输出开关频率 def sg3525(rt_ohm, ct_f, rd_ohm): f_osc 1.0 / (ct_f * (0.7 * rt_ohm 3.0 * rd_ohm)) return f_osc, f_osc / 2.0 # 双端输出频率 振荡频率 / 2 for rd in (0, 100, 220, 470): f_osc, f_out sg3525(10_000, 4.7e-9, rd) print(fRT10k CT4.7n RD{rd:4d}Ω - f_osc{f_osc/1000:6.2f}kHz, 输出{f_out/1000:6.2f}kHz)这段代码把 RT 固定 10kΩ、CT 固定 4.7nF只扫 RD。逻辑上 RD 越大死区越长、频率越低两者是耦合的想让死区大一点又不想掉频率就得同步减小 CT 或 RT。参数选择上推挽变压器的工作频率一般落在 20kHz 到 50kHz低于 20kHz 变压器体积压不下来还容易听到啸叫高于 50kHz 则 MOS 开关损耗和变压器趋肤效应一起上来。RD 从 0 加到 220Ω实测死区会从不到 1µs 拉到 2µs 左右具体数值受器件和布线影响一定要在栅极上量。软启动靠 8 脚外接电容常见 4.7µF10µF取值越大启动越缓能有效压住上电瞬间的母线冲击。补偿脚接 RC 网络做电压环的极点零点配置很多人直接照抄典型值也能跑但带非线性负载时会出现低频振荡。注意SG3525 的 10 脚 shutdown 是保护入口拉高即封锁输出。过流保护一定要用独立的比较器去拉它别指望靠芯片自身限流。2.3 后级 H 桥与工频变压器的接线以及示波器上必须确认的四件事后级 H 桥用 4 个 MOS 或者 IGBT由 50Hz 方波驱动上下桥臂之间靠变压器励磁电流自然换向。如果输出走工频变压器注意变压器初级串联的隔直电容不能省否则桥臂不对称会直接导致偏磁饱和几分钟就能把管子烧掉。上电顺序建议从低压开始先不接后级只给 SG3525 供电看两路驱动波形再给前级小电压比如 5V 输入看推挽波形最后加满压、带假负载。示波器上要确认的四件事一是两路栅极波形的死区是否真的存在不能有交叠二是变压器原边电流波形是否对称出现单向尖峰说明偏磁三是高压母线纹波纹波过大通常是滤波电容容量不够或 ESR 偏高四是满载下 MOS 的漏源电压尖峰超过耐压 80% 就要加吸收或者换低寄生电感的布局。变压器匝比按最低输入电压算留 10% 裕量。比如 24V 系统最低按 20V 设计目标母线 340V匝比取 1:17 左右再根据实测调整。3. 新式逆变器电路STM32 单片机 SPWM 与高频升压链路3.1 从模拟 PWM 换到单片机换来的到底是什么换成单片机最直接的好处是波形可控。SG3525 只能输出占空比可调的方波而 STM32 可以按正弦表逐点改变比较值直接生成 SPWM后级全桥做 20kHz 调制LC 滤波之后就是纯正弦。THD 从 10% 量级降到 2% 左右带感性负载不再挑食。第二个好处是保护维度变多。母线电压、输出电流、散热器温度、变压器温度全部进 ADC软件里能做逐周期限流、软启动、过载降额、短路封波这些在模拟方案里需要一堆比较器和电位器才能凑出来。第三个好处是通信和并机离网并联需要下垂控制或者 CAN 同步模拟电路做不了。代价也很实际多了一个固件维护面出问题要分清楚是硬件还是软件开关频率上去了驱动和 EMC 的难度同步上升调试口、boot 配置电路、隔离 485 这些外围也都要占板子面积。3.2 用 STM32 定时器输出 SPWM正弦表与中断刷值核心思路是把一个正弦周期分成 N 个点存成表每个载波周期取一个点写进比较寄存器。以 72MHz 主频的 STM32F103 为例TIM1 中心对齐模式下载波频率 f_c 72MHz / (2 × ARR)。#include stdint.h #include math.h #define TABLE_SIZE 200u // 一个正弦周期的采样点数越多 THD 越低但中断越重 #define PWM_PERIOD 3600u // ARR决定载波频率 72MHz/(2*3600) ≈ 10kHz #define MOD_INDEX 0.90f // 调制比留 10% 裕量避免过调制削顶 static uint16_t sin_table[TABLE_SIZE]; void spwm_table_init(void) { for (uint32_t i 0; i TABLE_SIZE; i) { float s sinf(2.0f * 3.1415926f * (float)i / (float)TABLE_SIZE); // -1..1 映射到 0..PWM_PERIOD中心值对应零输出 sin_table[i] (uint16_t)((float)PWM_PERIOD * 0.5f s * (float)PWM_PERIOD * 0.5f * MOD_INDEX); } } // 每个载波周期触发一次更新两路比较值 void TIM1_UP_IRQHandler(void) { static uint32_t phase 0; const uint32_t step 3; // 输出频率 载波频率 * step / TABLE_SIZE TIM1-SR ~TIM_SR_UIF; uint16_t ccr sin_table[phase]; TIM1-CCR1 ccr; // 主桥臂 TIM1-CCR2 PWM_PERIOD - ccr; // 互补桥臂双极性调制 phase step; if (phase TABLE_SIZE) phase - TABLE_SIZE; }逻辑说明正弦表负责幅度phase 的增量 step 负责频率两者解耦改频率不用重算表。输出频率的关系是 f_out f_c × step / TABLE_SIZE载波 10kHz、表长 200、step 取 3 时输出约 150Hz想要 50Hz 就把 step 调成 1 并降低载波或者加长表。参数说明MOD_INDEX 决定最大调制度设成 1.0 在母线波动时会削顶产生平顶波形THD 反而恶化PWM_PERIOD 直接决定载波频率和比较分辨率3600 对应 10kHz想提到 20kHz 就改成 1800但分辨率下降低调制比时量化噪声会显现。载波频率的选择上20kHz 以上能躲开人耳但也意味着每次开关损耗都翻倍做 3kW 以内的机器我一般把前级推到 50kHz 以上、后级 SPWM 载波放在 16kHz 到 20kHz兼顾滤波体积和效率。3.3 高频变压器、LC 滤波与 THD 之间的取舍LC 滤波的截止频率要明显低于载波、明显高于基波。经验做法是取载波的 1/10 到 1/1520kHz 载波对应 1.3kHz 到 2kHz。截止频率公式为 f 1 / (2π√(LC))反推元件值很快。import math def lc_cutoff(l_h, c_f): return 1.0 / (2.0 * math.pi * math.sqrt(l_h * c_f)) for l in (0.5e-3, 1e-3, 2e-3): for c in (4.7e-6, 10e-6, 22e-6): print(fL{l*1e3:4.1f}mH C{c*1e6:5.1f}uF - fc{lc_cutoff(l,c):7.1f}Hz)参数说明电感选小了滤波不够、载波残留大电感选大了体积和铜损都上来还会和负载电容形成谐振峰。实际调试时要在空载和满载两种状态下各看一次输出波形空载时 LC 阻尼最差容易在谐振点附近鼓起一个包。如果波形在某个负载点突然畸变基本就是 LC 谐振或者电压环带宽压到了输出频率附近。THD 降不下去按顺序排查四件事正弦表长够不够、调制比是否已经削顶、死区是否过大死区会引入低次谐波、采样和控制环有没有把电压环带宽设到高于基波频率。很多人的 THD 卡在 5% 下不来最后发现是死区设了 3µs。3.4 两电平与三电平拓扑的硬件差异钱花在哪三电平 NPC 相对两电平全桥最直观的差别是器件数量和驱动路数翻倍但每只管子承受的电压只有母线的一半dv/dt 也下降一半输出电平数增加让同等开关频率下 THD 更低。对比项两电平全桥三电平 NPC主开关管数量48钳位二极管无4单管耐压要求等于母线电压约母线电压一半驱动与隔离电源4 路8 路成本明显上升输出电平数2335相同载波下 THD较高明显更低典型母线电压48V400V600V1000V选型上48V 或 400V 母线、3kW 以内的离网机两电平全桥完全够用硬上三电平只会让成本和驱动复杂度白涨。母线到 700V 以上、功率超过 10kW 的光伏和家储场景三电平的收益才体现出来器件耐压降级带来的导通损耗下降往往能抵消多出来的驱动损耗。吉利这类做三电平逆变器的车厂核心动因也是高压平台上单管耐压和开关损耗的平衡。4. 逆变器电路从打样到带载采样、保护与排错4.1 采样链路差分放大器和运放的取值母线电压采样一般用高压侧分压加差分放大电路或者用隔离运放。差分放大电路的四个电阻必须严格配对比值误差直接变成共模误差1% 精度的电阻在 300V 母线上会带来几伏的偏差。常见的运放经典电路组合是差分放大采母线、跟随器做阻抗隔离、比较器做过流封锁。// 母线电压还原分压 差分放大后等效衰减 21:1中点偏置 1.65V #define ADC_FULL 4095.0f #define ADC_VREF 3.300f #define DIV_RATIO 21.0f #define OFFSET_V 1.650f float bus_voltage_get(uint16_t raw) { float v (float)raw / ADC_FULL * ADC_VREF; // 还原到 ADC 引脚电压 return (v - OFFSET_V) * DIV_RATIO; // 去偏置再乘衰减比 }参数说明DIV_RATIO 是分压网络和差分放大增益的合成值必须用万用表实测标定不要只按电阻标称值算。OFFSET_V 是给双向电流采样的中点采单向电压时可以去掉。020mA 和 010V 的工业采集接口同理前者靠精密采样电阻转成电压后者直接分压注意输入阻抗和共模范围。采样还要考虑时间常数。ADC 前端的 RC 滤波电路截止频率取在 1kHz 到 5kHz太高了开关噪声进来太低了动态响应跟不上过流保护会迟一步。4.2 死区、直通与环流高频电路的三个翻车点第一是死区不足导致上下管直通。示波器双通道同时看上下栅极中间必须有明确的无重叠区栅极驱动电阻越大、关断越慢死区就要留得越宽。一般 20kHz 载波下留 1µs 到 1.5µs 是稳妥值。第二是驱动回路的地弹和共模干扰。高频桥臂的源极电位在跳变如果驱动地和高功率地共用一段走线栅极上会叠出尖峰表现为随机炸管。做法是每路驱动单独走开尔文连接驱动电源用独立隔离模块。第三是并联或并机时的环流。两台逆变器并联输出电压幅值和相位只要有微小差异就会在输出之间形成环流轻则发热重则跳保护。解决办法是加输出电抗器限制环流斜率配合下垂控制让每台机器按容量分配无功。排查时用钳形表分别夹两台机器的输出线环流方向一正一反就能确认。提示带载炸管之前先做一次低压满载试验。把输入降到额定的一半带满额定电流所有波形正常再升压能拦下大部分驱动和死区问题。4.3 逆变器自动化测试把 THD、效率、温升固化成脚本手动记录数据很容易漏点尤其是温升这类慢变量。用一块带隔离 485 的板子把逆变器的调试口接出来配合电子负载写个脚本就能把效率曲线、THD 随负载变化、温升全部跑完并落成 CSV。import serial, csv, time PORT, BAUD COM7, 115200 POINTS [0.0, 0.25, 0.5, 0.75, 1.0] # 负载比例 with serial.Serial(PORT, BAUD, timeout2) as ser, \ open(inv_test.csv, w, newline) as f: w csv.writer(f) w.writerow([load, vin, vout, thd, eff, temp_c]) for k in POINTS: ser.write(fLOAD {k:.2f}\n.encode()) # 下发档位给电子负载 time.sleep(3) # 等热平衡和读数稳定 vin, vout, thd, eff, temp ser.readline().decode().strip().split(,) w.writerow([k, vin, vout, thd, eff, temp])参数说明POINTS 是负载比例序列必须包含空载点因为空载损耗最能暴露变压器和驱动的问题time.sleep 的 3 秒是经验值功率大的机器要拉到 10 秒以上否则温度读数偏低。这套脚本跑下来一张表就能看出效率峰值出现在哪个负载点、THD 是否随负载单调恶化。家储场景的测试还要补短路恢复、过载降额和一小时温升稳定值。5. 把老式与新式电路混着用离网储能改造里的几个实用手法最省事的混血方案是前级保留 SG3525 推挽后级把 50Hz 方波换成单片机 SPWM。前级模拟电路成熟、抗冲击好后级数字化拿到纯正弦输出改动量集中在后级驱动和固件老机器升级基本都走这条路。闭环控制上离网带感性负载建议做电压外环加电感电流内环的双闭环。外环管输出有效值内环管电感电流瞬时值内环带宽取外环的 5 到 10 倍。只做单电压环时突加整流性负载会出现输出电压跌落再缓慢恢复甚至振荡加了内环之后动态响应能压到一个工频周期以内。LC 滤波器的参数要在满载和空载两种极端下各验一次谐振峰靠近基波或靠近载波都会出事。我的做法是把截止频率定在载波的 1/15然后在空载下用示波器看有没有明显鼓包有就把电感的等效串联电阻考虑进去或者加阻尼网络。并机环流除了下垂控制还有一个低成本办法在每台机器输出串一个小电抗器电抗值按额定电流的 5% 压降选能把环流的上升斜率压下来给控制环留出响应时间。家储逆变器做老化测试时把 THD 和效率同时记录在一条时间轴上比单独看终值有用得多。很多间歇性故障表现为某个温度点之后 THD 突然从 2% 跳到 5%这时候基本可以锁定是驱动延时随温度漂了把死区从 1µs 放到 1.5µs 再复测一次通常比换一堆元件更有效。本文还有配套的精品资源点击获取