1.红外遥控工作原理
- 协议类型:红外遥控有多种通信协议,包括NEC,RC5,RC6等,(我的小车配套遥控器采用NEC协议,所以这边重点解析NEC)。
- NEC数据帧结构:
- 组成:引导码(13.5ms)+用户码(8bit)+用户反码(8bit)+数据码(8bit)+数据反码(8bit)+停止位(1bit)
- 总时长:引导码(13.5ms)+ 用户码 && 用户反码(18ms--36ms)+数据码 && 数据反码(27ms) = 58.5--76.5ms
- 反码作用:通过取反操作增强数据传输的正确性
- 总位数:32位(32位数据+1停止位+1引导码)
2.NEC协议编码约定
- 引导码特征:
- 首次按键:9ms低电平 + 4.5ms高电平
- 连发情况:9ms低电平 + 2.25ms高电平(重复)
- 数据表示:
- 逻辑0:0.56ms低电平+0.56ms高电平
- 逻辑1:0.56ms低电平+1.12ms高电平
- 连发机制:按键持续按下时,发送重复码(无数据跟随),直到松开重新触发完整信号
- 重复码:
- 触发条件:按键长按不松开时产生
- 时序特征:110ms间隔的重复码序列
- 数据特点:仅包含引导码变体(9ms+2.25ms),不携带用户码和数据码
3.NEC协议解码
- 硬件路径;遥控器—>红外接收头—>MCU中断引脚
- 解码原理:通过测量高低电平持续时间识别码类型
-
- 关键参数: 精确测量9ms/4.5ms/2.25ms/0.56ms/1.12ms等特征时长
- 判断依据: 将实际测量时长与协议标准值比较
为什么不用定时器的输入捕获?
答:因为在硬件设计上,红外遥控和舵机控制的定时器功能需求冲突。具体分析:舵机控制需要定时器3输出固定20ms周期的PWM波,同时我们的红外遥控也需要定时器3进行输入捕获,但信号周期不固定。所以我们的解决方案是,改用外部中断模式(PB1引脚),以此来避免定时器资源冲突。
4.程序设计思路
- 实现步骤:
- 配置PB1为双边沿触发外部中断
- 在中断回调中记录定时器计数值
- 建立环形缓冲区存储连续计数值
- 计算相邻计数值差转换为时间差
- 关键技术:
- 双边沿检测: 同时捕获上升沿和下降沿时刻
- 缓冲区设计: 应对连续多次中断触发
- 时间计算: 通过定时器计数差换算实际时间
- 独立定时器: 使用定时器10专用于计数,避免资源竞争
具体代码还是去具体实现吧,加油!