浅谈38K红外发射接受编码(非常好)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

浅谈38K红外发射接受编码(非常好)

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

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一起用,免得浪费电路资源。另外接收头的有些是中间是电源脚有些中间的地脚,如果来玩玩的最好看清楚顺便买的时候预留多一个免得烧了之后又得跑一趟。

至于学习型的红外遥控,有的只需要学习编码,有个则需要学习载波频率。后者比较不好弄。欢迎接贴....

相关文档
最新文档