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