红外通信原理
红外接收头
接收头分:电平头和脉冲头
电平型:接收连续的38K信号,可以输出连续的低电平,时间可以无限长。其内部放大及脉冲整形是直接耦合的,所以能够接收及输出连续的信号。
脉冲型:只能接收间歇的38K信号,如果接收连续的38K信号,则几百ms后会一直保持高电平,除非距离非常近(二三十厘米以内)。其内部放大及脉冲整形是电容耦合的,所以不能接收及输出连续的信号。
一般遥控用脉冲型的,只有特殊场合,比如串口调制输出,由于串口可能连续输出数据0,所以要用电平型的。
红外遥控中的载波
38K的红外不单单只接受38K信号,它有个频偏(频率偏差左右波动)的范围。红外是三极管驱动的,三极管是作为一个开关,共射的方式。于是有两种通断方式,三极管用的是PNP还是NPN。一般我们采用PNP作为开关管,因为NPN是利用高电平时候导通,但单片机开机的时候,所有IO口的状态为高电平,这个时候就触发了开关管。
驱动红外发光的"IO"口的状态便是38K脉冲信号从IO口发出来的触发信号,脉冲中的低电平就是导通,高电平就是截至。红外接收头只接受38K信号(误差范围内),我们把接收头看出一个转换器。当遇到38K就输出低电平,没有遇到38K就被上拉成高电平。于是所谓的"编码"的概念就产生了,我们利用有38K信号跟没有38K信号这两种状态,利用红外接收头就翻译成低电平、高电平的信号。
"载波":把有38K信号这种状态当做"1",把没有38K信号这种状态当做"0",其实我们要发出去的就是 1 跟 0 两种状态的组合。而1 跟 0 两种状态的另一种意思是 38K信号的有跟无。于是38K就带上了1 跟 0的这两种信号的信息。我们就把38K理解成载波信号,载放这信息的信号,其实就是断断续续的38K信号而已。
红外遥控中的协议
什么时候有38K,什么时候没有38K,一切都由我们编程来实现。我们可以灵活地操控有跟没有,有的时间长度就是接收方低电平的时间长度。没有的脉冲的时间长度就是接收方高电平的时间长度。我们只需要在接收方读取高低电平的时间长度与高低电平的各种组合来读取发射方所提供的信息。这种就是所谓的"协议"。于是就有各种红外编码,NEC/飞利浦等红外编码是比较常见的。像NEC红外协议里面谈到的接受头输出的高电平几毫秒、低电平几毫秒就是代表"1",高电平几毫秒、低电平几毫秒就是代表"0",高电平几毫秒、低电平几毫秒就是代表"引导码或者用户识别码",这些都是人家NEC里面的标准,我们可以自己定我们自己的标准。
所以红外遥控就是:MCU控制有没有38K信号,红外管就是把利用通断来把单片机的信号发出去。接收头就是把38K翻译成有跟没有,接收头那边的MCU就是把有跟没有的时间长度与组合计算出来(解码)。然后按照事先我们约定的编码执行相对应的动作。
红外遥控由发送和接收两个组成部分。发送端采用单片机将待发送的二进制信号编码调制为一系列的脉冲串信号,通过红外发射管发射红外信号。红外接收完成对红外信号的接收、放大、检波、整形,并解调出遥控编码脉冲。