学习型红外遥控,的逻辑“1”和“0”
学习型遥控器的制作
起因
一年前,我就很想做一个遥控器。一方面是出于对的爱好,一方面是实际的需求。我家里有两台空调,一台在老妹房间里,另一台在我的房间里。一直以来两台空调都使用同一个遥控器。夏天来了,开空调时,要是我想调整一下我房间里空调的温度、风向、风摆什么的,都要到老妹房间里去拿遥控器,很不方便。今年夏天到了,我想,我一定要自己做出个空调遥控器出来,于是一款自制的学习型红外遥控器诞生了。这也是本文我要与读者分享的作品。
我翻开存满制作的抽屉,找出了2009年用51单片机做的遥控器(图1)。那款遥控器的单片机软件我并没有完整地完成,因此还不能成为空调遥控器,只能通过它来读取红外的逻辑“1”和逻辑“0”的长度,然后,通过串口在计算机上显示。那款遥控器使用作为控制芯片,用了红外一体接收头来接收红外信号,用存储芯片来存储红外逻辑数据。由于仅有128字节的RAM,不能超过40个编码,当读取比较长的编码时就没地方存放了。而空调包含了许多的参数信息,这些信息数据要通过遥控器一起传输,因此空调的遥控编码比较多(我家的空调有200个左右的逻辑数据)。显然,51单片机做的那款遥控器不能达到应用要求了。升级遥控器,我首选了目前经常使用的型号为的AVR单片机。它有1KB的RAM,完全可以轻易记录下200个左右的逻辑编码。
红外学习型遥控器的主要功能是学习,意思是“复制”其他红外遥控器,取而代之。所谓“复制”,就是复制后的遥控器的所有功能与原遥控器一模一样。否则,就不能算成功的“复制”。
学习型红外遥控,可以分为两类:以固定码格式学习的遥控器和波形拷贝方式学习的遥控器。前者,需要收集各种不同种类的遥控器信号,然后进行识别比较,最后再记录。但是,要实现几乎所有的红外遥控器的成功复制就太难了。因为,红外遥控器的红外编码格式变化太多。不过这种学习型遥控器对硬件要求相对简单,处理器的工作频率可以不高,存储容量也较小,其缺点是对未知编码的遥控器无效。后者主要是把原始遥控器所发出的信号进行完全拷贝,而不管遥控器是什么格式,存储在等存储器中。当发射时,只需将储存器中记录的波形长度还原成原始信号即可。这种学习型遥控器对MCU的主频要求高,RAM要求较大,其优点是对任何一种红外遥控器都可以进行学习。所以,我以第二种方案进行设计。
红外学习遥控器的学习功能在某些应用场合非常有用。但是,学习遥控器的使用,需要原来的遥控器,没有原来的遥控器,学习功能就无法实现了,这也算一个缺点吧。
所需元器件及材料:
编号 零件名称 数量
1 16MHz晶振 1
2 M8单片机插座 1
3 M8单片机 1
4 存储器插座 1
5 存储器 1
6 LED灯 1
7 红外一体接收头 1
8 红外发射二极管 1
9 0.1μF电容 1
10 300?电阻 3
11 微动按钮 8
12 ISP下载插针 1
13 万用板 1
由于使用的存储芯片的封装比较小,所以笔者通过转接板,把SOIC封装转接为DIP封装,方便了后期的制作。
这次制作的焊接工作很简单,都采用了DIP的元器件。使用绝缘线,根据原理图连接对应引脚即可。焊接好的作品如图所示。
电路原理
电路原理如图4所示。8个按钮的一端都连接到INT1接口上,这样所有按钮就都可以具有中断功能。SST存储芯片是串口的,使用SPI接口,因此和M8的SPI接口直接连接即可,它具有512KB大小。如果觉得容量太大,可以购买小容量的存储芯片,也有128KB大小的。它的最高读写频率高达20MHz,比M8单片机内置的快多了。LED指示灯上要串联300Ω的限流电阻,防止LED过亮刺眼。红外发光管也串联了300Ω电阻,实验证明,它的有效距离依然大于2m,距离够用了。为了提高了红外逻辑采集的精度,电路使用16MHz的晶体振荡器。红外接收头应该使用可以工作在低电压下的一体接收头,不然整个电路的工作电压就会上升了。
实验证明,整个电路可以在2.3~4.2V电压下正常工作,可以使用2节1.5V电池作为它的工作电源。我使用的是3.6V可充电电池。
之前,我使用了HS38B红外一体接收头,但要录制红外信号时,电源电压必须大于4.0V才能正常录制。后来,我购买了低工作电压(2.0~4.2V)的红外一体接收头,具体型号没关系,只要引脚兼容就可以。
设计要点介绍
1.?红外编码方式
红外遥控信号实际是一连串的脉冲码,它的逻辑长度一般代表二进制的“0”或“1”。通常为了提高发射距离,一般要将信号调制到特定的载波频率上,然后,通过红外发光二极管发射出去。红外一体接收头会滤除杂波,接收指定频率的信号,并还原成原来的二进制逻辑长度。一般,家里使用的遥控设备都是38kHz的载波。
常用的红外遥控包括两种调制方式:PWM(脉冲宽度调制)和PPM(脉冲位置调制)。
PWM(脉冲宽度调制):以发射红外载波的宽度来代表“0”和“1”。例如常用的VCD、DVD遥控器,其“0”为载波发射0.56ms、不发射0.56ms; “1”为载波发射0.56ms、不发射1.68ms。此外,还有引导码,一般为载波发射9ms,不发射4.5ms。
PPM(脉冲位置调制):以发射载波的位置表示“0”和“1”。从发射载波到不发射载波为“0”,从不发射载波到发射载波为“1”。其发射载波和不发射载波的时间相同,都为0.68ms,也就是每位的时间是固定的。还有一种不常用的调制方式:FSK(频移键控调制)。
频移键控用两种不同的频率代表“0”和“1”。例如,发射0.6ms的30kHz载波代表“0”,发射0.6ms的40kHz代表“1”。当然,这种方式不太常用。
通过以上对编码方式的分析,可以得出以某种固定格式的“0”和“1”去学习红外信号的方法。这种方法虽然能有效地减少系统开销,但解码的成功率大大降低。另外,由于空调的遥控状态远多于电视机、DVD等。因为它需要传输大量参数,如温度、风力、湿度、加热、制冷等,并且也没有一个统一的标准。如果按“位”的方式来记录,复制成功率会大大降低。那么,怎样才能完善地记录下遥控数据呢?——合适的单片机就能为这些数据提供存储空间。
2.?红外一体接收头的使用
一体化红外线接收器是一种集红外线接收、放大、整形于一体的集成电路,不需要任何外接元件,就能完成从红外线接收到输出,并与TTL电平信号兼容的所有工作。没有红外遥控信号时为高电平,收到红外信号时为低电平。它的体积和普通的塑封三极管大小一样,适合于各种红外线遥控和红外线数据传输。图7是型号为HS38B的红外一体接收头,经过实验证实,它的实际工作电压不得低于4.0V。
图7中HS38B的引脚从左到右分别是:输出[OUT]、地[GND]、电源[VCC]。
图8~图10是我实验时红外一体接收头接收到的逻辑数据。为了使录制时的遥控器逻辑电平,和发射时的逻辑电平一致。我在输出端接了耦合电容,起到逻辑电平翻转的作用。当然,在制作遥控器时,耦合电容是不需要的,通过软件翻转即可。
每张图上面的两个波形(蓝颜色的),是遥控器发射时的逻辑波形;下面两个波形(红色的)是笔者制作的遥控器的波形。这些波形在自制的遥控器录制好红外编码后通过红外发射管发射出的。
程序设计思路
一、红外录制
单片机程序通过记录逻辑电平的长度来实现红外遥控的编码记录。当然,它的明显缺点是需要占用较大的RAM空间。但是它的学习成功率,比以某种固定长度记录“0”和“1”来学习红外信号的要高。
程序要先判断电路中的REC按钮是否被按下。按下后,LED灯常亮,进入录制模式。按下需要分配的按钮,如SB1,LED灭半秒后,又亮起,表示确认。现在,就可以拿起遥控器,对准红外一体接收头,按下要录制的按钮。录制好一次后,LED会灭半秒后再次亮起。需要再录一次,录制成功后LED灯就会完全灭了。现在才算真正完成了录制。为什么要录制两次呢?因为,有些遥控器的编码是交错的。奇数和偶数次的编码数据是不一样的,即第1次和第2次按下同一个按钮,它的编码是不一样的。但是,第1、3、5次或第2、4、6次按下的按钮编码是一样的。通常,遥控器的电源按钮的开和关,也是不一样的编码。我家里的空调遥控器开和关虽是同一个按钮,但是编码却是不一样的。
M8的定时器1工作在16位的定时器模式下,并设定为8分频,用于记录逻辑电平的长度,并用2字节,记录下逻辑电平的长度。当200ms左右,红外一体接收头没有电平变化,记录就自动完成了。
此时,数据还在M8的RAM中。由于录制前已经分配好按钮号(SB1~SB7),程序会把红外编码保存到存储器对应的分配空间里,一个按钮固定占用1KB的存储器空间。
二、红外发射
红外遥控器的载波,可以通过设置M8的定时器2产生。定时器2工作在CTC模式下,设定相关寄存器,产生38kHz的方波。就是我们需要的载波。
M8的INT1引脚设置为输入模式,等待下降沿中断。8个按钮对应的引脚全部输出0。当任意一个按钮按下后,就会产生下降沿中断。此时,程序在INT1中断函数中,设置INT1引脚输出0空调遥控器原理,同时8个按钮设置为输入状态。这时读取接钮的引脚状态,如果为0,就判断它被按下了,如果为1就判断没有按下。
当录制好红外编码后,(SB1~SB7)的某个按钮按下。程序会从存储器中载入对应的按钮编码波形,并通过38kHz的载波发射。
最终做了一版如下图所示
学习型红外遥控器实现功能如下:
按下学习键再按下1,把信号学习来存在1上,按下1就能发射。按下学习键,按下2,学习另外的信号放到2里。内部有很多存储器的,功能用单片机实现。
使用方法
使用前,我们先要进行录制步骤,不然空调遥控器原理,SB1~SB7按钮处于没有内容的状态,没有具体的编码。
按下REC按钮,制作的遥控器就处于录制的模式状态,LED灯常亮。这时,就可以指定要复制的按钮。例如按下SB1按钮,此时“制作的遥控器”就处于录制的等待状态。拿出空调遥控器,对着一体化接收头,按下电源按钮。正常的话,LED会灭半秒,表示接收奇数编码完毕。再按一次空调遥控器的电源按钮,LED就会完全灭了,表示接收偶数码完毕。这样,SB1按钮就复制好空调遥控器的电源按钮了,可以使用其对应的功能了。
程序使用ISP下载线更新,如图6所示。下载口共10根插针,其中4根和单片机连接,2根用于供电。如果要使用ISP下载线中的电源(2和10引脚)供电,需要拔下SST存储芯片,防止过高的电压损坏存储芯片。
本文采摘于网络,不代表本站立场,转载联系作者并注明出处:http://www.9iwh.cn/jdzx/49808.html