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

3 Arduino 红外解码


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

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


#include 


const int irReceiverPin = 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();
  }
}

4 STM32 红外解码

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,不在头尾之间的就是没有通信。

审核编辑:汤梓红

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

    关注

    182

    文章

    16553

    浏览量

    244701
  • NEC
    NEC
    +关注

    关注

    0

    文章

    238

    浏览量

    98884
  • STM32
    +关注

    关注

    2239

    文章

    10671

    浏览量

    348739
  • 红外遥控
    +关注

    关注

    22

    文章

    346

    浏览量

    45006
  • Arduino
    +关注

    关注

    184

    文章

    6427

    浏览量

    184834

原文标题:结合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 431次下载
    <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 42次下载

    红外遥控编解码全面讲解

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

    STM32 NEC红外遥控解码

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

    红外遥控器快速编码解码(NEC)

    红外遥控器快速编码解码 NEC编解码模块 红外遥控简介NEC编码
    发表于 12-17 17:44 22次下载
    <b class='flag-5'>红外</b><b class='flag-5'>遥控</b>器快速编码<b class='flag-5'>解码</b>(NEC)

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

    电子发烧友网站提供《使用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>信号