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 个码字已经读完或者读取过程中发生了错误,则返回空闲态 。(地址+地址反码+数据+数据反码)

相关推荐
handsome2133 小时前
WSL中使用GPU加速AMBER MD--测试
笔记·学习
WZF-Sang4 小时前
Linux权限理解【Shell的理解】【linux权限的概念、管理、切换】【粘滞位理解】
linux·运维·服务器·开发语言·学习
狂飙的张兴发5 小时前
认知小文2《成功之路:习惯、学习与实践》
学习·考研·职场和发展·跳槽·学习方法·改行学it·高考
爱编程的小新☆5 小时前
C语言内存函数
c语言·开发语言·学习
夜清寒风6 小时前
opencv学习:图像掩码处理和直方图分析及完整代码
人工智能·opencv·学习·算法·机器学习·计算机视觉
吃着火锅x唱着歌6 小时前
Go语言设计与实现 学习笔记 第七章 内存管理(1)
笔记·学习·golang
~在杰难逃~7 小时前
关于订单信息的Excel数据分析报告
笔记·数据分析·excel·数据分析报告
我命由我123457 小时前
2.使用 VSCode 过程中的英语积累 - Edit 菜单(每一次重点积累 5 个单词)
前端·javascript·ide·vscode·学习·编辑器·学习方法
Pluses7 小时前
Datawhale X 李宏毅苹果书 AI夏令营 《深度学习详解》第十九章 ChatGPT
人工智能·笔记·深度学习·学习
南山937 小时前
如何快速学习拼音打字?
学习·大学生·打字侠