一、 红外通信原理 红外遥控有发送和接收两个组成部分。发送端采用单片机将待发送的二进制信号编码调制为一系列的脉冲串信号,通过红外发射管发射红外信号。红外接收完成对红外信号的接收、放大、检波、整形,并解调出遥控编码脉冲。为了减少干扰,采用的是价格便宜性能可靠的一体化红外接收头(HS0038, 它接收红外信号频率为38kHz,周期约26μs) 接收红外信号,它同时对信号进行放大、检波、整形得到TTL 电平的编码信号,再送给单片机,经单片机解码并执行去控制相关对象。如图1 所示:
图 1
红外发送部分由51单片机、键盘、红外发光二极管和7段数码管组成。键盘用于输入指令,51单片机检测键盘上按键的状态,并对红外信号进行调制,发光二极管产生红外线,数码管用来显示发送的键值。图2红外发射电路
图 2 红外发射电路 图 3 红外接收电路
红外接收部分由51单片机、一体化红外接收头HS0038和7段数码管组成。51单片机检测HS0038,并对HS0038接收到的数据解码,通过数码管显示接收到的键值。
二、 编码、解码
(1) 二进制信号的调制 二进制信号的调制由单片机来完成,它把编码后的二进制信号调制成频率为38kHz 的间断脉冲串,相当于用二进制信号的编码乘以频率为38kHz 的脉冲信号得到的间断脉冲串,即是调制后用于红外发射二极管发送的信号如图4 二进制码的调制所示。
图4 二进制码的调制
(2) 红外接收需先进行解调,解调的过程是通过红外接收管进行接收的。其基本工作过程为:当接收到调制信号时,输出高电平,否则输出为低电平,是调制的逆过程(图5 解调)。HS0038是一体化集成的红外接收器件,直接就可以输出解调后的高低电平信号;红外接收器HS0038的应用电路(图6)。
图6 HS0038的应用电路
(3)红外遥控发射芯片采用 PPM 编码方式 , 当发射器按键按下后 , 将发射一组 108ms 的编码脉冲。遥控编码脉冲由前导码、16位地址码(8 位地址码、 8 位地址码的反码)和16位操作码(8 位操作码、 8 位操作码的反码)组成。通过对用户码的检验,每个遥控器只能控制一个设备动作,这样可以有效地防止多个设备之间的干扰。编码后面还要有编码的反码,用来检验编码接收的正确性,防止误操作,增强系统的可靠性。前导码是一个遥控码的起始部分,由一个 9ms 的高电平 ( 起始码 ) 和一个 4. 5ms 的低电平 ( 结果码 ) 组成,作为接受数据的准备脉冲。以脉宽为 0. 56ms 、周期为 1. 12ms 的组合表示二进制的 “0” ;以脉宽为 1. 68ms 、周期为 2. 24ms 的组合表示二进制的 “1” 。
图9 发送一组完整的编码脉冲
(4)单片机采用外部中断 INT0 管脚和红外接收头的信号线相连,中断方式为边沿触发方式。计算中断的间隔时间,来区分前导码、二进制的 “1” 、 “0” 码。并将 8 位操作码提取出来在数码管上显示。
红外接收头输出的原始遥控数据信号,正好和发射端倒向。也就是以前发射端原始信号是高电平,那接收头输出的就是低电平,反之。
1:红外的概念不聊,那是一种物理存在。以下聊38K红外发射接收,主要讲可编程的红外编码。 2:红外遥控 红外遥控首先需要用来发“光”的红外发光管,还有一个接收光线的“接收管”(不是那种触发的红外对管),还有一个产生38K的信号源(可以是MCU中断实现还有就是市场上大把的红外编码IC),只需要简单的外围电路即可。 就单片机而言,为了增大红外发光管电流,需要用一个三极管驱动。红外编码IC也只需要几个外围电路,规格书上都有提供,这里不提。 3:红外接收头(有不理解的地方可以在后面找到你想要的答案或者继续“百度”“谷歌") 有必要可以看一下红外接收头内部组成的详细介绍。 接收收头分为电平头还有脉冲头。 电平型的:接收连续的38K信号,可以输出连续的低电平,时间可以无限长。其内部放大及脉冲整形是直接耦合的,所以能够接收及输出连续的信号。 脉冲型的:只能接收间歇的38K信号,如果接收连续的38K信号,则几百ms后会一直保持高电平,除非距离非常近(二三十厘米以内)。其内部放大及脉冲整形是电容耦合的,所以不能能够接收及输出连续的信号。 一般遥控用脉冲型的,只有特殊场合,比如串口调制输出,由于串口可能连续输出数据0,所以要用电平型的。 4:红外遥控中的载波到底是什么?(不要影响到你对其它载波的理解) 第一次接触红外我看到’载波‘这个词就觉得生涩。网上很多资料五花八门都描绘得很厉害、 我们就从一下几点开始描述,相信的等会就懂: (1)38K怎么来的? 这里只谈单片机给出,38K脉冲信号,占空比(脉冲的高电平比周期的值就是占空比)自己决定,既然是38K,那么脉冲的周期就是1/38000 S,记住这个不是高电平的时间长度,这个是一个脉冲的时间长度也就是一个周期,例如我们利用一个中断产生38K脉冲,占空比是1/2,我们的中断时间就要设置为 1/38000/2 S中断一次,然后通过相隔一次中断电平翻转一次就形成了一个频率为38K占空比1/2的脉冲。 另外i!在这里想说一下我在学习红外的时候遇到的两个错误: 一、当第一次接触红外遥控的时候,在网上下载了很多资料中断时间居然是1/38000S,产生的是19K的脉冲信号,红外肯定接收不了,更不要谈编码了。而且还是大部分被人的程序都是19K.对于刚接触的人可能就晕乎乎地忽悠过去了。 二、就是我们用单片机的时候是用了单片机的查询模式还是中断模式的问题。 我们利用中断时候,在时钟比较快的条件下可以产生比较准确的时间基准,来产生相对正确的脉冲。而利用查询方式,如果用51单片机,12M的晶振,利用查询溢位来产生的38K脉冲,那就犯了一个大错,因为利用查询的方式查询这个动作浪费的时间可不是一个或两个的机器周期,它浪费了大把的单片机时间,误差大得离谱。如果你用中断试过成功过,不妨试一下查询方式失败的感觉。 虽然利用查询方式编程是简单了很多,可是误差大得更多了多。我就是偷懒犯过了错误。 5:什么是红外38K的载波信号(其实我更想说成什么是38K编码信号(一下详解)) (1)记住38K的红外不单单只接受38K信号,它有个频偏(频率偏差左右波动)的范围,但记住范围不大。 (2)说是三极管驱动,其实三极管是作为一个开关,共射的方式。于是有两种通断方式,三极管用的是PNP呢还是NPN。 一般我们采用PNP作为开关管,NPN是利用高电平时候导通,但单片机开机时候,所有IO口的状态为高电平,这个时候就触发了开关管,虽然我们在初始化的时候可以把它关断,但即使此处实际上可以的问题为了以后设计其它东西可能因此犯了不该犯的错误还是选用PNP管好了。 (3)那么我们就用"0"表示红外管导通。。。。"1"表示红外管截至 驱动红外发光的"IO"口的状态便是38K脉冲信号从IO口发出来的触发信号,脉冲中的低电平就是导通,高电平就是截至。我们会看到,如果单单用38K,那么如前面摘录部分讲到的,我们会在接收端会接受到一个低电平的信号。 或者我们可以再这么理解吧:红外接收头只接受38K信号(误差范围内),我们把接收头看出一个转换器。遇到38K就输出低电平,没有遇到38K就被上拉成高电平。 于是所谓的“编码”的概念就这样产生了,我们利用有38K信号 跟 没有38K信号 这两种状态,利用红外接收头就翻译成低电平、高电平的信号。。。。这就是最主要的东西。 什么时候有38K。。什么时候没有38K,一切都由我们编程来实现。我们可以灵活地操控有跟没有,有的时间长度就是"接收方"低电平的时间长度。没有的脉冲的时间长度就是接收方高电平的时间长度。我们只需要在接收方读取高低电平的时间长度与高低电平的各种组合来读取发射方所提供的信息。这种就是所谓的“协议”,协议就是我们说好了,你照办的意思。协议内容明确我发什么的时候代表什么意思,接收方你懂的。 于是就有各种红外编码,NEC/飞利浦等红外编码是比较常见的,而我们根据需要我们可以自己设置自己的编码。如果想做遥控玩一玩的就没必要研究人家的红外编码协议,自己编几个容易编程的就可以了。像想NEC红外协议里面谈到的接受头输出的 高电平几毫秒低电平几毫秒就是代表“1”,高电平几毫秒低电平几毫秒就是代表“0”,高电平几毫秒低电平几毫秒就是代表“引导码或者用户识别码”,这些都是人家NEC里面的标准,我们可以自己定我们自己的标准。我可以说 10ms低电平后10ms高电平就代表允许接受,然后5ms低后5ms高就代表“1”,15ms低后15ms高就代表“2”,25ms低25毫秒高就代表“0”,当然这里只打个比方,因为编码长度要是太大的话对其它程序处理不是很灵活。因为我们解码的时候最好不要被中断。像空调那种一百多位编码的一般很少。少。至于多少合适,自己酌情考虑。编码的形式也自己决定。 于是乎,上面的东西并没有说到“载波”两个字,好了下面就说说载波吧。 我们把“有38K信号”这种状态(“信息”)当做“1”,把“没有38K的信号”这种状态(“信息”)当作“0”,我们可以看成其实我们要发出去的就是 1 跟 0 两种状态的组合。 而 1 跟 0两种状态的另外一种意思就是 38K 的“有”跟“没有” 于是 38K 就带上了 1 跟 0 的这两种信号的信息。 我们就把38K理解成载波信号,载放这信息的信号,其实就是断断续续的38K信号而已,如果我们说成载波那么就是载波。不过我更喜欢把这种信号看成一种编码信号。 好了,总结一下。红外遥控就是这么简单, MCU控制有没有38K信号 红外管就是把利用通断来把单片机的信号发出去 接收头就是把38K翻译成有跟没有 接收头那边的MCU就是把有跟没有的时间长度与组合计算出来(解码)。然后按照事先我们约定的编码执行相对应的动作。 还有一点需要补充一下。 那就是接收头的供电 这个很主要,接收头的供电就好根据解码的MCU的供电保持一致,这样接收头的输出的高低电平就可以被单片机IO识别兼容。同时接收头有很多种,有一些只能3V供电接受管就不要跟5V的MCU一起用,免得浪费电路资源。另外接收头的有些是中间是电源脚有些中间的地脚,如果来玩玩的最好看清楚顺便买的时候预留多一个免得烧了之后又得跑一趟。 至于学习型的红外遥控,有的只需要学习编码,有个则需要学习载波频率。后者比较不好弄。欢迎接贴.... 下面是红外发射、接收头(红外基础知识) 目前市售红外一体化接收头有两种:电平型和脉冲型,绝大部分的都是脉冲型的,电平型的很少。 电平型的,接收连续的38K信号,可以输出连续的低电平,时间可以无限长。其内部放大及脉冲整形是直接耦合的,所以能够接收及输出连续的信号。 脉冲型的,只能接收间歇的38K信号,如果接收连续的38K信号,则几百ms后会一直保持高电平,除非距离非常近(二三十厘米以内)。其内部放大及脉冲整形是电容耦合的,所以不能能够接收及输出连续的信号。一般遥控用脉冲型的,只有特殊场合,比如串口调制输出,由于串口可能连续输出数据0,所以要用电平型的。一般遥控器用455K经12分频后输出37917HZ,简称38K,10米接收带宽为38+-2K,3米为35~42K。在没有环境反射的空旷空间,距离10米以上方向性会比较强。在室内,如果墙是白色的,则在15米的空间基本没有方向性。 接收头要有滤光片,将白光滤除。在以下环境条件下会影响接收,甚至很严重: 1、强光直射接收头,导致光敏管饱和。白光中红外成分也很强。 2、有强的红外热源。 3、有频闪的光源,比如日光灯。 4、强的电磁干扰,比如日光灯启动、马达启动等。 38K信号最好用1/3占空比,这个是最常用的,据测试1/10占空比灵敏度更好。实际调制时间要少于50%。最好有间歇。 电平型的接收头只要接收到38K红外线就输出持续低电平,用起来非常爽,以前的老式接收头多半是这种类型,但其有个致命弱点:抗干扰性太差,传输距离短(小于1m)。 而脉冲型一体化红外线接收头必须接受一定频率38K的载波的基带信号才有正常输出,如发送500HZ的38K载波,脉冲型一体化红外线接收头输出500HZ方波,而如果发送连续的38K载波就会出项有瞬间低电平其后为高电平的现象。这种脉冲型一体化红外线接收头克服了传统电平型接收头的不足:传输距离相对更远,稳定性大大增加,抗干扰性更强。因此已经完全取代了老式的电平型接受头,在电子市场如不说明店主给你的绝对是脉冲性的。 手机拍照时可以查看红外发射管是否处于发射状态 红暴问题 有些厂家把能不能制造出无红暴红外灯当做一个技术问题来宣传,好像有红暴就是低技术,无红暴就是高技术。其实,有无红暴只是一个选择问题,并不是技术问题,波长超过700nm的光线叫做红外线,900nm以上的红外线基本无红暴,波长越短,红暴越强,红外线感应度也越高。现在市场上有两种主流红外灯,一种是有轻微红暴的,波长在850nm左右,一种是无红暴的,波长在940nm左右。同一款摄像机,在850nm波长的感应度,比在940nm波长的感应度好到10倍。所以850nm这种有轻微红暴的红外灯拥有更高的效率,应当做为红外夜视监控的首选项。 这说的有道理吗? 红暴是对红外灯工作状态的一个描述。工作灯在工作时,如果有红暴就会在管芯出现红色小点。如果没有红暴的话,工作和不工作人眼看不出来。没有红点 850nm和940nm都有红爆,只不过940要比较弱一点 常见的红外发射管有940nm波长和850nm波长两种,940nm波长的红外发射管主要使用于调制编码及信号传输,而850nm波长的主要用于安防等红外光源上,接收管则有850nm~950nm通用的型号。850的管和940的管区别在于他们的功率大小。850是属于大功率的,它的特点是:发射距离短,灵敏度高,适合用于摄象监控那块。940是属于小功率的,它的特点是:发射距离远,灵敏度低,主要用摇控器上 850发射管的选择 一般的一体机设计距离较近,一般适用较大角度的IR发射管,市场上最通用45、60度角,可选择一般晶片,最好还是选择日本和台湾的,市场上用12Pcs、14Pcs、18Pcs、24Pcs发射管的一体机,常用此类产品一般开发距离在5-20米,若开发20米以上的一体机,必需建议使用日本和台湾晶片,如28Pcs、36Pcs、48Pcs、64Pcs等产品,同时需选用较小角度的效果会更好。 如果你的调制波形是高电平有效,38KHz接收头输出的肯定是低电平;几乎所有的红外线接收头的输出信号都是反相的。 接收头一般都有好多种,时间一久就分不清三脚是怎么排列的? 方法是分别用机械表测其中两个脚的电阻,找到其中两脚阻值最小的一个,这时表棒不要动,答案出来了:红表棒接的是Vcc,黒表棒接的是地 呵呵 不用说另一个脚就是信号脚(IR)了。