
1. 从点亮到调得准第二篇真正要补的三块短板上一篇把双向可控硅的基本脾气、功率可调的两种思路、过零检测电路的大致框架都过了一遍很多人照着搭出来灯是亮了但一上示波器就露馅过零信号毛刺一片触发角飘来飘去调到 30% 的时候灯在闪稍微带个变压器负载干脆半个周期不导通。这一篇就专门解决这些亮是亮了但用不了的问题。内容围绕三件事展开过零检测电路怎么从原理图变成一条干净的方波、双向可控硅的触发链路里每个电阻的取值依据、以及单片机侧怎么把功率稳稳地分配到每一个工频周期上。适合已经搭过一遍基础电路、手里有示波器和烙铁、想把东西做成能长期跑的读者完全零基础也能看懂思路但落地时建议先把上一篇的框架补上。1.1 第一篇停在哪这一篇从哪接上一篇的重点在认识器件可控硅怎么导通、怎么关断、门极需要什么条件、过零检测大概长什么样。那时候给的电路是能工作的最小版本很多参数写的是典型值比如限流电阻取 100k 到 1M 之间、门极电阻300Ω 左右。这种写法在原理层面没问题真焊板子就会出问题——100k 和 1M 差十倍光耦的输入电流差十倍CTR 衰减之后输出可能压根拉不动上拉电阻。所以这一篇的定位是把典型值变成确定值。每一个电阻我都会给出计算过程告诉你为什么是 360Ω 而不是 300Ω为什么限流电阻要用四只串联而不是一只大阻值为什么缓冲电容的耐压必须选 630V 而不能用 400V。这些细节在实际调试里决定成败但它们几乎不会出现在器件手册的典型应用图里因为手册默认你是熟手。1.2 整条信号链拆开看从 220V 到门极脉冲把整机拆成四段来看思路会清楚很多。第一段是采样段220V 交流经过限流电阻进光耦发光二极管光耦在电压接近零点时输出翻转产生过零脉冲。第二段是决策段单片机捕获这个脉冲记录周期、计算延时、决定这一拍要不要触发。第三段是驱动段单片机 IO 经过三极管或者直接 drives 光耦输入光耦输出经门极限流电阻送到可控硅门极。第四段是功率段可控硅主端子串在负载回路里两端并上 RC 缓冲。四段之间存在明确的时序依赖采样段的延迟会传递给决策段决策段的定时误差会传递给驱动段驱动段的光耦上升时间又会叠加到实际触发角上。很多人调试时只盯着一个环节看结果怎么调都对不上就是因为没意识到误差是沿着链路累积的。我的习惯是把每一段的延迟单独测出来记在本子上最后算总账。1.3 冷热地边界这条线画错后面全白搭只要涉及市电隔离就是第一条纪律。光耦存在的意义不只是传递信号更重要的是把热地和市电有电气连接的那一侧和冷地单片机、调试器、电脑 USB 那一侧彻底隔开。这条边界一旦被破坏比如示波器探头的地夹夹到了热地上轻则烧探头重则整个调试链路带电。注意调试带市电的板子示波器要么用隔离变压器给被测板供电要么老老实实用差分探头。用普通探头的地夹去夹热地等于把市电直接短接到大地非常危险。这一条不管做多少次都别图省事。隔离边界在 PCB 上也要有物理体现光耦本体下方开隔离槽两侧铺铜不要跨越爬电距离按加强绝缘来留够 8mm 以上。这不是形式主义潮湿环境下 4mm 的间距是真的会打火的。2. 过零检测电路把正弦波切成一条干净的方波过零检测的本质是把 50Hz 正弦的过零点转换成数字脉冲供单片机捕获。听起来简单但零点在工程上从来不是一个点而是一个区间。真正要确定的是你要检测的是电压过零还是电流过零、允许的相位误差是多少、脉冲宽度留多宽才既不会被漏掉又不会掩盖真正的零点位置。这三个问题想清楚了电路拓扑和参数自然就定了。2.1 三种常见拓扑摆在一起比最后为什么选光耦方案常见的过零检测有三条路变压器降压后比较、电容降压后比较、光耦直接跨接在交流线上。变压器方案的好处是天然隔离、波形干净缺点是体积大、成本高、空载损耗下不来小功率产品里基本被淘汰了。电容降压方案成本极低但它是非隔离的整板带电极不安全而且电容老化后容值漂移过零点跟着跑长期可靠性差——我个人非常不建议新手碰这条路。光耦方案是目前的主流一只双向光耦内部两只反并联的发光二极管串一只限流电阻直接跨在交流线上输出侧接上拉电阻到单片机电源。交流电压绝对值超过光耦的导通阈值时发光低于阈值时熄灭于是在每个过零点附近输出一个低电平脉冲。优点是隔离、体积小、成本可控、延迟可算缺点是功耗都消耗在限流电阻上而且脉宽受器件离散性影响需要实测确认。我最后选它核心原因是可预测。限流电阻的功耗能算、光耦的传输延迟手册里有、脉宽能用公式估出来再实测校正整条链路的误差都在可控范围内。2.2 限流电阻的阻值和功率必须一起算这是最容易翻车的地方。很多人算完阻值就下单结果电阻通电三秒钟开始冒烟。先说阻值。市电有效值 220V峰值是 220 × 1.414 ≈ 311V。光耦发光二极管的正向压降按 1.2V 算希望的工作电流取 2mA 到 3mA取值偏小是为了降低功耗同时给 CTR 衰减留余量R (Vpk - Vf) / If (311 - 1.2) / 0.0025 ≈ 124kΩ取 120kΩ 到 150kΩ 之间都合理。如果选的是高灵敏度的双向光耦1mA 就能可靠导通阻值可以上到 300kΩ功耗进一步降低。再说功率这一步千万别省P U²/ R 220² / 120000 0.403W单只 1/4W 电阻扛不住必须用 1W 以上的或者拆成多只串联分摊。我通常用四只 30kΩ 的 1/4W 电阻串联总阻值 120kΩ每只承担约 0.1W余量充足。提示串联不只是为了分摊功率更重要的是分摊耐压。常用的 0805 贴片电阻额定工作电压大约 150V1206 约 200V而这里单个位置要承受 311V 峰值。一只贴片电阻直接跨在这里短期可能没事长期存在击穿风险。四只串联每只承受约 78V安全余量很大。顺带说一句电阻选金属膜而不是碳膜碳膜电阻的温度系数大阻值随温度漂移会让过零点慢慢偏移虽然偏得不多但对于要做精确移相的场景这就是个隐患。2.3 输出侧的上拉、滤波与脉宽的实测波形光耦输出侧是一只光敏三极管集电极接上拉电阻到 VCC发射极接地。没光的时候三极管截止输出高有光的时候导通输出低。所以过零点对应的是低电平脉冲这个极性在写中断程序时要注意别配反了边沿。上拉电阻取 4.7kΩ 到 10kΩ 之间。取值小上升沿陡、抗干扰好但光耦导通时的灌电流大取值大功耗低但上升沿被 RC 拖慢过零点定位精度下降。我一般用 10kΩ兼顾两者。关于滤波这里有个反直觉的结论不要加大电容滤波。很多教程建议在输出端并 100nF 甚至 1μF 电容消除毛刺实际上这会把脉冲宽度拉宽、把边沿延迟直接破坏过零点的相位精度。10kΩ 配 100nF 的时间常数是 1ms相当于把整个脉冲往后拖了将近 1ms对应工频相位 18°移相控制直接就废了。正确的做法是硬件上只做小电容100pF 级别滤高频主要靠软件消抖。脉宽的理论值可以估一下。正弦波在零点附近的斜率是dV/dt Vpk × 2πf 311 × 314 ≈ 97600 V/s ≈ 0.098 V/μs光耦导通阈值约 1.2V那么从零点上升到导通阈值需要的时间约 1.2 / 0.098 ≈ 12μs正负半周各一次理论脉宽约 24μs。实际因为光耦的传输延迟、CTR 离散性、上拉电阻的充放电时间实测通常在 100μs 到 500μs 之间。这个偏差是正常的重要的是每次的脉宽要稳定抖动大才说明有问题。2.4 零点抖动和脉宽漂移的四个来源实际调试中过零信号不稳通常来自四个地方。第一个是限流电阻的温漂。通电后电阻发热阻值变化光耦电流跟着变导通阈值对应的相位点就偏了。解决办法是留足功率余量把电阻的温升压在 20℃ 以内。第二个是光耦本身的传输延迟离散性。同一批次的器件延迟一致性还行跨批次可能差几十微秒。如果做批量产品这个要在软件里做一次标定。第三个是电源纹波。上拉电阻接的 VCC 如果不干净比较阈值跟着抖脉宽就抖。单片机的 VCC 一定要加 100nF 加 10μF 的组合滤波。第四个最隐蔽——地线干扰。光耦输出侧的接地点如果和可控硅的驱动回路共用一段走线可控硅每次触发时的大电流脉冲会在地线上产生毫伏级的尖峰叠加到过零信号上就是毛刺。解决办法是过零检测的输出地单独走一根线回单片机的地中间不和其他大电流回路交汇。这个细节在原理图上看不出来只有在 PCB 布局时才体现但它是信号明明算对了却总是误触发的头号原因。3. 触发链路光耦、门极电阻与缓冲网络过零信号解决了什么时候该动接下来要解决怎么把可控硅打开。这一段涉及三个元件隔离光耦、门极限流电阻、RC 缓冲网络。每一个都有明确的取值逻辑不能凭手感。3.1 过零型与随机型光耦选错了整个方案就废了可控硅驱动光耦分成两大类过零型内部带过零检测只有两端电压接近零时才允许输出触发脉冲和随机型也叫非过零型输入有信号就立即输出。过零型的好处是天生抑制干扰因为它只在电压过零点附近开通产生的 dV/dt 和射频干扰极小适合做开关用——比如控制加热管通断、控制电机启停。缺点是它没法做移相因为你想在 90° 触发它偏要等到下一个过零点才动。随机型的自由度大可以在任意相位触发是移相调功的必需器件。代价是开通瞬间的 dV/dt 大电磁干扰明显必须靠 RC 缓冲和电感滤波来压。这里有个非常经典的坑值得单独说过零型光耦驱动感性负载时会丢波。原因是感性负载的电流滞后于电压当电压过零时电流还没过零可控硅仍然导通两端电压接近零等到电流过零、可控硅自然关断时两端电压已经不为零了此时光耦内部的过零检测认为不在零点拒绝输出触发脉冲于是下一个半周直接缺失。表现出来就是变压器或电机带不动、嗡嗡响、只有半个波在工作。解决路子有三条换成随机型光耦用软件在过零点附近触发在负载两端并联一只合适的假负载电阻让电压在过零附近有个确定的通路或者干脆放弃过零型改用继电器加过零投切。我一般首选第一条控制权在软件手里灵活得多。3.2 门极限流电阻怎么算为什么常用 360Ω光耦输出侧是一只光敏可控硅它串在门极回路里。当光耦导通时MT2 的电压经过这只电阻打到门极上产生触发电流。电阻的作用是限流防止门极电流过大烧掉光耦或者门极。计算依据是光耦允许的浪涌电流。以常见的随机型光耦为例输出侧额定电流 100mA允许的峰值浪涌约 1A。市电峰值 311V那么Rmin Vpk / I_peak 311 / 1 311Ω取 330Ω 到 360Ω 是安全的。如果电阻取得太小比如 100Ω峰值电流能到 3A超出光耦承受能力短期内可能看不出来长期就是随机失效。取得太大比如 1kΩ峰值电流只有 0.3A对于需要 30mA 以上门极电流的大功率可控硅触发就变得勉强尤其在低温环境下更明显。功率方面这只电阻看着工作电流大但实际导通时间极短。可控硅一旦开通MT1 和 MT2 之间的压降被钳位在 1V 左右电阻两端的电压骤降电流自然就衰减下去了。所以平均功耗很小但瞬间要能扛住浪涌选 1W 的金属膜比较稳妥。另外补一个容易忽略的点门极和 MT1 之间最好并一只 1kΩ 的下拉电阻。作用是防止漏电流或干扰把可控硅误触发。有些应用里省掉它也能工作但在干扰大的场合比如附近有电机、继电器频繁动作这只电阻能省掉很多莫名其妙的故障。3.3 RC 缓冲网络抑制 dV/dt 的保险也是效率的负担可控硅关断的瞬间负载侧的电感哪怕只是走线的分布电感和可控硅的结电容会形成高频振荡产生很大的 dV/dt。如果这个变化率超过器件的承受能力可控硅会误导通表现为关不断、半波工作、或者干脆失控。RC 缓冲网络就是并联在 MT1 和 MT2 之间的一个泄压阀。典型取值是 100Ω 串联 0.1μF。计算思路是这样的可控硅关断后负载电压要通过 RC 才能上升上升时间被拉长dV/dt 就降下来了。粗略估算dV/dt ≈ Vpk / (R × C) 311 / (100 × 0.1e-6) 31 V/μs这个数值低于大多数可控硅的静态 dV/dt 极限通常在 50V/μs 以上留有余量。如果负载是感性很强的场合比如变压器可以把电容加大到 0.22μF或者把电阻减小到 47Ω进一步压低 dV/dt。代价有两个。一是电容在每次电压变化时都要充放电产生额外的无功电流待机时有微小功耗也会让负载上有一点漏电流。二是电容本身的耐压必须够标称 400V 的电容在 311V 峰值下长期工作余量不足必须选 630V 的 CBB 或者 X2 类安规电容。注意RC 缓冲电容绝对不能用电解电容也不能用普通陶瓷电容。必须是金属化聚丙烯薄膜电容这类电容能承受频繁的充放电冲击和较高的 dV/dt。用错电容的后果是电容内部击穿短路可控硅直接失控。还有一种情况要提醒容性负载比如带电容滤波的电源模块上电瞬间相当于短路冲击电流极大RC 缓冲不但帮不上忙还会加剧冲击。这类负载前面要加 NTC 热敏电阻或者限流电路不能指望可控硅自己扛。3.4 布板、散热与那些不写进原理图的细节原理图正确但板子跑不稳八成是布局的问题。第一条是隔离带。光耦下方建议开槽两侧的铺铜保持 8mm 以上的间距。如果做不到开槽至少保证隔离带内没有过孔、没有走线、不铺铜。潮湿、灰尘、长期工作后的表面污染都会让绝缘电阻下降8mm 是针对 220V 加强绝缘的常规要求别压缩到 4mm 以下去省空间。第二条是门极回路的走线。从光耦输出到门极电阻再到可控硅门极这条线要短、要粗不能和主回路的大电流走线并行。并行会产生磁耦合大电流切换时的 di/dt 在门极回路上感应出尖峰轻则误触发重则烧门极。如果实在避不开中间加一条地线做屏蔽。第三条是散热。可控硅的通态压降大约 1V 到 1.5V10A 电流就是 10W 到 15W 的发热。TO-220 封装不加散热片热阻大约 60℃/W10W 就是 600℃ 温升显然撑不住。按实际电流选散热片5A 以内可以用小铝片10A 以上必须用带翅片的散热器并且涂导热硅脂。结温控制在 100℃ 以内比较稳妥留 25℃ 余量。第四条是主回路走线。可控硅的 MT1、MT2 引脚之间的走线要尽量短而宽减少寄生电感。负载回路的走线如果太长关断时的感应电动势会叠加到可控硅两端配合 RC 缓冲也压不住。经验值是回路面积控制在 10 平方厘米以内。4. 功率可调的两条路线移相和整周波功率可调这四个字听起来是一个功能实际上有两种完全不同的实现哲学选错了方向后面怎么优化都是徒劳。这一节把两条路线的原理、代价、适用负载讲透最后给一张对照表。4.1 移相调功连续平滑代价是谐波和干扰原理很直观每个半周从过零点开始计时延时一段时间再触发可控硅剩下的半个周期导通。延时越长导通角越小输出的有效值电压越低。有效值电压和触发角的关系可以用公式算Vrms(α) Vfull × √(1 - α/π sin(2α)/(2π))其中 α 是触发角单位弧度。代入几个关键点看看触发角 α导通角输出电压相对功率0°180°220V100%45°135°201V83%90°90°156V50%135°45°105V23%180°0°0V0%注意 90° 对应的是 50% 功率不是 50% 电压——因为功率和电压的平方成正比155V 的平方是 220V 平方的一半。这个非线性意味着控制上要做查表或者反函数运算直接用线性映射会导致调光手感很差低端变化太快、高端变化太慢。移相调功的优点是无级连续、响应快、成本低缺点是波形残缺。每个半周只有一部分导通相当于把正弦波切了一刀产生的谐波从 3 次一直到几十次都有。这些谐波在电网上的传导会干扰其他设备在负载上会产生噪音白炽灯在低亮度时嗡嗡响、电机发热严重而且功率因数很低低导通角时可能只有 0.5 左右。4.2 整周波调功干净利落但要解决闪和慢另一条路线是整周期控制也叫周波控制或者循环控制。做法是以一个固定长度的周期组为基本单位比如 1 秒包含 50 个工频周期在这一组里选通 N 个完整的工频周期其余周期完全不通。输出功率就是 N/50。这样做的好处非常明显可控硅只在过零点开通和关断波形是完整的正弦没有谐波没有干扰功率因数是 1。缺点是输出的能量是脉动的负载上会看到一段有电一段没电的交替。对于加热管这类热惯性大的负载1 秒的周期完全感觉不到这是最理想的方案。对于白炽灯1 秒周期会看到明显的闪烁必须把周期缩短到 200ms 甚至 100ms 以内但周期太短又会导致分辨率下降200ms 只有 10 个周期功率只能按 10% 步进。电机负载要更小心。单相电机在整周波控制下会频繁经历启动和停止启动电流是额定电流的 5 到 7 倍频繁通断会烧绕组。这类负载要么用移相控制做软启动要么干脆用变频方案别用可控硅硬扛。4.3 负载类型是最终裁判选路线的时候负载性质比什么都重要我按经验整理了一份判断依据。纯阻性负载白炽灯、电热丝、电热管、PTC 加热器两条路都能走。要求调光无闪烁就选移相要求低干扰、高功率因数就选整周波。加热类的场合我几乎都选整周波稳定可靠。感性负载变压器、电机、带铁芯的电感线圈首选整周波因为移相控制会产生不对称的正负半周。为什么会不对称正半周和负半周的电感储能不同如果触发角控制得不够精确两个半周的导通时间会有偏差产生直流分量。这个直流分量加到变压器绕组上会让铁芯逐渐饱和励磁电流激增轻则过热重则烧毁。这是移相控制带感性负载最危险的地方很多教程一笔带过实际后果很严重。容性负载带整流桥和电容滤波的电源可控硅开通瞬间电容相当于短路冲击电流极大可能直接超过器件的浪涌承受能力。这类负载必须加限流措施比如 NTC 热敏电阻或者串联电感而且触发时刻要选在电压峰值附近减少电流冲击。4.4 一张对照表说清楚选型对比维度移相调功整周波调功输出连续性无级连续离散取决于周期数谐波含量高随导通角减小而增加理论上无功率因数低0.5 到 0.9接近 1电磁干扰大需要 LC 滤波极小响应速度快单个半周即可改变慢至少一个周期组负载适应性阻性、白炽灯阻性、感性、大功率加热典型应用调光台灯、电风扇调速加热设备、恒温控制器件要求随机型光耦过零型光耦5. 单片机这一侧中断、定时和功率分配算法硬件把路铺好了剩下的活全在软件。这一节讲三个东西过零中断怎么捕得稳、移相定时怎么算得准、整周波功率怎么分得匀。5.1 过零中断的捕获与消抖过零信号进来第一反应是配外部中断。有一个细节要注意过零脉冲是低电平有效所以要配成下降沿触发而且最好同时打开双边沿或者用定时器输入捕获这样能同时拿到正半周和负半周的零点位置。单纯用下降沿触发的问题是如果脉冲有毛刺会误触发多次。软件消抖的做法是进中断后关中断读定时器计数如果距离上次中断的时间小于 9ms半个工频周期减去合理余量判定为毛刺直接丢弃如果大于 11ms说明丢了一个半周要做失步处理重新同步相位。void zero_cross_irq(void) { uint16_t now timer_get_count(); uint16_t dt now - last_tick; disable_irq(); if (dt TICK_MIN) { /* 9ms 以内判为毛刺 */ enable_irq(); return; } if (dt TICK_MAX) { /* 11ms 以上判为失步 */ sync_state LOST; phase_base now; enable_irq(); return; } last_tick now; phase_base now; /* 记录本周零点 */ sync_state LOCKED; enable_irq(); }中断里的代码要短能放到主循环处理的都挪出去。这里只做时间戳记录和状态判定具体的触发延时计算放到主循环里避免中断嵌套和长时间占用。还有一个配置上的坑如果用的是双边沿触发正半周和负半周都会进中断那么 TICK_MIN 要相应调整否则会把另一半周误判为毛刺。我一般只用一个下降沿靠定时器周期来推算另一半零点简单可靠。5.2 移相的定时精度要求与配置移相控制的核心是零点后延时多少微秒触发。工频周期 20ms半周 10ms对应 180°。如果触发角分辨率要做到 1°延时精度需要达到10ms / 180 55.6μs看起来要求不高普通定时器都能满足。但实际要做到 0.1° 级别的平滑调节就需要 5.5μs 的精度。用 1MHz 时钟的 16 位定时器计一个数就是 1μs完全够用。定时器配置上我习惯这样算单片机主频 24MHz预分频 24 得到 1MHz 计数时钟16 位定时器最大计数值 65535对应 65.5ms覆盖一个完整工频周期绰绰有余。触发延时的计数值uint16_t delay_ticks angle_deg * 10000UL / 180; timer_set_compare(TRIG_TIMER, phase_base delay_ticks);这里用phase_base过零时刻的计数值作为基准而不是在中断里重新清零计数好处是定时基准不随中断响应延迟漂移即使中断晚进了几微秒触发点仍然是相对于真实零点算出来的。触发脉冲宽度也要控制。可控硅一旦导通门极就不需要再给电流了所以脉冲给 50μs 到 100μs 足够。给太宽没有意义反而增加光耦的功耗和发热。但也不能太窄要考虑光耦的传输延迟和上升时间50μs 是比较稳妥的下限。5.3 整周波调功的均匀分配算法整周波调功最容易犯的错是集中导通需要 50% 功率就前 25 个周期全开、后 25 个周期全关。这样做虽然平均功率对但负载上的温度波动、灯的闪烁都会非常明显。正确的做法是把导通的周期均匀散布在周期组里。经典实现是累加器法也叫 delta-sigma 思路static uint16_t acc 0; #define FULL_SCALE 1000 void on_zero_cross(void) { acc power_set; /* power_set 范围 0 到 1000 */ if (acc FULL_SCALE) { acc - FULL_SCALE; fire_next_cycle 1; /* 本周期导通 */ } else { fire_next_cycle 0; /* 本周期跳过 */ } }这个算法的妙处在于无论功率设成多少导通的周期都会均匀分布在整个周期组里。设 50% 时实际输出是开、关、开、关交替设 33% 时是开、关、关、开、关、关间隔恒定。负载上看到的能量脉动频率从 1Hz 提升到了 25Hz热惯性和人眼视觉都能完全滤掉。分辨率由 FULL_SCALE 决定。取 1000 意味着最小调节步进是 0.1%配合 50Hz 工频一个完整周期组 1 秒实际能表达的功率级数是 1000 级但实际上只有 50 个周期所以有效分辨率是 2%。如果要更细就得拉长周期组或者接受更新频率降低。实际工程里我通常这么配加热类负载周期组 1 秒50 个周期分辨率 2%够用照明类周期组 200ms10 个周期分辨率 10%牺牲分辨率换低闪烁。5.4 软启动与功率斜率限制不管走哪条路线上电瞬间的功率冲击都要处理。冷态的白炽灯电阻只有热态的十分之一直接全功率上电冲击电流能达到额定值的十倍加热管同理冷态电阻小瞬间功率远超额定。可控硅本身能承受短时浪涌但长期这么折腾寿命会大幅下降。软启动的做法是限制功率设定值的变化速率。比如要求从 0 到 100% 至少花 1 秒那么每次过零中断时实际输出功率最多比上一次增加 2%1 秒 50 个周期void power_ramp(void) { if (target_power actual_power) { actual_power RAMP_STEP; if (actual_power target_power) actual_power target_power; } else if (target_power actual_power) { actual_power - RAMP_STEP; if (actual_power target_power) actual_power target_power; } }RAMP_STEP 的取值看负载。加热管热惯性大取 1% 到 2% 都行白炽灯要快一点响应取 5%电机类必须慢取 0.5% 以下。还有一层保护是掉电检测。市电突然断电又恢复时如果功率设定值还停在高位恢复瞬间就是全功率冲击。稳妥的做法是检测到过零信号丢失超过 100ms就把实际功率清零等信号恢复后重新软启动。6. 调试实录六类典型故障的排查路径纸面上的东西讲完了真正花时间的永远是调试。这一节的内容全部来自实际踩过的坑按现象分类整理遇到问题时可以对着查。6.1 故障速查表现象最可能的原因排查动作完全不导通光耦输入侧没有驱动信号万用表测光耦 1、2 脚电压确认有 5 到 10mA 电流完全不导通门极电阻虚焊或阻值过大断电测门极回路通断阻值应在标称值 ±5% 内只有半个波工作过零型光耦带感性负载换随机型光耦或并联假负载输出功率调不上去触发脉冲太窄光耦没来得及响应脉冲加宽到 100μs 再试低功率档闪烁负载电流低于可控硅维持电流并联泄放电阻或改用整周波控制随机误触发门极回路受干扰门极对 MT1 加 1kΩ 下拉电阻过零信号毛刺多地线干扰或电源纹波检查过零检测的地是否独立走线可控硅发热严重散热不足或通态电流超限测实际电流核算功耗加散热片6.2 三个我踩过的坑第一个坑小功率负载点不亮。当时做的是一盏 3W 的 LED 灯调光电路照着大功率的方案抄的结果低亮度档位灯一直闪。查了半天才发现3W 在 220V 下电流只有 13mA而所用可控硅的维持电流是 25mA导通之后电流撑不住可控硅自己就关断了。解决办法是在负载两端并一只 47kΩ 的电阻做假负载让总电流超过维持电流。代价是这只电阻常年耗电约 1W需要选 2W 以上的规格而且要放在通风的位置。第二个坑过零点偏移导致最低亮度调不到。电路上电后测波形发现过零脉冲的实际位置比理论零点晚了大约 300μs对应相位 5.4°。这意味着软件里算的触发角 0°实际是 5.4°最低亮度永远调不下去。原因是光耦的传输延迟加上拉电阻的上升时间。解决办法是在软件里加一个固定的相位补偿量把基准往前挪 300μs。这个补偿值每批板子都要重新标定因为光耦的延迟有离散性。第三个坑带变压器负载丢波。这个前面提过用的是过零型光耦带一个 50W 的小变压器结果变压器嗡嗡响、输出电压只有一半。换成随机型光耦软件在过零点后延时 1ms 触发问题解决。为什么延时 1ms因为要等电压确实建立起一定幅值光耦输出侧的触发电流才够同时避开零点附近的抖动区。这个延时值不是算出来的是试出来的从 200μs 一直试到 2ms1ms 最稳。6.3 上电前必做的五项检查每次焊完新板子我都按这个顺序过一遍能省掉大量上电就炸的悲剧。第一项断电状态下用万用表二极管档测热地和冷地之间的电阻应该是无穷大。如果有读数说明隔离被破坏了绝对不能上电。第二项测限流电阻的实际阻值四只串联的总阻值要和设计值一致。曾经遇到过贴片电阻焊错封装的情况标称 30k 实际焊了 3k上电瞬间光耦就烧了。第三项检查门极电阻和缓冲电容的极性。CBB 电容虽然无极性但有些封装标注了方向装反了不影响功能但影响寿命。门极电阻要确认功率规格够。第四项先用隔离变压器给板子供电串一只 40W 的白炽灯做限流。如果板子有短路灯泡会全亮而板子不工作不会直接炸器件。这个土办法救过我很多次。第五项第一次上电不接负载只测过零信号波形。波形正常了再接一个小功率负载试逐步加大。直接上满功率是最容易出事的操作。最后再分享一个实测下来很有用的小技巧在可控硅的 MT1 和 MT2 之间临时并一只氖泡指示灯能直观看到可控硅有没有导通、导通角大概多少。氖泡的亮度随导通角变化很明显调试移相的时候比示波器还快。当然长期使用要拆掉氖泡本身也有寿命和漏电流。我个人在实际操作中的体会是这套电路的难点从来不在原理而在那些手册上不写、教程里不提的边界条件——光耦的延迟、电阻的耐压、负载的维持电流、地线的走向。把这些细节一个个啃下来电路才能从能亮变成能用三年不出问题。下一篇打算聊聊多路同步控制和功率因数校正的取舍那部分涉及到多只可控硅共用一个过零基准时的相位对齐问题坑比这一篇还多。