具有过零检测的可控硅晶闸管AC模块(交流无极调压) 介绍电路设计原理: 通过LTV-824S检测过零点,再经过LM235比较器,使得输出可靠的过零信号; MOC3021S配合S8050三极管,控制双向可控硅BTA24-600对AC220V进行调节; PT为过零信号输出,220V电流过零的时候,PT输出为低电平; PWM_CH1为输入控制信号,为PWM信号; VCC,GND为直流供电电源,可以使用3.3V或者5V; N、L_in 为AC220输入; N\\\\Lout为经过调节的电压输出; 硬件最大输出电流可达25A/220V,默设计认为10A的保险丝。 只需要1个控制信号,可以非常方便的与各种单片机配合使用. 可控硅,在开启的瞬间,电流冲击会在电网上形成一个负跳变,幅度由电流的大小决定。 这种跳变多了,电网就不干净了。 理论上,过零的时候打开可控硅,是没有冲击电流的。 所以控制的时候,单片机需要在检测到过零点后再进行PWM控制。 1.提供AD板工程文件。 2.提供关键元器件手册。 3.技术少量支持。 4.支持1000W到3000W大功率。
这个交流调压模块的设计挺有意思的,咱们直接拆开来看核心部分。过零检测用LTV-824S光耦,这货响应速度够快,能准确捕捉到AC220V的过零时刻。当市电过零时,PT脚会拉低电平——这个信号相当于给单片机递了个"发车时间表"。
看看这段伪代码:
void zero_cross_isr() { // 过零中断 if(delay_count > 0) { triac_triggered = 1; timer_start(delay_count); } } void timer_callback() { digitalWrite(TRIAC_CTRL, HIGH); delayMicroseconds(50); // 确保可靠触发 digitalWrite(TRIAC_CTRL, LOW); triac_triggered = 0; }实际上就是等过零信号来了之后,根据PWM占空比计算延时触发时间。比如需要50%功率时,就在过零后等5ms(半个正弦波周期是10ms)触发可控硅。重点是这个时间窗口必须卡准,早触发会导致冲击电流,晚触发影响功率调节精度。
硬件上有个精妙设计:MOC3021S光耦驱动电路。S8050在这里不是简单当开关用,它的基极电阻取值需要配合PWM频率。实测中发现,当PWM频率超过500Hz时,要在基极并个104电容滤高频干扰,否则会出现误触发。
调试时最容易踩的坑是EMI问题。有次测试3000W热水器负载,每次可控硅导通时示波器都能看到明显的毛刺。后来在BTA24的T1/T2脚之间加了个RC吸收电路(47Ω+0.1μF/630V),电网干扰立马老实了。这点在驱动感性负载时特别重要,电机类设备断电时的反电动势可不是闹着玩的。
关于PWM信号处理,有个反直觉的点:控制周期不是越短越好。推荐使用20ms整数倍的周期(比如40ms),这样能对齐过零信号,避免出现相位漂移。用Arduino的话可以这样同步:
unsigned long last_zero = 0; void loop() { if(zero_detected) { last_zero = millis(); zero_detected = false; } // 计算相对于上次过零的时间差 unsigned long elapsed = millis() - last_zero; if(elapsed >= required_delay) { trigger_triac(); } }最后说下散热设计,BTA24在10A电流时建议配个5℃/W以下的散热器。有个取巧的办法:把可控硅的金属底板与铝合金外壳用导热硅脂直接接触,比用绝缘垫片的温降能低8-10℃。当然,安全第一,耐压测试必须做足,别省那点绝缘材料的钱。