引 言 空调已进入千家万户,空调遥控器作为空调的用户界面,其设计的原理已成熟。目前,对学习型智能遥控器的研制开展了大量的工作,旨在提高遥控器的智能化和通用性,取得了较大的进展,并有部分产品进入市场。当前研制开发的学习型智能遥控器主要采用38KHz固定载波频率,遥控器编码不压缩或简单压缩。空调遥控器不同于其它家电遥控器(如彩电),空调遥控器发出的编码包含当前状态的多种信息,而彩电遥控器的编码是一键一码。把空调遥控器所有可能的状态都要学习和存储,需要花费大量的时间和存储空间。为此,提出了一种基于温度控制的编码状态转换算法,为基于单片机的智能型红外空调遥控器的设计提供了可能。
1 红外遥控码型分析 1.1 红外遥控码型研究分析 目前,各电器生产厂家对遥控脉冲编码及码流还没有形成统一的标准。通过对市面上比较普遍的几十种遥控器的码型结构进行研究分析,总结其特点如下: (1)码型多样:脉冲流中一般包括:帧头、系统码、操作码、同步码、帧间隔码、帧尾。且同步码与帧间隔码出现的位置不固定。针对这些灵活多变的码型格式,很难区分各种脉冲流的含义。 (2)载波频率不固定:常用的遥控器采用38KHz作为载波频率,有的采用36KHz-42KHz之间的载频。 (3)编码长短不一:彩电类产品一般只有几十位,空调遥控器编码长达上百位。 (4)不同的发送方式:常用有三种方式,即:完整帧只发送一次(如图1a)、完整帧重复发送两次(如图1b)、先发一个完整帧,后重复发送帧头和一个脉冲(如图1c)。[align=center]
图1 红外编码完整帧格式[/align] 由于编码方式的多样化,若区分每种码流的含义进行学习,其复杂性极高且占用很大的内存空间。本系统避开了各种形色码流的干扰,总结了红外遥控器编码的共性,只需了解脉冲的时间宽度,无需关心它的实际意义。因此,在系统中没有引导码、0码、1码、同步帧、反码等,定义了用0、1、2等数字表示各种时间宽度不等的脉冲流的算法。1.2 空调红外遥控码型研究分析 空调遥控器开发的关键是温度状态的转化。对多种类型空调遥控器红外编码进行大量研究分析,找出了其编码规律:在空调的每一个编码中,其中有4位二进制表示开始温度(温度1),另外4位二进制表示按键后的末温度(温度2),当遥控器进行温度控制时,前一按键的末状态跳转到后一按键的初状态,从而可以对空调的温度进行连续控制。对空调遥控器红外编码进行提取,取出有关表示温度的部分(各种空调遥控器的编码规律类似),如下表所示: 空调温度部分编码表
[align=center]
图2 空调温度编码状态转换图[/align]
2 遥控器硬件结构 遥控器由STC系列STC89C51RD+单片机、红外编码发射与接收电路、键盘、显示屏、SD卡接口等外围器件组成。其中SD卡用来存放和保存学习的遥控器编码,并能与PC机进行交流;遥控器编码的识别是通过接收电路和整形电路来实现,为了能识别一定范围内的载频,编码接收电路中不含解调电路,载频的提取是用单片机来实现。
图3 遥控器硬件结构
3 软件设计3.1 编码状态转换算法与实现 空调遥控器编码复杂,主要有制热、制冷、除湿、通风等模式,有些模式下还有不同的风速级别,并在每一种风速下,其温度状态变化规律不同。为此,对空调遥控器的编码创建了状态转换算法。算法中通过建立空调遥控器工作模式、风速等级和温度值序列三层关系模型,设计了对应的数组序列,每一个数组序列中存放着各种模式下不同风速等级时的温度值编码,通过指针方式进行调用。例如:图2中的二进制数据:{0000,0001,0011,0010,0100,0101,0111,0110,1100,1101,1111,1110,1000,1001,1011,1010}转换成十进制后,初始化数组data1,则:data1[i]={0,1,3,2,4,5,7,6,12,13,15,14,8,9,11,10};指针P = data1[i%16]。结合data1和指针P,空调遥控器在一级风速时的编码状态转换流程见图4:[align=center]
图4 编码状态转换流程[/align]3.2载波信号精密检测 遥控器载频通常在36KHz-42KHz范围之间,如简单的用38KHz的载频调制,对有些遥控设备不能正确控制。为此,遥控器自学习时,需要精确检测编码的载波频率[1]。 通常用单片机定时器检测的最高频率和遥控器的载波频率属同一量级,无法精确测量载波脉冲的频率。为此,提出了均值算法。将定时器1和定时器2(捕获功能)配合使用,通过编码脉冲宽度和载波脉冲数的测量,通过计算,得到精确的载波频率。载波信号精确测量流程见图5:[align=center]
图5 载波信号精确测量流程图[/align]3.3 信号识别、编码分类与发送 遥控器编码长度为几十位到上百位,而且,每个编码的信息量较大。遥控器自学习时,所有的编码状态都要按照脉冲宽度方式存储,要求较大的存储空间。为此,提出了一种编码压缩技术[2][3]。遥控器编码内容包括:帧头、机器码、操作码、同步码、帧间隔和尾帧等类型,自学习时,对识别的遥控器编码进行分类,并按类型号进行存储,见图6所示:[align=center]
图6 信号识别、编码分类示意图[/align]
遥控器自学习编码识别和分类过程:(1) 红外编码和载波识别 红外编码和载波周期相差较大,先设定一个脉冲周期的门限值THRESHOLD1。每当有脉冲下降沿到时,启动定时器开始定时,在下一个下降沿时定时为t。当0THRESHOLD1时,为红外编码脉冲。此时记录T1的值为t,同理可检测到T2,T3,T4…编码脉冲的值。(2) 数组建立 char sigdata[i]; typedef struct { unio
n intchar bith; unio
n intchar bitl; uchar bitl1; } timer[m]; 其中:sigdata[i]存放编码中顺序出现帧的类别; timer[m]存放 sigdata[i] 中帧的不同类别的时间值。 (3) 编码帧类别识别 将T(i+1)的t1、t2与T(i)的t1、t2分别进行比较,若相等,timer[m]数组中不写入新的内容,此时,sigdata[i+1]=sigdata[i];否则,timer[m]中写入T(i+1)的时间值,且sigdata[i+1]中写入新的类别号。例如学习一个按键编码后:timer[m]={9000,4500,540,0,540,540,540,540,1650,0,……};sigdata[i]={1,2,3,3,4,……}。(4) 红外编码完整帧格式确定 两个完整帧之间有较长的时间间隔,且这段时间间隔大于编码中任何低电平的时间。为此,可定义THRESHOLD2为两完整帧之间的间隔值;可定义THRESHOLD3为编码脉冲结束后停止帧长度。当THRESHOLD3> t2 >THRESHOLD2时,判断为第二帧的开始。再比较T(i+1)中t1,t2与T2中t1,t2的值,若相等,为一次发送两个完整帧。否则,一次发一帧加帧头和一个脉冲;当t2 >THRESHOLD3,编码接收完成,为一次只发送一个完整帧的情况。(5) 发送载波频率初始值计算 载波频率= ,6分频时n=2;12分频时n=4。得(RCAP2H,RCAP2L)=3*freq(freq为学习时检测出的载波脉冲宽度)。
4 结论 通过对空调遥控器编码的精简,创建了状态信息转换表,当每进入一种模式时,只需发射与温度状态信息相关的编码,简化了发射编码、提高了传输效率。开发的遥控器自学习功能,通过编码学习与原机进行对比,每种脉冲流的时间仅差1个时钟周期;采用均值算法,使发送的载波频率误差小于0.5KHz;设计的遥控器编码矢量压缩算法,存储一个键码(200个编码)仅需134个存贮单元,压缩比达8:1。上述技术为采用单片机实现智能空调遥控器创建了基础,其中,“状态信息转换表的创建”和“高精度载波频率测量”是本文的主要创新。