支持的芯片

概述

红外辐射(Infrared Radiation, IR)模块是一个用于红外发送和接收的控制器。它支持半双工通信,并具备红外信号的硬件调制和自动捕获功能。

工作模式

发送模式:基于硬件调制,通过 TX 端发送红外信号。

接收模式:支持 学习模式普通接收模式 两种工作方式,分别对应 红外二极管红外接收模块 作为硬件前端。

IR 模块的详细工作模式如下:

工作模式

核心功能

技术特征

信号链路特征

发送模式

红外信号生成与调制

可编程控制载波参数

数字信号 → 载波调制 → 红外发射

接收模式

红外信号捕获与解调

兼容两种接收前端架构

红外信号 → 基带恢复 → 数字解码

工作原理

信号模型

为简化红外信号的理解,将其分为以下符号类型:

  • 载波符号

    • 描述:在一定时间内包含 若干载波时钟周期 的信号。

    • 特性:在物理介质中 实际传播 的调制信号。

  • 空间符号

    • 描述:在一定时间内保持 连续高电平或低电平 的信号。

    • 特性:代表 调制前或解调后 的数字信号。

../../../_images/ir_signal_model.svg

IR 信号模型

发送模式

信号发送原理

在发送模式中,通过以下配置确保信号的准确调制与传输:

  • 载波频率配置 :

    • 设定信号调制的基础频率,以提供稳定的传输性能。

  • 空间符号配置 :

    • 通过写入 TX FIFO 控制信号的高低电平持续时间,定义信号的空间符号。

两者共同决定最终的 信号输出波形 ,如图所示:

../../../_images/ir_tx_flow.svg

TX 工作流程示意图

解析 TX FIFO 数据

TX FIFO 的数据为 32 位宽,包含以下信息:

字段

描述

参数含义

BIT[31]

是否发送载波

1:发送

0:不发送

BIT[30]

数据发送结束标志

1:最后一笔包

0:正常包

BIT[29:28]

补偿模式

0:不发送载波阶段,用系统时钟计算周期数

3:不发送载波阶段,使用指定的补偿频率计算周期数

1,2:不建议使用

BIT[27:0]

载波/无载波的周期数

按载波频率或补偿频率计数

其中,字段 BIT[27:0] 计算方式:

BIT[27:0] = fcarrier * Tduration

参数含义:

fcarrier:

载波频率(单位:赫兹)

Tduration:

载波或无载波符号的持续时间(单位:秒)

备注

  • 补偿机制:仅对 TX 计数 无载波阶段 有效

  • 补偿模式:不建议使用 mode1, mode2

组织 TX FIFO 数据

NEC 编码协议简介

NEC 编码协议格式由 2 个起始符号、64 个数据符号和 1 个停止符号组成。其中,

  • 逻辑 1 : 由 560us 的高电平信号与 (2250-560)us 的低电平信号构成

  • 逻辑 0 : 由 560us 的高电平信号与 (1120-560)us 的低电平信号构成

../../../_images/ir_nec_protocol.svg

NEC 调制

下面以 NEC 编码协议,38KHz 的载波频率,补偿模式为 0 的设定为例,介绍如何组织写入 TX FIFO 的数据。

  • 传输逻辑 1

    应向 TX FIFO 写入以下两组数据:

Entry

BIT[31]

BIT[30]

BIT[29:28]

BIT[27:0]

First

1

0

0

38 * 560 / 1000 = 21

Second

0

0

0

38 * (1690 - 560) / 1000 = 63

  • 传输逻辑 0

    应向 TX FIFO 写入以下两组数据:

Entry

BIT[31]

BIT[30]

BIT[29:28]

BIT[27:0]

First

1

0

0

38 * 560 / 1000 = 21

Second

0

0

0

38 * (1120 - 560) / 1000 = 21

  • 停止传输

    为停止数据传输,应向 TX FIFO 的最后一个包中设置 BIT[30]=1,当前数据包仍会被发送。

Entry

BIT[31]

BIT[30]

BIT[29:28]

BIT[27:0]

