双向可控硅功率调节实战:过零检测与触发链路设计 上一篇把双向可控硅的导通条件、擎住电流、四象限触发灵敏度这些底子拆开讲了一遍评论区问得最集中的一句话是原理看懂了板子到底怎么搭。这一篇就专门解决这个问题从功率调节的两条技术路线切入把过零检测电路的四种落地做法、限流电阻的功率与耐压实算、触发链路里光耦型号的致命差异、单片机侧的延时角换算与脉冲宽度一直到阻容吸收、小功率负载点不亮、感性负载烧管子这些实际调试才会碰到的东西全部按能够直接照抄的程度写清楚。内容偏硬件实操适合手上已经有一块可控硅板子、或者正准备画第一版调光/调速/加热控制板的人也适合做完原理图但一上电就翻车的朋友对照排查。文中涉及的所有参数都给了推导过程不是拍脑袋的“经验值”你可以根据自己的负载和市电情况重算一遍。1. 功率可调的两种走法选错了后面全是补丁一提到“调功率”很多人的第一反应就是拿个电位器去改触发角思路本身没错但这只是两条路里的一条。另一条路完全不在半周内切波形而是决定“这一整个周波到底开不开”。两条路在电路复杂度、谐波含量、负载适配性上差异极大最要命的是一旦选错后面写多少补偿代码都救不回来。1.1 移相控制每个半周切一刀调的是导通角移相控制的动作很朴素市电每半个周期是 10ms50Hz 下在这 10ms 里找一时刻把可控硅点着它就一直导通到本半周电流自然过零为止。从电压过零点到触发点之间的角度叫延迟角 α剩下的部分叫导通角。α 越大导通的那段越短负载拿到的有效值电压越低。对纯电阻负载白炽灯、电热丝把波形积分一下就能得到有效值电压和 α 的关系Vrms Vpk × sqrt( 1/2 − α/(2π) sin(2α)/(4π) ) α 以弧度计Vpk 是市电峰值220V 系统里约 311V。这个公式值得亲手代几个数进去因为它会告诉你一件反直觉的事功率和延迟角根本不是线性关系。延迟角 α导通角负载有效值电压相对功率0°180°220V100%30°150°217V97%60°120°197V80%90°90°156V50%120°60°97V20%150°30°37V3%180°0°0V0%看这张表就明白问题在哪了前 60° 的延迟只让功率掉了两成后 60° 却掉了八成。如果你直接把电位器或者触摸滑条的位置线性映射到 α用户会觉得“前面转半天没反应最后一点点突然全暗”。所以做调光旋钮、调温滑条的产品固件里必须有一步反查表把目标功率百分比先换算成 α 再送定时器。这个表的做法很简单上位机或者 Excel 里按 1% 步进算 100 个点取整后烧进数组运行时二分或者直接索引。移相控制的代价同样明显。波形被硬切一刀富含高次谐波尤其是 3 次、5 次、7 次这些谐波会顺着电网跑干扰同一路供电的音响、收音机也会让功率因数变差。带 PFC 或者对谐波有要求的场合移相基本不能用。另外切波形瞬间的电压跳变很陡dv/dt 高电磁干扰大板上不加磁珠和 RC 吸收很容易把自己的 MCU 干扰复位。移相控制真正的优势是响应快、连续可调、成本低。白炽灯调光、串激电机调速、电烙铁调温这类需要平滑连续输出的场合它仍然是首选。用光耦加双向可控硅成本能压到很低。1.2 整周波控制只决定这一周开不开剩下的交给热惯性另一条路叫整周波控制也有人叫它周波过零控制、时间比例控制。思路是完全放弃在半周内切波形可控硅要么让整个周波完整通过要么整个周波都关断。50Hz 市电一秒钟有 50 个完整周波如果我要 40% 的功率就让其中 20 个周波导通、30 个周波关断。这种方式的好处几乎全是“干净”每次开通都在电压过零点每次关断都在电流过零点波形完整谐波极小功率因数接近 1电磁干扰低到可以忽略。缺点是输出是脉冲式的电压一会儿有一会儿没有能不能用完全取决于负载的热惯性或者机械惯性。判断标准很直接负载的时间常数要远大于控制周期。1kW 的电热棒热时间常数几十秒你按 1 秒的周期通断水温几乎感觉不到波动。但白炽灯的热时间常数只有几十毫秒按 1 秒周期通断就是明显的闪烁。电机低速运行时同理通断周期太长会有明显的顿挫和噪音。控制周期的选取有个实用经验加热类负载取 1 到 5 秒周期太短则继电器和可控硅动作频繁太长则温度波动大。分辨率等于 1/周期内的周波数1 秒周期对应 50 个周波分辨率 2%对大多数温控足够了。如果需要更细的分辨率把周期拉长到 2 秒分辨率就到 1%。具体实现上过零检测电路每 10ms 给 MCU 一个信号MCU 在里面数周波。要 40% 功率就在 50 个周波里挑 20 个导通。这里有个容易被忽略的细节这 20 个周波不要全挤在周期开头。全挤在一起等于前 400ms 全功率加热、后 600ms 完全断电温度波动和电流冲击都比均匀分散大得多。用 Bresenham 那种累加器算法把导通的周波均匀撒开效果会好很多具体算法后面第 4 章给。1.3 两条路的对照与混用把两条路摆在一起看选择其实不太纠结对比项移相控制整周波控制输出连续性连续可调脉冲式靠负载惯性平滑谐波与 EMI大需要额外抑制极小功率因数差接近 1响应速度毫秒级秒级触发光耦类型随机相位型过零型典型负载白炽灯、电机、电烙铁电热管、烤箱、热水器调试难度需要精确过零点对零点精度要求低有一种情况会用到混合方案既要大范围调功又不能让谐波太离谱。做法是在一个较长的周期内做整周波调度但在需要细调的那一点点余量上用移相补齐。这种方案实现复杂度陡增非特殊需求不建议碰。2. 过零检测电路四种做法和那个总被算错的限流电阻移相控制要靠过零点做时间基准整周波控制也要在过零点附近动作所以过零检测的精度直接决定了整块板子的表现。这一章把常见的几种电路摆开重点说清楚每种电路的输出脉冲到底长什么样以及为什么很多人算出来的限流电阻会烧。2.1 双向光耦直连成本最低但你要接受它的宽脉冲最省事的做法是拿一个交流输入光耦直接跨在火零线上。所谓交流输入光耦就是内部两只 LED 反向并联不管电压哪个方向总有只有一只导通输出侧只有一个光敏三极管。这类器件在市面上很常见交流输入、单路输出拿来做过零检测刚好。典型接法火线经两只串联电阻接到光耦内部 LED 的输入端另一头接零线。输出侧集电极通过上拉电阻接到 3.3V发射极接地集电极同时接 MCU 的外部中断引脚。它的工作逻辑不是“到零点输出一个脉冲”而是“电压幅值足够大时输出低电平接近零点时输出高电平”。也就是说输出的是一个把过零点包在中间的宽低电平脉冲。脉冲到底有多宽取决于限流电阻和光耦的电流传输比。具体算一下。设限流电阻总共 200kΩ两只 100kΩ 串联光耦 LED 正向压降约 1.2V要让输出三极管可靠饱和If 至少需要 1mA。那么 LED 开始有效导通的电压阈值是|v| ≥ Vf If × R 1.2V 1mA × 200kΩ ≈ 201V市电峰值 311V用正弦关系反推角度sin θ 201 / 311 0.647 → θ ≈ 40.3°也就是说每个半周里只有从 40.3° 到 139.7° 这一段共 99.4°光耦才导通对应时间99.4/180 × 10ms ≈ 5.5ms。半周 10ms其中 5.5ms 是低电平剩下 4.5ms 是高电平。这个脉冲宽得有点夸张但它确实把过零点包在了低电平的中心位置。问题就出在这里如果你直接把低电平的下降沿当成过零点接中断实际会提前 2.24ms 触发。这个固定偏移在整周波控制里无所谓因为 2ms 的偏差相对 10ms 的周波不算什么但在移相调光里就是灾难最小延迟角被卡死在 40° 附近灯永远调不到最亮而且亮度曲线整个偏掉。改进的办法有两个。一是软件补偿把延时时间减去这 2.24ms 的固定偏移代价是延迟角小于 40° 的部分做不出来。二是软件取中心在中断里记录上升沿和下降沿的时间戳算出脉宽取中点作为真正的过零点。第二种方法精度能到 ±0.5ms 以内代价是需要两个中断源或者一个双边沿中断加状态机稍微麻烦一点。还有一点必须提醒光耦输出侧的上拉电阻不能随便取 10kΩ。低 CTR 的交流光耦If 1mA 时输出电流可能只有 0.2mA10kΩ 上拉下只能拉到 3.3 − 2 1.3V对 3.3V 系统来说这个电平根本不算低多数 MCU 的 VIL 是 0.3×VDD 1V。结果是中断疯狂误触发。稳妥的做法是上拉取 4.7kΩ同时把 If 拉到 2mA 以上或者干脆在光耦输出后面加一级施密特触发器整形。2.2 光耦加施密特整形边沿干净抗干扰强一截光耦输出是缓慢变化的模拟波形边沿软遇到电网上的毛刺就容易抖出多个边沿。在光耦输出和 MCU 之间插一级施密特触发器六反相器的那类芯片带施密特输入能把缓慢边沿整成干净的方波同时把毛刺滤掉。接法很简单光耦集电极经 4.7kΩ 上拉到 3.3V同时接到施密特输入施密特输出接 MCU 中断脚。要注意施密特芯片的供电必须和 MCU 同域别一个 5V 一个 3.3V 混着来。这一级整形不会让脉冲变窄5.5ms 还是 5.5ms但边沿抖动从几百微秒降到几微秒对相位控制的稳定性提升很明显。实测下来加了整形之后同样一块板子在不同的电网环境下调光的最小亮度一致性好了很多不会出现“今天能调到最暗明天最暗档直接灭掉”的情况。如果你想让脉冲真正变窄可以在施密特后面再加一级微分加单稳态把宽脉冲变成 100μs 的窄脉冲。但这么做会引入额外的延迟和温漂个人不太推荐软件取中心更省事。2.3 变压器降压加比较器精度最高但要占板面要拿到真正窄、真正准的过零脉冲比较器方案是绕不开的。经典做法是用一个小工频变压器把 220V 降到 9V 或者 12V次级输出接一个分压网络送到比较器的一端另一端接一个接近零的阈值比如 0.2V比较器输出就是只在过零点附近翻转的窄脉冲。变压器的好处是天然隔离而且次级电压低、安全分压电阻的耐压压力小很多。缺点是变压器占板面、有重量、成本高小家电里很少用。但它带来的相位精度是最好的9V 次级对应的过零斜率是9×1.414×2π×50 ≈ 4000V/s也就是 4V/ms比较器阈值设在 0.2V 时脉冲宽度只有 100μs 左右中心点误差在 ±25μs 量级。没有变压器又想隔离可以用光耦加整流桥的组合交流侧先经两只串联电阻降压过一个小的整流桥变直流脉动再送光耦。这样光耦只在脉动电压高于阈值时才导通脉冲宽度比直接接交流窄不少。缺点是整流桥在大电压下的漏电流和耐压要挑器件选型稍微麻烦。完全不做隔离的场合MCU 供电本身就和市电共地比如阻容降压供电的小家电可以直接用电阻分压加比较器成本最低、精度最高但整块板子带市电调试时必须格外小心。把四种方案横向对比一下方案隔离典型脉宽零点精度成本适用场景双向光耦直连是4~6ms需软件补偿±0.5ms低整周波控制、要求不高的调光光耦加施密特整形是4~6ms边沿抖动小±0.3ms低通用推荐入门首选变压器加比较器是0.5ms±50μs中高高精度相位控制分压加比较器非隔离否0.5ms±50μs低有隔离供电时的批量产品2.4 限流电阻功率、耐压、爬电三个都得算这一小节单独拎出来讲因为限流电阻是整块板子上最容易烧、也最容易被算错的元件。很多人一看电流才几毫安随手拿个 0.25W 的电阻就焊上去了通电半小时冒烟。先算功率。还以上面 200kΩ 的例子峰值电压 311V 时瞬时功率是311² / 200000 ≈ 0.48W但这只是峰值。真正要算的是整个周期内的平均功率因为 LED 只在部分角度导通P_avg (1/π) × ∫ (Vpk·sinθ)² / R dθ 积分区间为 [θ1, π−θ1]代入 θ1 40.3°算出平均功率大约 0.25W。这个数字意味着 0.25W 的电阻是绝对不够的得选 0.5W 甚至 1W而且要考虑长期工作的降额实际选 1W 比较稳妥。再把电阻值调小一点看如果用 100kΩ峰值电流 3.1mA导通角度扩展到 19° 到 161°平均功率会涨到 0.48W 左右这时候 1W 电阻才勉强够建议上 2W。第二个坑是耐压。普通插件电阻的额定工作电压通常在 200V 到 250V 之间而市电峰值是 311V单只电阻扛不住长期工作会沿电阻体表面爬电、碳化。正确做法是用两只同规格电阻串联每只承担一半电压同时把总的爬电距离拉开。贴片的话1206 封装额定 200V也得两三只串联才安全。第三个坑是焊盘间距。就算用了两只串联如果两只电阻的焊盘挨得太近高压还是会从 PCB 表面爬过去。布局时两只电阻之间至少留 3mm 间距整条高压走线和其他网络保持 6mm 以上的间距这是安规的基本要求不是可选项。还有一个细节如果是单向光耦比如普通 EL817 那种LED 反向耐压只有 6V 左右交流负半周会直接把 LED 反向击穿。必须反并联一只 1N4148 之类的二极管做保护或者干脆选双向输入的光耦省掉这颗二极管。3. 触发链路怎么搭光耦选型、门极电阻与四象限过零检测解决的是“什么时候该动手”触发链路解决的是“怎么把可控硅点着”。这一段里最容易犯的错误是光耦选型选错了整块板子的功能逻辑就反了。3.1 随机相位型和过零型长得一样但完全不能互换驱动可控硅的光耦分两大类外观几乎一模一样型号也长得很像但内部结构完全不同。随机相位型型号里通常带 1、2、3 之类的尾号代表随机相位内部只有一个光控双向可控硅没有任何过零检测电路。MCU 给 LED 通电输出端立刻导通可控硅立刻被触发。这种器件适合移相控制因为触发时刻完全由 MCU 决定。过零型型号里通常带 6 之类的尾号内部多了一套过零检测电路。MCU 给 LED 通电后输出端并不会立刻导通而是要等到 MT2 上的电压接近零点典型 ±20V 以内才导通。这种器件适合整周波控制因为它保证了每次开通都在过零点MCU 只需要给一个“我要开”的信号什么时候真正开由器件自己决定。这个区别带来的后果非常直接拿过零型光耦去做移相调光你会发现无论如何调延迟角灯要么全亮要么全灭。因为它根本不理你的延时只在过零点触发等效于全导通。反过来拿随机相位型去做整周波控制也行但需要 MCU 精确地在过零点给脉冲一旦脉冲错过窗口就会在半周中间触发产生波形缺口和干扰。新手最常踩的坑就是用错型号然后花两天时间怀疑是定时器配置错了。拿到器件第一件事查手册确认是随机相位还是过零型比什么都重要。过零型光耦还有一个使用细节LED 必须保持导通内部过零检测电路才工作。如果 MCU 只给一个 10μs 的极短脉冲很可能在过零点到来之前就撤掉了导致这一周波根本没触发。稳妥的做法是把 LED 驱动脉冲拉到 1ms 以上或者干脆保持到下一个半周开始再撤。这一点和随机相位型不一样随机相位型只要 100μs 脉冲就能可靠触发。3.2 门极限流电阻和门极-阴极电阻的取值逻辑光耦输出端和可控硅门极之间那个电阻取值不是随便给的它决定了触发电流的大小而触发电流又直接关系到可控硅能不能可靠导通、能不能扛住感性负载。触发瞬间电流路径是MT2 → 光耦输出端 → 门极电阻 → 门极 → MT1。峰值电流近似为Ig_peak ≈ (Vpk − Vtm − Vf_光耦) / RgVpk 是当时的市电瞬时电压最坏情况按峰值 311V 算Vtm 是可控硅导通后的通态压降约 1.5VVf_光耦 是光耦输出端的饱和压降约 2.5V。代入算一下如果 Rg 取 330ΩIg_peak ≈ (311 − 1.5 − 2.5) / 330 ≈ 930mA这个电流接近光耦的峰值额定值1A属于极限工况长期用不推荐。实际产品里 Rg 一般取 330Ω 到 470Ω 之间对应的峰值电流在 650mA 到 930mA。这个电流远大于可控硅的 Igt典型 35mA 到 50mA有三倍以上的余量能保证在各种温度、各种批次下都可靠触发。Rg 也不能取太大。一是触发电流不够可控硅在低温或者感性负载下可能触发失败二是 Rg 太大时门极电压上升慢触发延迟增加影响相位精度。经验值是 Rg 的功率选 0.5W 以上因为触发瞬间的峰值功率虽然时间极短但反复冲击下 0.25W 的电阻容易开路。除了串联的 Rg门极和 MT1 之间通常还要并一只电阻门极-阴极电阻取值 1kΩ 到 10kΩ。它的作用是给门极一个确定的电位防止电网上的干扰通过结电容耦合到门极造成误触发。对于高灵敏度可控硅Igt 10mA这只电阻取 1kΩ 就够对于标准灵敏度的10kΩ 即可太大起不到作用太小会分流触发电流。还有一个更省心的做法很多现代可控硅内置了门极-阴极电阻型号里带特定后缀直接省掉这颗外围元件。选型时可以留意一下手册里的等效电路图。3.3 四象限触发灵敏度光耦接法天然占了两个好象限双向可控硅的触发分四个象限取决于 MT2 相对 MT1 的极性和门极相对 MT1 的极性。这四个象限的触发灵敏度差别很大其中第一象限MT2 正、门极正最灵敏第四象限MT2 负、门极正最迟钝有的器件甚至不保证第四象限能触发。光耦接在 MT2 和门极之间时两种极性下门极电流的方向是自然对应的MT2 为正时电流从 MT2