版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、重庆大学本科生课外实践技术报告项目名称:基于FPGA的学习型红外遥控器设计学院:专业:指导老师:实验日期:引言随着人们生活水平的提高,家用电器的种类增多,红外遥控器的种类也随之增加,不同种类的遥控器之间由于采用的编码格式不同,使得不同产品的遥控器不能相互兼容,用户在使用的过程中容易产生混乱,给人们的生活带来诸多不便。针对这一现况,万能遥控器便应需出现了,目前主要分为两种类型,编码型和学习型。编码型万能遥控器需要各大电器制造商生产的遥控器的控制码编码格式,使用时选定相应机型,遥控器便可提取出其编码,再和38k的载波进行ASK调制便可驱动红外线发射管进行控制信号发射了,但其显著的缺点是使用时需要查
2、询冗长的机器型号手册。相对之下另外一种学习型的万能遥控器机理就比较简单了,其对不同遥控器发出的信号(解调后的信号)进行记录,待控制时调用出存储的信号对载波进行调制,便可驱动红外线发射管发射红外线对设备进行控制了。通过对比这两种万能遥控器的设计方案可知,相对编码型遥控器,自主学习型遥控器原理简单,实现较为方便。基于此本文尝试着设计了一款基于FPGA的红外线学习型遥控器,主要由FPGA控制模块、红外线接收模块、红外线发射模块和存储模块组成。在本文中详细的给出了设计的原理、技术方案、软硬件的实现过程等,并在附录中给出了各单元电路图、主程序和仿真电路图。1 设计方案与指标1.1 设计原理简介基于FPG
3、A制作一个红外遥控器,并可通过程序控制记忆按键功能,达到遥控器的自主学习功能,其实现原理框图如下:图1系统框图由原理框图可知,本设计主要由5个部分组成,FPGA控制器、红外线发射器、红外线接收器、学习遥控指示灯和操作键组成。遥控器自主学习工作进程如下:一、红外线接收器接收红外信号;二、红外接收模块对信号进行放大、检波、整形,解调出基带信号;三、FPGA控制器将解调出的信号的高、低电平的时间宽度进行储存;四、当要发射红外信号时,从储存区中还原出相应的红外遥控编码,以其对38kHz的载波信号进行调制;五、调制出的控制信号驱动红外发光二极管发射红外信号,从而实现对设备的控制。红外编码解码原理:遥控发
4、射器专用芯片很多,根据编码格式可以分成两大类,这里我们采用的是NEC类型。当发射器按键按下后,即有遥控码发出,所按的键不同遥控编码也不同。这种遥控码具有以下特征: 采用脉宽调制的串行码,以脉宽为0.565ms、间隔0.56ms、周期为1.125ms的组合表示二进制的“0”;以脉宽为0.565ms、间隔1.685ms、周期为2.25ms的组合表示二进制的“1”,其波形如图2所示。上述“0”和“1”组成的32位二进制码经38kHz的载频进行二次调制以提高发射效率,达到降低电源功耗的目的。然后再通过红外发射二极管产生红外线向空间发射,如图3所示。遥控编码
5、是连续的32位二进制码组,其中前16位为用户识别码,能区别不同的电器设备,防止不同机种遥控码互相干扰。该芯片的用户识别码固定为十六进制01H;后16位为8位操作码(功能码)及其反码。遥控器在按键按下后,周期性地发出同一种32位二进制码,周期约为108ms。一组码本身的持续时间随它包含的二进制“0”和“1”的个数不同而不同,大约在4563ms之间,图4为发射波形图。 当一个键按下超过36ms,振荡器使芯片激活,将发射一组108ms的编码脉冲,这108ms发射代码由一个起始码(9ms),一个结果码(4.5ms),低8位地址码(9ms18ms),高8位地
6、址码(9ms18ms),8位数据码(9ms18ms)和这8位数据的反码(9ms18ms)组成。如果键按下超过108ms仍未松开,接下来发射的代码(连发代码)将仅由起始码(9ms)和结束码(2.5ms)组成。 解码的关键是如何识别“0”和“1”,从位的定义我们可以发现“0”、“1”均以0.56ms的低电平开始,不同的是高电平的宽度不同,“0”为0.56ms,“1”为1.68ms,所以必须根据高电平的宽度区别“0”和“1”。如果从0.56ms低电平过后,开始延时,0.56ms以后,若读到的电平为低,说明该位为“0”,反之则为“1”,为了可靠起见,延时必须比0.56ms长些,但又不能超过1
7、.12ms,否则如果该位为“0”,读到的已是下一位的高电平,因此取(1.12ms+0.56ms)/2=0.84ms最为可靠,一般取0.84ms左右均可。 根据码的格式,应该等待9ms的起始码和4.5ms的结果码完成后才能读码。1.2 技术指标实现对能够通过学习来控制大多数需要红外线控制的设备(如:电视、空调等),并且设备能正确执行控制指令。2 遥控器硬件组成2.1 器件的选择在本设计中,控制模块利用的是手中已有的资源,Altera公司的芯片EP3C10E144C7,红外线发射模块选用Arduino电子积木红外发射模块IR Transmitter,红外线接收模块选用TSOP4838。并且购进了一
8、个组合的红外接收发射模块发射模块,该模块基于940红外发射管,高电平驱动,所需拉电流小,控制简易,应用广泛,接收模块基于HL-A838红外一体化接收头,可接收38KHz的红外信号,并解调成逻辑电平,即收到信号即输出低电平,否则输出高电平。低功耗、宽角度及长距离接收。2.2 PCB板的绘制和投板3 程序设计系统的程序设计部分主要有以下几个具体模块电路:按键去抖动、分频模块、红外发射、红外接收、存储模块(各个模块VHDL程序见附录)其系统顶层电路原理图如下所示:图2 系统顶层设计原理图4设计成果展示硬件完整电路图片以及操作视频(视频在文件夹里)5总结通过本次设计一个实用的万能遥控器,我们对课题设计
9、的完整流程有了深入的认识,包括项目的选择、资料的收集、元件购买、PCB板的绘制投板、模块程序设计以及报账流程等,最主要的是因为我们的设计程序在网上的相关资料很少,所以我们是自己根据要实现的功能尝试着自己写程序,自己调试,受益匪浅,不仅很好地巩固和理解了课堂理论知识,更为以后做项目参加比赛等积累了很好的经验。同时,4人小组的合作也很成功,经过这次设计懂得了团队协作和正确分工的重要性!6元件清单名称数量单价/元总计/元贴片电阻1500.1522.5贴片电容1000.2424S9013三极管201.8537IR5308C-C-45201.8537HL-A838203.774排针1*3301.8555
10、.5250附录去抖动程序LIBRARY ieee;USE ieee.std_logic_1164.all;USE ieee.std_logic_unsigned.all;ENTITY hw_qd ISPORT(clk : IN STD_LOGIC kin : IN STD_LOGIC kout
11、0; : OUT STD_LOGIC);END ENTITY;ARCHITECTURE behav OF hw_qd IS SIGNAL kh,kl:std_logic_vector(3 downto 0);BEGINPROCESS(kin, clk)BEGIN if rising_edge(clk) then if
12、160;(kin='0') then kl<=kl+1; else kl<="0000"end if; end if;END PROCESS PROCESS(kin, clk)BEGIN if rising_edge(clk) then if (kin='1
13、39;) then kh<=kh+1; else kh<="0000"end if; end if;END PROCESS PROCESS(clk,kh,kl)BEGIN if rising_edge(clk) then if (kh>"1100") then
14、kout<='1' elsif (kl>"0111") then kout<='0' end if; end if;END PROCESS END behav; 红外接收程序library ieee;use ieee.std_logic_1164.all;entity hw_InfraredPo
15、rt isport(CLK:in std_logic;-50MHz RST:in std_logic;IRIN:in std_logic; RD:in std_logic; CS:in std_logic; led:out std_logic; DATA:out std_logic_vector(31 downto 0);end
16、 entity hw_InfraredPort;architecture one of hw_InfraredPort istype state is(s0,s1,s2,s3,s4);signal sta:state;signal vData:std_logic_vector(31 downto 0);signal clk_1m:std_logic; -1MHzbeginprocess(CLK)variable clk_counter
17、:integer range 0 to 25;beginif(CLK'event and CLK='1')thenclk_counter:=clk_counter+1;if(clk_counter=25)thenclk_counter:=0;clk_1m<=not clk_1m;end if;end if; end process;process(RST,CLK)variable step:integer range 0 to
18、 32;variable counter:integer range 0 to 10000;beginif(RST='0')thensta<=s0;vData<=X"00000000"led<='0'elsif(clk_1m'event and clk_1m='1')thencase sta iswhen s0=>led<='0'counter:=0; if(IRI
19、N='0')thensta<=s1;end if;when s1=>led<='0'if(IRIN='0')thencounter:=counter+1;elsif(counter>3200)then -time(9ms) > 3.2mssta<=s2;counter:=0;elsesta<=s0;end if;when s2=>led<='0'if(IRIN='1')thenco
20、unter:=counter+1;if(counter>8000)then -time(4.5ms) > 8ms,back to beginsta<=s0;end if;elsif(counter<8000)then -time(4.5ms) < 8ms,continuesta<=s3;counter:=0;step:=0;elsesta<=s0;end if;when s3=>led<
21、;='1'if(IRIN='0')thencounter:=counter+1;elsif(counter<1600)then -time(0.56ms)<1.6ms,continuesta<=s4;counter:=0;elsesta<=s0;end if;when s4=>led<='1'if(IRIN='1')thencounter:=counter+1;if(counter>3200)then -time(1.12ms
22、)>3.2ms,back to beginsta<=s0;DATA<=vData;end if;elseif(counter>800)then -time>0.8ms,get the data 1vData(step)<='1'elsevData(step)<='0' -time<0.8ms,get the data 0end if;step:=step+1;sta<=s3;co
23、unter:=0;end if;end case;end if;end process;end architecture one;存储写入程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity hw_address isport(clk:in std_logic; data:in std_logic_
24、vector(31 downto 0); anjian1:in std_logic; anjian2:in std_logic; anjian3:in std_logic; od:out std_logic_vector(15 downto 0);
25、160; ad:out std_logic_vector(4 downto 0);end entity;architecture behav of hw_address istype state is(s0,s1,s2,s3);signal sta:state;signal addr:std_logic_vector(4 downto 0);beginad<=addr;process(anjian1,anjian2,anjian3,clk)
26、begin if(anjian1='1'and anjian2='1'and anjian3='1')thensta<=s0;od<=x"0000"addr<="00000" elsif(clk'event and clk ='1')then case sta is
27、0; when s0=>if(anjian1='0')then od<=x"0000" addr<="00001"
28、 sta<=s1; elsif(anjian2='0')then od<=x"0000&
29、quot; addr<="00011" sta<=s1; elsif(
30、anjian3='0')then od<=x"0000" addr<="00101"
31、0; sta<=s1; end if; when s1=>addr<=addr; od<=data(15 do
32、wnto 0); sta<=s2; when s2=>addr<=addr+'1' od<=data(31 downto 16);
33、 sta<=s3; when s3=>sta<=s3; end case;end if;end process;存储读出程序library ieee;use ieee.std_logic_1164.all;use ieee.std
34、_logic_unsigned.all;entity hw_adout isport(clk:in std_logic; inin:in std_logic_vector(15 downto 0); anjian1:in std_logic; anjian2:in std_logic;
35、anjian3:in std_logic; output:out std_logic_vector(31 downto 0);end entity;architecture behav of hw_adout istype state is(s0,s1,s2,s3);signal sta:state;signal in1:std_logic_vector(15 downto 0);sign
36、al out1:std_logic_vector(31 downto 0);beginin1<=inin;output<=out1;process(anjian1,clk)begin if(anjian1='1'and anjian2='1'and anjian3='1')then sta<=s0; out1<=x"00000000&quo
37、t; elsif(clk'event and clk ='1')then case sta is when s0=> out1(15 downto 0
38、)<=in1; sta<=s1; when s1=>if(out1=in1)then sta<=s1; &
39、#160; else out1(15 downto 0)<=in1; sta<=s2;
40、0; end if; when s2=>if(out1=in1)then sta<=s2;
41、160;else out1(31 downto 16)<=in1; sta<=s3;
42、0; end if; when s3=>sta<=s3; end case;end if;end process;end behav;红外发射程序library ieee;use ieee.std_logic_1164.all;entity hw_OUTPUT isport(CLK:in std_logic;-50MHz
43、60; kin:in std_logic; DATA:in std_logic_vector(31 downto 0); IROUT:out std_logic);end entity hw_OUTPUT architecture one of hw_OUTPUT istype state is(s0,s1,s2,s3,s4);s
44、ignal sta:state;signal clk_1m:std_logic; -1MHzsignal clk_38k:std_logic; -38kHzbeginprocess(CLK)variable clk_counter:integer range 0 to 25;beginif(CLK'event and CLK='1')thenclk_counter:=clk_counter+1;if(clk_counter=25
45、)thenclk_counter:=0;clk_1m<=not clk_1m;end if;end if; end process;process(CLK)variable clk_counter:integer range 0 to 658;beginif(CLK'event and CLK='1')thenclk_counter:=clk_counter+1;if(clk_counter=658)thenclk_counter:=0;clk_38k&l
46、t;=not clk_38k;end if;end if; end process;process(kin,clk_1m)variable step:integer range 0 to 32;variable counter:integer range 0 to 100000;beginif(kin='1')thenIROUT<='0'step:=0;sta<=s1;counter:=0;elsif(clk_1
47、m'event and clk_1m='1')thencase sta is when s0=>IROUT<='0' if(counter<100000)then counter:=counter+1; else sta<=s1;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 饭店结账合同范本模板
- 饭店装修购销合同范本
- 饰品配套出货合同范本
- 鱼塘转让合同补充协议
- 鲜奶配送用工合同范本
- 鸡场养殖转让合同范本
- 骨科伤残骨科伤残评定方案
- 签了房产协议但没合同
- 粮食验货服务合同范本
- 纸箱加工订购合同范本
- 公司适用法律法规标准清单2025年08月更新
- 年产六万吨氯苯精制工段工艺流程设计
- 2023年乌鲁木齐市新市区自然资源局事业单位招聘考试笔试题库及答案解析
- GB/T 31432-2015独山玉命名与分类
- FZ/T 81013-2016宠物狗服装
- 《曹冲称象》说课课件
- 汉语标准失语症检查CRRCAE说明
- 临床执业助理医师考试真题及答案
- 导线展放出口张力、牵引力计算表格
- 建设项目总投资与他费用项目组成规定
- 《酒水知识培训》PPT课件.ppt
评论
0/150
提交评论