设计一个双重控制的智能调光器:可控硅调光与Wi-Fi调光
设计一个既支持传统的可控硅(TRIAC)调光,又能通过Wi-Fi APP 控制的智能调光器,是一个融合模拟和数字控制技术的项目。以下是详细的设计指南,涵盖电路设计、关键组件选择、控制逻辑以及安全考虑。
1. 系统概述
该智能调光器需要实现以下功能:
- 可控硅调光:通过传统的旋钮或按钮控制灯光亮度,采用TRIAC相位切割技术。
- Wi-Fi调光:通过APP发送PWM信号,控制灯光亮度,实现无级调光。
- 双重控制接口:确保两种控制方式可以同时工作或根据优先级进行切换。
- 安全性:隔离高压AC与低压控制电路,防止电气危险。
2. 关键组件选择
-
微控制器(MCU):
- 推荐:ESP32(内置Wi-Fi和足够的GPIO引脚)
- 功能:处理Wi-Fi通信、PWM生成、TRIAC控制和用户输入。
-
TRIAC:
- 推荐:BT136或BT138
- 功能:控制AC电源的相位切割,实现调光。
-
光电隔离器(Opto-isolator):
- 推荐:MOC3021(适用于TRIAC驱动)
- 功能:隔离MCU与高压AC,确保安全。
-
零交叉检测电路:
- 组件:光耦合器(如H11AA1)、电阻、电容
- 功能:检测AC电源的零交叉点,以便精确控制相位切割。
-
旋钮控制接口:
- 组件:旋转编码器或电位器(带去抖动电路)
- 功能:用户手动调节亮度,转换为MCU可读取的信号。
-
电源管理:
- 组件:隔离式电源适配器(如AC-DC 5V模块)
- 功能:为低压控制电路供电,确保与高压AC隔离。
-
连接器和接口:
- 组件:螺丝端子、连接器等
- 功能:安全连接AC负载与控制电路。
3. 电路设计
3.1. 电源部分
- AC 输入:通过适当的保护电路(保险丝、瞬态电压抑制器)连接至整个系统。
- 低压DC供电:使用隔离式AC-DC转换器将220V AC降压至5V DC,为MCU和其他低压部分供电。
3.2. 零交叉检测电路
- 功能:检测AC电源的零交叉点,提供同步信号给MCU,确保TRIAC触发的准确性。
- 电路:
- AC相线通过限流电阻和电容连接到H11AA1的输入端。
- 光电隔离器的输出端连接到MCU的中断引脚,用于捕捉零交叉事件。
3.3. TRIAC驱动电路
- 连接:
- MCU通过一个GPIO引脚控制MOC3021的输入端(通过限流电阻)。
- MOC3021的输出端连接到TRIAC的门极,通过适当的负载(灯具)接入220V AC。
3.4. 用户输入接口
- 旋钮控制:
- 使用旋转编码器或电位器,将物理旋转转换为电信号,输入到MCU的ADC或数字接口。
- 添加去抖动电路或使用软件去抖动处理,确保信号稳定。
3.5. Wi-Fi模块
- 集成:
- ESP32内置Wi-Fi模块,通过固件与APP通信。
- 使用MQTT或HTTP协议实现与APP的数据交换。
4. 控制逻辑
4.1. 双重控制优先级
- 方案1:设定优先级,例如,当通过APP控制时,物理旋钮失效,反之亦然。
- 方案2:允许两者同时控制,通过软件算法合并信号。
4.2. TRIAC调光控制
- 零交叉检测:当检测到零交叉时,MCU开始计时。
- 延时触发:根据所需的相位延迟,MCU通过PWM信号计算延迟时间。
- 触发TRIAC:在延迟时间后,MCU发送信号到MOC3021,触发TRIAC导通。
- 保持导通:TRIAC在整个半周期内保持导通,直到下一个零交叉。
4.3. Wi-Fi调光控制
- 接收指令:通过Wi-Fi接收APP发送的亮度调整命令(如目标亮度百分比)。
- 转换为相位延迟:将亮度百分比转换为相应的相位延迟时间。
- 更新TRIAC触发时间:调整延迟时间,实现无级调光。
4.4. 用户物理控制
- 读取旋钮输入:MCU持续监测旋钮位置变化。
- 更新亮度设定:根据旋钮的位置,调整目标亮度。
- 同步控制信号:将物理控制转换为相应的相位延迟时间,控制TRIAC。
5. 固件开发
5.1. 开发环境
- 推荐:Arduino IDE或PlatformIO,支持ESP32开发。
- 库支持:
- Wi-Fi连接库(如WiFi.h)
- MQTT库(如PubSubClient)
- 零交叉检测中断处理
- PWM控制(如LEDC模块)
5.2. 功能模块
-
Wi-Fi通信模块:
- 连接到家庭Wi-Fi网络。
- 订阅/发布MQTT主题或处理HTTP请求。
-
用户接口模块:
- 处理旋钮输入,防抖动。
- 更新当前亮度状态。
-
调光控制模块:
- 处理零交叉中断,计算触发时间。
- 触发TRIAC,根据当前亮度设定调整延迟时间。
-
状态同步模块:
- 确保物理和Wi-Fi控制的状态同步。
- 提供实时反馈给APP和物理旋钮。
5.3. 示例代码结构
#include <WiFi.h>