简介:一份聚焦电鱼机与逆变器电路的电路图合集文档,面向电子爱好者、逆变电源DIY玩家以及需要查阅经典振荡与推动电路的制作与维修人员。内容按自激式、自激振荡、反激励自控、脉冲推动、传统多谐振荡、振上振、互推式、高频机、单边式、电子白金机与自控电子捕鱼机等机型展开,并收录用CD4011、NE555芯片搭建的单边电路,以及TL494、SG3525的引脚功能、参数数据与50Hz正弦波、220V方波逆变器设计实例。压缩包内共1个doc文件,约4.54MB,便于离线保存与随时翻查,已有252人学习下载。读者可获得各机型的电路结构与元件参数、实用家用逆变器方案,以及用IC芯片设计逆变器的完整思路,适合按机型对照选型、检修与仿制时参考。
1. 从老式自激到新式 SPWM:逆变器电路这套体系在讲什么
拆开一台用了十年的车载逆变器,里面往往只有一片 SG3525、两只功率管加一个工频变压器;再拆一台今年的储能逆变器,板子上是 STM32、六路隔离驱动、三电平桥臂和一排霍尔传感器。同样是「把直流变成交流」,两代电路的差别不在元件数量,而在控制方式:老式靠模拟芯片的自由振荡边沿加固定占空比,新式靠定时器产生 SPWM 再加电压电流闭环调节。
这门手艺沿着三条线展开:SG3525 推挽电路的频率、死区、匝比怎么算;STM32 单片机逆变器的 PWM 配置、采样链路、双闭环代码怎么写;两电平与三电平 NPC 的器件差异、相电压输出时序和中点电位怎么处理。落地场景是离网储能、车载电源、光伏前级这类通用直流—交流变换,不涉及任何违法用途。
适合两类人:手里攒着一堆老式逆变器图纸、想搞懂每个电阻电容为什么这么取的人;以及正在用单片机做数字电源、被死区、采样偏置、中点电位卡住的人。下面从最老的那套电路开始拆。
2. 老式逆变器电路:SG3525 推挽拓扑的参数计算与调试
老式逆变器电路的知识密度集中在三个地方:振荡频率怎么定、变压器匝比怎么算、出问题时示波器探哪里。这三件事搞明白,SG3525 这一代方案基本就能自己改参数了。
2.1 SG3525 的振荡频率、死区与占空比上限
SG3525 内部是一个振荡器加两路互补输出,频率由 6 脚 RT、5 脚 CT 和 7 脚放电电阻 RD 共同决定,常用关系式是:
f_osc = 1 / (CT × (0.7 × RT + 3 × RD))
RD 不只是频率项,它同时决定两路输出的死区——RD 越大,CT 放电越慢,互补输出的切换间隔越宽。这就是为什么同样想跑 30kHz,改 RT 和改 RD 得到的结果不一样:改 RT 主要是挪频率,改 RD 是在频率和死区之间做交换。常见做法是先按目标频率选 RT、CT,再用 RD 微调死区,最后拿示波器量实际波形。
| RT | CT | RD | 计算频率 | 典型用途 |
|---|---|---|---|---|
| 8.2 kΩ | 4.7 nF | 100 Ω | 约 35 kHz | 铁氧体高频推挽 |
| 6.8 kΩ | 4.7 nF | 100 Ω | 约 42 kHz | 小体积适配器 |
| 4.7 kΩ | 10 nF | 100 Ω | 约 28 kHz | 兼顾效率与干扰 |
| 8.2 kΩ | 10 nF | 0 Ω | 约 17 kHz | 工频后级前级 |
用脚本把参数空间扫一遍比手算快得多,也方便看频率对 RT 的敏感度:
# sg3525_calc.py —— 扫描 RT / CT / RD 组合,输出频率与死区趋势 RT = [4.7e3, 6.8e3, 8.2e3, 10e3] # 6 脚对地电阻,单位 Ω CT = [4.7e-9, 10e-9] # 5 脚对地电容,单位 F RD = [0, 100, 200] # 7 脚放电电阻,单位 Ω for rt in RT: for ct in CT: for rd in RD: # 手册给出的振荡频率近似式,RD 项同时影响死区 f = 1.0 / (ct * (0.7 * rt + 3 * rd)) # 死区随 RD 与 CT 增大而变宽,此处只做趋势估算 td_ns = 3 * rd * ct * 1e9 print(f"RT={rt/1e3:>4.1f}k CT={ct*1e9:>4.1f}n RD={rd:>3}Ω " f"f={f/1e3:>6.2f}kHz 死区≈{td_ns:>5.0f}ns")这段脚本里0.7 * rt + 3 * rd对应手册关系式的分母系数,td_ns只是按 RD、CT 的乘积做数量级估算,不同版本手册给的系数略有出入,最终死区一定要用示波器同时看两路输出的上升沿间隔确认。实际调试中我会把占空比上限压在 45% 以内,给死区和变压器偏磁留余量——推挽结构一旦上下管直通,炸的是两只管子加驱动电阻。
注意:SG3525 的 10 脚关断端不要悬空,加 10kΩ 下拉,否则干扰脉冲可能误触发关断,表现为输出间歇性掉压。
2.2 推挽变压器匝数与线径的换算
匝数计算的核心是伏秒平衡。推挽每个半周期只有一半时间在工作,导通时间 ton = D / (2 × f_sw),初级匝数按下面这个关系走:
Np = (Vin_min × ton) / (ΔB × Ae)
其中 ΔB 是双向磁通摆幅,铁氧体取 2 倍工作磁密,即 Bmax = 0.2T 时 ΔB = 0.4T;Ae 是磁芯有效截面积,单位 m²。
# pushpull_xfrmr.py —— 推挽变压器初级匝数、次级匝数与集肤深度 Vin_min = 10.5 # 12V 电池放到 10.5V,最恶劣工况 Vsec_pk = 330 # 次级峰值目标,含管压降与调节余量 f_sw = 35e3 # 开关频率 Hz D_max = 0.45 # 单边最大占空比 Ae = 80e-6 # EE28 磁芯有效截面积 m² Bmax = 0.2 # 铁氧体工作磁密 T ton = D_max / (2 * f_sw) # 单边导通时间 Np = Vin_min * ton / (2 * Bmax * Ae) # 初级匝数(未取整) Np = int(Np) + 1 # 只能向上取整,避免饱和 Ns = round(Np * Vsec_pk / Vin_min) # 次级匝数按变比放大 delta_mm = 66.1 / (f_sw ** 0.5) # 铜在 20℃ 的集肤深度,单位 mm print(f"ton={ton*1e6:.2f}us Np={Np}匝 Ns={Ns}匝 变比 1:{Ns/Np:.1f}") print(f"集肤深度={delta_mm:.3f}mm 建议单股线径 ≤ {2*delta_mm:.2f}mm")按这组参数跑出来 ton ≈ 6.4μs,Np 落在 2 到 3 匝之间,取 3 匝后实际 ΔB 会低于 0.4T,属于安全方向;次级约 95 匝。集肤深度 0.35mm 意味着不能用单根粗线,得用多股 0.5mm 漆包线并绕,否则 35kHz 下交流阻抗会吃掉大半效率。这是一条老式电路里最容易被忽略的细节——很多人按直流电流选线径,绕完发现满载温升异常。
2.3 老式电路的典型故障与示波器验证点
调试老式逆变器,示波器的三个必测点是:两路驱动波形的上升沿间隔(看死区)、初级电流波形(看偏磁)、输出空载与满载波形(看削顶)。表里是常见的现象与对应排查方向。
| 现象 | 大概率原因 | 测量位置与判断 |
|---|---|---|
| 上电即炸管 | 死区不足或驱动不同步 | 双通道看两路栅极,间隔应大于 0.5μs |
| 空载电流偏大 | 两路占空比不对称、偏磁 | 串电流探头看初级,波形应上下对称 |
| 输出波形削顶 | 变压器接近饱和 | 加大匝数或提高开关频率 |
| 带载掉压明显 | 变压器漏感大、绕组压降 | 看次级波形在负载下的平顶倾斜 |
| 输出间歇性中断 | 10 脚受干扰误关断 | 检查关断脚下拉与走线 |
占空比不对称是老式电路的经典坑。SG3525 的两路输出共用同一个误差放大器,如果 1、2 脚反馈网络不对称,或者 16 脚基准被负载拉偏,两路占空比就会有零点几个百分点的差,变压器长期单向偏磁,温升会持续爬。验证方法很简单:空载时用手背靠近变压器,明显发热就是偏磁信号不好,别等它自己烧。
3. 新式单片机逆变器:STM32 生成 SPWM 与离网双闭环控制
老式方案靠模拟芯片的自由振荡,占空比是「被动」的;新式方案的核心变化是把波形生成交给定时器、把幅值交给闭环。这套结构做下来,输出 THD 能做到 3% 以内,动态负载调整率也远好于老式电路。
3.1 TIM1 中央对齐与死区寄存器配置
用 TIM1 的互补通道做单相全桥,中央对齐模式下的载波频率关系是:
f_pwm = f_clk / (2 × (ARR + 1) × (PSC + 1))
72MHz 主频要跑 20kHz 载波,ARR 取 1799、PSC 取 0 即可。中央对齐的好处是每个周期在计数器谷底和峰值各产生一次更新事件,采样时刻可以选择在峰值处,此时开关管刚完成换流,噪声窗口已经过去。
// tim1_spwm.c —— TIM1 中央对齐 + 互补输出 + 死区 TIM_TimeBaseInitTypeDef tb; TIM_OCInitTypeDef oc; TIM_BDTRInitTypeDef bdtr; tb.TIM_Prescaler = 0; // 不分频 tb.TIM_CounterMode = TIM_CounterMode_CenterAligned1; tb.TIM_Period = 1799; // 72MHz/(2*1800)=20kHz 载波 tb.TIM_ClockDivision = TIM_CKD_DIV1; TIM_TimeBaseInit(TIM1, &tb); oc.TIM_OCMode = TIM_OCMode_PWM1; oc.TIM_OutputState = TIM_OutputState_Enable; oc.TIM_OutputNState= TIM_OutputNState_Enable; // 互补通道 oc.TIM_Pulse = 900; // 初始 50% 占空比,上电前会被闭环覆盖 oc.TIM_OCPolarity = TIM_OCPolarity_High; oc.TIM_OCNPolarity = TIM_OCNPolarity_High; TIM_OC1Init(TIM1, &oc); bdtr.TIM_DeadTime = 0x48; // 72*13.9ns ≈ 1.0us,MOS 全桥可从 0x20 起调 bdtr.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable; TIM_BDTRConfig(TIM1, &bdtr); TIM_CtrlPWMOutputs(TIM1, ENABLE); TIM_Cmd(TIM1, ENABLE);TIM_Period与载波频率一一对应,改载波就等于改 ARR;TIM_DeadTime的编码不是线性的,DTG[7:5] 全零时死区时间等于寄存器值乘以时钟周期 13.9ns,写 0x48 得到约 1.0μs。低压 MOS 全桥通常 0.3μs 就够,高压 IGBT 建议留到 1μs 以上。写死区宁大勿小,代价只是输出波形略有失真,而直通的代价是炸桥。
提示:调试阶段先把母线电压降到 30V 以下验证波形,确认死区与互补关系正确后再上全压。
3.2 电流电压采样链路:差分放大、偏置与 ADC 触发
新式逆变器的采样链路一般分三路:输出交流电压、电感电流、母线电压。电感电流用分流电阻加差分放大电路,是最容易出问题的环节。
分流电阻取 1mΩ,电流范围 ±20A,则差分电压 ±20mV。差分放大倍数取 50 倍得到 ±1V,再叠加 1.65V 偏置,ADC 端落在 0.65V 到 2.65V 区间,正好避开轨到轨运放的非线性段。差分放大的共模抑制比直接决定电流采样的零点漂移,电阻配对的 0.1% 精度比运放本身的失调更关键。
ADC 触发源一定要挂到 TIM1 的 TRGO 上,选择中央对齐的峰值点触发,这样每次采样都发生在开关噪声最小的时间窗。前面再加一级 RC 滤波,1kΩ 加 10nF 的截止频率约 16kHz,低于 20kHz 载波,能把开关尖峰压下去。
// adc_trigger.c —— TIM1 峰值触发注入通道,采电流与电压 TIM_SelectOutputTrigger(TIM1, TIM_TRGOSource_Update); // 更新事件作触发源 ADC_InitTypeDef adc; adc.ADC_ExternalTrigInjecConv = ADC_ExternalTrigInjecConv_T1_TRGO; adc.ADC_ExternalTrigInjecConvEdge = ADC_ExternalTrigInjecConvEdge_Rising; ADC_Init(ADC1, &adc); ADC_InjectedSequencerLengthConfig(ADC1, 3); ADC_InjectedChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_28Cycles5); // 电感电流 ADC_InjectedChannelConfig(ADC1, ADC_Channel_1, 2, ADC_SampleTime_28Cycles5); // 输出电压 ADC_InjectedChannelConfig(ADC1, ADC_Channel_2, 3, ADC_SampleTime_28Cycles5); // 母线电压 ADC_ExternalTrigInjectedConvCmd(ADC1, ENABLE);采样时间选 28.5 个周期是配合前级 RC 与源阻抗做的折中:太长会拖慢环内计算节奏,太短则采样保持电容充不满。注入通道的好处是转换结束能立即触发中断,闭环计算和数据更新可以压缩在同一个中断里完成,不用再等规则通道的 DMA 搬运。
3.3 离网双闭环 PI 的代码骨架
离网逆变器的双闭环通常外环控输出电压、内环控电感电流。外环输出作为内环的电流指令,内环输出作为调制波幅值。20kHz 中断里完成一次完整的采样、计算、更新,时间预算 50μs。
// loop.c —— 电压外环 + 电感电流内环 PI typedef struct { float kp, ki; float integ; float out_max, out_min; } pi_t; static float pi_run(pi_t *p, float err) { float out = p->kp * err + p->integ; // 比例项 + 积分累积 if (out > p->out_max) { // 抗积分饱和:先限幅再回写 out = p->out_max; p->integ += p->ki * err; if (p->integ > p->out_max) p->integ = p->out_max; } else if (out < p->out_min) { out = p->out_min; p->integ += p->ki * err; if (p->integ < p->out_min) p->integ = p->out_min; } else { p->integ += p->ki * err; // 正常区间直接累加 } return out; } void TIM1_UP_IRQHandler(void) // 20kHz 更新中断 { float vout = adc_get_output_voltage(); // 已换算成实际电压 float il = adc_get_inductor_current(); // 外环:目标 220V 有效值,先用瞬时值做内环指令 float verr = vref_inst - vout; float iref = pi_run(&pi_v, verr); iref = clampf(iref, -IL_MAX, IL_MAX); // 给内环指令加硬限幅 // 内环:跟踪电流指令 float ierr = iref - il; float duty = pi_run(&pi_i, ierr); spwm_set_modulation(duty); // 更新 CCR,正弦表在下一次更新生效 TIM_ClearITPendingBit(TIM1, TIM_IT_Update); }il用的是电感电流而不是电容电流,实现简单、抗噪好,缺点是 LC 谐振峰在环路里会带来一个二阶极点,需要在 PI 之外补一个陷波或者把内环带宽压到谐振频率的三分之一以下。clampf对内环指令限幅这一步不能省,否则启动瞬间电压误差大,内环指令饱和,输出会有一段明显的过冲。参数整定顺序是先单独闭环内环(把电压环断开,给固定电流指令),确认电流能快速无超调跟踪,再把外环带宽设成内环的五分之一左右。
3.4 LC 滤波截止频率与 THD 的取舍
输出 LC 滤波的截止频率一般取载波频率的十分之一到二十分之一。20kHz 载波对应 1kHz 到 2kHz,取 L = 1mH、C = 10μF 时:
f0 = 1 / (2π × √(L × C)) ≈ 1.59 kHz
这个位置既能压住 20kHz 附近的开关谐波,又不会明显放大 50Hz 附近的低次谐波。截止频率再往下压,电感和电容的体积、成本都会上去,而且 LC 的谐振峰更靠近基波,负载突变时震荡更难收。THD 的实测值主要取决于载波比和死区设置:载波比越高、死区越小,低次谐波越少。空载时 THD 通常比满载差,因为阻尼变弱,谐振峰抬起来了——测 THD 一定要在额定负载和半载两个点上各测一次。
4. 两电平与三电平 NPC 逆变器:硬件差异与相电压输出时序
「三电平是不是更贵」这个问题,答案取决于功率等级和开关频率。小功率场合两电平几乎总是更划算,功率上来、开关频率想压低的时候,三电平的优势才逐渐显现。
4.1 器件数量、耐压与损耗对比
| 对比项 | 两电平 | 三电平 NPC |
|---|---|---|
| 每相开关管 | 2 只 | 4 只 |
| 单管耐压 | 全母线电压 | 母线电压的一半 |
| 三相器件数 | 6 只 | 12 只 + 6 只钳位二极管 |
| 输出电平 | +Vdc/2、−Vdc/2 | +Vdc/2、0、−Vdc/2 |
| dv/dt | 全母线跳变 | 减半 |
| 相同 THD 下开关频率 | 高 | 约可降到一半 |
| 控制复杂度 | 低 | 高,需中点电位控制 |
单管耐压降一半意味着器件成本曲线并不是线性翻倍:同样的 800V 母线,两电平要选 1200V 器件,三电平选 650V 器件,650V 器件的导通电阻和开关损耗都明显更好。所以到了几十千瓦以上,三电平的器件总成本未必贵,真正贵的是驱动数量翻倍、控制难度上升、体积和散热设计更复杂。反过来在几千瓦、开关频率可以拉到 40kHz 以上的场合,两电平用高频把 THD 压下去,工程上更省事。
4.2 NPC 三电平的开关状态与相电压输出时序
NPC 三电平每相有 P、O、N 三种状态,对应四个开关管的固定组合。下面是一相的状态表,Sa1 到 Sa4 从母线正极往下数。
| 状态 | Sa1 | Sa2 | Sa3 | Sa4 | 相电压 |
|---|---|---|---|---|---|
| P | 1 | 1 | 0 | 0 | +Vdc/2 |
| O | 0 | 1 | 1 | 0 | 0 |
| N | 0 | 0 | 1 | 1 | −Vdc/2 |
关键约束是状态只能在 P→O→N 之间相邻切换,不能从 P 直接跳到 N,而且每次切换只允许一对管子动作——这正是 dv/dt 减半的来源。用脚本生成状态序列再换算成相电压,比对着图纸数开关管靠谱得多:
# npc_states.py —— 生成 NPC 三相状态序列并换算相电压 import numpy as np Vdc = 700.0 # 母线电压 V m = 0.85 # 调制比 f = 50.0 # 基波频率 fc = 4000.0 # 载波频率 N = 400 # 一个基波周期内的采样点 t = np.linspace(0, 1.0/f, N, endpoint=False) # 三相互差 120 度,叠加载波做规则采样 carrier = 2 * ((fc * t) % 1.0) - 1.0 states = {} for name, phase in (("A", 0), ("B", -2*np.pi/3), ("C", 2*np.pi/3)): ref = m * np.sin(2*np.pi*f*t + phase) err = ref - carrier # 大于 0.5 出 P,小于 -0.5 出 N,其余为 O s = np.where(ref > 0.5, 2, np.where(ref < -0.5, 0, 1)) states[name] = s v = (s - 1) * Vdc / 2 # 0/1/2 映射到 -Vdc/2、0、+Vdc/2 print(f"相 {name}:P={np.sum(s==2):>3} O={np.sum(s==1):>3} N={np.sum(s==0):>3} " f"相电压峰值={v.max():.0f}V")输出里每个周期内 O 状态出现的次数就是零电平占空比,次数越多说明开关管处在零电平的时间越长、损耗分布越均匀。相电压波形看起来是三级台阶,每一级跳变量只有 Vdc/2,这就是三电平谐波小的直接原因。用示波器看实测波形时,三级台阶的中间一级宽度应该随调制比连续变化,如果出现台阶宽度突变,多半是状态切换跳过了 O 状态。
4.3 中点电位波动与并联环流
三电平特有的两个问题是中点电位波动和并联环流。中点电位波动的根源在于 O 状态时中点会流过分相电流,三相电流在 O 状态下的瞬时和不为零,中点电容就被反复充放电。抑制手段有三条:一是选用对中点电流影响小的冗余矢量组合,用小矢量对来平衡一个载波周期内的中点电荷;二是把中点电容容量加大,用被动方式把波动压在母线电压的 2% 以内;三是在调制波里注入零序分量,这是三相三线制下最省事的做法。
环流主要出现在多台逆变器并联或者共直流母线的场合。并联模块之间即使输出频率一致,微小的相位差和开关时刻差都会在零序回路上形成环流,电流波形上表现为低频包络的畸变,严重时会让某一台机器无故过流保护。
常见做法是三个方向同时下手:输出侧加共模电感,把零序阻抗抬起来;调制上保证共模电压一致,避免不同模块使用不同的零矢量分配方式;控制上加入零序环流的抑制环,把检测到的零序电流取反后叠加到调制波上。这三招里,调制的共模一致性优先级最高——两台机器用不同的零矢量排布,后面再加硬件也很难补回来。
注意:并机调试时先用独立直流源给每台机器单独供电,确认各自的输出相位和共模电压一致后再共母线,否则第一次上电就可能触发过流。
5. 逆变器电路的分级上电与 THD 验证技巧
新板子第一次上电,我一般分四级走:控制级、驱动级、低压母线、满载。每一级只验证一件事,跳过任何一级都可能用管子换经验。
第一级只给控制部分供电,不接母线。示波器看 TIM1 的四路输出和两路互补输出,确认死区间隔在示波器上肉眼可辨,同时确认上电瞬间 PWM 处于关断状态——很多炸机事故是初始化顺序写反,PWM 先跑起来、驱动使能后置,上下管同时导通。第二级接驱动电源,不接功率母线,测栅极波形。这时要重点看栅极的开通和关断沿有没有米勒平台造成的二次开通,驱动电阻取值通常从 10Ω 起调,下管比上管略小一点可以让关断更快。
第三级给一个 30V 左右的低压母线,串上限流电阻或者用带限流的直流源,测输出电压波形。低压下看三件事:SPWM 的台阶是否连续、LC 滤波后的正弦有没有明显畸变、空载电流是否正常。第四级上全压,先半载再满载,测输出有效值、THD 和开关管温升。
THD 的测量有几个容易翻车的点。示波器 FFT 测 THD 必须保证探头带宽足够,20kHz 载波至少要 5 次谐波以内的带宽余量,探头用 10:1 加短地线弹簧,地线夹子拖长了引进来的共模噪声会把 THD 抬高一倍以上。测量点放在 LC 滤波之后,但要在负载端子之前,负载线过长会引入额外的电感。空载和满载各测一次,两次差值超过 2 个百分点,说明环路阻尼不够或者 LC 谐振峰太靠近基波。
温升判断不看外壳看结温。用热像仪扫开关管和变压器时,注意 MOS 的壳温和结温之间还隔着热阻,TO-247 封装在无散热器时热阻能到 40℃/W 以上,壳温 80℃ 时结温可能已经逼近 150℃。工程上更稳的做法是留一手:满载连续跑两小时,让温度进入稳态再看,别在刚上电的十分钟内就下结论。
最后一个技巧是偏磁的快速判断。空载运行十分钟后断电,立刻用手背靠近变压器——老式推挽的偏磁表现为单侧明显发热,新式全桥的偏磁则表现为两只开关管温差不一致。温差超过 10℃ 就值得回头查驱动延时和采样零点,因为偏磁一旦在满载下积累起来,下一次上电就是炸管。
本文还有配套的精品资源,点击获取