如何设计红外线遥控系统?.doc

上传人:白大夫 文档编号:3429398 上传时间:2019-08-24 格式:DOC 页数:7 大小:30.50KB
返回 下载 相关 举报
如何设计红外线遥控系统?.doc_第1页
第1页 / 共7页
亲,该文档总共7页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《如何设计红外线遥控系统?.doc》由会员分享,可在线阅读,更多相关《如何设计红外线遥控系统?.doc(7页珍藏版)》请在三一文库上搜索。

1、如何设计红外线遥控系统?设计背景:红外线(Infrared)是波长介乎微波与可见光之间的电磁波,波长在760纳米(nm)至1毫米(mm)之间,比红光长的非可见光。红外线遥控是目前使用最广泛的一种通信和遥控手段。由于红外线遥控装置具有体积小、功耗低、功能强、成本低等特点,因而,继彩电、录像机之后,在录音机、音响设备、空凋机以及玩具等其它小型电器装置上也纷纷采用红外线遥控。现在工业设备中,也已经广泛在使用。设计原理:红外遥控系统主要由红外的发送装置和接收装置组成,发送装置可由按键,编码模块,发射电路等组成,接收装置由红外接收电路,遥控,解码模块等组成,此次设计我们用到的硬件平台式是Altera的D

2、E1_SOC,晶振为50MHZ。在红外的编码中,我们对1 和 0 的编码是通过38KHZ的脉冲来定义的,在红外的的编码中每个脉冲的为256.25us长的38KHZ载波频率(26.3us),对0,1的脉冲的定义的时间如下图红外的数据格式为包括引导码,用户码,数据码和数据纠错码,停止位编码总为32位。数据反码是数据码反相后的编码,可用于对数据的纠错。此外第二段的用户码可以在遥控应用电路中设置为第一段用户码的反码。数据格式如下图:一帧数据在发送时先发送9MS的高电平,然后发送4.5MS的低电平的起始位,然后发送用户码,数据码,数据反码。然后再发送一位的停止位。不发送数据时数据线一直为低。发送的时序图

3、如下:接受的时,接收到的时序和发送的时序恰恰相反,如发送时先发送9ms的高,4.5ms的低,接收为接收9ms的低电平,4.5ms低电平。接收的控制器我们用的时红外遥控装置,按键发送的数据如下图所示设计架构图: 设计的总框架如下图:在我们的设计中分频模块提供所需要的38KHZ的时钟,当按键按下时发送我们的发送模块发送一个给定的数值,我的设计中用户码为8b0第二段用户码为8hff,然后发送给定的数据码,和数据反码。上电后我们的设计会发一次我们给定的数据码,然后在接受模块会接受到其发送的数据并在数码管上显示出来,之后我们可以用我们我的遥控键盘来发送数据,接收模块接收显示出来,通过验证我们接收和发送的

4、正确。设计代码:顶层代码:00moduleinfrared(clk,rst_n,key,tx,seg1,seg2,rx);0102inputclk,rst_n;03inputkey;04outputtx;05inputrx;06wire7:0show_data;07output7:0seg1,seg2;08wire31:0data_n;09wireclk_38khz;101112 clk_frep clk_frep_dut( /分频模块13 .clk(clk),14 .rst_n(rst_n),15 .clk_38khz(clk_38khz)16);171819 tttxxx tx_dut(

5、/发送模块20 .clk(clk_38khz),21 .rst_n(rst_n),22 .data_n(data_n),23 .tx(tx),24 .key(key)25);2627 seg seg01( /数码管模块28 .clk(clk),29 .rst_n(rst_n),30 .seg7(seg1),31 .data_in(show_data3:0)32);3334 seg seg02(35 .clk(clk),36 .rst_n(rst_n),37 .seg7(seg2),38 .data_in(show_data7:4)39);4041 rx_led led_dut( /接收模块42

6、 .clk(clk_38khz),43 .rst_n(rst_n),44 .rx(rx),45 .show_data(show_data)46);474849endmodule发送模块:000moduletttxxx(clk,rst_n,data_n,tx,key);001002inputclk,rst_n;003inputkey;004input31:0data_n;005outputregtx;006007parameterT9ms=342;/9000/26.3008parameterT4500us=171; /4.5ms 4500/26.3009parameterT0=21; /(112

7、5-562.25)/26.3010parameterT1=63; /(2250-562.25)/26.3011parameterT562us=21; / 562.25/26.3;012parameterT=2666;/ 一帧数据013regT9_flag;014regT45_flag;015regT0_flag;016regT1_flag;017regT9_down;018regT45_down;019regT0_down;020regT1_down;021reg9:0cnt9;022reg9:0cnt45;023reg9:0cnt0;024reg9:0cnt1;025reg9:0cnt562

8、;026regt0_clk,t1_clk;027reg8:0count;028reg2:0state;029regdata;030reg31:0d_data;031032always(posedgeclk)033 if(!rst_n)034 begin035 counttemp;9reg9:0num;10regflag;11reg31:0data;12reg1:0state_s;13regflag_x;14reg12:0count;1516parameterT=2566;/ 一帧数据的时间1718 /这个模块是中因为接受的32位编码数据中,不管是位0还是位1,接受的低电平都是相同的,19 /我

9、们可以通过来判断高电平的时间来确定为位1 还是位0,位1 1.68MS,位0 562.25us20always(posedgeclk)21 if(!rst_n)22 begin23 num59 /通过移位寄存器来获取32位数据60 begin61 data1107 case(state)108 0:if(rx)109 begin110 cnt129 begin130 temp136 begin137 temp155 begin156 show_data0测试模块:0 timescale1ns/1ps12moduleinfrared_tb();34regclk,rst_n;5regkey;6wi

10、retx;7wire7:0show_data;89 /因为我们代码中只发送一次数据,所以可以把key一直拉低1011initialbegin12 clk=1;13 rst_n=0;14 key=1;1516 #100.1rst_n=1;1718 #200key=0;1920end2122always#10clk=clk;2324 infrared dut(25 .clk(clk),26 .rst_n(rst_n),27 .key(key),28 .tx(tx),29 .rx(rx),30 .seg1(seg1),31 .seg2(seg2)32);3334endmodule仿真图:仿真中我们可以把数码管模块的计数器的值改小一点,便于仿真如图中所示的我们发的是32h00ffa25d,那么数据为是8b1010_0010,那么先发送时就时就按下面的序列开始0100_0101接收到的为45,所以工程正确。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1