基于单片机的红外遥控窗帘设计论文(含C语言源程序) 下载本文

图3.2红外线发射电路原理图

程序清单见附录1。

下面介绍另外一种编码方法:

遥控发射器专用芯片很多,根据编码格式可以分成脉冲宽度调制和脉冲相位调制两大类。当发射器按键按下后,即有遥控码发出,所按的键不同遥控编码也不同。这种遥控码具有以下特征:

采用脉宽调制的串行码,以脉宽为0.565ms、间隔0.56ms、周期为1.125ms的组合表示二进制的“0”;以脉宽为0.565ms、间隔1.685ms、周期为2.25ms的组合表示二进制的“1”,其波形如图3.3所示。

图3.3 波形图

上述“0”和“1”组成的32位二进制码经38kHz的载频进行二次调制以提高发射效率,达到降低电源功耗的目的。然后再通过红外发射二极管产生红外线向空间发射,如图图3.4所示。

图3.4

图3.5发射波形图

UPD6121G产生的遥控编码是连续的32位二进制码组,其中前16位为用户识别码,能区别不同的电器设备,防止不同机种遥控码互相干扰。该芯片的用户识别码固定为十六进制01H;后16位为8位操作码(功能码)及其反码。UPD6121G最多额128种不同组合的编码。

6

遥控器在按键按下后,周期性地发出同一种32位二进制码,周期约为100ms。一组码本身的持续时间随它包含的二进制“0”和“1”的个数不同而不同,大约在45~63ms之间,图3.5为发射波形图。

当一个键按下超过36ms,振荡器使芯片激活,将发射一组108ms的编码脉冲,这108ms发射代码由一个起始码(9ms),一个结果码(4.5ms),低8位地址码(9ms~18ms),高8位地址码(9ms~18ms),8位数据码(9ms~18ms)和这8位数据的反码(9ms~18ms)组成。如果键按下超过108ms仍未松开,接下来发射的代码(连发代码)将仅由起始码(9ms)和结束码(2.5ms)组成。

代码格式(以接收代码为准,接收代码与发射代码反向) ①位定义

②单发代码格式

③连发代码格式

注:代码宽度算法:

16位地址码的最短宽度:1.12×16=18ms 16位地址码的最长宽度:2.24ms×16=36ms 易知8位数据代码及其8位反代码的宽度和不变:(1.12ms+2.24ms)×8=27ms ∴32位代码的宽度为(18ms+27ms)~(36ms+27ms)

1. 解码的关键是如何识别“0”和“1”,从位的定义我们可以发现“0”、“1”均以

0.56ms的低电平开始,不同的是高电平的宽度不同,“0”为0.56ms,“1”为1.68ms,所以必须根据高电平的宽度区别“0”和“1”。如果从0.56ms低电平过后,开始延时,0.56ms以后,若读到的电平为低,说明该位为“0”,反之则为“1”,为了可靠起见,延时必须比0.56ms长些,但又不能超过1.12ms,否则如果该位为“0”,读到的已是下一位的高电平,因此取(1.12ms+0.56ms)/2=0.84ms最为可靠,一般取0.84ms

7

左右均可。

2. 2. 根据码的格式,应该等待9ms的起始码和4.5ms的结果码完成后才能读码[6]。

3.2红外遥控解码原理

3.2.1 红外接收电路

先介绍一款接收电路。电路原理: 本电路见图3.6,主要由红外接收头和IC4069组成的红外控制开关电路。红外接收头静态时输出高电平。当收到遥控发射器送来的红外脉冲信号时,接收头的第脚输出低电平(脉冲信号)。经ICa整形、放大、倒相而得到负脉冲信号,再由D5、C4、R3检波,延时送至ICb(达到反相器的阈值电压),致使ICb输出低电平,然后C4端电压经R3放电,使ICb输入端低于反相器的阈值电压,ICb输出端恢复高电平。这样,每按动一次红外发射器,在IC6输出端就得到一个负脉冲信号,去触发由ICc和ICd组成的双稳态电路,促使双稳态电路翻转,输出H或L电平,通过R8控制单向可控硅的导通或截止

图3.6 红外接收电路

3.2.2遥控编码脉冲的串并转换

红外遥控接收头解调出的编码是串行二进制码,包含着遥控器按键信息。但它还不便于CPU读取识别,因此需要先对这些串行二进制码进行解码。

3.2.3基于EPROM的遥控解码原理

