红外遥控解码设计与验证VHDL

本文介绍了一种红外遥控解码的设计与验证方法,基于VHDL编程,涉及NEC协议的解析。实验中使用Quartus ii 18.0和AC620开发板,通过检测特定时序来识别0/1数据,实现红外信号的解码。文中还详细描述了VHDL代码实现的状态机逻辑,并提供了仿真和板级验证的结果。
摘要由CSDN通过智能技术生成

实验器材

Quartus ii 18.0
小梅哥AC620开发板
红外遥控器

实验背景

红外线遥控器利用波长为0.76μm ~ 1.5 μm 的近红外线来传送信号。红外线的特点是不干扰其他电器设备工作,也不会影响周边环境。比如不同的电视遥控器只能控制对应的电视,这是因为不同的电视遥控器对应一个不同的地址。不同的家用电器有不同的编码方式,统称为红外遥控器编码传输协议,使用最多的为NEC协议。

实验原理

红外发射部分电路包括矩阵键盘,红外发光二极管,编码以及调制电路,这些都已经集成在红外遥控器上(遥控器示意图如下图所示)。接收部分包括光敏二极管,解调以及解码电路。在本实验中,我们仅需要对其输出的信号进行解码操作。
遥控

NEC协议

HT6221为Holtek公司生产的一款基于NEC红外通信协议的遥控编码芯片,采用Pulse Position Modulation(PPM)进行编码。HT6221芯片的红外遥控发送一次数据的数据帧定义如下图所示:一帧数据:帧头,16位地址码,8位数据码,8位数据反码以及1bit结束位(可忽略)组成。
数据帧

数据发送:

引导码由9ms高电平和4.5ms的低电平构成,代码一个数据帧的帧头;
地址码由16位地址构成,低8位在前,高8位在后(对于一个红外遥控器,地址为固定值)。所以NEC协议理论上能最多支持65536个不同的用户。
数据码由数据原码和数据反码构成(可以通过比较这两个8位数据检测数据接收是否正确)。所以理论上支持256种指令。

数据发送0/1:
数据发送1: 560μs高电平+1.69ms低电平
数据发送0: 560μs高电平+560μs低电平
0/1

数据接收:

对于数据接收端,接收到信号之后再输出的波形和输入端发送的波形反相。因此对于FPGA中接收端输出的波形为: 9ms低+4.5ms高 + 0.56ms 低+ 1.69ms高(1)/ 0.56ms高(0)。本模块就是检测此波形然后输出数据(由于红外传感器的品质不同,因此本模块的检测时间为一个区间范围

接收01
当按键长按时输出的波形如下图所示,本模块只进行短按时数据波形设计。
long

VHDL代码实现

由于红外遥控器按键的时序和接收端不同,因此需要先对接收到的红外信号进行时钟同步(采用两级FF):

process(clk,nrst)
begin
	if(nrst = '0')then
		IR_temp1	<= '0';
		IR_temp2	<= '0';
	elsif( rising_edge(clk)) then
		IR_temp1 <= iIR;
		IR_temp2	<= IR_temp1;
	end if;
end process;

对同步的输入信号进行边沿检测(和上面代码一致):

process(clk,nrst)
begin
	if(nrst = '0')then
		edge_temp1	<= '0';
		edge_temp2	<= '0';
	elsif( rising_edge(clk)) then
		edge_temp1 <= IR_temp2;
		edge_temp2 <= edge_temp1;
	end if;
end process;

pose_edge <= (not edge_temp2) and edge_temp1;
fall_edge <= edge_temp2 and (not edge_temp1);

时钟计数器(用于9ms, 4.5ms, 1.69ms, 0.56ms的计数)

process(clk,nrst)
begin
	if(nrst = '0')then
		cnt <= 0;
	elsif(rising_edge(clk))then
		if(cnt_en = '1') then
			cnt <= cnt + 1;
		else
			cnt <= 0;
		end if;
	end if;
end process;

计数时间超时(当计数器的时间已经超过10ms说明出现错误)timeout标志信号

process(clk,nrst)
begin
	if(nrst = '0')then
		timeout <= '0';
	elsif(rising_edge(clk))then
		if(cnt > 500000) then			-- cnt >10 ms超时信号置1
			ti
  • 6
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值