Xilinx系FPGA学习笔记(八)FPGA与红外遥控

系列文章目录


文章目录


红外通信

简单介绍

利用红外线来传送,不干扰其他电器设备工作,也不会影响周边环境,若对发射信号进行编码,可实现多路红外遥控功能。

红外遥控系统分为发射和接收两部分。发射部分的发射元件为红外发光二极管,它发出的是红外线而不是可见光。接收电路的红外接收管是一种光敏二极管,使用时要给红外接收二极管加反向偏压,它才能正常工作而获得高的灵敏度。

目前的产品,大都采用成品的一体化接收头。红外线一体化接收头是集红外接收、放大、滤波和比较器输出等的模块,性能稳定、可靠。

HT6221型红外模块,三脚的红外接收器,内部集成了芯片,会把数据解析出来,把脉冲解析为高低电平

红外接收头的电路:

红外遥控有很多协议,最广泛的是NEC协议

红外协议分析

HT6221 为 Holtek 公司生产的一款基于 NEC 红外通信协议的遥控编码芯片,其采用PPM(Pulse Position Modulation)进行编码。

一帧数据由帧头、地址码、 数据码、 数据反码以及 1bit 结束位(可忽略) 组成。

引导码(Leader Code):引导码是NEC协议信号的开头部分,主要用于标识一个新的数据帧的开始,并帮助接收设备同步信号。9ms的高电平(载波信号) + 4.5ms的低电平(无载波信号)

地址码(Address Code):地址码用于标识被控制的设备。例如,不同的家电(如电视、空调)会有不同的地址码,接收设备通过识别该码来确认这是发送给它的命令。8位

地址反码(Address Inverted Code):地址反码是地址码的每一位取反后的结果,用来校验地址码的正确性。

8位,与地址码一一对应。判断是否出现了传输错误。如果两者不匹配,接收器会忽略该信号。

控制码(Data Code 或 Control Code):控制码指定了要执行的具体命令,比如开/关、音量增加、频道切换等操作。8位,最多可表示256种命令。每个控制码对应一个特定的操作命令,如音量加、音量减等。

控制反码(Data Inverted Code 或 Control Inverted Code):控制反码是控制码的每一位取反后的结果,用于校验控制码的正确性。。如果两者不匹配,接收器会忽略该信号。

发送顺序是按照从低位到高位,反码是为了增加传输的可靠性。

这是一帧红外通信,红外二极管发送的都是38KHz的脉冲信号

地址是8位的,地址和数据都是按照LSB在前,MSB在后,理论上该协议支持高达 256 个用户指令。

该协议采用脉冲之间不同时长的时间间隔来区分"1"和"0"

按键一直按着,会发送重复码,在红外遥控通信中,连发码(Repeat Code)是用于处理长按按键时的特殊信号。通常情况下,当用户按下遥控器上的某个按键,遥控器会发送一个完整的指令数据帧。然而,如果用户长时间按住按键,比如长按"音量加"按钮以连续增加音量,此时重复发送完整的数据帧不仅会浪费电量,还可能造成信号冲突。因此,连发码被设计用于这种场景,以更高效的方式传达用户的意图。

连发码的结构:

引导码

高电平脉冲:560μs,表示这个信号是连发码。

低电平结束:低电平持续时间会保持到下一个连发码或者新的按键被释放。

FPGA实现红外通信

实际的接收器接收到信号后,输出的是发送波形的反码,并且会将脉冲转换为高低电平的方式:

所以在FPGA的设计中,主要是识别起始码中的 9ms 的低电平、4.5ms 的高电平,高低电平中的560us 的低电平、1690us 的高电平和 560us 的高电平,可以用时钟累计的方法来识别各个时间。

对外部信号进行打两拍寄存,之后判断上升沿和下降沿,之后就需要设计状态机

IDLE:空闲状态,IR 接收信号出现下降沿的时候,跳转到LEADER_T9 状态去识别引导码。

LEADER_T9:识别 9ms 的低电平引导码,识别成功则跳转到 LEADER_T4_5 状态去识别 4.5ms 的高电平引导码,否则返回空闲态。

LEADER_T4_5:识别 4.5ms 的高电平引导码,识别成功则进入读码状态 DATE_GET,否则返回空闲态。

DATE_GET:读码状态,若 32 个码字已经读完或者读取过程中发生了错误,则返回空闲态 。(地址+地址反码+数据+数据反码)

相关推荐
箓维2 分钟前
线程的优缺点,与进程的关联和差异
java·服务器·笔记
江屿风12 分钟前
【Linux系统】【从【收尾】缓冲区到【新开】磁盘块:一节课打通文件系统底层原理】流食般投喂
linux·运维·服务器·人工智能·笔记
李游Leo18 分钟前
HarmonyOS 7 + ArkUI + Adaptive Layout 学习笔记:折叠屏多形态布局适配与窗口状态响应机制【鸿蒙心迹】
笔记·学习·harmonyos
路漫漫其修远兮sjw24 分钟前
Linux 运维知识点笔记(中级)
linux·运维·笔记
kyrie_sakura36 分钟前
大模型学习6 -- 深度学习 1 概述和PyTorch
pytorch·深度学习·学习
宵时待雨1 小时前
linux笔记归纳24:多路转接select
linux·服务器·笔记·高并发
一只旭宝1 小时前
【C++复习】四种类型转换 + 常见设计模式 + Redis/MySQL(后端面试复习完整版)
c++·redis·笔记·mysql·设计模式
91刘仁德1 小时前
RAG实战-Embedding模型(BGE)
笔记·embedding·rag
传奇开心果编程1 小时前
【Flutter入门练中学】第3课:滚动与列表
android·学习·flutter·ui·ios
李游Leo1 小时前
HarmonyOS 7 + ArkTS + Image Kit 学习笔记:图像超分处理链路与 PixelMap 数据流实践【鸿蒙心迹】
笔记·学习·harmonyos