自学习万能红外遥控模块软硬件设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
自学习万能红外遥控模块软、硬件设计
红外线遥控就是利用波长为0.76~1.5μm之间的近红外线来传送控制信号的。红外遥控是目前家用电器中用得较多的遥控方式,在家用电器、室内近距离(小于10米)遥控中得到了广泛的应用。但各产生的遥控器不能相互兼容。目前市场上常见的万能遥控器只能对某几种产品进行控制,不是真正的“万能”,而且不能对新上市的产品进行控制。所以,如何实现对种类繁多得红外家电设备进行控制是本系统必须解决得任务之一。
本模块用单片机对红外遥控器信号接收和转发的方法,由于只关心发射信号波形中的高低电平的宽度,不管其如何编码,所以能实现绝大部分红外设备的遥控。
自学习万能红外遥控模块整体框图如下:
本模块主要要实现的功能为:
●管理键盘和液晶,用户进行红外遥控器的学习等操作;
●学习各种红外设备的编码并记录保存下来;
●将学到的红外设备的编码发射出去,实现对红外设备的遥控;
●与系统主机进行通讯,执行主机发送过来的命令,实现远程控制。
一.硬件设计
1.红外信号的的发射
发射部分的主要元件为红外发光二极管。它实际上是一只特殊的发光二极管,由于其内部材料不同于普通发光二极管,因而在其两端施加一定电压时,它便发出的是红外线而不是可见光。目前大量使用的红外发光二极管发出的红外线波长为940nm左右。
用遥控脉冲信号调制38kHz方波,然后将已调波放大,驱动红外发光二极管,就可以得到遥发射信号。该部分原理图如下:
图中,与非门4011组成振荡电路,通过调整电阻VR3的值可调整调制频率。SEND脚连接单片机,是信号的输入端。
有些遥控器的载频可能是40kHz,只须稍微加大发射功率仍然可用38kHz载频使其接收电路动作。
2.红外信号的接收和波形测量
所有红外遥控器的输出都是用编码后串行数据对38~40kHz的方波进行脉冲幅度调制而产生的。如果直接对已调波进行测量,由于单片机的指令周期是微秒(μs)级,而已调波的脉宽只有20多μs,会产生很大的误差。因此先要对已调波进行解调,对解调后的波形进行测量。本系统采用红外接收头TL0038。其内部已经包含解调电路和信号放大电路。该部分电路如下:
TL0038的OUT脚连在单片机的一个IO口。单片机通过不断查询这个脚的高低电平变化,完成信号的采集。
3.键盘输入与LCD显示
为了给用户提供友好的界面,完成对红外遥控设备的编码学习过程,本模块采用键盘和LCD与用户进行交互。LCD可以显示文字和图形,给人以直观的感觉,更利于工作人员对系统的维护。
键盘为键盘是人机交互界面的输入部分,是有30个按键组成的开关矩阵5×6。
DGM12232B为点阵式液晶,其与单片机的接口电路如图3.2。
4.红外编码的存储
为了保证系统意外断电后数据不丢失,本系统采用EEPROM将各种编码数据存放起来。AT24C16是2K byte容量的EEPROM,只需要两跟线(时钟线和数据线)和单片机连接。该部
分如下图。
5.RS485通讯
该模块完成与主机的连接,接收来自主机的命令并执行,实现远程控制。采用MAX491
全双工485转换芯片,与单片机的串行口相连。
二.软件设计
1.红外设备脉冲流分析
红外信号的接收,接收和发射是自学习万能遥控器模块的难点和核心内心。
要了解一个未知的遥控器,首先要分析其脉冲流,从而了解其脉冲波形特征(以何种方式携带“0”、“1”信息),进而了解其编码规律。脉冲流的分析应从分析脉冲的高、低电平宽度入手。如果没有红外遥控信号到来,接收器的输出端口PO保持高电平;当接收到红外遥控信号时,接收器件信号转换成脉冲序列加到MCU的输入引脚。用软件测试引脚的逻辑电平,同时启动TC计时器,测量该引脚分别为逻辑“0”和逻辑“1”情况下的时间值,存储起来,然后打印、分析。得出如下规律:
除引导脉冲(一个低电平和一个高电平)和结束脉冲(最后结尾的脉冲几个低电平和高电平)外的脉冲是数据编码脉冲,数据“位”信息由高电平脉宽决定:窄脉宽表示“0”、宽脉宽表示“1”。
经过对相同按键脉冲进行多次采样发现,相同按键脉冲序列的对应位置脉宽时间值是在一个小范围内波动的(不是一个确定值),因此,对模式的识别不能采取精确比较法。对此,本系统采取模糊的办法进行了抽象处理:
①引导脉冲的低电平和高电平宽度的时间值比较大,用字节记录低电平和高电平的时间长度。
②对数据脉冲流按bit进行存储。数据脉冲流的低电平脉宽相同,只记录一次。高电平脉宽是判断数据流每位是“0”还是“1”的依据。也只记录一次宽脉冲和窄脉冲的时间长度。其他用0或1来记录是宽脉冲还是窄脉冲。这种记录方法大大压缩了数据量。
实践证明,上述判据是有效可行的。这样处理不仅使解码软件的设计简单化,而且大大提高了解码的速度。
2.软件设计
为易于调试,便于扩展,增加可读性,软件设计采用模块化的方法。主要分成:红外接收和发射模块,485通讯模块,EEPROM模块,键盘模块,LCD模块。各模块都具有很强的
通用性,非常便于程序的维护,扩展和移植。各模块功能和主要函数简介如下:
A .键盘模块
该模块向外提供kb_scan()函数,完成4方面的功能:①判别键盘上有无闭合键;②去除键的机械抖动;③判别闭合键的键号;④使CPU 对键的一次闭合仅作一次处理。
其流程图如下:
图3.8 键盘扫描流程图 B. LCD 显示模块 主要是在LCD 显示数字,汉字和图形的子函数。该模块对外主要提供如下功能:
void LCD_init();
功能:对LCD 进行初始化,对LCD 操作前需要调用此函数
参数:null
返回值:
null