1. 项目背景与核心需求
双向可控硅(TRIAC)作为交流电控制的核心元件,在智能家居、工业控制等领域应用广泛。这个项目要实现的是通过单片机精确控制TRIAC的导通角,从而实现对交流负载(如灯泡、电机等)的调压或开关控制。
我最早接触这个需求是在开发智能灯光控制系统时,需要实现灯光的无级调光。传统继电器只能实现开关功能,而TRIAC控制可以做到从0到100%的连续调节。这种技术在家电控制(如电风扇调速)、电热设备控温等场景都非常实用。
2. 硬件设计与元件选型
2.1 核心元件解析
双向可控硅(TRIAC):我常用的是BT136系列,600V/4A的参数足够应对大多数家用电器控制需求。选择时要注意:
- 电压等级应高于实际工作电压(家用220V至少选400V以上)
- 电流要留有余量(实际负载电流的1.5-2倍)
光耦隔离:MOC3021/MOC3041是经典选择。我推荐MOC3041(带过零检测),可以简化软件设计。使用光耦是为了将高压侧(220V)与低压侧(单片机)电气隔离,确保安全。
2.2 典型电路设计
这是我验证过的稳定电路方案:
code复制220V AC ---- [FUSE] ---- [TRIAC主端子] ---- [负载]
|
[MOV压敏电阻] [触发极]
| |
[RC吸收电路] [光耦输出]
|
[单片机IO]
关键设计要点:
- RC吸收电路:我用的是100Ω+0.1μF组合,能有效抑制TRIAC关断时的电压尖峰
- MOV保护:选用275V的压敏电阻,防止过压损坏
- 触发电阻:光耦与TRIAC间串联330Ω电阻,限制触发电流
警告:调试时必须先断开高压,用低压测试触发电路正常后再接入220V!
3. 软件控制策略
3.1 过零检测与相位控制
交流电控制的核心是准确检测过零点并计算延迟时间。我采用的方案是:
- 通过光耦的过零检测输出连接单片机外部中断
- 在过零中断中启动定时器
- 根据需要的导通角计算定时值(50Hz交流电的半周期是10ms)
导通角计算公式:
code复制触发延迟时间(ms) = (导通角度/180) × 10
例如要实现90度导通:
code复制(90/180)×10 = 5ms
3.2 代码实现要点(基于STM32)
c复制// 过零检测中断服务函数
void EXTI0_IRQHandler(void) {
if(EXTI_GetITStatus(EXTI_Line0) != RESET) {
TIM_SetCounter(TIM2, 0); // 重置定时器
TIM_Cmd(TIM2, ENABLE); // 启动定时器
EXTI_ClearITPendingBit(EXTI_Line0);
}
}
// 定时器中断服务函数
void TIM2_IRQHandler(void) {
if(TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) {
GPIO_SetBits(GPIOA, GPIO_Pin_1); // 触发TRIAC
delay_us(100); // 保持触发脉冲
GPIO_ResetBits(GPIOA, GPIO_Pin_1);
TIM_Cmd(TIM2, DISABLE); // 关闭定时器
TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
}
}
4. 实际调试经验
4.1 常见问题排查
-
TRIAC不触发:
- 检查光耦输入端是否正常工作(LED端)
- 测量触发极是否有足够电压(应有至少2V的脉冲)
- 确认负载功率足够(有些TRIAC需要最小负载电流)
-
TRIAC误触发:
- 加强PCB布局隔离(高低压走线间距至少3mm)
- 在TRIAC的MT1和MT2间并联0.01μF电容
- 检查接地是否良好(这是80%干扰问题的根源)
-
控制不线性:
- 校准过零检测的响应时间
- 使用更高精度的定时器(16位以上)
- 对于电机类感性负载,需要适当增加导通角余量
4.2 性能优化技巧
-
降低EMI干扰:
- 在TRIAC两端并联RC吸收电路(我常用100Ω+0.1μF)
- 使用带磁环的电源线
- PCB布局时使高压回路面积最小化
-
提高控制精度:
- 使用硬件定时器而非软件延时
- 采用PID算法动态调整导通角
- 对于50Hz工频,定时器时钟建议≥1MHz
-
安全增强措施:
- 在电源输入端加入自恢复保险丝
- 高压区用硅胶填充隔离
- 加入温度检测(TRIAC过热保护)
5. 进阶应用扩展
5.1 多通道控制方案
当需要控制多个交流负载时,我的经验是:
- 每个TRIAC独立光耦隔离
- 共用过零检测信号
- 采用PWM分组触发策略(避免同时导通导致电流突变)
5.2 无线控制集成
结合ESP8266实现WiFi控制的要点:
- 将导通角参数映射为0-100%的调光值
- 采用MQTT协议传输控制指令
- 加入本地手动控制回退(网络中断时仍可操作)
5.3 功率测量功能
通过在电路中加入电流互感器(如TA12-100),可以实时监测负载功率。我实现的方案是:
- 采样电流信号经运放调理
- 与电压信号相乘(需要同步采样)
- 用STM32的ADC+DMA实现实时计算
6. 项目总结与建议
经过多个实际项目的验证,我认为最稳定的硬件组合是:
- TRIAC:BTA16-600B(16A余量充足)
- 光耦:MOC3041(带过零简化设计)
- 单片机:STM32F030(成本低且资源足够)
对于初学者,我建议:
- 先用低压(如24V AC)实验电路
- 使用隔离电源给单片机供电
- 首次上电时串接60W灯泡限流保护
这个方案我已经成功应用于智能插座、调光器、电机调速器等产品中,实测连续工作1000小时无故障。关键是要做好电气隔离和散热设计,TRIAC的散热片绝对不能省略。