First

1

1

0

38 * 560 / 1000 = 21

接收模式

信号接收原理

接收模块监测输入的高/低电平信号所持续的采样周期数,并存储在 RX FIFO 中供软件使用。

RX FIFO 的内容解析会因接收模式的不同而有所变化:

  • 学习模式

    • 输入信号包含载波。

    • IR 内核捕获 载波符号

    • 软件 需进行解调和解码 ,以提取信息,如载波频率和占空比。

  • 普通接收模式

    • 前端滤除了载波。

    • IR 内核 捕获空间符号

    • 无需进行软件解调 ,方便后续解析处理。

../../../_images/ir_rx_modules.svg

RX 工作流程示意图——学习模式与普通接收模式对比

解析 RX FIFO 数据

RX FIFO 的数据为 32 位宽,包含以下两部分信息:

字段

描述

参数含义

BIT[31]

接收到信号的电平状态

  • 1:高电平

  • 0:低电平

BIT[30:0]

信号在当前电平状态下,持续的采样时钟周期数

与采样频率有关

例如,在采样率为 10MHz(时钟周期为 100ns)的条件下:

数据

RX FIFO 值

含义

Data 1

0X10001000

表示检测到约 409.6 μs 的高电平信号

Data 2

0X00A1644

表示检测到约 66.106 ms 的低电平信号

接收启动条件

  • 手动接收 : 允许手动控制接收过程。

  • 自动接收 :

    • 触发条件配置:

      • 上升沿、下降沿或任何信号变化。

    • 功能:

      • 在 RX 输入信号检测到配置的触发器时,硬件会自动开始接收过程。

接收终止条件

在满足预设的条件后,RX 模块将触发特定中断事件。

根据系统设计,可以在中断处理函数中直接关闭 IR,或者释放信号量以通知相应的线程完成对 IR 的关闭。

相关设置包括:

  • 终止接收信号的电平状态:

    明确哪些电平状态会触发接收停止。

  • 电平状态的持续时间要求:

    定义电平状态需要保持的最短时间以触发中断。

  • 启用 RX 计数器阈值中断:

    确保当检测到指定电平和持续时间后,RX 模块可以触发 IR_BIT_RX_CNT_THR_INT_STATUS 中断。

例如,以下配置会使得 RX 模块在检检测到输入信号为 低电平状态持续时间不小于约 66.1ms 时,产生该中断事件

      /* 10MHz 的采样率 */
IR_InitStruct.IR_Freq = 10000000;

      /* 条件 1:电平信号状态 */
IR_InitStruct.IR_RxCntThrType = IR_RX_COUNT_LOW_LEVEL;

      /* 条件 2:电平信号持续时间的阈值,设置为 66.1ms 左右 */
IR_InitStruct.IR_RxCntThr = 0xa1644;

      /* 条件 3:使能 RX Counter 阈值中断 */
IR_INTConfig(IR_DEV, IR_BIT_RX_CNT_THR_INT_EN, ENABLE);

开发流程

发送

  1. 设置引脚

    • 详细参考 功能复用 部分,以确保正确的引脚连接

  2. 配置载波频率和占空比

    • 根据通信协议的需求等,进行正确配置

  3. 配置 TX FIFO

    • 用于控制空间符号的持续时间,用于硬件调制。

接收

  1. 设置引脚

    • 详细参考 功能复用 部分,以确保正确的引脚连接

  2. 配置采样频率

    • 以确保接收模块能够准确记录输入信号到 RX FIFO 中。

  3. 配置触发接收的方式

  4. 配置停止接受的条件

  5. 选择 RX FIFO 处理策略

  6. 关闭 IR

    • 在满足 step4 定义的终止接收条件时,关闭 IR 接收器。

应用示例

SDK 提供了以下功能示例,帮助开发者了解和使用 IR 功能:

备注

要了解示例支持的芯片,请查看示例路径下的 README.md 文件。

API 参考

要详细了解和使用相关 API,请参阅 {SDK}\component\soc\amebaxxxx\fwlib\include\ameba_ir.h