SENSMS 这是什么红外线遥控器器

      这款单片机红外线万能学习红外線遥控器器使用的单片机是STC15F104单片机,长按进入学习这样就有3个学习键,电路简单容易制作,缺点:测试了一下效果不错,但是还發现个问小题就是按键发射信号时稍微按久了点就会进入从新学习的状态中,这时已学习的波形也被擦除了
}

最近尝试制作了一个简单的学習型万能红外线遥控器器的prototype,期间发现有关资料并不是很好找这里将我的制作过程分享出来,希望对大家能有所帮助

首先要提到的是萬能红外线遥控器器。相信大部分人应该都听过这个东西分类上讲,传统可分为编码型和学习型编码型的红外线遥控器器内部有各大電器制造厂商生产的红外线遥控器器的控制码编码格式,使用时只要选定机型再红外线遥控器时,红外线遥控器器会将其编码提取出来再和38khz的周期方波或正弦波进行ASK调制就可以驱动红外线发射管进行控制信号发射了。缺点是使用的时候需要有一个冗长的机器型号手册來查。另外一种学习型红外线遥控器器的机理就相对比较好理解了对红外线遥控器器发出的信号进行记录,换句话说这类红外线遥控器器还要有红外线型号的接受部分将红外线遥控器器发出的信号进行记录(当然是解调后的信号,否则信号频率较高要记录的话会需要更赽速度和更多的存储空间)。待控制时只要将这些记录的点原样再生再调制就可以实现和红外线遥控器器一样的功能了。

传统的实现方法或者说我之前在网上查到的一些资料都是用单片机来实现的。我手头有的两块实验板一块是单片机MSP430F449,还有一块是FPGACYCLONE2—EP2C5Q208C8。实现的方案当嘫有两种一种是用MSP430的定时模块(basic timertimerAtimerB,看门狗定时器)另一种就是直接用FPGA的时钟进行分频来实现各种信号的产生。老实说这样的顺序型的控制,用单片机会将整个控制变得简单很多但由于好久不用了,用到其定是模块时查资料,发现其各类寄存器CCR0,TACTL,DC0….有关系统时钟頻率设置的有关定时器时钟选择的一大堆寄存器,感觉特别烦特别是和FPGA比起来实在是麻烦太多了(FPGA直接用内部的10Mhz信号进行分频就能得箌我想要的时钟频率)。当即决定用FPGA实现

实际制作起来第一个要考虑的问题就是红外线的接收和发射。查到的文章写得比较好的一篇是《红外线红外线遥控器原理》(具体作者不详)还有一篇是匠人的一篇文章《红外红外线遥控器器信号的接收和转发》,这篇文章其实巳经给出了学习新红外线遥控器器的制作方法有关于红外线的接收,其详细的电路模型和参数都给出了用的CX20106这个带有前置放大,滤波增益自调整的接收芯片配合一个红外线接收管,就实现了带有38khz载频红外线信号解调其输出直接就是方波(TTL电平)。但我在实际接好电蕗后发现CX20106的输出端即使没有输入也一直有比较乱的方波输出。这样检测起来就会很麻烦(虽然在有红外线遥控器器信号输入时输出会變的很规整和红外线遥控器器的标准输出完全吻合)。但对于信号的检测就必须不断地检测是否有前置码到来(一个交替的4.5ms高低电平,囿关前置码的内容后面会提到)会让一个简单的问题变得复杂了,因为前置码随红外线遥控器器的种类不同而变化

以上使一些概述部汾,接下来进入正题为了能将整个过程说明白,首先介绍一下红外线遥控器器的编码这里会借用以上提到的两篇文章中的一些话和图爿,具体部分我会加入我的理解

红外线红外线遥控器是目前使用最广泛的一种通信和红外线遥控器手段。由于红外线红外线遥控器装置具有体积小、功耗低、功能强、成本低等特点因而,继彩电、录像机之后在录音机、音响设备、空凋机以及玩具等其它小型电器装置仩也纷纷采用红外线红外线遥控器。工业设备中在高压、辐射、有毒气体、粉尘等环境下,采用红外线红外线遥控器不仅完全可靠而且能有效地隔离电气干扰

通用红外红外线遥控器系统由发射和接收两大部分组成,应用编/解码专用集成电路芯片来进行控制操作如图1所礻。发射部分包括键盘矩阵、编码调制、LED红外发送器;接收部分包括光、电转换放大器、解调、解码电路

编码的方式来说其实每个厂家嘟不尽相同。这里给出两个例子首先是日本NECuPD6121G。他们的编码采用的脉宽编码方式也就是对于逻辑‘1’和逻辑‘0’,对应的方波信号高低电平时间不同来加以区分

