差别
这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
ir_remote [2022/02/07 13:33] gongyusu [红外遥控原理及实现] |
ir_remote [2022/02/07 16:46] (当前版本) gongyusu [4. Verilog编程] |
||
---|---|---|---|
行 1: | 行 1: | ||
## 红外遥控原理及实现 | ## 红外遥控原理及实现 | ||
- | 红外线是在可见范围内远程控制设备最便宜的方法,我们生活中几乎所有的音频和视频设备都可以通过这种方式进行控制,由于红外遥控的广泛使用,相应的元器件也就相当便宜和容易获得,从而被广大的电子产品的业余爱好者、创客用来控制自己的项目,在嵌入式系统里也被广泛采用。 | + | 红外线是在可见范围内远程控制设备最便宜的方法,具有抗干扰能力强、电路简单、容易编码/解码、功耗小、成本低等特点,我们生活中几乎所有的音频和视频等家电设备都可以通过这种方式进行控制,由于红外遥控的广泛使用,相应的元器件也就相当便宜和容易获得,从而被广大的电子产品的业余爱好者、创客用来控制自己的项目,在嵌入式系统的学习和实战项目中也被广泛采用。 |
+ | {{ :389-04.jpg |}}<WRAP centeralign> 红外遥控器 </WRAP> | ||
+ | {{ :157-00.jpg |}}<WRAP centeralign> 红外接收头 </WRAP> | ||
### 1. 工作原理 | ### 1. 工作原理 | ||
#### 红外发光 | #### 红外发光 | ||
+ | 红外光实际上是具有特定颜色的普通光,波长在760~1500纳米范围,低于我们的可见光谱,所以肉眼看不到这种颜色,这也是为什么我们选用红外光用于远程控制的原因之一,我们想使用它,但我们对看到它不感兴趣;另一个原因是红外发光二极管非常容易制造,非常便宜。 | ||
+ | 虽然我们人类看不到遥控器发出的红外光,但这并不意味着我们不能让它变得可见。摄像机或数码相机可以“看到”红外光,正如你在这张图片中看到的。 | ||
{{ :ledflash.gif |}} | {{ :ledflash.gif |}} | ||
- | 红外光实际上是具有特定颜色的普通光。我们人类看不到这种颜色,因为它大约950纳米的波长低于可见光谱。这就是为什么红外被选择用于远程控制的原因之一,我们想使用它,但我们对看到它不感兴趣。另一个原因是红外发光二极管非常容易制造,因此非常便宜。 | + | 如今,即使是最便宜的手机也内置了摄像头。只要把遥控器对准这样的相机,按下任意一个按钮,你就会看到LED闪烁。不幸的是,我们周围有太多的红外线光源 - 太阳是所有光源中最亮的,还有很多其它的光源,比如:灯泡、蜡烛、中央供暖系统等等,甚至我们的身体都辐射红外光。事实上,任何散发热量的东西,就会散发红外光。因此,我们必须采取一些预防措施,以确保这些红外信息没有错误地传递到接收方 - 比如对我们要传输的信息进行“调制”。 |
- | 虽然我们人类看不到遥控器发出的红外光,但这并不意味着我们不能让它变得可见。摄像机或数码相机可以“看到”红外光,正如你在这张图片中看到的。如今,即使是最便宜的手机也内置了摄像头。只要把遥控器对准这样的相机,按下任意一个按钮,你就会看到LED闪烁。 | + | |
- | 不幸的是,我们有更多的红外线光源。太阳是所有光源中最亮的,但还有很多其他的光源,比如:灯泡、蜡烛、中央供暖系统,甚至我们的身体都辐射红外光。事实上,任何散发热量的东西,也会散发红外光。因此,我们必须采取一些预防措施,以确保我们的红外信息没有错误地传递到接收方。 | + | |
#### 调制 | #### 调制 | ||
- | 在载波频率上调制信号是使我们的信号在噪声中脱颖而出的答案。通过调制,我们使红外光源以特定的频率闪烁。红外接收器会调到那个频率,所以它可以忽略其他任何东西。 | + | 在载波频率上调制信号是使我们的信号在噪声中脱颖而出的一种方式,通过调制,我们使红外光源以特定的频率闪烁,红外接收器也调到那个频率,它就可以忽略其它频率的干扰信息。就如同你可以通过眨眼的方式来吸引接收者的注意力,即使在明亮的白天,我们人类也会注意到建筑工地闪烁的黄色灯光。 |
- | 你可以把眨眼看作是吸引接收者的注意力。即使在明亮的白天,我们人类也会注意到建筑工地闪烁的黄色灯光。 | + | |
- | 在上图中,你可以看到一个调制信号驱动左边发射器的IR LED。被检测到的信号从另一边的接收器发出。 | + | |
{{ :irsignal.gif |}} | {{ :irsignal.gif |}} | ||
- | 在串行通信中,我们通常说“标记”和“空格”。“空间”是默认信号,在发射机的情况下是关闭状态。在“空间”状态下不会发出光。在信号的“标记”状态下,红外光脉冲以特定的频率开启和关闭。在30kHz和60kHz之间的载波频率通常用于消费电子产品。最常见的是38kHz。 | + | |
- | 在接收端,“空间”通常由接收端高水平的输出来表示。然后,“标记”会自动由一个低级别表示。 | + | 在上图中,你可以看到一个调制信号驱动左边发射器的红外LED,接收器将检测到的信号输出。 |
- | 请注意,“标记”和“空格”不是我们想要传输的1和0。“标记”和“空格”以及“1”和“0”之间的真正关系取决于所使用的协议。更多的信息可以在描述协议的页面中找到。 | + | |
+ | 在串行通信中,我们通常说“标记”和“空闲”。“空闲”是默认信号,在发射机的情况下是关闭状态。在“空闲”状态下不会发出光。在信号的“标记”状态下,红外光脉冲以特定的频率开启和关闭。在30kHz和60kHz之间的载波频率通常用于消费电子产品,最常见的是38kHz, 采用占空比为1/3的方波。 | ||
+ | |||
+ | 在接收端,“空闲”通常由接收端高电平的输出来表示。然后,“标记”会自动由一个低电平表示。 | ||
+ | |||
+ | 要注意,“标记”和“空闲”不是我们想要传输的1和0。“标记”和“空闲”以及“1”和“0”之间的真正关系取决于所使用的协议。更多的信息可以在描述协议的页面中找到。 | ||
#### 红外发射 | #### 红外发射 | ||
- | 发射机通常是一个电池供电的手机。它应该消耗尽可能少的功率,并且红外信号也应该尽可能强,以达到一个可接受的控制距离。最好它也应该是防震的。 | + | 红外发射器一般是一个用电池供电的手持设备,它应该消耗尽可能少的功率,并且红外信号也应该尽可能强,以达到一个可接受的控制距离。最好它也应该是防震的。用做红外发射器的专用芯片有很多,这些芯片都支持其中的某些协议,随着微控制器技术的发展、成本和功耗都大大降低,越来越多的红外发射器使用微控制器来实现,用起来更灵活,当不按按钮时,它们处于极低功耗睡眠模式,几乎没有任何电流被消耗;处理器只有在按下一个键时才会醒来发送适当的红外命令。 |
- | 许多芯片被设计成用作红外发射机。旧的芯片只用于发明的众多协议中的一种。目前,非常低功耗的微控制器被用于红外发射机,原因很简单,因为它们在使用上更灵活。当不按按钮时,它们处于极低功耗睡眠模式,几乎没有任何电流被消耗。处理器只有在按下一个键时才会醒来发送适当的IR命令。 | + | 这种手持设备很少使用石英晶体,因为晶体非常脆弱,一旦遥控器掉在地上就很容易折断,所以多数都使用陶瓷谐振器(中心频率为455KHz,通过12分频以后得到接近38KHz的载波信号),它们可以承受更大的物理冲击,即便频率没有那么精准也不会影响红外通信的效果。 |
- | 这种手机很少使用石英晶体。它们是非常脆弱的,当手机掉在地上时很容易折断。陶瓷谐振器更适合这里,因为它们可以承受更大的物理冲击。它们不那么准确的事实并不重要。 | + | 流经LED(或LED阵列)的电流可以从100mA到超过1A! 如果希望遥控的距离尽可能远,LED的电流也必须尽可能高,这就需要我们在LED参数、电池寿命和最大控制距离之间进行权衡。LED电流能达到这么高是因为驱动LED的脉冲非常短,不过,LED内部的平均功耗不应该超过它们的最大值,且要确保不超过LED的最大峰值电流。将载波信号的脉冲/暂停比降低到1/3甚至1/4是很常见的。这降低了功率需求,或者可以增加通过LED的电流,而不会使其过热,从而获得更长的控制距离。所有这些参数都可以在LED的数据表中找到。 |
- | 通过LED(或LED)的电流可以从100mA到超过1A!为了得到一个可接受的控制距离,LED电流必须尽可能高。在LED参数、电池寿命和最大控制距离之间进行权衡。LED电流能达到这么高是因为驱动LED的脉冲非常短。不过,LED内部的平均功耗不应该超过它们的最大值。您还应该确保LED的最大峰值电流不被超过。将载波信号的脉冲/暂停比降低到1/3甚至1/4是很常见的。这降低了功率需求,或者可以增加通过LED的电流,而不会使其过热,从而获得更长的控制距离。所有这些参数都可以在LED的数据表中找到。 | ||
{{ :irdriver.png |}} | {{ :irdriver.png |}} | ||
- | 一个简单的晶体管电路可以用来驱动LED。为此,应选择具有适当HFE和开关速度的晶体管。 | ||
- | 电阻器的值可以用欧姆定律简单地计算出来。记住,一个IR LED的标称电压降约为1.1V。 | + | 可以选用一个简单的晶体管电路来驱动LED,应选择具有适当HFE和开关速度的晶体管。电阻的值可以用欧姆定律简单地计算出来,一个红外LED的标称电压降约为1.1V。 |
- | 发射器跟随驱动上面描述的普通驱动有一个缺点。随着电池电压下降,通过LED的电流也会减少。这将导致更短的控制距离,可以覆盖。 | + | 上面的驱动电路有一个缺点 - 随着电池电压的下降,通过LED的电流也会减少,这将导致能够达到的控制距离变短。 |
{{ :iremitter.png |}} | {{ :iremitter.png |}} | ||
- | 射极跟随电路可以避免这种情况。两个串联的二极管将晶体管的脉冲限制在1.2V的基础上。晶体管的基极-发射极电压由此减去0.6V,当红外发射机有源时,发射极的恒定振幅为0.6V。这个恒定的振幅通过一个恒定的电阻导致一个恒定大小的电流脉冲,无论电池电压。计算通过LED的电流又一次简单地运用了欧姆定律。 | + | 射极跟随电路可以避免这种情况。两个串联的二极管将晶体管基极端的脉冲限制在1.2V,减去晶体管的基极-发射极电压压差0.6V,当红外发射机工作时,发射极的电压幅度恒定为0.6V。这个恒定的幅度通过一个恒定的电阻导致一个恒定大小的电流脉冲,与电池的电压变化无关, 只需要运用欧姆定律就可以简单地得出LED的电流。 |
#### 红外接收 | #### 红外接收 | ||
- | 市场上有许多不同的接收电路。最重要的选择标准是所使用的载波频率和你所在地区的可用性。 | + | 市场上有许多不同的接收电路,选择跟你当前的载波频率匹配的电路。 |
{{ :irreceiver.png |}} | {{ :irreceiver.png |}} | ||
- | 在上图中,你可以看到这样一个红外接收器的典型框图。如果您不理解描述的这一部分,请不要惊慌,因为所有的东西都内置在一个单一的、易于使用的电子组件中。 | + | 在上图中,你可以看到这样一个红外接收器的典型框图。接收到的红外信号由图左侧的红外接收二极管进行光电变换得到电信号,这个电信号被放大和限幅,限幅器可以看作是AGC(自动增益控制)电路,无论距离遥控器有多远,都可以以获得恒定的脉冲水平输出。 |
+ | 电路中的电容起到隔离直流的作用,只有交流电信号被发送到带通滤波器,带通滤波器的中心频率设定为遥控器发射信号的载波频率。消费类电子产品中常见的载波频率范围从30kHz到60kHz。 | ||
- | 接收到的红外信号由图左侧的红外探测二极管接收。这个信号被前两个阶段放大和限制。该限幅器作为AGC电路,以获得恒定的脉冲水平,无论距离手机。 | + | 经过带通滤波器处理后的信号送到下一级的探测器、积分器和比较器,这三个模块的目的是将载波频率检测出来,如果有这个载波频率,比较器的输出将被拉低。 |
- | 正如你所看到的,只有交流信号被发送到带通滤波器。带通滤波器被调谐到手持设备的载波频率。消费类电子产品中常见的载波频率范围从30kHz到60kHz,所以选择正确的频率是很重要的。 | ||
- | |||
- | 下一阶段是探测器、积分器和比较器。这三个模块的目的是检测载波频率的存在。如果有这个载波频率,比较器的输出将被拉低。 | ||
{{ :sfh506.jpg |}} | {{ :sfh506.jpg |}} | ||
- | 正如我之前所说的,所有这些块都集成到一个单一的电子元件中。市场上有许多不同的制造商生产这些组件。而且大多数设备都有几个版本,每个版本都被调到一个特定的载波频率。 | ||
- | 请注意放大器的增益被设置为很高。因此,系统很容易开始振荡。放置一个至少22 μ F的大电容接近接收器的电源连接是强制性的,以解耦电源线。一些数据手册建议将330欧姆的电阻与电源串联,以进一步将电源与电路的其他部分解耦。 | ||
- | 市场上有几家IR接收器制造商。西门子、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。 | + | 在实际的产品中,所有这些功能模块都集成到一个单一的电子元件中。市场上有许多不同的制造商生产这些元件,而且大多数设备都有几个版本,每个版本都被调到一个特定的载波频率。 |
- | 这总结了用于消费电子产品的红外遥控系统的操作原理。我知道还有其他实现IR控制的方法,但我将仅限于上述描述。这里没有涉及的问题之一是安全性。如果我想控制我的录像机或电视机,安全就不重要了。但当它打开车门或汽车时,它就变成了一个“关键”功能!也许我以后会讨论这个问题,但不是现在。 | + | 请注意放大器的增益被设置为很高,系统很容易振荡。一定要在接收器的电源管脚放置一个至少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,电路的连接如下图: | ||
+ | {{ :gamekitir.jpg |}}<WRAP centeralign>基于RP2040的嵌入式系统学习平台上的红外收/发电路</WRAP> | ||
- | 红外遥控的概述: | + | {{ :irwaveform.jpg |}}<WRAP centeralign>IRM-H638T的调制/解调波形图</WRAP> |
- | 红外线的光谱位于红色光之外, 波长是0.76~1.5μm,比红光的波长还长。红外遥控是利用红外线进行传递信息的一种控制方式,红外遥控具有抗干扰,电路简单,容易编码和解码,功耗小,成本低的优点。红外遥控几乎适用所有家电的控制。 | + | 参考技术资料: |
+ | * [[https://www.vishay.com/docs/84170/vsmb10940.pdf|vsmb10940数据手册]] | ||
+ | * [[https://atta.szlcsc.com/upload/public/pdf/source/20161219/1482143954829.pdf|IRM-H638T数据手册]] | ||
- | 一、红外遥控系统结构 | + | 另外在Github上有小哥 - Harish Kumar使用RP2040的PIO实现了红外接收解码,并支持HID,从而实现了一个IR键盘的功能: |
- | 红外遥控系统的主要部分为调制、发射和接收,如图1 所示: | + | [[https://github.com/gharishkumar/pico-ir-keyboard|pico-ir-keyboard]], 可以通过PIO解码任何NEC协议的红外发射脉冲信号,并支持USB键盘功能(HID). |
+ | 还有一个项目用树莓派Pico实现了遥控信号接收和发射的功能:[[https://github.com/etfovac/rpi_ir|RPi & IR]],并有详细的过程描述。 | ||
- | 图1 红外遥控系统 | ||
- | 1.调制 | + | ### 3. MicroPython编程 |
+ | Peter Hinch提供了基于ESP32、ESP8266以及树莓派Pico的MicroPython设备驱动程序:[[https://github.com/peterhinch/micropython_ir|Device drivers for IR (infra red) remote controls]],其中 | ||
+ | * 红外发射文档:[[https://github.com/peterhinch/micropython_ir/blob/master/TRANSMITTER.md|IR Transmitter]] | ||
+ | * 红外接收部分:[[https://github.com/peterhinch/micropython_ir/blob/master/RECEIVER.md|IR Receiver]] | ||
- | 红外遥控是以调制的方式发射数据,就是把数据和一定频率的载波进行“与”操作,这样既可以提高发射效率又可以降低电源 | ||
- | 功耗。 | ||
- | 调制载波频率一般在30khz到60khz之间,大多数使用的是38kHz,占空比1/3的方波,如图2所示,这是由发射端所使用的 | + | ### 4. Verilog编程 |
- | 455kHz晶振决定的。在发射端要对晶振进行整数分频,分频系数一般取12,所以455kHz÷12≈37.9 kHz≈38kHz。 | + | {{ :infrar1.gif |}}<WRAP centeralign> 红外遥控信号编码 </WRAP> |
+ | {{ :infrar1.gif |}}<WRAP centeralign> 红外遥控信号解码逻辑构成 </WRAP> | ||
- | 图2 载波波形 | + | {{ :irtxandrxblockdiagram.png |}}<WRAP centeralign>使用Lattice的ICE40 FPGA实现红外收发的功能框图 </WRAP> |
- | 1.发射系统 | + | * [[https://www.latticesemi.com/products/designsoftwareandip/intellectualproperty/referencedesigns/referencedesigns02/ir|Lattice使用ICE40 FPGA做红外接收和发射的参考设计资源页面]] |
+ | * [[https://www.latticesemi.com/view_document?document_id=50709|iCE40 Ultra Self-Learning IR Remote User’s Guide]] | ||
- | 目前有很多种芯片可以实现红外发射,可以根据选择发出不同种类的编码。由于发射系统一般用电池供电,这就要求芯片 | + | {{ :fpgairstep.jpg |}} |
- | 的功耗要很低,芯片大多都设计成可以处于休眠状态,当有按键按下时才工作,这样可以降低功耗芯片所用的晶振应该有 | + | |
- | 足够的耐物理撞击能力,不能选用普通的石英晶体,一般是选用陶瓷共鸣器,陶瓷共鸣器准确性没有石英晶体高,但通常 | + | |
- | 一点误差可以忽略不计。 | + | |
- | + | ||
- | 红外线通过红外发光二极管(LED)发射出去,红外发光二极管(红外发射管)内部构造与普通的发光二极管基本相同,材料和普通发光二极管不同,在红外发射管两端施加一定电压时,它发出的是红外线而不是可见光。 | + | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | 图3a 简单驱动电路 图3b 射击输出驱动电路 | + | |
- | + | ||
- | 如图3a和图3b是LED的驱动电路,图3a是最简单电路, 选用元件时要注意三极管的开关速度要快,还要考虑到LED的正向 | + | |
- | 电流和反向漏电流,一般流过LED的最大正向电流为100mA,电流越大,其发射的波形强度越大。 | + | |
- | + | ||
- | 图3a电路有一点缺陷,当电池电压下降时,流过LED的电流会降低,发射波形强度降低,遥控距离就会变小。图3b所示的 | + | |
- | 射极输出电路可以解决这个问题,两个二极管把三级管基极电压钳位在1.2V左右,因此三级管发射极电压固定在0.6V左右, | + | |
- | 发射极电流IE基本不变,根据IE≈IC,所以流过LED的电流也基本不变,这样保证了当电池电压降低时还可以保证一定的遥 | + | |
- | 控距离。 | + | |
- | + | ||
- | 1.一体化红外接收头 | + | |
- | + | ||
- | 红外信号收发系统的典型电路如图1所示,红外接收电路通常被厂家集成在一个元件中,成为一体化红外接收头。 | + | |
- | 内部电路包括红外监测二极管,放大器,限副器,带通滤波器,积分电路,比较器等。红外监测二极管监测到红外信号, | + | |
- | 然后把信号送到放大器和限幅器,限幅器把脉冲幅度控制在一定的水平,而不论红外发射器和接收器的距离远近。交流 | + | |
- | 信号进入带通滤波器,带通滤波器可以通过30khz到60khz的负载波,通过解调电路和积分电路进入比较器,比较器输出 | + | |
- | 高低电平,还原出发射端的信号波形。注意输出的高低电平和发射端是反相的,这样的目的是为了提高接收的灵敏度。 | + | |
- | + | ||
- | + | ||
- | 红外接收头的种类很多,引脚定义也不相同,一般都有三个引脚,包括供电脚,接地和信号输出脚。根据发射端调制 | + | |
- | 载波的不同应选用相应解调频率的接收头。 | + | |
- | + | ||
- | 红外接收头内部放大器的增益很大,很容易引起干扰,因此在接收头的供电脚上须加上滤波电容,一般在22uf以上。 | + | |
- | 有的厂家建议在供电脚和电源之间接入330欧电阻,进一步降低电源干扰。 | + | |
- | + | ||
- | 红外发射器可从遥控器厂家定制,也可以自己用单片机的PWM产生,家庭遥控推荐使用红外发射管(L5IR4-45)的可产生37.91KHz的PWM, PWM占空比设置为1/3, 通过简单的定时中断开关PWM, 即可产生发射波形。 | + | |
- | + | ||
- | 光电一体化红外接收头的典型电路 | + | |
- | 因为一体化红外接收头已经将低噪音放大器,限幅器,带通滤波器,解调器,以及整形驱动电路等集成在一起.所以电路做起来也非常简单,下面介绍一下万州光电红外一体化接收头的典型电路供参考: | + | |
- | + | ||
- | + | ||
- | + | ||
- | ### 2. 电路连接 | + | |
- | + | ||
- | ### 3. MicroPython编程 | + | |
- | + | ||
- | ### 4. Verilog编程 | + |