1 红外无线自学习系统设计概况
1.1 EFM32GG230系列简介
遥控器是需要长期待机的设备控制器件,传统遥控器采用电池供电,功耗大、耗电快。本系统采用了EFM32GG230,该款芯片是挪威Energy Micro推出的超低功耗ARM架构的MCU,具有丰富的外设接口。在活动模式下执行来自FLASH实际代码时,每MHz所耗电量为180μA,在深度睡眠EM3模式下为900 nA,在关机模式下为20 nA,EFM32GG230的LESENSE、LEUART,以及LETIMER模块均针对低功耗设置。LESENSE能够在低功耗模式EM2下对电流进行检测,无需CPU干预,待检测完成后唤醒CPU进行数据处理及运算。LEUART在9 600 bps的波特率下仅为150 nA。在应用基准测试中,EFM32GG230微控制器的低电流性能加上低于2μs的启动时间,使其电池寿命延长了至少4倍。
1.2 红外、无线遥控原理
红外线是波长在750 nm至1μm之间的电磁波,它的频率低于可见光,是一种人的眼睛看不到的光线。红外遥控具有抗干扰能力强、信息传输可靠、功耗低、成本低、易于实现等显著优点。
一般的红外遥控系统由红外遥控信号发生器、红外遥控信号接收器、微处理器和外围电路构成。当遥控器某个按键按下,其内部的信号发射器产生预先设定好的编码脉
冲,经过载波调制后由红外发射管串行输出,红外信号的调制有脉冲宽度调制(PWM)和脉冲位置调制(PPM)等方法。二进制的调制由发射端单片机来完成,不同的遥控器有不同的载波频率。以常见的电视红外遥控为例,它把编码后的二进制信号调制成频率为38 kHz的间断脉冲串,此脉冲串即是用于红外发射二极管发送的信号。其调制原理如图1所示。
另一端遥控接收模块完成对红外遥控信号的接收、放大、检波、整形、解调出遥控编码脉冲。遥控编码脉冲是一组串行二进制编码,对于一般的红外遥控系统,此串行编码输入到微控制器,由其内部完成遥控指令解码,并执行相应的遥控功能。
无线发射的原理与红外基本一致,433和315分别指的是工作频率在433 MHz和315 MHz的无线信号,其采用调幅方式进行发射,发射距离一般在50~120 m,无线方式优势在于传输距离比红外远,而且可穿墙。
1.3 整体设计
从整体设计来看,本系统分为信号接收学习模块、MCU控制模块、信号转发模块。通过红外接收头接收红外波形信号(433、315分别采用各自的接收模块),然后利用EFM32GG 230的引脚捕获CC0、CC1、CC2对信号进行捕获,完全捕获的原始信号进入EFM32GG230主控MCU,由EFM32GG230进行数据压缩,压缩后存储到FLASH中。当需要发射时,通过EFM32GG 230从FLASH中提取压缩后的数据,进行数据还原,而后与EFM32GG230内部的PWM功能产生的载波进行信号调制,调制好的信号经由发射处理模块进行发射操作,完成一次遥控转发。图2为学习转发系统框图。
2 软件设计
2.1 软件设计流程
进入程序后开始等待信号,如果得到学习信号,则进一步判断是红外学习还是无线学习,无线学习有自适应能力,能够自动判断收到的信号是433 MHz还是315 MHz,然后进
行相关的数据压缩,压缩后存储到FLASH中以待后期取用。如果得到的是发射信号,则进行判断是红外信号还是无线信号,然后从FLASH中读取相应数据,如果FLASH中并没有数据(即没有学习),则返回到开始处继续等待,若有数据则进行解压缩操作,然后进行载波调制(红外信号),最后由相关模块发射出去。发射模块配有多个发射探头,可根据需要选择不同通道进行发射,也可以多通道共同发射信号,发射完毕后回到开始处等待新指令。本系统的程序流程图如图3所示。
2.2 数据压缩算法
本系统采用的波形数据压缩算法为替代压缩算法,经过大量的分析,遥控器基本分为红外遥控器、433遥控器和315遥控器,后两种合称为无线遥控器。红外遥控器控制的设备包括电视、DVD、电动窗帘、电风扇、热水器、空调等。据大量红外遥控器的波形分析,空调遥控器的波形为最长,测试中波形最长的空调遥控器为日本的DAIKIN空调,捕获的脉冲数达到了5000多个,将信号和载波分离解调后实际波形达到了300多个,如果直接保存,将大大浪费FLASH的宝贵空间。相关的压缩代码如下所示:
由以上代码可以看出,本系统采用结构体来存储一个码的相关信息,包括该码波形的波形类型个数、各种波形的长度、数据长度、压缩后的数据以及学习标志。
经过仔细观察分析,发现现有的绝大部分遥控器的编码都有一个共性,就是其中整段码中单个脉冲的类型为有限个数,除了开头和结尾部分存在部分不同的波形,其他中间部分的波形一般为两三种,加上几种比较少见的波形,整体而看,波形个数为5或6个。
为了尽可能地适应市面上的遥控器类型,将波形总数设置为10种,基本上可以涵盖现有市面上任何一种遥控器上单个按键的码值波形类型。分别用0~9来表示这10种波形,然后再利用一个结构图数组来存储相应波形的高低电平长度。