红外收发器(IR)
支持的芯片[ RTL8721Dx ][ RTL8730E ][ RTL8721F ]
概述
红外辐射(Infrared Radiation, IR)模块是一个用于红外发送和接收的控制器。它支持半双工通信,并具备红外信号的硬件调制和自动捕获功能。
工作模式
发送模式:基于硬件调制,通过 TX 端发送红外信号,可编程控制载波参数。
接收模式:支持 学习模式 和 普通接收模式 两种工作方式,分别对应 红外二极管 和 红外接收模块 作为硬件前端。
工作原理
信号模型
为简化红外信号的理解,将其分为以下符号类型:
载波符号 :
描述:在一定时间内包含 若干载波时钟周期 的信号。
特性:在物理介质中 实际传播 的调制信号。
空间符号 :
描述:在一定时间内保持 连续高电平或低电平 的信号。
特性:代表 调制前或解调后 的数字信号。
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);
接收端载波问题
由于晶体管特性,在深度饱和区工作时响应速度会降低。
载波频率过高时,接收端可能无法正确接收载波波形。
接收学习中,最大可实现载波频率取决于接收电路和晶体管选择。
我们在 红外收发电路 中推荐的电路可支持最高 70qkHz 载波频率,但可选用更优晶体管以获得更高支持频率。
原理图设计指南
漏电
为避免漏电问题,我们建议使用以下红外电路。
红外电路图
开发流程
发送
设置引脚
详细参考 功能复用 部分,以确保正确的引脚连接
配置载波频率和占空比
根据通信协议的需求等,进行正确配置
配置 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 。