SOPC、EDA综合课程设计报告-车载DVD位控系统的设计与分析.doc_第1页
SOPC、EDA综合课程设计报告-车载DVD位控系统的设计与分析.doc_第2页
SOPC、EDA综合课程设计报告-车载DVD位控系统的设计与分析.doc_第3页
SOPC、EDA综合课程设计报告-车载DVD位控系统的设计与分析.doc_第4页
SOPC、EDA综合课程设计报告-车载DVD位控系统的设计与分析.doc_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

22江西理工大学应用科学学院sopc/eda综合课程设计报告设计题目:车载dvd位控系统的设计设 计 者: 学 号: 08060108237班 级: 电气082指导老师: 完成时间: 2011年1月14日设计报告综合测试总评格式(10)内容(40)图表(10)答辩(20)平时(20) 前言eda技术作为现代电子设计最新技术的结晶,其广阔的应用前景和深远的影响已毋庸置疑,它在信息工程类专业中的基础地位和核心作用也逐渐被人们所认识。许多高等学校开设了相应的课程,并为学生提供了课程设计、综合实践、电子设计竞赛、毕业设计、科学研究和产品开发等eda技术的综合应用实践环节。相关的工程技术人员也特别重视学习eda技术,并渴望提高其工程应用能力。 对于迅猛发展的eda技术的综合应用,从eda技术的综合应用系统的深度来分,可分为3个层次: 功能电路模块的设计; 算法实现电路模块的设计; 片上系统/嵌入式系统/现代dsp系统的设计。 从eda技术的综合应用系统的最终主要硬件构成来分,已出现6种形式: cpld/fpga系统; cpld/fpga+mcu系统; cpld/fpga+专用dsp处理器系统; 基于fpga实现的现代dsp系统; 基于fpga实现的soc片上系统; 基于fpga实现的嵌入式系统。 从eda技术的综合应用系统的完善层次来分,可分为3个层次:eda综合系统主体电路的设计、仿真及硬件验证;eda综合系统主体电路的设计、仿真、硬件验证+系统外围电路pcb的设计与制作;eda综合系统主体电路的设计、仿真、硬件验证+系统整体电路pcb的设计与制作及系统的组装、调试。 对于eda技术的学习,我认为不能只站在一门课程的角度上去学习,而应站在如何真正掌握这一技术的角度去学习。对于具备一定eda技术基础的人来说,如何提高自己的实际应用能力,将eda技术应用到各自的专业领域,解决实际问题,这才是他们所关心和急于解决的。提高自己的eda技术的综合应用能力,不可能一蹴而就,而应不断实践,不断总结。提高eda技术综合应用能力的比较快速而有效的办法就是按照阅读借鉴消化吸收改进创新的步骤去不断学习和实践。所谓阅读借鉴,就是通过阅读许多实际设计实例来借鉴别人的设计思想;所谓消化吸收,就是通过反复阅读许多实际设计实例,在真正看懂别人的设计思想的基础上自己进行模仿实践,领会其设计思想的实质;所谓改进创新,就是在模仿实践的基础上,根据自己的领会提出改进的方案或独立地提出新的设计方案,不断地实践与完善,直到达到理想的设计要求为止。 作为三步学习实践法的起点,就是通过阅读许多实际设计实例来借鉴别人的设计思想。而作为现代电子设计最新技术的综合体现的eda技术,由于在我国进行教育和研究只有几年的历史,因此有关eda技术综合应用的书籍和资料太少,即使有也是零星的、分散的,一些与实践有关的问题,往往是点到为止,可操作性比较差。因此,eda技术的深化教育和eda技术的广泛应用,亟需eda技术的综合应用方面的图书。 本次设计报告,内容非常的有限,仅供我们在以后的学习中参考!目 录一、系统设计要求: 3二、系统设计方案: 5三、主要vhdl源程序: 10四、系统仿真: 20五、设计技巧分析:22 六、设计心得22 七、参考文献22一、 系统设计要求 根据某车载移动dvd产品机械操作分析结果的要求,具体设计如下:1.open_close操作:当系统测试到有一个open_close高电平信号时,系统就驱动马达1(motor11端),显示屏从机盒内伸出,距离为142 mm,时间为3 s。水平移动到指定位置后,关断马达信号motor11。2.自测向上翻转操作(此操作只在正常开机或关机时使用):开机时显示屏从机内伸出,到达指定位置,从传感器sensor1返回一信号,则开通信号motor21,马达运行时间为3 s,向上翻转110,从传感器sensor2返回的信号表明到达指定位置,切断motor21信号。开机过程完成。3.关机操作:当open_close为低电平时,系统通过相应的处理模块检测到显示屏所在位置,然后做出相应对策。向下翻转至水平位置后,水平缩进机内。4.角度调整与水平位置调整操作(tilt调节操作):如果tilt信号为高电平,系统先测试其为高电平的时间宽度。若为2 s时,则调节水平位置,共三个位置,相邻位置间隔为1.5 cm;若小于2 s时,则调节角度,共三个角度调节位置,相邻角度大小为15。 5.异常情况处理(异常情况就是在某一运行过程,由于人为地阻止显示屏的正常移动,从而造成长时间的马达过载异常):由实际情况进行判断,如果是异常情况,则关断马达信号并报警出错;等待open_close低电平的到来,然后返回机盒内。 6.位置识别、异常情况判断、状态显示、时间显示:在系统对马达进行驱动控制时,都要进行位置识别、异常情况判断,并把检测到的信号通过状态显示模块处理输出。在每一运行过程,输出模块均把此时的时间显示出,最小时间单位为1 s。根据以上各种操作及要求,我们可得到各种操作的状态转换图如图1所示,系统的有关控制时序如图2和图3所示。图1 各种操作的状态转换图 图2 行走(142 mm3 s)与翻转(1203 s)控制时序图 图3 角度调整和水平位置调整控制时序图图2和图3中的信号说明如下: open/close:外部开关操作输入信号;tilt:角度调整和水平位置调整信号输入端;p00/ ic2.6,p01/ic2.5,p02/ic1.6,p03/ic1.5:驱动信号,高电平有效;m1.1,m1.2:行走马达控制信号,高电平有效,电压为9 v;m2.1,m2.2:翻转马达控制信号,高电平有效,电压为9 v;sensor1,sensor2:分别为行走马达和翻转马达的返回电压信号,系模拟信号。 二、 系统设计方案1.系统的总体结构设计根据系统的设计要求,我们可得到移动dvd位控系统dvdwkxt的输入和输出接口如图10.4所示。图中的信号说明如下:clkin:外部时钟端输入,8 mhz晶振;open_close:外部开关操作输入电平信号;tilt:外部输入位置调节信号;data:8位传感器返回数据;adcabc00:传感器通道选择信号输出;adcclk:模拟转换器的时钟信号;eoc, op, read, write:adc0809的控制信号;motor11_out, motor12_out, motor21_out, motor22_out:驱动马达控制信号;ds_time,ds_unit:时间及单位输出信号;error00,good00:异常,正常输出信号;v_pos1, v_pos2, v_pos3:水平位置输出信号;h_pos1, h_pos2, h_pos3:角度位置输出信号。 根据实际要求,上面的各个信号输出为ttl标准电平,输出电流约为510 ma。图4 dvdwkxt的输入和输出接口图经过对系统的设计要求进行分析,我们可将整个系统分为7个模块:分频模块fini、open_close操作模块open_op、tilt操作模块tilt_op、位置判断模块pos_diff、异常判断及处理模块abn_diff、判断输出模块output、时间及位置显示模块display。整个系统的组成框图如图5(略)(该图大家可以根据所给模块程序自行画出)所示。 2.系统内各模块的设计分频模块fini:其功能为对外部输入时钟进行分频,得到周期为1.5 ms计数器,并根据反馈信号time_s对计时器进行清零。其输入输出接口如图6所示,图中的clkin为外部时钟输入,time_s为定时器清零信号。 图6 分频模块fini输入输出接口图open_close操作模块open_op:其功能为根据反馈的数据和相关的信号,做出具体的马达控制输出。其输入输出接口如图7所示,图中的信号tilt_bcd、tilt_fgh为从tilt模块返回的控制信号,time_s是内部计时器的清零信号,error0为异常警告信号。图10.7 open_close操作模块open_op输入输出接口图tilt操作模块tilt_op:其功能为根据反馈的数据和相应的信号,做出具体的马达控制输出。其输入输出接口如图8所示,图中的信号tilt_bcd0、tilt_fgh0为小范围内调整控制信号,adcabcp5是adc0809通道选通信号。图8 tilt操作模块tilt_op输入输出接口图位置判断模块pos_diff:其功能为对每个周期内的移动显示屏的位置进行判断,并把信号输出。其输入输出接口如图9所示,图中的vpa、vpb、vpc、vpd、hpe、hpf、hpg、hph、vpab、vpbc、vpcd、hpef、hpfg、hpgh为输出位信号。 异常判断及处理模块abn_diff:其功能为在每一个周期内对系统的运行异常情况判断,并把信号输出。针对不同的位置,在相应的操作里,设定的时间内,如没有到达规定的位置,则判断为异常,并关断马达的运行。其输入输出接口如图10所示。图9 位置判断模块pos_diff输入输出接口图图10 异常判断及处理模块abn_diff输输出接口图判断输出模块output:其功能为根据以上模块的各判断输出信号,进行再次判断,并输出到外部。由以上模块进行操作,得到不同的信号,从而进行输出控制;主要是针对模拟通道的选择,以及对马达1和马达2的控制。其输入输出接口如图11所示。 图11 判断输出模块output输入输出接口图时间及位置显示模块display:其功能为对外显示每一移动过程所用时间。其输入输出接口如图12所示,图中的ds_time、ds_unit为输出时间及时间单位。由于输出为ttl标准电平,因此外部需要附加七段码驱动芯片,本设计拟用74als244。图12 时间及位置显示模块display输入输出接口图三、主要vhdl源程序- dvdwkxt.vhdlibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all; -定义一个实体 entity dvdwkxt is port(clkin: in std_logic;-外部时钟输入端 open_close,tilt: in std_logic; data: in std_logic_vector(7 downto 0); -传感器返回位置数据 adcabc00: out std_logic_vector(2 downto 0); -选择模拟转换通道 adcclk: out std_logic;eoc,read,write,op: out std_logic;-adc0809控制端 motor11_out,motor12_out: out std_logic;-马达ttl电平控制端 motor21_out,motor22_out: out std_logic; -马达ttl电平控制端 ds_time,ds_unit: out std_logic_vector(7 downto 0); -显示时间 error00,good00: out std_logic; -异常情况输出端 v_pos1,v_pos2,v_pos3: out std_logic;-水平位置信号 h_pos1,h_pos2,h_pos3: out std_logic);-翻转角度信号 end entity dvdwkxt;architecture art of dvdwkxt is signal count: std_logic_vector(16 downto 0);-分频 signal time00: std_logic_vector(12 downto 0);-计数器 signal v_postionp2,h_postionp2: std_logic_vector(7 downto 0); signal v_postionp3,h_postionp3: std_logic_vector(7 downto 0); signal v_postionp4,h_postionp4: std_logic_vector(7 downto 0); signal v_postionp5,h_postionp5: std_logic_vector(7 downto 0); -上面四个语句均为位置寄存器 signal adivider,time_s: std_logic; signal motor11p2,motor12p2,motor21p2,motor22p2: std_logic; signal motor11p5,motor12p5,motor21p5,motor22p5: std_logic; signal motor11p4,motor12p4,motor21p4,motor22p4: std_logic; signal error0,good0: std_logic; - 异常情况寄存器 signal adcabcp2,adcabcp5:std_logic_vector(2 downto 0); -通道选择寄存器 signal vpa,vpb,vpc,vpd: std_logic;-水平位置信号标志 signal hpe,hpf,hpg,hph: std_logic;-角度位置标志 signal vpab,vpbc,vpcd: std_logic;signal hpef,hpfg,hpgh: std_logic; signal tilt_bcd,tilt_fgh: std_logic;-tilt信号判断标志 signal vc_vd,vd_vb,vb_vc: std_logic;-位置常量标志 signal hf_hg,hg_hh,hh_hf: std_logic;-位置常量标志constant va: integer :=20; constant vb: integer :=180; constant vc: integer :=210; constant vd: integer :=240; constant he: integer :=20; constant hf: integer :=180; constant hg: integer :=210; constant hh: integer :=240;begin -程序初始化 eoc=adivider; read=not(adivider); write=not(adivider); op=not(adivider); adcclk=not(adivider); error00=error0; good00=good0; -divider frequency 分频子进程 p1:process(clkin) isbegin if(clkinevent and clkin=1)then count=count+1; end if; if(count=11111111111111111)then adivider=1; else adivider=0; end if; if(time_s=1)then if(adivider=1)then time00=time00+1; end if; elsif(time_s=0)then -对计数器清零 time00=0000000000000; end if; end process p1; -执行open_close操作 p2:process(adivider,open_close,error0,tilt) isvariable v_postion2,h_postion2:integer range 256 downto 1; begin if (open_close=1 and error0=0 and tilt_bcd=0 and tilt_fgh=0 and good0=0)then -正常情况下出盒 adcabcp2=000; v_postionp2=va and v_postion2vb and adcabcp2=000) thenmotor11p2=vb and adcabcp2=000)then motor11p2=0; adcabcp2=001; time_s=0; h_postionp2=he and h_postion2hf and adcabcp2=001)then motor21p2=hf and adcabcp2=001)then motor21p2=0; time_s=0; good0=1; end if; -出盒操作完成 end if;if(open_close=0 and error0=0 and tilt_bcd=0 and tilt_fgh=0 and good0=1)then-回盒条件成立 adcabcp2=001; h_postionp2he and h_postion2=hh and adcabcp2=001)then motor22p2=1; end if ;if(h_postion2=he and adcabcp2=001)then -向下翻转 motor22p2=0; time_s=0; adcabcp2=000; v_postionp2va and v_postion2=vd and adcabcp2=000)then motor12p2=1; -水平回盒 end if; if(v_postion2=va and adcabcp2=000)then motor12p2=0; time_s=0; good0=0; end if ; end if ; end process p2;p3:process(adivider) is variable v_postion3,h_postion3:integer range 256 downto 1; begin if(adcabcp2=000 or adcabcp5=000)then v_postionp3=data; v_postion3:=conv_integer(v_postionp3); if(v_postion3=va)then -在盒内状态 vpa=1; vpb=0; vpc=0; vpd=0; vpab=0; vpbc=0; vpcdva and v_postion3vb)then -出盒中间位置 vpa=0; vpb=0; vpc=0; vpd=0; vpab=1; vpbc=0; vpcd=0; elsif(v_postion3=vb)then -水平位置b vpa=0; vpb=1; vpc=0; vpd=0; vpab=0; vpbc=0; vpcdvb and v_postion3vc)then -水平位置bc之间 vpa=0; vpb=0; vpc=0; vpd=0; vpab=0; vpbc=1; vpcd=0; elsif(v_postion3=vc)then -水平位置c vpa=0; vpb=0; vpc=1; vpd=0; vpab=0; vpbc=0; vpcdvc and v_postion3vd)then -水平位置cd之间 vpa=0; vpb=0; vpc=0; vpd=0; vpab=0; vpbc=0; vpcd=vd)then -水平位置d vpa=0; vpb=0; vpc=0; vpd=1; vpab=0; vpbc=0; vpcd=0; end if; end if ;if(adcabcp2=001 or adcabcp5=001)then h_postionp3=data ; h_postion3:=conv_integer(h_postionp3); if(h_postion3=he)then -翻转位置e hpe=1; hpf=0; hpg=0; hph=0; hpef=0; hpfg=0; hpghhe and h_postion3hf)then -角度位置e、f之间 hpe=0; hpf=0; hpg=0; hph=0; hpef=1; hpfg=0; hpgh=0; elsif(h_postion3=hf)then -角度位置f hpe=0; hpf=1; hpg=0; hph=0; hpef=0; hpfg=0; hpghhf and h_postion3hg)then -角度位置f、h之间 hpe=0; hpf=0; hpg=0; hph=0; hpef=0; hpfg=1; hpgh=0; elsif(h_postion3=hg)then -角度位置h hpe=0; hpf=0; hpg=1; hph=0; hpef=0; hpfg=0; hpghhg and h_postion3hh)then -角度位置g、h之间 hpe=0; hpf=0; hpg=0; hph=0; hpef=0; hpfg=0; hpgh=1; elsif(h_postion3=hh)then -角度位置h hpe=0; hpf=0; hpg=0; hph=1; hpef=0; hpfg=0; hpgh=0; end if; end if; end process p3;-异常判断子程序 p4:process(adivider) is variable v_postion4,h_postion4:integer range 256 downto 1; begin if(adcabcp2=000 or adcabcp5=000) then -水平位置 v_postionp4=4000 and (v_postion4va and v_postion4vb)then error0=1; -出盒或进盒过程中出错 motor11p4=0; motor12p4=2666 and (vpb=0 and vpc=0 and vpd=0)then error0=1; -水平位置调节时出错 motor11p4=0; motor12p4=0; end if; end if; if(adcabcp2=001 or adcabcp5=001)then h_postionp4=4000 and (h_postion4he and h_postion4hf)then error0=1; -大角度翻转时出错 motor21p4=0; motor22p4=2666) and (hpf=0 and hpg=0 and hph=0)then error0=1; -角度调节时出错 motor21p4=0; motor22p4=4000)then error0=2666 )then -是否是位置调节 adcabcp5=000; v_postionp5=data ; v_postion5:=conv_integer(v_postionp5); tilt_bcd=1;elsif(tilt=1 and conv_integer(time00)2666)then -是否是角度调节 adcabcp5=001; h_postionp5=data; h_postion5:=conv_integer(h_postionp5); tilt_fgh=1; end if;if(tilt=0)then if(adcabcp5=000 and tilt_bcd=1)then -判断方向 if(vpc=1)then -从位置c到位置d vc_vd=1; end if; if(vpd=1)then -从位置d到位置c vd_vb=1; end if; if(vpb=1)then -从位置b到位置c vb_vc=vc and v_postion5vd)then motor11p5=1; elsif(vc_vd=1 and v_postion5=vd)then -到达位置d motor11p5=0; tilt_bcd=0; vc_vdvb and v_postion5=vd) then -postion d motor12p5=1; elsif(vc_vd=1 and v_postion5=vb)then -到达位置b motor12p5=0; tilt_bcd=0; vd_vb=vb and v_postion5vc) then -postion bmotor11p5=1; elsif(vc_vd=1 and v_postion5=vc)then -到达位置c motor11p5=0; tilt_bcd=0; vc_vd=0; end if ; end if; if(adcabcp5=001 and tilt_fgh=1)then -different x to y if(hpf=1)then hf_hg=1; end if; if(hpg=1)then hg_hh=1; end if; if(hph=1)then hh_hf=hf and h_postion5hg) then -postion f motor21p5=1; elsif(hf_hg=1 and h_postion5=hg)then -到达位置g motor21p5=0; tilt_fgh=0; hf_hg=hg and h_postion5hh) then -postion g motor21p5=1; elsif(hg_hh=1 and h_postion5=hh)then -到达位置h motor21p5=0; tilt_fgh=0; hg_hhhf and h_postion5hh) then -postion h motor22p5=1; elsif(hh_hf=1 and h_postion5=hf)then -到达位置f motor22p5=0; tilt_fgh=0;hh_hf=0; end if; end if; end if; end if; end process p5; -位置显示输出部分 p6:process(adivider,vpb,vpc,vpd,hpf,hpg,hph) begin if(vpb=1)then -位置b v_pos1=1; v_pos2=0; v_pos3=0; end if; if(vpc=1)then -位置c v_pos1=0; v_pos2=1; v_pos3=0; end if; if(vpd=1)then -位置dv_pos1=0; v_pos2=0; v_pos3=1; end if; if(vpb=0 and vpc=0 and vpd=0)then -处于位置之间 v_pos1=0; v_pos2=0; v_pos3=0; end if; if(hpf=1)then -角度f h_pos1=1; h_pos2=0 ; h_pos3=0; end if; if(hpg=1)then -角

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论