很久没有在论坛发东西了,那就分享一个最近项目中用到的红外数据发送方法。该方案不适合红外数据编码为RC5、NEC的发送和接收,适用于纯数据发送和接收。
废话少说,红外发射和接收电路没有什么特殊的地方,红外发射和接收都是采用38K载波方式,接收采用VS1838B。VS1838B接收到38K载波信号时,IR_OUT会输出低电平,未接收到信号时,输出高电平。电路如下所示:
IR_IN要接到PWM信号输出引脚,IR_OUT要接到串口的接收引脚。既然使用串口接收红外信号,那么红外信号发送当然要使用串口发送啦。我这边使用的是IO口模拟串口方式,而这个IO口必须是PWM信号输出引脚。
接下来讲下红外信号发送原理,首先单片机硬件上需要具备两个定时器,其中一个必须带有PWM输出功能,配置成频率为38KHz,占空比50%的信号。既然使用串口发送,当然需要波特率,目前我使用的波特率为600,效果好;建议不要将波特率设置超过1200,不然传输距离会变短;波特率越低,传输距离越大。另外一个定时器用于精确延时,用于每个数据位的发送延时,T = 1000 / 波特率。不同的单片机特性不一样,因此T的值会有协偏差,微调下T值,会有更好的效果。
最后说下数据发送方法,我这边串口数据发送格式:使用8位数据位,1个停止位,无奇偶校验位,低位优先发送。当数据位为1时,不发送载波信号(关闭PWM信号输出);当数据位为0时,发送载波信号(开启PWM信号输出)。发送的信号经过VS1838B处理后就会得到高低电平信号,最后经串口解析出来。接收端有时会接收到一些乱码,我这边使用的双字节发送,第一个字节用于标识,第二个字节是数据,这样效果会比较好。还有一种数据发送方法:需要硬件串口,串口波特率设置不得高于1200;还需要一个定时器用于PWM信号输出,同样用于38K载波生成;还需要一个模拟开关芯片用于控制PWM信号输出。这样只要把数据往串口里填,就可以发送了。电路如下:
文章末尾有红外数据发送的代码,可以参考下。接收部分就不上传了,只要将串口设置成接收模式,波特率,数据位,停止位等跟发送端一致就可以了。好了,你们可以自己搞腾了,看看能不能DIY出新的功能。
此内容由EEWORLD论坛网友ilovefengshulin原创,如需转载或用于商业用途需征得作者同意并注明出处