數(shù)電課程設(shè)計(jì)--溫度的采集于發(fā)送_第1頁(yè)
已閱讀1頁(yè),還剩10頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p><b>  數(shù)字電路課程設(shè)計(jì)</b></p><p><b>  ——溫度采集與發(fā)送</b></p><p>  西安電子科技大學(xué)自動(dòng)化04113068</p><p><b>  任務(wù)分析:</b></p><p>  用ADC0809 八位集成A/D轉(zhuǎn)換器

2、,將測(cè)溫電路傳回的模擬電壓信號(hào)轉(zhuǎn)化為8位的數(shù)字信號(hào),然后將其送入預(yù)先下載好程序的FPGA進(jìn)行處理和發(fā)送,從而實(shí)現(xiàn)對(duì)溫度的測(cè)量與發(fā)送處理。</p><p><b>  設(shè)計(jì)思路:</b></p><p><b>  原理框圖</b></p><p>  設(shè)計(jì)相應(yīng)的溫度采集模塊的硬件電路;</p><p&g

3、t;<b>  編寫程序:</b></p><p>  軟件分頻,利用軟件將系統(tǒng)給定的頻率換算為ADC0908的工作頻率;</p><p>  串行通信,將數(shù)字信號(hào)進(jìn)行存儲(chǔ)和發(fā)送。</p><p>  編寫模擬的輸入信號(hào)sig。</p><p><b>  系統(tǒng)所用器件:</b></p>

4、<p>  , </p><p>  圖1-1 圖1-2</p><p>  測(cè)溫電路;如圖1-1,其中用到電阻8個(gè):(100k電阻兩個(gè),1k電阻兩個(gè),10k電阻兩個(gè),12k電阻一個(gè),最大阻值為50k的滑動(dòng)變阻器一個(gè)。)運(yùn)算放大器兩個(gè);AD590(AD590是美國(guó)ANALOG DEV

5、ICES公司的單片集成兩端感溫電流源,其輸出電流與絕對(duì)溫度成比例。)溫度傳感器一個(gè);限壓二極管一只;(6v);12v的電壓源。傳感器傳來的溫度變化的電流信號(hào)經(jīng)過10k電阻變?yōu)殡妷盒盘?hào),經(jīng)過運(yùn)算放大器后(V=7.73+T/100)結(jié)合電位器(V=2.73)的調(diào)節(jié)后參與減法器的運(yùn)算,最終使得V0 的數(shù)值和實(shí)際溫度的數(shù)值大小相等。</p><p>  ADC0809八位集成A/D轉(zhuǎn)換器(《數(shù)字電子技術(shù)基礎(chǔ)·

6、第二版,西電出版社》):使用IN3端口輸入來自測(cè)溫電路輸出的模擬信號(hào)(其中ADDC設(shè)置為0,ADDB設(shè)置為1,ADDA設(shè)置為1);時(shí)鐘由FPGA中軟件提供;</p><p>  3. 顯示部分由七段數(shù)碼管顯示。</p><p>  四,程序說明及仿真結(jié)果:</p><p>  Sig: (因?yàn)樵诜抡娴臅r(shí)候,不加入模擬信號(hào),沒法仿真,就設(shè)置了一個(gè)信號(hào),在仿真

7、時(shí)替換測(cè)溫電路輸入的模擬信號(hào),實(shí)際中用測(cè)溫電路傳回的信號(hào)替代),在128MHz下,輸出模擬的四十組0到255之間的類正弦模擬信號(hào)。</p><p>  Conta:  此為外部硬件時(shí)鐘信號(hào)產(chǎn)生設(shè)備產(chǎn)生128MHz的時(shí)鐘信號(hào),分頻后向sig、CONVERTER、ADC0809提供主時(shí)鐘信號(hào),以及向ADC0809提供start的信號(hào);</p><p>  CONVERTER: 在

8、64MHz下,控制ADC0809,以及完成串行轉(zhuǎn)換。</p><p>  ADC0809: 在500KHz下,共有五個(gè)工作狀態(tài)(st0,st1,st2,st3,st4),在st0時(shí)讀入模擬信號(hào),st1時(shí)進(jìn)行逐次逼近計(jì)算,st2時(shí)等待oe信號(hào),st3時(shí)輸出轉(zhuǎn)換結(jié)果,st4時(shí)無(wú)動(dòng)作然后轉(zhuǎn)回st0。</p><p><b>  程序:</b></p>&l

