ARM单片机红外线接收应用案例

概述

电磁波谱中,红外辐射介于微波与可见光之间,拥有近红外和远红外两个波段。近红外波段的波长与可见光相邻,而远红外波段则更接近微波区域。 遥控器使用的是波长较短的红外光。这类设备通过电磁波来传输和接收信息,无需依赖导线。 红外技术在无线通信领域具有显著的优势,广泛应用于现代的音视频设备控制中。在接收端,通过接收器捕捉光脉冲,并通过处理来解析这些脉冲所携带的信息。 存在多种红外通信协议,例如RC5和SIRC,它们用于通过红外光线传输数据。

1 硬件设计要点

为了增强对噪声的抑制,红外信号通常以36 kHz、38 kHz或40 kHz的频率进行调制。采用集成红外接收/解调模块,例如TSOP1736(5V供电型号)或TSOP34836(3.3V供电型号),或其他相应的部件编号,是捕获这些信号的最直接方式(详见图1)。

这些模块具备三个引脚,能够接收红外信号并将其解调后的数字比特流通过输出引脚传输,该引脚可以直接连接至MCU微控制器的通用输入/输出(GPIO)引脚或通用定时器(GP-Timer)的输入捕获通道。如果选用TSOP1736模块,所连接的GPIO必须具备5V容忍特性。此外,红外模块输出的信号与传输的数据逻辑状态是相反的(即数据在空闲状态下为高电平,逻辑'0“变为”1',逻辑'1“变为”0')。

注意:红外模块的工作还需要两个外部元件——一个电容器和一个电阻器,具体的参数值应参考相应红外模块的数据手册。

图1 硬件配置

 2 通用实现方法

MCU微控制器内的定时器硬件可以被用来解码各种红外通信协议。通过将定时器设置为PWM(脉冲宽度调制)输入模式,它可以对红外信号的帧位进行采样。输入捕获功能会在与设定极性相反的边沿触发。

该定时器能够触发以下三种中断:

● 每个下降沿产生中断:用于测量脉冲的总宽度(即两个连续下降边沿之间的时间间隔)。

● 每个上升沿产生中断:用于测量低电平脉冲宽度(即下降边沿和上升边沿之间的时间)。

● 更新事件中断:当定时器计数器达到最大值溢出时触发,用于在接收到完整的红外数据包后将其状态重置为默认(包括位计数、数据和状态信息)。

通过测量低电平脉冲和整个脉冲的持续时间,我们可以确定信号的位值。如果在位时间的容许误差范围内,我们就能够识别出该位是逻辑0、逻辑1还是红外信号的头部信息。 下面的流程图为红外信号的解码过程提供了一个清晰的指导。 图2. 展示了红外信号解码的流程图。

图2 红外线解码流程图

 

3. RC5 协议解决方案

3.1 协议基础

RC5 编码是一个14位的字,它使用双相调制(也称为曼彻斯特编码)对36 kHz的红外载波频率进行编码。所有位都有相同的长度,即1.778毫秒,其中位时间的一半由36 kHz载波的脉冲填充,而另一半则是空闲的。逻辑零是通过在位时间的前半部分发送一个脉冲来表示的。逻辑一则是在位时间的后半部分发送一个脉冲来表示的。36 kHz载波频率的占空比是33%或25%,这降低了功耗。

图3 RC 位表示

 在图3.中,你可以看到RC5编码如何表示一个位。对于逻辑零,前半个位时间(即0.889毫秒)有一个36 kHz的载波脉冲,而后半个位时间是空闲的。对于逻辑一,则是后半个位时间有脉冲,前半个位时间是空闲的。这样的编码方式使得接收器能够很容易地区分逻辑零和逻辑一,即使在有噪声的环境中也能相对准确地解码。此外,由于脉冲和空闲的时间各占一半,这种编码方式还具有一定的抗干扰能力。

RC5帧可以生成2048(32x64)个不同的命令,这些命令被组织在32个组中,每组有64个不同的命令。RC5帧包含以下字段。图4中展示了RC5帧的一个示例。

  • 起始位(S):长度为1位,始终为逻辑1。
  • 字段位(F):长度为1位,表示发送的命令是在低位字段(逻辑1 = 0到63的十进制数)还是高位字段(逻辑0 = 64到127的十进制数)。字段位是后来添加的,当时人们意识到每个设备的64个命令不够用。以前,字段位与起始位是组合在一起的。许多设备仍然使用这种原始系统。
  • 控制位或切换位(C):长度为1位,每次按下按钮时都会切换。这使得接收设备能够区分连续两次的按钮按下(如“1”,“1”表示“11”)。
  • 地址:长度为5位,从32个可能的系统中选择一个。
  • 命令:长度为6位,它(与字段位一起)表示128个可能的RC5命令中的一个。

图4 RC5帧示例

 

为了避免帧冲突,在两个连续的帧之间插入了一个具有特定宽度的空闲时间(见图5)。

空闲时间被定义为50位宽。因此,一个帧的周期是64位(数据位)+ 1位(起始位)+ 1位(字段位)+ 1位(控制位)+ 50位(空闲时间)的总宽度。考虑到每位宽度为1.778毫秒,整个帧的周期是 (64 + 1 + 1 + 1 + 50) x 1.778 = 204.968 毫秒(近似值)。

 

表1. RC5时序

