红外遥控原理及实现
红外线是在可见范围内远程控制设备最便宜的方法,具有抗干扰能力强、电路简单、容易编码/解码、功耗小、成本低等特点,我们生活中几乎所有的音频和视频等家电设备都可以通过这种方式进行控制,由于红外遥控的广泛使用,相应的元器件也就相当便宜和容易获得,从而被广大的电子产品的业余爱好者、创客用来控制自己的项目,在嵌入式系统的学习和实战项目中也被广泛采用。
红外遥控器
红外接收头
1. 工作原理
红外发光
红外光实际上是具有特定颜色的普通光,波长在760~1500纳米范围,低于我们的可见光谱,所以肉眼看不到这种颜色,这也是为什么我们选用红外光用于远程控制的原因之一,我们想使用它,但我们对看到它不感兴趣;另一个原因是红外发光二极管非常容易制造,非常便宜。虽然我们人类看不到遥控器发出的红外光,但这并不意味着我们不能让它变得可见。摄像机或数码相机可以“看到”红外光,正如你在这张图片中看到的。
如今,即使是最便宜的手机也内置了摄像头。只要把遥控器对准这样的相机,按下任意一个按钮,你就会看到LED闪烁。不幸的是,我们周围有太多的红外线光源 - 太阳是所有光源中最亮的,还有很多其它的光源,比如:灯泡、蜡烛、中央供暖系统等等,甚至我们的身体都会辐射红外光。事实上,任何散发热量的东西,就会散发红外光。因此,我们必须采取一些预防措施,以确保这些红外信息没有错误地传递到接收方 - 比如对我们要传输的信息进行“调制”。
调制
在载波频率上调制信号是使我们的信号在噪声中脱颖而出的一种方式,通过调制,我们使红外光源以特定的频率闪烁,红外接收器也调到那个频率,它就可以忽略其它频率的干扰信息。就如同你可以通过眨眼的方式来吸引接收者的注意力,即使在明亮的白天,我们人类也会注意到建筑工地闪烁的黄色灯光。
在上图中,你可以看到一个调制信号驱动左边发射器的红外LED,接收器将检测到的信号输出。
在串行通信中,我们通常说“标记”和“空闲”。“空闲”是默认信号,在发射机的情况下是关闭状态。在“空闲”状态下不会发光。在信号的“标记”状态下,红外光脉冲以特定的频率开启和关闭。在30kHz和60kHz之间的载波频率通常用于消费电子产品,最常见的是38kHz, 采用占空比为1/3的方波。
在接收端,“空闲”通常由接收端高电平的输出来表示。然后,“标记”会自动由一个低电平表示。
要注意,“标记”和“空闲”不是我们想要传输的1和0。“标记”和“空闲”以及“1”和“0”之间的真正关系取决于所使用的协议。更多的信息可以在描述协议的页面中找到。
红外发射
红外发射器一般是一个用电池供电的手持设备,它应该消耗尽可能少的功率,并且红外信号也应该尽可能强,以达到一个可接受的控制距离。最好它也应该是防震的。用作红外发射器的专用芯片有很多,这些芯片都支持其中的某些协议,随着微控制器技术的发展、成本和功耗都大大降低,越来越多的红外发射器使用微控制器来实现,用起来更灵活,当不按按钮时,它们处于极低功耗睡眠模式,几乎没有任何电流被消耗;处理器只有在按下一个按键时才会醒来发送适当的红外命令。
这种手持设备很少使用石英晶体,因为晶体非常脆弱,一旦遥控器掉在地上就很容易折断,所以多数都使用陶瓷谐振器(中心频率为455KHz,通过12分频以后得到接近38KHz的载波信号),它们可以承受更大的物理冲击,即便频率没有那么精准也不会影响红外通信的效果。
流经LED(或LED阵列)的电流可以从100mA到超过1A! 如果希望遥控的距离尽可能远,LED的电流也必须尽可能高,这就需要我们在LED参数、电池寿命和最大控制距离之间进行权衡。LED电流能达到这么高是因为驱动LED的脉冲非常短,不过,LED内部的平均功耗不应该超过它们的最大值,且要确保不超过LED的最大峰值电流。将载波信号的脉冲/暂停比降低到1/3甚至1/4是很常见的。这降低了功率需求,或者可以增加通过LED的电流,而不会使其过热,从而获得更长的控制距离。所有这些参数都可以在LED的数据表中找到。
可以选用一个简单的晶体管电路来驱动LED,应选择具有适当HFE和开关速度的晶体管。电阻的值可以用欧姆定律简单地计算出来,一个红外LED的标称电压降约为1.1V。
上面的驱动电路有一个缺点 - 随着电池电压的下降,通过LED的电流也会减少,这将导致能够达到的控制距离变短。
射极跟随电路可以避免这种情况。两个串联的二极管将晶体管基极端的脉冲限制在1.2V,减去晶体管的基极-发射极电压压差0.6V,当红外发射机工作时,发射极的电压幅度恒定为0.6V。这个恒定的幅度通过一个恒定的电阻导致一个恒定大小的电流脉冲,与电池的电压变化无关, 只需要运用欧姆定律就可以简单地得出LED的电流。
红外接收
市场上有许多不同的接收电路,选择跟你当前的载波频率匹配的电路。
在上图中,你可以看到这样一个红外接收器的典型框图。接收到的红外信号由图左侧的红外接收二极管进行光电变换得到电信号,这个电信号被放大和限幅,限幅器可以看作是AGC(自动增益控制)电路,无论距离遥控器有多远,都可以以获得恒定的脉冲水平输出。电路中的电容起到隔离直流的作用,只有交流电信号被发送到带通滤波器,带通滤波器的中心频率设定为遥控器发射信号的载波频率。消费类电子产品中常见的载波频率范围从30kHz到60kHz。
经过带通滤波器处理后的信号送到下一级的探测器、积分器和比较器,这三个模块的目的是将载波频率检测出来,如果有这个载波频率,比较器的输出将被拉低。
在实际的产品中,所有这些功能模块都集成到一个单一的电子元件中。市场上有许多不同的制造商生产这些元件,而且大多数设备都有几个版本,每个版本都被调到一个特定的载波频率。
请注意放大器的增益被设置为很高,系统很容易振荡。一定要在接收器的电源管脚放置一个至少22μF的大电容进行去耦,一些器件的数据手册建议使用330欧姆的电阻与电源串联,以进一步将电源与电路的其它部分解耦。
市场上有几家红外接收器制造商 - 西门子、Vishay和Telefunken是欧洲的主要供应商,西门子有其SFH506-xx系列,其中xx表示载频为30、33、36、38、40或56kHz;Telefunken有其TFMS5xx0和TK18xx系列,其中xx表示载波频率。现在常用的是Vishay的TSOP12xx、TSOP48xx和TSOP62xx产品系列。
在亚洲夏普、厦门华联和日本电气是三家有名的红外接收器生产企业。夏普的设备有非常神秘的ID名称,如:GP1UD26xK, GP1UD27xK和GP1UD28xK,其中x与载波频率相关。华联有HRMxx00系列,如HRM3700和HRM3800。日本电气公司(Japanese Electric)有一系列设备,在元器件的ID中不包括载频。PIC-12042LM调谐到36.7kHz, PIC12043LM调谐到37.9kHz。
2. 电路连接
在硬禾学堂开发的基于RP2040的嵌入式系统学习平台上,使用了Vishay公司的940nm波长的高速红外发射管 VSMB10940以及台湾亿光(Ever bright)公司的一体化贴边红外接收头IRM-H638T,电路的连接如下图:
基于RP2040的嵌入式系统学习平台上的红外收/发电路
IRM-H638T的调制/解调波形图
另外在Github上有小哥 - Harish Kumar使用RP2040的PIO实现了红外接收解码,并支持HID,从而实现了一个IR键盘的功能,可以通过PIO解码任何NEC协议的红外发射脉冲信号,并支持USB键盘功能(HID).
还有一个项目用树莓派Pico实现了遥控信号接收和发射的功能,并有详细的过程描述。
3. MicroPython编程
Peter Hinch提供了基于ESP32、ESP8266以及树莓派Pico的MicroPython设备驱动程序:
https://github.com/peterhinch/micropython_ir
其中:
- 红外发射文档:https://github.com/peterhinch/micropython_ir/blob/master/TRANSMITTER.md
- 红外接收部分:https://github.com/peterhinch/micropython_ir/blob/master/RECEIVER.md
4. Verilog编程
红外遥控信号编码
使用Lattice的ICE40 FPGA实现红外收发的功能框图
- Lattice使用ICE40 FPGA做红外接收和发射的参考设计资源页面:https://www.latticesemi.com/products/designsoftwareandip/intellectualproperty/referencedesigns/referencedesigns02/ir
- Lattice使用ICE40 Ultra自学习红外遥控参考指南:https://www.latticesemi.com/view_document?document_id=50709