9、t;p><b>  Sig模塊:</b></p><p>  library ieee;</p><p>  use ieee.std_logic_1164.all;</p><p>  use ieee.std_logic_unsigned.all;</p><p>  use ieee.std_logic_ar

10、ith.all;</p><p>  entity sig is --產(chǎn)生模擬信號(hào)</p><p>  port(clk:in std_logic; --128MHz</p><p>  temp:out std_logic_vector(7 downto 0));<

11、/p><p><b>  end sig;</b></p><p>  architecture behav of sig is</p><p>  signal p:integer range 0 to 40:=0;</p><p><b>  begin</b></p><p&g

12、t;  process(clk,p)</p><p><b>  begin</b></p><p>  if (clk'event and clk='1') then p<=p+1;</p><p>  case p is </p><

13、p>  when 1=>temp<="00010011";--19</p><p>  when 2=>temp<="00100111";--39</p><p>  when 3=>temp<="00111001";--57</p><p>  when 4=&g

14、t;temp<="01001010";--74</p><p>  when 5=>temp<="01011001";--89</p><p>  when 6=>temp<="01100110";--102</p><p>  when 7=>temp<=&quo

15、t;01110001";--113</p><p>  when 8=>temp<="01111000";--120</p><p>  when 9=>temp<="01111101";--125</p><p>  when 10=>temp<="01111111&q

16、uot;;--127</p><p>  when 11=>temp<="01111101";--125</p><p>  when 12=>temp<="01111000";</p><p>  when 13=>temp<="01110001";</p>

17、<p>  when 14=>temp<="01100110";</p><p>  when 15=>temp<="01011001";</p><p>  when 16=>temp<="01001010";</p><p>  when 17=>

18、temp<="00111001";</p><p>  when 18=>temp<="00100111";</p><p>  when 19=>temp<="00010011";</p><p>  when 20=>temp<="00000000&q

19、uot;;</p><p>  when 21=>temp<="11101101";--237</p><p>  when 22=>temp<="11011001";--217</p><p>  when 23=>temp<="11000111";--199</

20、p><p>  when 24=>temp<="10110110";--182</p><p>  when 25=>temp<="10100111";--167</p><p>  when 26=>temp<="10011010";--154</p><

21、;p>  when 27=>temp<="10001111";--143</p><p>  when 28=>temp<="10001000";--136</p><p>  when 29=>temp<="10000011";--131</p><p>  wh

22、en 30=>temp<="10000001";--129</p><p>  when 31=>temp<="10000011";</p><p>  when 32=>temp<="10001000";</p><p>  when 33=>temp<=&

23、quot;10001111";</p><p>  when 34=>temp<="10011010";</p><p>  when 35=>temp<="10100111";</p><p>  when 36=>temp<="10110110";</

24、p><p>  when 37=>temp<="11000111";</p><p>  when 38=>temp<="11011001";</p><p>  when 39=>temp<="11101101";</p><p>  when 40

25、=>temp<="00000000";</p><p>  when others=> p<=0;temp<="00000000";</p><p><b>  end case;</b></p><p><b>  end if;</b></p&

26、gt;<p>  end process;</p><p>  end behav;</p><p>  Fow Smmay:</p><p><b>  Conta模塊:</b></p><p>  library ieee;</p><p>  use ieee.std_logi

27、c_1164.all;</p><p>  use ieee.std_logic_unsigned.all;</p><p>  use ieee.std_logic_arith.all; --庫(kù)和程序包的調(diào)用</p><p>  entity conta is --集線器,將輸入輸

28、出集中到一個(gè)模塊上,同時(shí)給adc0809啟動(dòng)信號(hào)</p><p>  port(a_in : in std_logic_vector(7 downto 0); --定義一個(gè)輸入端口a共8位</p><p>  b_out : out std_logic_vector(7 downto 0); --定義一個(gè)輸出端口b共8位</p><

29、;p>  c_in:in std_logic;-- 定義一個(gè)輸入端口c</p><p>  d_out:out std_logic;-- 定義一個(gè)輸出端口d</p><p>  clk_in:in std_logic;-- 定義一個(gè)輸入時(shí)鐘端口clk</p><p>  clk_out:out std_logic;-- 定義一個(gè)輸出時(shí)鐘端口clk</p&

30、gt;<p>  start_out:out std_logic); --定義一個(gè)輸出的start端口</p><p><b>  --4MHz</b></p><p>  end conta; --實(shí)體conta描述結(jié)束</p><p>  architecture behav of conta is

31、 --結(jié)構(gòu)體名為conta</p><p>  signal q:std_logic_vector(4 downto 0):="00000"; --定義一個(gè)標(biāo)準(zhǔn)邏輯矢量信號(hào)q,共有5位, </p><p>  --并賦初值00000</p><p><b>  begin</b></p>&l

32、t;p>  b_out<=a_in;</p><p>  clk_out<=clk_in;</p><p>  d_out<=c_in;</p><p>  process(clk_in) </p><p><b>  begin</b></p>&l

33、t;p>  if (clk_in'event and clk_in='1') then </p><p>  if q<"11111" then q<=q+1;</p><p>  if q="00010" then start_out<='1';</p>

34、<p>  else start_out<='0';</p><p><b>  end if;</b></p><p>  else q<="00000";</p><p><b>  end if; </b></p><p><

35、b>  end if;</b></p><p>  end process;</p><p>  end behav;</p><p>  Flow Smmary:</p><p>  CONVERTER模塊:</p><p>  library ieee;</p><p> 

36、 use ieee.std_logic_1164.all;</p><p>  use ieee.std_logic_unsigned.all;</p><p>  use ieee.std_logic_arith.all; --庫(kù)和程序包的調(diào)用</p><p>  entity CONVERTER is

37、 --串行轉(zhuǎn)換,提供adc0809工作信號(hào)及頻率 </p><p>  port(d:in std_logic_vector(7 downto 0);</p><p>  clk:in std_logic;</p><p>  eoc,oe:out std_logic;</p><

38、;p>  ale:out std_logic;</p><p>  add:out std_logic_vector(2 downto 0);</p><p>  data_out:out std_logic;</p><p>  LOCK,clk_out:out std_logic); --500KHz</p>

39、<p>  end CONVERTER;</p><p>  architecture behav of CONVERTER is</p><p>  type work_states is (st0,st1,st2,st3,st4,st5,st6,st7);</p><p>  signal t1:std_logic_vector(7 downto 0)

40、;</p><p>  signal t2:integer range 0 to 1:=0;</p><p>  signal Current_state,Next_state:work_states:=st0;</p><p><b>  begin</b></p><p>  add<="000&qu

41、ot;;</p><p>  process(Current_state,d)</p><p><b>  begin</b></p><p><b>  oe<='1';</b></p><p>  case Current_state is</p><p

42、>  when st0=>Next_state<=st1;data_out<=d(0);eoc<='0';LOCK<='1';ale<='0';</p><p>  when st1=>Next_state<=st2;data_out<=d(1);eoc<='0';LOCK<=&

43、#39;1';ale<='0';</p><p>  when st2=>Next_state<=st3;data_out<=d(2);eoc<='0';LOCK<='1';ale<='0';</p><p>  when st3=>Next_state<=st4;

44、data_out<=d(3);eoc<='0';LOCK<='1';ale<='0';</p><p>  when st4=>Next_state<=st5;data_out<=d(4);eoc<='0';LOCK<='1';ale<='0';</p&

45、gt;<p>  when st5=>Next_state<=st6;data_out<=d(5);eoc<='0';LOCK<='1';ale<='0';</p><p>  when st6=>Next_state<=st7;data_out<=d(6);eoc<='0';

46、LOCK<='1';ale<='0';</p><p>  when st7=>Next_state<=st0;data_out<=d(7);eoc<='1';LOCK<='1';ale<='1';</p><p><b>  end case;<

47、/b></p><p>  end process;</p><p>  process(clk) </p><p><b>  begin</b></p><p>  if (clk'event and clk='1') then t1<=t1+1;

48、t2<=t2+1; </p><p>  if t1="01111111" THEN clk_out<='1'; </p><p>  elsif t1<="01111111" then clk_out<='0'; </p><p><b>

49、  end if;</b></p><p>  if t2=1 then Current_state<=Next_state;</p><p><b>  end if;</b></p><p><b>  end if;</b></p><p>  end process;<

50、;/p><p>  end behav;</p><p>  Flow Smmary:</p><p>  ADC0809模塊:</p><p>  library ieee; --打開IEEE庫(kù)</p><p>  use ieee.std_logic_1164.all;

51、 --程序包的調(diào)用</p><p>  use ieee.std_logic_unsigned.all; --程序包的調(diào)用</p><p>  entity ADC0809 is --實(shí)體名為:ADC0809 </p><p>  port ( CLK,EN : in std_logic

52、 ; --定義CLK,EN為輸入端口</p><p>  ADDA : in std_logic_vector(2 downto 0); --定義輸入端口ADDA,共有三位</p><p>  ALE ,EOC : in std_logic ; --定義輸入端口ALK,EOC</p><p>  ADC_DISPLY : ou

53、t std_logic_vector(7 downto 0); --定義輸出端口----ADC_DISPLY,共有8位</p><p>  LOCK,start : in std_logic; --定義輸入端口LOCK,start</p><p>  Din : in std_logic_vector(7 downto 0)); --定義輸入端口Din ,

54、共有8位</p><p>  end ADC0809; --實(shí)體描述結(jié)束</p><p>  architecture behav of ADC0809 is -- 結(jié)構(gòu)體名為:ADC0809</p><p>  type states is (st0,st1,st2,st3,st4); --用枚舉類型進(jìn)行狀態(tài)定義</p><p

55、>  SIGNAL REGL : std_logic_vector(7 DOWNTO 0);--定義標(biāo)準(zhǔn)邏輯矢量信號(hào) REGL</p><p>  signal Dout_int : integer range 0 to 255; --信號(hào)Dout 的范圍從0到255變化</p><p>  signal buf7,buf6,buf5,buf4,buf3,buf2,buf1,bu

56、f0 : integer range 0 to 255;</p><p>  signal V0,V1,V2,V3,V4,V5,V6,V7 : integer range 0 to 1:=0;</p><p>  signal add:std_logic_vector(2 downto 0);</p><p>  function division(data_in

57、: integer) return integer is</p><p>  variable data : integer range 0 to 255;</p><p>  variable data_out :integer range 0 to 1:=0;</p><p><b>  begin</b></p><

58、p>  data := data_in;</p><p>  if data>128 thendata_out := 1;</p><p>  elsedata_out := 0;</p><p><b>  end if;</b></p><p>  return data_out;</p>

59、<p>  end division;</p><p><b>  BEGIN</b></p><p>  PROCESS(start,REGL,current_state,EOC,en,lock,Din,Dout_int,V0,V1,V2,V3,V4,V5,V6,V7,buf0,buf1,buf2,buf3,buf4,buf5,buf6,buf7)&l

60、t;/p><p><b>  BEGIN</b></p><p>  CASE current_state IS</p><p>  when st0=> next_state<=st1;</p><p>  Dout_int<=conv_integer(Din);</p><p&g

61、t;  when st1=>next_state<=st2;</p><p>  if start'event and start='1' then </p><p>  V0<=0;V1<=0;V2<=0;V3<=0;V4<=0;V5<=0;V6<=0;V7<=0;</p><p

62、><b>  END IF;</b></p><p>  V7<=division(Dout_int);</p><p>  buf6<=(Dout_int-V7*128)*2;</p><p>  V6<=division(buf6);</p><p>  buf5<=(buf

63、6-V6*128)*2; </p><p>  V5<=division(buf5);</p><p>  buf4<=(buf5-V5*128)*2; </p><p>  V4<=division(buf4);</p><p>  buf3<=(buf4-V4*128)*2; </p>&

64、lt;p>  V3<=division(buf3);</p><p>  buf2<=(buf3-V3*128)*2; </p><p>  V2<=division(buf2);</p><p>  buf1<=(buf2-V2*128)*2; </p><p>  V1<=division(b

65、uf1);</p><p>  buf0<=(buf1-V1*128)*2; </p><p>  V0<=division(buf0);</p><p>  when st2=> IF(EOC='1')THEN next_state<=st3;</p><p>  ELSE next_state

66、<=st2;</p><p><b>  END IF;</b></p><p>  when st3=> </p><p>  if V0=0 then REGL(0)<='0';</p><p>  else REGL(0)<='1';</p>

67、<p><b>  end if;</b></p><p>  if V1=0 then REGL(1)<='0';</p><p>  else REGL(1)<='1';</p><p><b>  end if;</b></p><p> 

68、 if V2=0 then REGL(2)<='0';</p><p>  else REGL(2)<='1';</p><p><b>  end if;</b></p><p>  if V3=0 then REGL(3)<='0';</p><p>

69、  else REGL(3)<='1';</p><p><b>  end if;</b></p><p>  if V4=0 then REGL(4)<='0';</p><p>  else REGL(4)<='1';</p><p><b&g

70、t;  end if;</b></p><p>  if V5=0 then REGL(5)<='0';</p><p>  else REGL(5)<='1';</p><p><b>  end if;</b></p><p>  if V6=0 then RE

71、GL(6)<='0';</p><p>  else REGL(6)<='1';</p><p><b>  end if;</b></p><p>  if V7=0 then REGL(7)<='0';</p><p>  else REGL(7)&l

72、t;='1';</p><p><b>  end if;</b></p><p>  if en='0' then </p><p>  REGL<="00000000";</p><p>  ELSIF LOCK='1' THEN <

73、/p><p>  ADC_DISPLY<=REGL;</p><p><b>  END IF;</b></p><p>  next_state<=st4;</p><p>  when st4=>next_state<=st0;</p><p>  when OTHERS

74、=> next_state<=st0;</p><p><b>  END CASE;</b></p><p>  END PROCESS;</p><p>  process(CLK,current_state,next_state)</p><p><b>  begin</b>&l

75、t;/p><p>  if (CLK'event and CLK='1') then</p><p>  current_state<=next_state;</p><p><b>  end if;</b></p><p>  end process;</p><p>

76、;  process(ADDA,ALE,add)</p><p><b>  begin</b></p><p>  if ALE='1'then add<=ADDA;</p><p>  else add<=add;</p><p><b>  end if;</b>&

77、lt;/p><p>  end process;</p><p>  END behav;</p><p>  Flow Summary:</p><p><b>  邏輯器件連接圖:</b></p><p><b>  波形仿真:</b></p><p

78、>  結(jié)果說明,din的波形極為模擬的類正弦信號(hào)(此為預(yù)先用軟件模擬的溫度信號(hào)),ADC_DISPLY的波形即為在FPGA控制下的輸出波形,兩者之間符合的很好?;旧蠈?shí)現(xiàn)的溫度的測(cè)量和發(fā)送。實(shí)際電路中,sig信號(hào)將被實(shí)際的AD590測(cè)溫電路所替代,整個(gè)系統(tǒng)將根據(jù)傳回的實(shí)際變化的溫度信號(hào)進(jìn)行相應(yīng)的處理。</p><p><b>  心得體會(huì);</b></p><p&g

79、t;  程設(shè)計(jì)和室友在一起討論商量,最后才寫完程序,完成此次數(shù)電課程設(shè)計(jì)。</p><p>  開學(xué)第一周老師就布置了課題,雖然沒開始實(shí)際動(dòng)手去做,卻做了大量的準(zhǔn)備工作,在網(wǎng)上收集很多資料,大體搞懂了ADC0908的工作狀態(tài)以及工作模式,對(duì)FPGA有了一定的了解,對(duì)整個(gè)設(shè)計(jì)思路有了大概的認(rèn)識(shí)和了解。國(guó)慶節(jié)間,開始動(dòng)手編寫程序。編寫程序花費(fèi)了很長(zhǎng)的時(shí)間,同學(xué)都是子網(wǎng)上找的程序,我們也找了,但是不符合我們的設(shè)計(jì)思路,

80、于是就自己編寫,但實(shí)際操作過程中,遇到了很多問題,剛開始編寫的程序錯(cuò)誤百出,令人頭疼,后來看了很多資料,錯(cuò)誤是改的沒了,那些個(gè)警告卻一直搞不定,最終還遺留著五六個(gè)警告沒有解決。在最后的編譯仿真階段,遇到了更多的問題,最終一一排除了,得到了一個(gè)大致合理的仿真結(jié)果,不甚滿意,卻實(shí)在力不從心。</p><p>  此 次課程設(shè)計(jì),是第一次做的比較實(shí)用性的課題。遇到最大的困難還是沒有具體實(shí)物,那個(gè)ADC0809 八位集成

81、A/D轉(zhuǎn)換器的各個(gè)引腳還可以知道,對(duì)于那個(gè)FPGA,沒有一個(gè)具體概念,在編寫程序,定義端口的問題上,糾結(jié)了很久。因?yàn)檎n本中沒有具體事例,所有具體實(shí)例都得自己去找,鍛煉了分析和解決問題的能力。通過此次課程設(shè)計(jì),筆者覺得課堂上學(xué)習(xí)的那點(diǎn)數(shù)電知識(shí)或者說課本知識(shí),對(duì)于實(shí)際問題真的是冰山一角,更為嚴(yán)重的是,平時(shí)學(xué)習(xí)東西的時(shí)候,太粗糙,太死板,學(xué)出的東西是死的,壓根就不能用于實(shí)際的問題解決上面,在解決實(shí)際問題的時(shí)候,思路很狹隘,常常走進(jìn)死胡同。對(duì)q

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論