摘 要: 介绍了红外遥控发射和接收的原理,提出了一种用PLD(可编程逻辑器件)进行解码的方案,并分别用EPROM和GAL实现。该方案思路新颖、原理简单、工作可靠,可用于各种以键盘扫描为输入方式的智能仪器系统中。
关键词: 红外遥控 可编程逻辑器件 遥控解码 键盘扫描
红外遥控技术已经在日常家用电器中得到了广泛应用,其使用方便、功耗低、抗干扰能力强的优点也越来越在智能仪器系统中受到重视。市场上的各种家电红外遥控系统技术成熟、成本低廉,但都是针对各自的遥控对象(彩电、冰箱、空调等),不能直接用于智能仪器。本文探讨了如何借鉴家电红外遥控系统的原理,自行设计解码电路,使智能仪器具有遥控功能。
1 红外遥控原理
一般的红外遥控系统是由红外遥控信号发射器、红外遥控信号接收器和微控制器及其外围电路等三部分构成的,如图1所示。
遥控信号发射器用来产生遥控编码脉冲,驱动红外发射管输出红外遥控信号,遥控接收头完成对遥控信号的放大、检波、整形、解调出遥控编码脉冲。遥控编码脉冲是一组组串行二进制码,对于一般的红外遥控系统,此串行码输入到微控制器,由其内部CPU完成对遥控指令解码,并执行相应的遥控功能。
在红外遥控系统中,解码的核心是CPU。它接收解调出的串行二进制码,在内部根据本系统的遥控信号编码格式将串行码对应成遥控器上的按键。显然,这种在CPU内部解码出的遥控指令是不便我们利用的,而且我们也不需要获取它。我们只需利用一般红外遥控系统中的遥控发射器、遥控接收头,自行设计解码电路直接对遥控接收头解调出的遥控编码脉冲进行解码,就可以得到原始的按键信息。
2 红外遥控编码
目前应用中的各种红外遥控系统的原理都大同小异,区别只是在于各系统的信号编码格式不同。下面我们就以本文采用的红外遥控系统为例说明它的编码体制。
红外遥控发射器以TC9012为核心组成了键扫描、编码、发射电路。当按下遥控器上任一按键时,TC9012即产生一串脉冲编码如图2所示。
TC9012形成的遥控编码脉冲对40kHz载波进行脉冲幅度调制(PAM)后便形成遥控信号,经驱动电路由红外发射管发射出去。红外遥控接收头接收到调制后的遥控信号,经前置放大、限幅放大、带通滤波、峰值检波和波形整形,从而解调出与输入遥控信号反相的遥控脉冲。
在图2中,一次按键动作的遥控编码信息为32位串行二进制码。对于二进制信号“0”,一个脉冲占1.2ms;对于二进制信号“1”,一个脉冲占2.4ms,而每一脉冲内低电平均为0.6ms。从起始标志到32位编码脉冲发完大约需80ms,此后遥控信号维持高电平。若按键未释放,则从起始标志起每隔108ms发出3个脉冲的重复标志。
在32位的编码脉冲中,前16位码不随按键的不同而变化,我们称之为用户码。它是为了表示特定用户而设置的一个辨识标志,以区别不同机种和不同用户发射的遥控信号,防止误操作。后16位码随着按键的不同而改变,我们就是要读取这16位按键编码,经解码得到按键键号,转而执行相应控制动作。
那么,不同的按键编码脉冲是怎样和遥控器上不同的按键一一对应的呢?我们借助于逻辑分析仪记录下来遥控器上每一个按键的编码脉冲序列,破译出了各按键的编码。表1是解码后得到的红外遥控器上各键的编码(前16位用户码均为0000001011111101,表1只列出后16位键码)。
由表1按键编码可看出,后16位键码的前8位与后8位互为补码,这样加大编码的冗余度是为了增强遥控系统的抗干扰能力。实际上,我们只须截取16位键码的8位(比如后8位)就可达到识别按键的目的。当然,要加强遥控系统的抗干扰能力,还需接收全16位键码甚至16位用户码加以识别。
3 红外遥控解码
红外遥控接收头解调出的编码是串行二进制码,包含着遥控器按键信息。但它还不便于CPU读取识别,因此需要先对这些串行二进制码进行解码。本文的红外遥控信号解码电路如图3所示,它主要包括遥控编码脉冲串并转换电路与PLD解码电路。
3.1 遥控编码脉冲的串并转换
红外遥控接收头解调出的遥控编码脉冲经一非门反相后引入计数器4020的复位端(RST),4020的脚10(CP)端引入1MHz计数脉冲。遥控信号(已反相)中每一正脉冲到来时其高电平对4020复位,经过0.6ms遥控信号变为低电平,4020复位结束,开始以1MHz的频率计数,直到下一个正脉冲到来时为止。二进制码“0”每一脉冲周期低电平时间为0.6ms,二进制码“1”每一脉冲周期低电平时间为1.8ms,4020的Q11端即可以区分二进制码“0”或“1”。每一遥控编码正脉冲上升沿到来时,若Q11端为“1”,说明前一位遥控码为“1”;若Q11端为“0”,说明前一位遥控码为“0”。
将4020的Q11端作为74HCS9S的串行移位输入端(SER),便可在每一个遥控编码脉冲上升沿到来时并在4020复位之前,将74HC595中的数据沿Q0到Q7方向依次移一位,且4020的Q11端数据移入74HC595的Q0端。对于一组遥控编码脉冲,共有33次上升沿(包括起标志),而74HC595仅为8位移位寄存器,所以移位的最终结果,只有遥控编码脉冲的最后8位保留在74HC595中。
当一组遥控编码脉冲(反相后)来到时,其起始标志的上跳沿触发了双单稳74HC123的1B,在1Q上产生了一个宽度为120ms的正脉冲。1Q同时又触发了74HC123的2B,在产生一个宽度为80ms的负脉冲,1Q和相与后作为锁存信号送至74HC595的RCLK端,即一组遥控编码脉冲到来80ms后,产生一个锁存信号。此时74HC595已经移过了一组遥控码,芯片中保留的是最后8位遥控码,锁存信号将这最后8位遥控码锁存。
3.2 基于EPROM的遥控解码原理
经过串并转换,我们得到了8位并行遥控码。为了让CPU读取这个并行遥控码,通常的方法是在转换完成后产生一个中断,通知CPU来读取遥控信息。但这样做要占用CPU一个外部中断资源并需编写额外的中断服务程序,显得比较烦琐。尤其是当仪器系统的软件不是由自己开发而又要加装遥控时更是无能为力。因此,我们想寻求一种不占用仪器CPU的软、硬件资源而实现遥控的方法,使键盘输入和遥控输入统一起来,占用同一个端口、同一个中断、同一个中断服务程序。简言之,要做到对CPU是透明的,似乎只有一个键盘输入单元在工作,只须访问它来进行键盘扫描、键码读出操作。但实际上却有遥控器与键盘两套键输入硬件在同时而独立地工作。
考察一下智能仪器的键盘扫描输入原理。在这种方式下,CPU通过输出指令使键盘矩阵的行扫描线依次为“0”(低电平),同时监测键盘矩阵的列扫描线。若无键按下,则列扫描线输出全“1”(高电平);若有键按下,则此键所在列线输出为“0”,再结合行扫描线此时的状态,就可具体定位按键。
我们设想,可否将遥控接收头输出的含有按键信息的8位遥控码通过某种转换,并入键盘矩阵电路,当遥控器有键按下时,就会在机上键盘对应键处产生一个“模拟”按键动作,产生一个键码可供CPU读取。所谓“模拟”是指并没有机械按键动作,但对于键盘矩阵电路而言却产生一个低电平,效果和机械按键动作完全一样。这样就将遥控键盘和本机键盘统一起来,二者的键数和键功能定义都一样,一个相同的键在遥控器上按下和在本机键盘上按下对CPU而言没有任何区别,只不过对键盘矩阵来说前者是软接触,后者是硬接触。
根据遥控器上按键与本机键盘按键的一一对应方案,我们可以导出实现“模拟”按键的逻辑真值表(其中C0~C4为列扫描线),见表2。
这是一个12变量输入S变量输出的组合逻辑函数,最小项总数为16×20=320个。若用普通逻辑门电路来实现这样的功能将是十分麻烦的,用PLD(可编程逻辑器件)来做就要简单得多。EPROM就是一种与阵列固定、或阵列可编程的逻辑器件。如果把EPROM的输入地址A0,A1,……AN视为输入逻辑变量,同时把输出数据D0,D1,……DM视为一组多输出逻辑变量,那么输出与输入之间也就是一组多输出的组合逻辑函数。而且,EPROM地址译码器的输出包含了全部输入变量的最小项,每一位数据输出又都是这些最小项之和,因而任何形式的组合逻辑函数均能通过向EPROM中写入相应的数据来实现。不难推想,具有N位输入地址和M位数据输出的EPROM可以获得一组(最多为M个)任何形式的N变量组合逻辑函数。
根据这个原理,选用4K×8 EPROM 2732,可以实现任意12变量输入、8变量输出的组合逻辑函数。在本机遥控系统中,利用了EPROM的D0~D4五根数据线和全部12根地址线,通过向2732中固化上表所示的逻辑真值表,从而实现了关键的遥控解码,使遥控器上按键与本机键盘按键一一对应起来。需要指出的是,EPROM的地址译码是全译码,而在本方案中占据地址线A0~A7的8位遥控码只有20种有效码值(20个键),即一页(2S6字节)中只有20个有效数据,则应将剩余空间填入0FFH。
由解码电路图3可见,EPROM 2732的地址线A0-A7接至8位输出锁存移位寄存器74HCS9S的输出(即8位遥控码),A8~A11接至键盘矩阵的行扫描线R0~R3;2732的8根数据线使用了其中的S根D0~D4,接至键盘矩阵的列扫描线C0~C4,2732的(片选端)接地,(读信号)接至施密特与非门4093的3脚输出,此输出为双单稳74HC123的1Q、与非的结果。
当遥控器上没有按键按下时,EPROM 2732的端为“1”,使得2732的数据线D0~D4为高阻态与键盘矩阵线脱离,而本机键盘的扫描与读出照常进行不受影响,若遥控器上有键按下时,经红外发射、接收对应的8位遥控码出现在74HC595的输出端,并作为EPROM 2732的A0~A7输入,此时的行扫描码(CPU发出)作为A8~A11输入,2732的端为低电平,读出A0~A11指定单元的数据,将其中D0~D4放在键盘矩阵列线上。D0~D4中只有一位为“0”,指示着哪一列有键按下,这样就由遥控接收、解码电路模拟了一次“按键”动作。接下来CPU对这个“按键”动作的响应、处理就和本机键盘完全一样了。
2.3 基于GAL的遥控解码原理
我们还可以考虑用GAL器件来实现解码功能。GAL(通用阵列逻辑)也是一种PLD器件,它的与阵列可编程而或阵列固定。根据遥控解码的真值表,我们要实现一个12变量输入、S变量输出的组合逻辑函数,其全部最小项有16×20=320个。而GAL20V8的输出最多可有8个,每个输出由8个乘积项相或而得,总共可包含8×8=64个乘积项,似乎不够用于实现解码逻辑。但是注意到320个最小项并不是互不相关的,通过化简可将它们化成S个最简与或式,分别对应着S个输出变量,每个输出变量由4个乘积项相或而得,这样就可以用GAL20V8来实现解码逻辑了。据此可设计出GAL逻辑方程如下:
/** lnputs **/
Pin[1..8]=[A7..A0];定义并行遥控码的输入引脚
Pin[9..11,14]=[R0..R3];定义键盘行扫描线的输入引脚
Pin[13]=[out_enable];定义输出使能引脚
/** Outputs **/
Pin[I5..19]=[C0..C4];定义键盘列线的输出引脚
/** Declarations and Intermidiate Variables **/
Field remote=[A7..A0];
$define m0'b'11000111;将20个键的键值用
$define m1'b'00010111 ;″m0″、″m1″…″m19″来表示
……
$define m19'b'00011111
/** Logic Equations **/
!C0=!R0&remote:m0 ;第0条列线的输出方程
#!R1&remote:m5
#!R2&remote:m10
#!R3&remote:m15
!C1=!R0&remote:m1 ;第1条列线的输出方程
#!R1&remote:m6
#!R2&remote:m11
#!R3&remote:m16
!C2=0 !R0&remote:m2 ;第2条列线的输出方程
#!R1&remote:m7
#!R2&remote:m12
#!R3&remote:m17
!C3=!R0&remote:m3;第3条列线的输出方程
#!R1&remote:m8
#!R2&remote:m13
#!R3&remote:m18
!C4=!R0&remote:m4;第4条列线的输出方程
#!R1&remote:m9
#!1R2&remote:m14
#!R3&remote:m19
[C0..C4].oe=!out_enable;所有列线输出均带使能
采用EPROM和GAL器件进行红外遥控解码的方案都已在实际电路中得到验证,工作稳定可靠。而GAL较之EPROM更具有体积小、功耗低、可加密等优点。本文提出的解码方案基于纯硬件原理,不占用CPU软、硬件资源,直接并在键盘扫描矩阵上,对CPU是透明的。本方案适用于键盘扫描输入的智能仪器系统的红外遥控,对其它红外遥控系统的设计应用亦具有借鉴意义。
参考文献
1 阎 石.数字电子技术基础.北京:高等教育出版社,1989
2 蔡 轶.通用摇控解码电路.电子技术,1995(1)
(收稿日期:1999-08-11)