38k载波及红外发射原理
本帖最后由 Randy 于 2012-10-28 21:12 编辑 转自 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 就是把有跟没有的时间长度与组合计算出来(解码)。然后按照事先