基于单片机的智能学习型红外空调遥控器

分享到:

为了解决空调遥控器不兼容问题,设计了一款基于Atmega16单片机的智能空调遥控器。该遥控器采用测量脉冲宽度的方法学习红外信号,同时使用游程编码算法对数据进行压缩后存储,并利用单片机内部定时器PWM模式产生红外载波,成功实现了对红外遥控的学习与再现,并可通过上位机进行控制。经运行测试表明,该智能遥控器操作灵活,性能稳定,为智能遥控器设计提供了一种新方案。

1  引言

本文设计了一款针对空调设备的智能学习型红外遥控器,采用记录脉冲宽度的方法,成功实现了对多种红外空调遥控信号的学习与再现,真正实现了"万能".本文在阐述了系统的总体结构及硬件设计的基础上,详细研究了系统学习,发送及通信功能的软件设计与实现。

2  系统总体结构与硬件设计

系统采用模块化设计,各模块通过接口电路与主控芯片相连。主要模块有:矩阵键盘,液晶显示,存储模块,红外发送模块,红外接收模块,RS232、RS485通信模块,以及温度检测模块。系统结构图如图1所示。

系统以单片机作为主控芯片,具 有16K字节的系统内可编程Flash ,512字节EEPROM,1K字节SRAM,32个通用I/O口线,32个通用工作寄存器,用于边界扫描的JTAG接口,支持片内调试与编程,三个具有 比较模式的灵活的定时器/计数器(T/C),片内/外中断,可编程串行USART,有起始条件检测器的通用串行接口,8路10位具有可选差分输入级可编程 增益的ADC,具有片内振荡器的可编程看门狗定时器,一个SPI串行端口,以及六个可以通过软件进行选择的省电模式。该芯片功能强大,满足系统设计需要并 提供了充分的扩展空间。主控芯片使用8MHz的晶振,晶振电路靠近主控芯片,尽量减少输入噪声。复位电路采用低电平复位。

  

1

  图1系统结构图

矩阵键盘采用3*3的设计,设置了8个功能键,方便用户进行手动操作。其中单独设计了一颗模式切换键,可在学习、发射、通信模式中切换。为了实 现学习功能,红外接收模块使用了一体化接收头NB1838,其光电检测和前置放大器集成于同一封装,中心频率为37.9KHz. NB1838的环氧树脂封装结构为其提供了一个特殊的红外滤光器,对自然光和电场干扰有很强的防护性。NB1838对接收到的红外信号进行放大、检波、整 形,并调制出红外编码,得到TTL波形,反相后输入单片机,再由单片机进行进一步的处理,存储到EEPROM中,接收电路如图2所示。

  

2

  图2接收硬件电路图。

考虑到系统需要的存储空间比较大,设计了单独的存储模块,选用的EEPROM是AT24C64,它提供了8KB的容量,通过IIC协议与Atmega16 TWI接口通信,将学习到的红外指令存储在此,掉电不丢失。

在发射模式下,系统从EEPROM读取相应数据信息,利用三极管9013组成的放大电路,通过大功率红外发射管将调制好的红外信号发射出去。发 射电路如图3所示,非发送状态时,三极管工作在截止状态,红外发射管不工作,有利于降低功耗以及延长红外发射管的使用寿命。经实际测试,发射距离可达到 10m左右。

  

3

  图3发射硬件电路图。

通信模式中,系统通过RS232电路与上位机通信,在与上位机通信时使用DS18B20反馈温度信息,DS18B20一线总线设计大大提高了系 统的抗干扰性,独特而且经济。系统还增加了RS485模块,便于组网,以实现对多个红外设备进行控制。RS485在组网时只需要用一对双绞线将子设备 的"A"、"B"端连接起来,这种接线方式为总线式拓扑结构,在同一总线上可挂接多个结点,连接方便。

为了增加设备的实用性,系统设计了两个电源方案,一个是直接接入5V直流电源,一个是接入12V直流电源,然后通过L7805构成的变压电路降压为5V使用。

3  系统软件设计与实现

系统程序主要分为三个部分:学习模式,发送模式以及通信模式。当第一次进入系统时,初始化设置设备地址,然后设置通信的波特率,提供1200、 9600以及19200三种选择。系统主程序即在三个模式间切换,默认进入通信模式,可以通过模式切换按键改变模式,也可以通过上位机直接更改。出于系统 的稳定性需要,在程序中加入了软件看门狗,防止程序"跑飞".

3.1  学习功能设计

3.1.1  学习模式

红外遥控器的码型多样,编码一般包括:帧头、系统码、操作码、同步码、帧间隔码、帧尾,且同步码与帧间隔码出现的位置不固定,因此码型格式灵活 多变,很难区分各种码型的编码含义;各个红外遥控的编码长度不尽相同,发送方式也多种多样,最常用的有三种:完整帧只发送一次、完整帧重复发送两次、先发 送一个完整帧,后重复发送帧头和一个脉冲。面对如此多样化的编码方式,如果区分每种编码的含义进行学习,学习的复杂度将会很高,并且通用性也会受到影响。 所以,为了避开各色码型的干扰,系统在学习时并不关心码型数据的实际意义,只记录脉冲的时间宽度。系统主要针对载波频率为38KHz(周期为26us)的 红外遥控器,利用变量IR_time记录接收到的脉冲宽度。学习程序流程如图4所示。

  

4

  图4学习程序流程图。

3.1.2  压缩存储

由于不考虑具体的码型数据意义,只记录脉冲的宽度,系统的学习功能通用性得到了提高,但这种方式学习到的数据量很大,对存储的要求就变得很高。

尽管系统针对存储的大容量需求设计了单独的存储模块,但考虑到应在不增加硬件开销的情况下保证足够的存储容量,以及满足未来扩展的需要,在进行数据存储时,采取了数据压缩技术。

从学习到的电平数据可以发现,无论数据是1还是0,都有相同时长的电平出现,这符合游程编码的特点。游程编码是一种简单的非破坏性资料压缩法,其好处是加压缩和解压缩都非常快,其方法是计算连续出现的资料长度压缩之。比如:一张二值图像的数据为:

  WWWWWWWWBWWWWBBBWWWWWWWBWWWWW

使用游程编码压缩可得:8W1B4W3B7W1B 5W.

可见,压缩效率极高,且可避免复杂的编码和解码运算。所以,在存储时,系统对学习到的数据进行游程编码压缩[7,8].例如,学习到的一组空调 遥控器的数据为[157 153 23 53…23 53 23 180 156 152 23 53…53 23],如图5所示,对重复的电平数据采用游程编码压缩后,原本需要199字节的空调遥控码,只需要106个字节即可存储,压缩率达53.27%.因此, 在存储时针对学习到的数据特点采取游程编码压缩,可以有效节约存储空间。

  

5

  图5一组典型的空调数据帧。