引言
红外线遥控是一种无线、非接触控制技术,是目前使用最广泛的一种通信和遥控手段[1]。由于红外线遥控装置具有体积小、功耗低、功能强、成本低等特点,抗干扰能力强,信息传输可靠,易实现,被很多电子设备,特别是家用电器广泛采用。鉴于家用电器的品种多样化和用户的使用特点,生产厂家对红外遥控器进行了严格的规范编码。这些编码各不相同,从而形成不同的编码方式,统一称为红外遥控器编码传输协议。红外遥控协议已多达10种,如RC5、SIRCS、SONY、RECS80、Sharp、NEC、Motorola、JVC、SAMSWNG 和 Daewoo 等。一般的红外遥控器编码调制方式采用遥控专用集成电路,不能兼容如此众多的红外遥控器编码传输协议。因此,本文通过对红外遥控器发射码序的特征进行分析,提出一种基于单片机I/O口的软件调制技术。
图1 红外遥控调制发射电路
1 系统设计
遥控专用集成电路是发射系统的核心部分,其内部由振荡电路、定时电路、扫描信号发生器、键输入编码器、指令译码器、用户码转换器、 数码调制电路及缓冲放大器等组成。它能产生键位扫描脉冲信号,并能译出按键的键码,再经遥控指令编码器得到某键位的遥控指令(遥控编码脉冲),由38 kHz的载波进行脉冲幅度调制,载有遥控指令的调制信号激励红外二极管发出红外遥控信号。
系统使用NT68F632[2]作为遥控调制发射器主芯片,红外遥控调制发射电路如图1所示。系统采用Novatek公司的单片机芯片NT68F632,该芯片内部集成8051 8位微处理器,带有全双工的UART通信接口。NT68F632单片机的UART 控制口RXD和TXD脚负责和上位机(PC机)的RS232通信,接收要发送的红外遥控器编码信号。NT68F632单片机接收到发送的红外遥控器编码信号后,经过微处理器分析处理,调制成红外遥控信号。由NT68F632单片机控制PC6引脚输出经过调制的红外遥控信号,驱动晶体管Q1开关,使得红外发光二极管LED1发送调制的红外光波。
2 软件调制设计
2.1 红外遥控调制结构分析
红外遥控器编码传输协议NEC码的主要特征是8位地址和8位指令;地址和命令2次传输(确保可靠性);PWM脉冲位置调制,以发射红外载波的占空比代表“0”和“1”; 载波频率为38 kHz;位时间为1.125 ms或2.25 ms。
NEC的协议使用的位脉冲距离编码。每个脉冲是560 μs、38 kHz的载波爆裂(约21个周期)。一个逻辑1传输需要2.24 ms(560 μs脉冲+1680 μs低电平),一个逻辑0的传输需要1.12 ms(560 μs脉冲+560 μs低电平)。红外遥控调制特征波形如图2所示。
图2 红外遥控调制特征波形
而遥控接收头在收到脉冲的时候为低电平,在没有脉冲的时候为高电平[34],这样,在接收头端收到的信号为: 逻辑1应该是560 μs低+1680 μs高,逻辑0应该是560 μs低+560 μs高。遥控接收特征码如图3所示。
图3 遥控接收特征码
NEC遥控指令的数据格式为: 引导码、客户码、客户反码、数据码、数据反码。引导码由一个9 ms的低电平和一个4.5 ms的高电平组成,客户码、客户反码、数据码、数据反码均是8位数据格式。按照低位在前、高位在后的顺序发送。采用反码是为了增加传输的可靠性。NEC遥控指令格式如图4所示。
图4 NEC遥控指令格式
2.2 通信协议
NT68F632单片机的UART 控制口RXD、TXD脚和上位机(PC机)的RS232通信,接收要发送的红外遥控器编码信号。其传输控制串口的通信协议如图5所示。定义的通信协议分4个字节: Command、Address code、Data code、Check SUM。第1个字节Command表示红外遥控协议类型,区分是NEC码还是RC5码等;第2个字节Address code表示地址码或客户码;第3个字节Data code表示按键数据码;第4个字节Check SUM表示校验码。
图5 通信协议
系统的遥控码发送主程序流程如图6所示。NT68F632单片机的UART控制口接收串口通信数据,微处理器根据串口通信协议对数据分析处理,并调制成相应的遥控数据码,同时控制PC6口发送遥控数据码。
图6 遥控码发送主程序流程
2.3 调制过程
本调制技术中,NEC码的每个脉冲是560 μs,而载波频率为38 kHz,故约21个周期的载波爆裂。每个载波是26.3 μs,其中8.77 μs的高电平、17.53 μs的低电平。NEC码脉冲调制流程如图7所示。
图7 NEC码脉冲调制流程
NEC码的脉冲函数:
void CarrierWave21(){
int i;
for(i=0;i<21;i++){//产生21个周期载波
pin_h();//设置I/O口 PC6为高电平
delay_us(8.77);//高电平维持8.77 μs
pin_l();//设置I/O口PC6为低电平
delay_us(17.53);//低电平维持17.53 μs
}
}
产生一个字节的脉冲函数:
void WriteByte(unsigned char temp){
int i,x;
for(i=0,x=128;i<8;i++){//发送1个字节的8位脉冲数据
if(temp&x) {//“1”
CarrierWave21();//调用1位的脉冲函数
delay_us(1690);//维持1.69 ms的低电平
}
else {// “0”
CarrierWave21();//调用1位的脉冲函数
delay_us(560); //维持0.56 ms的低电平
}
x=x/2;//左移1位
}
}
NEC码的发送流程如图8所示。先发送9 ms高电平、4.5 ms低电平的引导码,接着发送8位客户码和8位客户码的反码,最后发送8位数据码和8位数据码的反码。
图8 NEC码的发送流程
结语
在本文中,根据红外遥控发射码的特征,采用基于单片机I/O口的红外遥控软件调制技术。该单片机能够根据串口通信协议和上位PC机进行串口通信,接收各种红外遥控协议编码,并在经过调制后进行红外发射。经实验测试,本软件调制技术可靠实用。该系统可广泛应用在自动测试、生产控制等领域。