一. IO口检测交流信号的用途
目前市场上的智能灯(LED 灯)都具有灯光切换功能,通过快速操作开关面板,即可实现灯光由暖光,到冷光,以及其它各种灯光模式的切换。
开关面板切换灯光的功能,目前主要有两种实现方式: 方式1:检测交流电是否出现过断电 这种灯的驱动有储能功能,断电后,存储的能量可以让 MCU 继续工作数秒 ,对于这种驱动实现开关检测,就需要用交流检测功能实现,正常工作时,MCU 端通过IO口可以检测到 50hz 信号,当关闭开关面板瞬间,交流电被断开,交流信号消失,此时驱动端的 MCU 通过IO口读到的是低电平,再上电后,交流信号恢复, MCU通过IO 口再次检测到 50hz 的信号, MCU据此来实现灯光的切换,这种切换方式要求开关面板两次开关间隔(断电的时间)不可以太长,需要保证MCU一直处于正常工作状态。 方式2:通过MCU的存储功能实现 这种灯的驱动没有储能功能,断电后 ,MCU也立即就断电了。对于这种电路,要实现开关面板切换灯光功能,就需要借助 MCU 写Flash 功能来实现了,此种方式此处不做详述。 对于方式1 需要灯的驱动端的MCU 能通过IO口检测 220V 交流信号,并能准确判断出是否出现过掉电(有过开关动作),而实现这种功能调试比较危险,且信号不易测量,所以在此提供一种实现方法。
二. 交流信号检测部分的参考电路
要MCU能检测 AC 220V 交流电, 需要有相应的电路支持,下面是将AC 220V 交流信号转成低电压信号的一种参考电路。

图 1 交流信号检测电路(整流部分电路略)
AC_DET 输出端连接到 MCU 的IO 口,用于MCU 对信号进行检测。 AC_DET输出端通过逻辑分析仪测得的波形见图 2。

图 2 AC_DET 端的输出波形(逻辑分析仪测量结果)
将上述波形放大后,见 图3.

图 3 AC_DET 端的输出波形(逻辑分析仪测量结果)
由图3 可以看出,AC_DET 输出的逻辑是周期为 20mS 左右的波形信号。其中高电平部分约占 8.05ms ,低电平约 11.95mS (见图示2 ,占空比会据不同的电路有些差异)周期为 20mS左右.
有了上述波形后,实现交流检测就比较清析了。
** 重要: 上述电路是非隔离电路,不可直接测量,非常危险
三. 软件实现方法
软件实现的思路就是将 IO口配置为输入,打开中断,有信号情况下每个周期会上一次中断,据相临两次中断的时间间隔是否在20mS 左右,来判断是否有过开关动作。

图4 软件实现的原理
软件逻辑:
(1) 将普通 IO 初始化为输入方式,启用上升延上中断(下降延也可以)
(2) IO中断处理逻辑:
A. 禁用中断功能
B. 启动 15ms 定时器(用于跳过不稳定的波形)
(3) 定时器中断处理逻辑
A. 在定时器中断处理中读出系统时间,并计录到全局变量,如果不是第一个中断, 则需要比较两次时间差,原则上在25mS 以内,如果在25mS 以内,则表明没有出现过开关动作,如果超过100mS ,则说明有过开关动作,需要进行灯光的切换
B. 在定时器中断处理中再次使能中断。
|