经过串并转换,我们得到了8位并行遥控码。为了让CPU读取这个并行遥控码,通常的方法是在转换完成后产生一个中断,通知CPU来读取遥控信息。但这样做要占用CPU一个外部中断资源并需编写额外的中断服务程序,显得比较烦琐。尤其是当仪器系统的软件不是由自己开发而又要加装遥控时更是无能为力。因此,我们想寻求一种不占用仪器CPU的软、硬件资源而实现遥控的方法,使键盘输入和遥控输入统一起来,占用同一个端口、同一个中断、同一个中断服务程序。简言之,要做到对CPU是透明的,似乎只有一个键盘输入单元在工作,只须访问它来进行键盘扫描、键码读出操作。但实际上却有遥控器与键盘两套键输入硬件在同时而独立地工作。

8

考察一下智能仪器的键盘扫描输入原理。在这种方式下,CPU通过输出指令使键盘矩阵的行扫描线依次为“0”(低电平),同时监测键盘矩阵的列扫描线。若无键按下,则列扫描线输出全“1”(高电平);若有键按下,则此键所在列线输出为“0”,再结合行扫描线此时的状态,就可具体定位按键。

我们设想,可否将遥控接收头输出的含有按键信息的8位遥控码通过某种转换,并入键盘矩阵电路,当遥控器有键按下时,就会在机上键盘对应键处产生一个“模拟”按键动作,产生一个键码可供CPU读取。所谓“模拟”是指并没有机械按键动作,但对于键盘矩阵电路而言却产生一个低电平,效果和机械按键动作完全一样。这样就将遥控键盘和本机键盘统一起来,二者的键数和键功能定义都一样,一个相同的键在遥控器上按下和在本机键盘上按下对CPU而言没有任何区别,只不过对键盘矩阵来说前者是软接触,后者是硬接触。

根据遥控器上按键与本机键盘按键的一一对应方案,我们可以导出实现“模拟”按键的逻辑真值表(其中C0~C4为列扫描线)。

这是一个12变量输入S变量输出的组合逻辑函数,最小项总数为16×20=320个。若用普通逻辑门电路来实现这样的功能将是十分麻烦的,用PLD(可编程逻辑器件)来做就要简单得多。EPROM就是一种与阵列固定、或阵列可编程的逻辑器件。如果把EPROM的输入地址A0,A1,??AN视为输入逻辑变量,同时把输出数据D0,D1,??DM视为一组多输出逻辑变量,那么输出与输入之间也就是一组多输出的组合逻辑函数。而且,EPROM地址译码器的输出包含了全部输入变量的最小项,每一位数据输出又都是这些最小项之和,因而任何形式的组合逻辑函数均能通过向EPROM中写入相应的数据来实现。不难推想,具有N位输入地址和M位数据输出的EPROM可以获得一组(最多为M个)任何形式的N变量组合逻辑函数。

根据这个原理,选用4K×8EPROM2732,可以实现任意12变量输入、8变量输出的组合逻辑函数。在本机遥控系统中,利用了EPROM的D0~D4五根数据线和全部12根地址线,通过向2732中固化上表所示的逻辑真值表,从而实现了关键的遥控解码,使遥控器上按键与本机键盘按键一一对应起来。需要指出的是,EPROM的地址译码是全译码,而在本方案中占据地址线A0~A7的8位遥控码只有20种有效码值(20个键),即一页(2S6字节)中只有20个有效数据,则应将剩余空间填入0FFH。

由解码电路图3可见,EPROM2732的地址线A0-A7接至8位输出锁存移位寄存器74HCS9S的输出(即8位遥控码),A8~A11接至键盘矩阵的行扫描线R0~R3;2732的8根数据线使用了其中的S根D0~D4,接至键盘矩阵的列扫描线C0~C4,2732的(片选端)接地,(读信号)接至施密特与非门4093的3脚输出,此输出为双单稳74HC123的1Q、与非的结果。

当遥控器上没有按键按下时,EPROM2732的端为“1”,使得2732的数据线D0~D4为高阻态与键盘矩阵线脱离,而本机键盘的扫描与读出照常进行不受影响,若遥控器上有键按下时,经红外发射、接收对应的8位遥控码出现在74HC595的输出端,并作为EPROM2732的A0~A7输入,此时的行扫描码(CPU发出)作为A8~A11输入,2732的端为低电平,读出A0~A11指定单元的数据,将其中D0~D4放在键盘矩阵列线上。D0~D4中只有一位为“0”,

9