0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

结合STM32、Arduino理解红外遥控编解码通信原理

strongerHuang 来源:MultiMCU EDU 2023-03-14 09:46 次阅读

红外遥控我们并不陌生,身边随处可见,最常见的就是家电中的红外遥控,那你知道其中的收发原理吗?

d4fe66b8-c18e-11ed-bfe3-dac502259ad0.gif

今天就来分享一篇关于红外解码的文章。

1 硬件连接

红外解码只需连3 根线(2 根电源+ 1 根数据)即可,如下图中TSOP382。d5166c54-c18e-11ed-bfe3-dac502259ad0.jpg

2 NEC 协议解码

本文所述的红外编解码采用 NEC 协议。通信的数据帧里使用 高电平时间 来区分 0 和 1。

d5305bfa-c18e-11ed-bfe3-dac502259ad0.jpg

对于按一下然后按住不动的情况,NEC 协议下是这么处理的:

d54981ca-c18e-11ed-bfe3-dac502259ad0.jpg

上图中写的“固定重复指令”也叫作“重复引导码”。对于红外通信协议,搜关键词“IR 引导码”会比较容易搜出结果。

NEC 的编码规则非常简单,如下图:
d5659892-c18e-11ed-bfe3-dac502259ad0.jpg

实际用逻辑分析仪抓取的波形如下,可以与上面的规则相互印证:

d5740058-c18e-11ed-bfe3-dac502259ad0.jpg

3Arduino红外解码


d58e41ac-c18e-11ed-bfe3-dac502259ad0.jpg

把上图中的代码复制到下面:


       
#include
        
         const int irReceiver
         Pin = 2; IRrecv irrecv(irReceiverPin); decode_results results; decode_results res_last; void setup() { Serial.begin(9600); irrecv.enableIRIn(); } void loop() { if(irrecv.decode(&results)){ if(res_last.value != results.value){ res_last.value = results.value; Serial.print("irCode: "); Serial.print(results.value, HEX); Serial.print(", bits: "); Serial.println(results.bits); } irrecv.resume(); } }
        

4STM32红外解码

1.外部中断方式

外部中断方式的优点在于:用哪个引脚都可以。因为没有使用片上定时器外设,所以需要使用CPU计数方式来算时间。

2.定时器捕获方式

定时器捕获方式需要使用与定时器相关的引脚,优点是 CPU 不参与计时,被解放出来的 CPU 可以做其他的事。

PS除了 NEC 协议,红外通信还有很多其他的协议,这在 Mixly 图形化编程软件中看得很明显,如下图:

d59e3378-c18e-11ed-bfe3-dac502259ad0.jpg

本文选择最简单的 NEC 协议谈红外解码意在简单地体现 IR 通信的应用,所以没有引入 38kHz 载波的概念。

5 收、发解码差异

d5b0c33a-c18e-11ed-bfe3-dac502259ad0.jpg

如上图,红外通信比较奇特的一点就是收发数据反相。这就导致虽然从发送方或接收方都能解出正确数据,但必解码时必须注意极性,极性要是反了就解不出或解不对数据。

通信实验:

d5d8bb4c-c18e-11ed-bfe3-dac502259ad0.jpg

如上图,作者觉得发与收之间的相位差加强了实验的真实感。作者用了两个单片机,分别是 ATMega 2560 和 ATMega 644,选 Arduino 系单片机的原因是想偷个懒不写软件。

下面放大一个数据,仔细看一看 38KHz 的载波长什么样:

d5f18b90-c18e-11ed-bfe3-dac502259ad0.jpg

上图的结论是占在“接收方”的角度写的“发送方”的行为。也就是说:

1.想让接收方接到 0,发送方就发 38KHz 的载波;

2.想让接收方接到 1,发送方就停止发送载波。

这里不免有人会问:停止发送载波实际上让接收方收到了 1,那该怎么区分“停止通信”和“通信中的 1”呢?

这答案就能看出 NEC 协议的作用了:数据帧有头有尾,在头尾之间的停止发送就是数据 1,不在头尾之间的就是没有通信。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表德赢Vwin官网 网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 电源
    +关注

    关注

    184

    文章

    17011

    浏览量

    247213
  • NEC
    NEC
    +关注

    关注

    0

    文章

    238

    浏览量

    98992
  • STM32
    +关注

    关注

    2253

    文章

    10780

    浏览量

    351668
  • 红外遥控
    +关注

    关注

    22

    文章

    347

    浏览量

    45306
  • Arduino
    +关注

    关注

    186

    文章

    6451

    浏览量

    185737

