【转载】浅谈38K红外发射接受编码

转自Doctor_A 坛友的笔记!

之前做接触过一次红外遥控器,现在有空想用简单的话来聊一聊,下面有错误的地方欢迎改正指出:

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)了。

本文链接:http://www.cnblogs.com/cposture/p/4321341.html

时间: 2024-10-26 21:24:48

【转载】浅谈38K红外发射接受编码的相关文章

辛星浅谈PHP的混乱的编码风格

我们都知道,各种编程语言都有自己的风格,即使是像C和C++那样一脉相承的语言(C++本意完全兼容C的语法),编程风格上还是有些差别,比如很典型的就是C++风格的单行注释和C风格的多行注释. 而虽然Java在很大程度上借鉴了C的语法,但是不可否认,Java的经典的大括号是左大括号是在类名或者函数名等同一行的,而C++风格的则是大括号另起一行,可能有些Java程序员和C++程序员这两种风格都用,但是如果大家多看看大师的编码风格,会发现其实大括号另起一行是典型的C++的风格,大括号不另起一行是典型的J

开发技术--浅谈文件操作与字符编码

开发|浅谈文件操作与字符编码 听说Python的文件操作很容易在某一些电脑上出问题,然而罪魁祸首就是字符编码.让我们来了解一些底层的编码方式. 前言 目前所有的文章思想格式都是:知识+情感. 知识:对于所有的知识点的描述.力求不含任何的自我感情色彩. 情感:用我自己的方式,解读知识点.力求通俗易懂,完美透析知识. 正文 本文主要分为两大部分,一部分是如何使用Python进行文件操作,另一部分是聊一下字符编码的那些事.(比较绕,尽量用最最最通俗的话表述~~) 文件操作 1.文件操作方式 open(

转载-浅谈Ddos攻击攻击与防御

EMail: jianxin#80sec.comSite: http://www.80sec.comDate: 2011-2-10From: http://www.80sec.com/ [ 目录 ]一 背景二 应急响应三 常见ddos攻击及防御四 根源及反击五 总结 一 背景 在前几天,我们运营的某网站遭受了一次ddos攻击,我们的网站是一个公益性质的网站,为各个厂商和白帽子之间搭建一个平台以传递安全问题等信息,我们并不清楚因为什么原因会遭遇这种无耻的攻击.因为我们本身并不从事这种类型的攻击,这

浅谈java使用指定字符集编码,以及常见的字符集

问题的引入:在InputStreamReader(OutputStreamWriter)的构造方法中,有指定字符集编码,那么什么是字符集?有哪些常用的字符集?怎么用字符集进行编码? 一   什么是字符集? 字符:字符(Char)是各种文字和符号的总称,包括各国家文字.标点符号.图形符号.数字等. 字符集:字符集(Charset)是多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同. 二  有哪些常用的字符集? 1.ASCII: ASCII(American Standard Code

浅谈ASCII码、unicode编码、UTF-8编码的区别

字符集:是一堆字符组成的集合,用来指定字节或者字符串映射成二进制的规则 (在计算机中存储的,无论是字节还是字符串都是以二进制模式存储的.) ASCII编码和Unicode编码的区别: ASCII编码是1个字节,而Unicode编码通常是2个字节(2-4个字节). 字母A用ASCII编码是十进制的65,二进制的01000001: 字符0用ASCII编码是十进制的48,二进制的00110000,注意字符'0'和整数0是不同的: 汉字"中"已经超出了ASCII编码的范围,用Unicode编码

python 浅谈小数据池和编码

?. ?数据池 在说?数据池之前. 我们先看?个概念. 什么是代码块: 根据提示我们从官??档找到了这样的说法: A Python program is constructed from code blocks. A block is a piece of Python program text that is executed as a unit. The following are blocks: a module, a function body, and a class definiti

<转载>浅谈c++容器系列

以下资料转自CSDN 某牛人.对c++容器有一个比较好的理解: http://blog.csdn.net/acosoft/article/details/4395468 http://blog.csdn.net/acosoft/article/details/4398367 http://blog.csdn.net/acosoft/article/details/4404981 http://blog.csdn.net/acosoft/article/details/4411332 http:/

[转载]浅谈多态机制的意义及实现

http://blog.hesey.net/2010/12/significance-and-implementation-of-polymorphism.html 在面向对象编程(Object-Oriented Programming, OOP)中,多态机制无疑是其最具特色的功能,甚至可以说,不运用多态的编程不能称之为OOP.这也是为什么有人说,使用面向对象语言的编程和面向对象的编程是两码事. 多态并没有一个严格的定义,维基百科上给它下的定义比较宽松: Subtype polymorphism

浅谈 JavaScript 编程语言的编码规范

对于熟悉 C/C++ 或 Java 语言的工程师来说,JavaScript 显得灵活,简单易懂,对代码的格式的要求也相对松散.很容易学习,并运用到自己的代码中.也正因为这样,JavaScript 的编码规范也往往被轻视,开发过程中修修补补,最终也就演变成为后续维护人员的恶梦.软件存在的长期价值直接与编码的质量成比例.编码规范能帮助我们降低编程中不必要的麻烦.而 JavaScript 代码是直接发送给客户浏览器的,直接与客户见面,编码的质量更应该受到关注. 本文浅谈 JavaScript 编程中关