描述最小值典型值最大值
RC5半位周期640 µs889 µs1140 µs
RC5全位周期1340 µs1778 µs2220 µs
RC5消息时间23.644 ms25.687 ms26.133 ms
(注:14位数据 + 1位起始位,每位1.778 ms)
RC5消息重复时间108.089 ms113.778 ms119.467 ms
(注:每条消息后通常有50位的空闲时间)

3.2 使用单个GPIO和通用定时器的软件实现

3.2.1 RC5帧读取机制

图6展示了RC5帧是如何被接收的。为了这一目的,主要使用了MCU微控制器的两个嵌入式外设:外部中断(EXTI)和一个定时器(TIMx)。连接到IR模块输出引脚的MCU引脚可以是用户选择的任何GPIO引脚。

图6. RC5帧接收机制

 

EXTI中断事件
EXTI中断被用于启动和停止TIMx定时器,以测量第一个低电平持续时间来验证RC5帧的头部时序:

● 第一个EXTI中断事件(1):TIMx计数器被初始化和启用。
● 第二个EXTI中断事件(2):TIMx计数器被禁用,读取其值然后重新初始化。
从计数器读取的值给出了测量到的持续时间。EXTI中断的第三次执行取决于测量到的持续时间:

– 如果该持续时间在半个位时间的容差范围内,EXTI不会被禁用,EXTI中断会发生第三次,这会启用TIMx。之后TIMx开始采样RC5数据。在这种情况下,字段位(Field bit)被识别为逻辑1。

– 如果持续时间在一位时间的容差范围内,EXTI此时将被禁用,同时TIMx更新事件中断以及TIMx计数器被启用,以开始采样RC5数据。在这种情况下,字段位被识别为逻辑0。如果持续时间看起来是一个毛刺(glitch),则系统将初始化以接收下一个RC5帧。

  • 第三个EXTI中断事件(3):此中断的发生取决于第一个低持续时间的持续期,见(2)。当中断发生时,TIMx被启用并开始采样RC5数据。

TIMx中断事件:

TIMx用于在检查帧的第一个低持续时间之后,对RC5帧的每个位进行采样。

在一个RC5帧期间,TIMx中断执行13次,以采样所有的位。开始位(S)和字段位(F)不是由TIMx采样的,而且在RC5帧的末尾会采样一个“额外位”,以确保所有位都已接收到,并且存在一个空闲状态。

  • TIMx中断事件(A):在这个时候,通过GPIO输入数据寄存器的单次读取来采样RC5引脚。在此中断服务程序中,TIMx被配置为每个位时间生成一个周期性中断。
  • TIMx中断事件(B):在这个时候,通过GPIO输入数据寄存器的单次读取来采样RC5引脚,并且中断服务程序检查数据位的数量是否已达到13(n = 13:14-2+1)。如果是,TIMx计数器和TIMx更新中断将被禁用。

正如我们所看到的,直接从GPIO输入数据寄存器读取直接反映了位的值。如果读取的值是低电平,这意味着位的值是逻辑‘0’。如果读取的值是高电平,这意味着位的值是逻辑‘1’。

3.3 使用配置为PWM输入模式的GP-Timer实现软件

3.3.1 RC5帧解码机制

图7展示了如何接收RC5帧。为此目的,使用了MCU微控制器的一个内置外设:配置为PWM输入模式的定时器(TIMER)。 这种输入可以在下降沿和上升沿捕获当前定时器的值,并且可以在两个沿上生成中断。这个特性使得测量RC5脉冲的高电平和低电平时间变得容易。

 图7:RC5帧解码机制

  • TIMER中断事件:下降沿 A: TIMER中断用于测量两个连续下降沿之间的周期(整个脉冲的持续时间)。

  • TIMER中断事件:上升沿 B: TIMER用于测量下降沿和上升沿之间的持续时间(低电平脉冲的持续时间)。

这两个持续时间被用来确定位的值。每个位的值都是相对于最后一个位来确定的。

图8:通过上升沿确定位:低脉冲

  • 如果低脉冲持续时间等于T,并且最后确定的位是‘0’,则当前位是‘逻辑0’。
  • 如果低脉冲持续时间等于2T,并且最后确定的位是‘0’,则当前位是‘无效’。(无效情况:这种情况不可能发生)
  • 如果低脉冲持续时间等于T,并且最后确定的位是‘1’,则当前位是‘无位’。(无位:这个位将在下一个下降沿确定)
  • 如果低脉冲持续时间等于2T,并且最后确定的位是‘1’,则当前位是‘逻辑0’。

 图9:通过下降沿确定位:高脉冲

 

  • 如果高脉冲持续时间等于T,并且最后确定的位是‘0’,则当前位是‘无位’。(无位:这个位将在下一个上升沿确定)
  • 如果高脉冲持续时间等于2T,并且最后确定的位是‘0’,则当前位是‘逻辑1’。
  • 如果高脉冲持续时间等于T,并且最后确定的位是‘1’,则当前位是‘逻辑1’。
  • 如果高脉冲持续时间等于2T,并且最后确定的位是‘1’,则当前位是‘无效’。(无效情况:这种情况不可能发生)

图10:RC5解决方案流程图

 本文提供了两种实现软件RC5接收器的解决方案:一种使用外部中断(EXTI)和通用定时器(TIMx),另一种使用配置为PWM输入模式的定时器。该驱动程序使用非常简单,并且它支持标准和扩展的RC5格式。

  • 28
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MUKAMO

你的鼓励是我们创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值