原文标题:结合STM32、Arduino理解红外遥控编解码通信原理

文章出处:【微信号:strongerHuang,微信公众号:strongerHuang】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    单片机实现红外遥控编解码全部资料

    ` 红外 遥控器的 解码并对电器进行 遥控一直是广大单片机爱好者的一个心愿。自己动手实现 红外 遥控电器也是
    发表于08-12 10:16

    arduino单片机的红外遥控解码发送库文件

    红外 遥控库除了 解码之外还能发送,用C++封装的库函数,是 arduino编程的利器
    发表于08-29 18:59

    蓝牙学习型红外线遥控器(NEC协议编解码

    学习型 红外线 遥控器(NEC协议 编解码) 单片机:STC89C52RC晶振:11.0592M 波特率:9600编译环境:Keil uVision4
    发表于02-26 10:34

    初识红外编解码

    初识 红外 编解码
    发表于08-16 06:35

    如何通过STM32解码红外遥控器的信号呢

    什么是 红外 遥控?如何通过 STM32解码 红外 遥控器的信号呢?
    发表于10-27 06:02

    Arduino红外遥控解码率很低是为什么?

    Arduino利用官方的 红外 解码库,但是成功率很低,按8到9次才会识别一次
    发表于11-08 06:52

    经典全面的红外线编解码资料

    经典全面的 红外线 编解码资料 红外线 遥控器已被广泛使用在各种类型的家电产品上,它的出现给使用电器提供了很多的便利。 红外
    发表于04-01 18:11 236次下载

    红外遥控编解码全攻略

    红外 遥控器的 解码并对电器进行 遥控是单片机学习者得一个心愿,自己动手实现 红外 遥控
    发表于07-12 13:09 433次下载
    <b class='flag-5'>红外</b><b class='flag-5'>遥控</b><b class='flag-5'>编解码</b>全攻略

    红外通信模块设计教程和关于单片机红外开发以及红外编解码知识

    红外 通信模块设计教程和关于单片机 红外开发以及 红外 编解码知识
    发表于09-04 08:50 30次下载
    <b class='flag-5'>红外</b><b class='flag-5'>通信</b>模块设计教程和关于单片机<b class='flag-5'>红外</b>开发以及<b class='flag-5'>红外</b><b class='flag-5'>编解码</b>知识

    通信接口——编解码

    通信接口—— 编解码
    发表于09-04 09:39 9次下载
    <b class='flag-5'>通信</b>接口——<b class='flag-5'>编解码</b>

    红外遥控编解码相关资料分享

    本文分享了 红外 遥控 编解码的相关资料。
    发表于11-16 14:40 43次下载

    红外遥控编解码全面讲解

    红外的简单发射接收原理:在发射端,输入信号经放大后送入 红外发射管发射,在接收端,接收管收到 红外信号后,由放大器放大处理后还原成信号。 红外线 遥控
    的头像 发表于03-06 13:51 8.3w次阅读
    <b class='flag-5'>红外</b><b class='flag-5'>遥控</b><b class='flag-5'>编解码</b>全面讲解

    STM32培训:介绍STM32USB音频编解码

    STM32USB音频 编解码
    的头像 发表于07-05 00:24 8634次阅读

    STM32NEC红外遥控解码

    STM32NEC 红外 遥控解码 红外 遥控编码格式一体化 红外
    发表于11-30 14:36 30次下载
    <b class='flag-5'>STM32</b> NEC<b class='flag-5'>红外</b><b class='flag-5'>遥控</b>器<b class='flag-5'>解码</b>

    使用Arduino解码任何遥控器的红外遥控信号

    德赢Vwin官网 网站提供《使用 Arduino 解码任何 遥控器的 红外 遥控信号.zip》资料免费下载
    发表于10-27 11:51 4次下载
    使用<b class='flag-5'>Arduino</b><b class='flag-5'>解码</b>任何<b class='flag-5'>遥控</b>器的<b class='flag-5'>红外</b><b class='flag-5'>遥控</b>信号