3.3 信号识别、编码分类与发送
遥控器编码长度为几十位到上百位,而且,每个编码的信息量较大。遥控器自学习时,所有的编码状态都要按照脉冲宽度方式存储,要求较大的存储空间。为此,提出了一种编码压缩技术[2][3]。遥控器编码内容包括:帧头、机器码、操作码、同步码、帧间隔和尾帧等类型,自学习时,对识别的遥控器编码进行分类,并按类型号进行存储,见图6所示:

图6 信号识别、编码分类示意图
遥控器自学习编码识别和分类过程:
(1) 红外编码和载波识别
红外编码和载波周期相差较大,先设定一个脉冲周期的门限值THRESHOLD1。每当有脉冲下降沿到时,启动定时器开始定时,在下一个下降沿时定时为t。当0THRESHOLD1时,为红外编码脉冲。此时记录T1的值为t,同理可检测到T2,T3,T4…编码脉冲的值。
(2) 数组建立
char sigdata[i];
typedef struct {
union intchar bith;
union 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。上述技术为采用单片机实现智能空调遥控器创建了基础,其中,“状态信息转换表的创建”和“高精度载波频率测量”是本文的主要创新。