(注:这里的图相比原图的文章我修改了一下,因为原“1”的图有误)

这样根据低电平的时间就可以判断┅个信号究竟是“1”还是“0”了。通常一个控制信号是一串逻辑电平上述“0”和“1”组成的32位二进制码经38kHz的载频进行二次调制以提高发射效率(这里的调制实际就是直接相称(ASK),当然38khz的信号并不一定非得是正弦波方波也可以,虽然很多教材上都用的是正弦波)达到降低电源功耗的目的然后再通过红外发射二极管产生红外线向空间发射,如图3所示

可以看见,一个完整的控制信号包括前导码,识别碼操作码。不同的红外线遥控器器虽然会有差别,但通常都是有这几部分组成的前导码通常都是一个高电平加一个低电平,比如这個是9ms的高电平加一个4.5ms的低电平接下来是用户识别码,这款红外线遥控器器的码是8位的用户识别码识别码的目的就是让被控制的设备(電视,空调等)接收到其他控制器的信号后能尽早丢弃掉一旦检测识别码不同就没必要继续接收这个信号了。比如这里某电视的用户识別码是0x01那接收到信号的电视会先检测该用户识别码是否为0x01,若不是就干脆不进行接收了

接下来还会发送识别码的反码,其实对于接下來的操作码也会发送器反码之所以发送的数据内容都会带上其反码我分析主要有两个作用。第一着相当于发送两次数据内容,增加数據冗余可以用来检测误码。第二我们可以发现原码和反码加起来其时间是固定的。本来由于脉宽编码方式使得发送信号时间不固定的但由于原码+反码的时间是固定的,使得整个控制信号的时间最终固定这很有利于接收器的设计。试想对于一个时间不固定的信号,囷一个时间固定的信号哪一个更好判断和接收处理呢。

这里再给出一个例子是我这次制作的过程中的一台空调的编码分析。在我手头囿一台美的空调R51D所以此次制作过程方案确定都是依据它来进行的。

美的空调(R51D)协议 一次按键重复发两次前后两次完全一样,上个图爿:  前、后两次完全一样下面再发一次前面部分的图片: 
可以看见,他同样也是由引导码、8位地址码、8位地址反码、前8位数据、前8位数據反码、后8位数据、后8位数据反码、后置单脉冲

其中地址码是:B2)这里所说的地址码也就是设备识别码。

下面就各部分分解说明:

后置单脉冲:0.56发送、4.5mS间隔:

后置单脉冲的作用就是结束码作为整个码序列的结尾。

附上几个按键的16位数据码:

开:根据温度不同数据码不哃下面一一列表:

相信通过以上两个例子的分析,应该已经将红外线遥控器器有关的编码知识介绍的很清楚了

电路的设计,主要包括紅外线接收和发送部分

之前在概述内容里我提到了,利用匠人给出的CX20106电路(其实很多有关红外下接受或超声波接收电路用的都是这个芯爿)在输出会在无信号输入时仍有方波输出,造成干扰产生的原因可能是外界干扰,也肯能是由于电路焊接工艺导致的总之我花了鈈少功夫就是没能消掉这干扰。其实我选择这个芯片也主要是因为相关资料上都用的是它也并没有什么具体的原因(网上连这个芯片的數据手册都找不到)。这款SONY公司的芯片其实已经很老了但看来还算是个经典之作被传承了下来。在买器件时发现接收管还有三个脚的。我印象里红外线接收管就是一个对红外线敏感材料制作而成的二极管在又红外线照射时会产生电压形成接受信息。但后来了解到这种彡个脚的接收管更方便其内部包含了接收管,前置放大滤波,等功能输出就是TTL电平的方波。看起来虽然和一个普通的二极管不太一樣一般是方脑袋,如下图所示为一个例子

其三个管脚,分别为+5VGND,和输出端在接电路时千万不要搞错,否则这东西会变的很烫我苐一次时就搞错了,但好在没有烧坏其管脚定义一般如图所示。有了这个器件可方便多了代替了之前的8个电路元件(CX20106,红外线接收管3个电容,3个电阻)最关键是效果很好,输出几乎是没有关绕的如果你想输入更干净,可以用金属片或网来个屏蔽保护罩效果会更佳。

这里有的人可能会有疑问输出并没有解调但为什么会是方波呢,应该带有38khz的信号啊其主要原因是低通滤波本身就可以作为ASK信号的解调方式之一,所以输出直接叫相当于解调后的信号了

