基于NEC协议的遥控系统仿真设计
2017-03-24卿玉明
卿玉明
摘要:根据NEC红外遥控协议的特性,采用Proteus提供的红外信号处理模块IRLINK,设计出一种红外遥控仿真系统。对系统硬件和相应的软件进行分析并给出流程图和关键代码,实现对短时按键和长时按键的编码显示和相应功能控制。通过单片机的定时器配合使用,对红外遥控信号的下降沿进行判断,以适应不同的实际遥控发射电路,从而不用区分信号高低电平细节,稍加修改就可适应众多的遥控协议。
关键词:NEC协议;IRLINK;Proteus;仿真
中图分类号:TP871 文献标识码:A 文章编号:1009-3044(2017)01-0016-03
Abstract: According to the characteristics of NEC infrared remote control protocol, IRLINK is used to design a kind of infrared remote control simulation system based on Proteus. Analyze the hardware and software of the system and give the flow chart and key code, realize the encoding display and the corresponding function control of the short key and the long time. Through the MCU timer with the use of infrared remote control signal decreased along the judge, to adapt to different practical remote control transmitter, which do not distinguish between high and low signal level detail, slightly modified can adapt to numerous remote protocol.
Key words: NEC protocol; IRLINK; Proteus; Simulation
在通信距离要求不高的场合,红外的成本比其他无线设备要低的多。因此,红外遥控在家电、玩具、工控、智能仪表等领域中广泛使用。红外遥控的通信协议很多,常用的就有ITT协议、NEC协议、Sharp协议、Philips RC-5协议、Sony SIRC协议等,其中应用最多的是NEC协议。利用仿真软件Proteus中的红外信号处理模块IRLINK,基于NEC协议,对红外遥控系统进行仿真开发,能缩短产品开发周期,从而提高产品研发效率。
1 NEC协议红外通信原理
红外通信,如图1所示。即以红外线作为通信载体,通过红外光在空中的传播来传输数据的通信方式,它由发射端和接收端来完成。在发射端,发送的数字信号经过适当的调制编码后,送入电光变换电路,经红外发射管转变为红外光脉冲发射到空中;在接收端,红外接收器对接收到的红外光脉冲进行光电变换,解调,再经单片机处理,便可以恢复出原数据信号。
NEC协议编码采用脉冲位置调制方式(PPM),利用脉冲之间的时间间隔来区分“0”和“1”。每一个“高电平”由长度为560?s的38KHz载波构成(约21个载波脉冲,其占空比推荐值是1/4或1/5。若采用1/5占空比,则高电平的时长为5.3us,低电平时长为21us)。1位逻辑“1”的周期为2.25ms,1位逻辑“0”的周期是1.12ms,如图2所示。
图3是一个典型的NEC协议数据帧格式。由于在NEC协议中LSB(低位)先于MSB(高位)发送,因此图3中传输的是地址0x59和命令0x16。每一帧波形由一个9ms的AGC同步脉冲串(引导码)开始,这是用来设置早期红外接收器的增益。紧跟着引导码的是4.5ms的空闲,接着是8bit的地址和8位的命令。地址和命令发送两次。第二次发送时,所有的位取反,用来验证第一次发送的消息。如果开发者不用验证,则可以忽略验证的数据,或者将地址或命令扩展为16bit。
NEC协议规定:在按键期间,命令信号只发送一次,如果按键不释放,则每隔108ms发送一次重发码。重发码由9ms的脉冲串和2.25ms的空闲,以及0.56ms脉冲串组成,如图4所示。
2 遥控系统仿真测试电路设计
本文采用的遥控系统仿真测试电路如图5所示,电路中共使用了两块单片机。单片机U1部分为遥控接收,能显示接收到的红外编码和进行功能控制。单片机U2部分为模拟遥控发射。单片机U2的P3.6脚输出38KHz的NEC協议信号到IRLINK模块,经其解调后送到单片机U1的I/O引脚P3.7。遥控发射部分采用4×4矩阵键盘,当按下某一个键后会发出对应的编码。例如按下键“0x12”,按照NEC协议的数据帧结构,将通过P3.6脚串行发送“0x4F,0x76,0x12,0xED”,其中“0x4F,0x76”为拔位开关设置的用户码,可对于不同场合的实际需要进行相应的修改;“0x12”是代表键的功能,“0xED”是“0x12”的反码,用于校验,以提高传输准确性。本系统设置“0x12”键在短时按触时,控制发光二极管D1亮灭,其遥控波形如图6所示,根据NEC协议数据帧格式可以看出所含二进制信息为1111 0010 0110 1110 0100 1000 1011 0111,即“0x4F,0x76,0x12,0xED”;“0x12”键在长时按触时,控制发光二极管D2亮灭,其遥控波形如图7所示,这也吻合图4的要求。总之,只要在软件设计中对用户码和按键功能作相应的修改,就能使该遥控系统在应用开发前进行仿真测试,从而提高开发的效率。
3 遥控发射程序设计
遥控发射的程序流程图如图8所示。遥控编码发射采用定时器溢出的方式来实现。根据定时器T0的溢出标志TF0在不同定时初值时的溢出情况,对引脚P3.6进行控制,完成遥控编码发射。38KHz的红外信号发射与延时程序如下:
void TT0(bit BT,uint16 x)
{ //BT=0时,不发射38KHz载波只延时
//BT=1发射38KHz脉冲且延时
TH0 = x>>8; //输入T0初值高8位
TL0 = x;//输入T0初值低8位
TF0=0; //溢出标志手动清0
TR0=1; //启动T0
if(BT == 0) while(!TF0);//是否产生载波
else while(1)
{ //因P3.6(IR)外接PNP管反相控制发射
//所以IR首先为低电平
IR = 0;
if(TF0)break;if(TF0)break;//两次查询约延时5.3us
IR = 1;
if(TF0)break;if(TF0)break; if(TF0)break;if(TF0)break;
if(TF0)break;if(TF0)break; if(TF0)break;if(TF0)break;
//8次查询约延时21us
//经PNP管反相,得38KHz载波,且占空比1:5
}
TR0=0; //关闭T0
TF0=0; //标志位溢出则清0
IR =1; //载波停止后,发射端口常态为高,红外模块不工作
}
仿真系统运行时,用Proteus中虚拟示波器的A、B通道分别观察IRLINK的输入信号和输出信号,可得到图6、图7所示的波形,其中A通道波形内含38KHz的载波,B通道波形为经红外信号处理模块IRLINK解调后的信息,载波已被滤掉,“1”和“0”逻辑状态已经清晰可辨。
4 遥控接收程序设计
NEC遥控协议主要有四种码值:引导码、0、1、重发码。它们的典型脉宽分别为13.5ms,1.125ms,2.25ms 和108ms 。这四种脉宽的最大公约数是0.3,也就是说定时器的最小周期为300us就可以准确地将这几种脉宽计算出来。为了不去区分红外编码的高、低电平周期,以适应不同的发射电路,而把脉宽作为区分标准。只要在信号的每个下降沿读取计数值,减去上一个下降沿的计数值,就可以得到脉宽。这样就可以通过单片机程序,把当前按键的红外编码解释出来。
利用300us定时器中断,采用判断下降沿间隔时长的遥控解码方法如下:
1)在进入T0中断定时程序后,统计中断次数,以便计数脉宽周期;2)根据中断前后引脚的电平状态,判断是否遇到下降沿;3)如果没有遇到下降沿,就直接中断返回,否则执行遇到下降沿的下述步骤;4)键状态默认为短时按键,如果下降沿周期超过108ms,且解码有效,则解释为长时按键;4)如果下降沿周期符合引导码时长要求,则设置同步标志和遥控信息位数;5)如果同步有效,则判断下降沿周期是符合“0”的时长还是“1”的时长,保存相应逻辑值,并右移1位,再根据信息位数,判断接收是否完成;6)如果接收完成,清除同步标志,还可根据需要进行数据校验;7)如果接收没完成,则每8位转存一个字节;8)在处理完与下降沿有关的事务后,中断次数统计清零,以便计算下一个下降沿的周期;9)最后退出中断服务程序(中断返回)。
300us定时器中断程序代码如下:
void time0(void) interrupt 1
{
TL0 = TH_L; //重赋300us定时初值
TH0 = TH_H;
cntStep++; //定时中断次数
if(IR_BT==1)if(cntStep>400)IR_BT=2;//解码有效后,如果无长按,120ms(300us×400)后默认短按
IRb = IRa; //恢复中断前引脚电平状态
IRa = IR; //保存当前引脚电平状态
if(IRb && !IRa) //下降沿判断
{
if(cntStep > Boot_Limit) //超过同步引导码时限?
{
if(IR_BT==1)if(++cntCA>8)IR_BT=3; //解码有效后,如果下降沿周期
//大于8倍引导码时长13.5ms=108ms,则为长按
IRsync=0; //同步标志清除
}
else if(cntStep > Boot_Lower){ IRsync=1; BitN=32; }//1位时长到,同步标志置1,装载位码数
else if(IRsync) //当同步时,判断每位逻辑状态
{
if(cntStep > Bit1_Limit)IRsync=0;
else
{
NEC[3] >>= 1; //右移一位
if(cntStep > Bit0_Limit)NEC[3] |= 0x80; //逻辑1
if(--BitN == 0) //修改接收位数
{
IRsync = 0; //同步标志清除
#if (Check_EN == 1) //根据实际所需进行条件编译
if((NEC[0]==USER_H)&&(NEC[1]==USER_L)&&(NEC[2]==~NEC[3])) //32位校验
{ IR_BT=1; cntCA=0; } //设置解码有效标志
#else
if(NEC[2]==~NEC[3]){ IR_BT=1; cntCA=0; } //只校验操作码正反码
#endif
}
else if((BitN & 0x07)== 0) //NEC[3]每裝满8位,移动保存一次 { NEC[0]=NEC[1]; NEC[1]=NEC[2]; NEC[2]=NEC[3]; }
}
}
cntStep = 0; //步数计清0
}
}
5 结束语
本文设计的红外遥控仿真系统具有结构简单、适应强、可移植性强等优点,能大幅度提高实际产品的开发效率。将该系统用于红外遥控原理教学实践,也有事半功倍的效果。
参考文献:
[1] NEC Protocol[EB/OL].[2015-05]. http://www.sbprojects.com/knowledge/ir/nec.php.
[2] 彭伟. 单片机C语言程序设计实训100例[M]. 北京: 电子工业出版社, 2012.
[3] 朱志伟, 刘湘云. 基于AT89S51的红外遥控解码的实现[J]. 科技信息, 2009(34):109-112.
[4] 叶林俊. 单片机I/O口的红外遥控软件调制技术[J]. 单片机与嵌入式系统应用, 2011, 11(12):22-24.
[5] 周文军, 莫名韶. 红外遥控发射器Proteus仿真研究[J]. 电子技术, 2014(11):55-57.