支持的芯片
概述
红外辐射(Infrared Radiation, IR)模块是一个用于红外发送和接收的控制器。它支持半双工通信,并具备红外信号的硬件调制和自动捕获功能。
工作模式
发送模式:基于硬件调制,通过 TX 端发送红外信号。
接收模式:支持 学习模式 和 普通接收模式 两种工作方式,分别对应 红外二极管 和 红外接收模块 作为硬件前端。
IR 模块的详细工作模式如下:
工作模式 |
核心功能 |
技术特征 |
信号链路特征 |
---|---|---|---|
发送模式 |
红外信号生成与调制 |
可编程控制载波参数 |
数字信号 → 载波调制 → 红外发射 |
接收模式 |
红外信号捕获与解调 |
兼容两种接收前端架构 |
红外信号 → 基带恢复 → 数字解码 |
工作原理
信号模型
为简化红外信号的理解,将其分为以下符号类型:
载波符号 :
描述:在一定时间内包含 若干载波时钟周期 的信号。
特性:在物理介质中 实际传播 的调制信号。
空间符号 :
描述:在一定时间内保持 连续高电平或低电平 的信号。
特性:代表 调制前或解调后 的数字信号。
IR 信号模型
发送模式
信号发送原理
在发送模式中,通过以下配置确保信号的准确调制与传输:
载波频率配置 :
设定信号调制的基础频率,以提供稳定的传输性能。
空间符号配置 :
通过写入 TX FIFO 控制信号的高低电平持续时间,定义信号的空间符号。
两者共同决定最终的 信号输出波形 ,如图所示:
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 的低电平信号构成
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 内核 捕获空间符号 。
无需进行软件解调 ,方便后续解析处理。
RX 工作流程示意图——学习模式与普通接收模式对比
解析 RX FIFO 数据
RX FIFO 的数据为 32 位宽,包含以下两部分信息:
字段 |
描述 |
参数含义 |
---|---|---|
BIT[31] |
接收到信号的电平状态 |
|
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);
开发流程
发送
设置引脚
详细参考 功能复用 部分,以确保正确的引脚连接
配置载波频率和占空比
根据通信协议的需求等,进行正确配置
配置 TX FIFO
用于控制空间符号的持续时间,用于硬件调制。
接收
应用示例
SDK 提供了以下功能示例,帮助开发者了解和使用 IR 功能:
raw_ir_rx_learning 演示如何使用 IR
RX 学习
模式;raw_ir_tx_nec_polling 演示如何使用 IR
轮询模式发送
数据;raw_ir_tx_nec_interrupt 演示如何使用 IR
中断模式发送
数据。
备注
要了解示例支持的芯片,请查看示例路径下的 README.md
文件。
API 参考
要详细了解和使用相关 API,请参阅 {SDK}\component\soc\amebaxxxx\fwlib\include\ameba_ir.h
。