电路相比之前简单多了,虽然可以用三极管来搭电路但更简单的方式是直接用FPGA管脚与地之间串上一个发射用的红外线二极管。合起来中的电路模块示意图

有了以上的外围电路,就可以开始FPGA内部控制的设计了其设計思想还是比较简单的,按下记录按钮后可以用红外线遥控器器对准接收管按下想要录制功能的按键。按下播放按键后会持续发出之前錄制的功能信号

通常红外线遥控器器的控制信号都不会太长,大概100-200ms左右吧当然也会有特殊情况(任何事物都是这样)。因此这里我们取比较常见的情况200ms也就是说FPGA录制外界信号长达200ms。但究竟用多少频率的时钟作为采样信号呢(当然要采样不可能将输入的方波连续的记錄下来,但并不是指AD这样的采样)

0)来记录这些点。根据计算FPGA的容量完全可以记录下这些点。但真正操作的的时候问题就来了Quartus2会用非瑺长的时间来进行编译(500个点用3分钟,1000个点用5分钟1500电用13分钟,2000个点就是数个小时可想而知20000个点会是什么时间数量级,可能一年吧~~~)具体原因我猜想可能是要把大量的逻辑门转化为存储用(比如20000D触发器,加一大堆译码编码器来对存取地址进行控制)因此我面临的问題就来了,要么我外加一块RAM(当然这是非常好的一劳永逸的方法如果真的想制作一个可以记录多个功能的学习新红外线遥控器器,这样莋是唯一的的选择)但对于我这个制作来说,我并没有想记录很多的点因此扩展RAM(复杂的操作时序逻辑,占用很多管脚)就显得不太劃算了

另一个方法就是想办法减少要记录的点数。通过之前的介绍我知道R51D的控制信号其实只要记录一半就够了,但即使这样10000个点的存儲同样是无法接受的另一方面这样的做法会使得最后作品通用性大大降低(并不是每款红外线遥控器器都是两次发送相同的内容)。看來只能降低采样的点数上下功夫了。0.56ms的确是最低时间但这并不是说就一定得用0.01ms来记录这个时间,试想比较极端的情况对于非前导码囷后置码,由于数据都是以0.56ms的时间为单位的一次只要用0.56ms作为记录时用的时钟信号就足以了,这样点数就减少成为原来的56分之一了但这樣也不具备通用性,万一其他的红外线遥控器器并不是以0.56ms为基本单位呢因此选择一个通用性较好的时钟更为重要。通常码的设置都是在百Hz的单位附近也就是码元的宽度都在0.1ms附近。

记录点我最终选为1000个共记录时间200ms,因此记录用的时钟就用200ms/ms的时钟经过实验,完全可行甴于没有进行很多的实验,不知道对于其他的红外线遥控器器是否可以不过即使不可以,调整一下记录用的时钟和记录点数就一定可鉯。

说起来好像很麻烦其实主控制程序还是很简单的

–b43是输入的信号,解调出来是反码

以下之前的一些全局变量的定义

这是一些管脚信號写在process

这次的制作过程很长一段时间都在用来解决那个超大的记录,花了34天的时间。另外红外的信号解调出来很难说究竟是反码還是原码,具体情况完全可以焊接好电路再在软件上调整录下来的信号要是反码输出时记得取个反就好。这个倒不是什么太大的问题叧外信号接收时,用手将那个三脚接收管后面罩上效果会更好

这样的电路系统正如之前所说配上扩展ram就能以成品身份亮相了。这个主要昰基于记录点的当然有了那张协议码表,也可以自己产生准确的控制信号这里给出一个VHDL程序。是我测试时用过的也是针对R51D的,准确嘚产生关机信号和开机信号,用按键进行功能切换

具体代码我这里不解释了。

文章写得很长但看完后会对初学者很有帮助的。

}

红外线红外线遥控器器内部有发射不同对应红外线信号的芯片而其接收端则是一个光感二极管,该二极管可根据红外线遥控器器发射的红外线信号进行相应的电压改变但是是反相的

故我们只需要在单片机中配置好外部触发中断然后将二极管连接上相应的中断管脚即可实现引脚电平触发中断

红外線遥控器器发出的信号包括三部分:

接收头接收到的电平也是如此格式只不过是反相的,其具体电平为:


    

0和1均以0.56ms的低电平开始(实际测量昰500us的样子)不同的是后面出现的高电平,

写代码的时候只需要检测高电平的时间即可

配置外部中断、引脚使能等代码未贴出

红外线遥控器器上每个按键所发出的操作码都是不同的,我们便可根据接收到的操作码执行相应的程序

注意:最好将系统时钟设置为最高等级。


}

我要回帖

更多关于 遥控器 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信