第一篇:基于Verilog HDL的串行ADC控制電路設計與總結報告
基于Verilog HDL的串行ADC控制電路
設計與總結報告
題目名稱: 報告人 : __ 學院 : 專業 : 班級 : 學號 :
制作日期: __
摘要……………………………………………………………………...1
第一章 串行ADC控制控制電路的功能介紹及Verilog HDL簡介
...................................................................................................................3 1.1串行ADC控制控制電路的功能…………………………..…..3 1.2Verilog HDL簡介……………………………………………………4
第二章組成模塊簡介……………………………………………..5
2.1組成模塊…………………………………………………………….6(1)、狀態機……………………………………………………6(2)、鎖相環……………………………………………………8(3)、累計器……………………………………………………10(4)、多路選擇器………………………………………………12 第三章 模擬仿真….…………………..……………………………….13 總結結論………………………………………………………………14 參考文獻………………………………………………………………15
基于Verilog HDL的串行ADC
控制電路設計摘要
Verilog HDL的串行ADC控制電路設計,是使用高速10位逐次逼近式模數轉換器(ADC)芯片TLV1572,用Verilog HDL編程語言編寫狀態機按一定周期采樣轉換模擬信號。在Quartus2軟件上完成頂層電路設計、狀態機、鎖相環、累加器、譯碼器、多路選擇器等編程和封裝。各個模塊完成不同的任務,合在一起就構成了Verilog HDL的串行ADC控制電路設計,軟件模擬直接在Quartus2上進行。
在此程序中關鍵是用于狀態機,其中狀態機的優勢有以下幾點:(1)、高效的順序控制模型,狀態機克服了純硬件數字系統順序方式控制不靈活的缺點。狀態dat0是對1572的初始化、狀態dat1是打開1572的片選信等,一直到采集數據輸出數據。
(2)容易利用現成的EDA工具進行優化設計。由于狀態機的構件簡單,其中用宏模塊PLL將20MHz的時鐘進行分頻得到想要的時鐘周期。
(3)性能穩定。狀態機容易構成性能良好的同步時序邏輯模塊。(4)高速性能。狀態機載高速通信和高速控制方面,有著巨大的優勢。
第二章 串行ADC控制控制電路的功能介紹及Verilog HDL簡介
1.1串行ADC控制控制電路的功能
在我們的信息時代日益更新的生活,AD、DA轉換時刻進行著,而這些功能的實現,均以多半是以MCU或MPU的控制芯片實現的,但CPU的不穩定和低時鐘嚴重影響著轉換的效率,因此,研究狀態機控制轉換芯片有著現實意義。
此次設計與利用狀態機就是為了了解不基于各種CPU而能穩定、高效的進行工作,從而學會編程。通過它也可以進一步學習掌握各種邏輯電路與時序電路的原理與使用方法。1.2 Verilog HDL簡介
Verilog HDL是一種硬件描述語言(HDL:HardwareDiscription Language),是一種以文本形式來描述數字系統硬件的結構和行為的語言,用它可以表示邏輯電路圖、邏輯表達式,還可以表示數字邏輯系統所完成的邏輯功能。Verilog HDL和VHDL是目前世界上最流行的兩種硬件描述語言,都是在20世紀80年代中期開發出來的。前者由Gateway Design Automation公司(該公司于1989年被Cadence公司收購)開發。兩種HDL均為IEEE標準。第二章組成模塊簡介 2.1組成模塊 頂層電路圖:
頂層電路設計、狀態機、鎖相環、累加器、譯碼器、多路選擇器等編程和封裝
(1)、狀態機
基于Verilog HDL語言編寫的狀態機是本系統的核心,猶如一個穩定、高效、單一的控制CPU,其中代碼如下:
module TLV1572(CS,CLK,SCLK,FS,SDI,DO,RST);input SDI;input CLK;input RST;output CS,SCLK,FS;//CS 片選,FS當接口至微處理器時,FS輸入連接至Vcc output [9:0]DO;//串行數據輸出
reg [6:0] next,now;reg [6:0] dat;reg [9:0] DO;reg CS,SCLK;wire FS;parameter dat0=6'd0;parameter dat2=6'd2;parameter dat3=6'd3;parameter dat4=6'd4;parameter dat6=6'd6;parameter dat7=6'd7;parameter dat8=6'd8;parameter dat10=6'd10;parameter dat11=6'd11;parameter
dat12=6'd12;parameter dat14=6'd14;parameter dat15=6'd15;parameter
dat16=6'd16;parameter dat18=6'd18;parameter dat19=6'd19;parameter
dat20=6'd20;parameter dat22=6'd22;parameter dat23=6'd23;parameter
dat24=6'd24;parameter
dat1=6'd1;parameter dat5=6'd5;parameter dat9=6'd9;parameter dat13=6'd13;parameter
dat17=6'd17;parameter
dat21=6'd21;parameter
dat25=6'd25;parameter dat26=6'd26;parameter dat27=6'd27;parameter
dat28=6'd28;parameter
dat29=6'd29;parameter dat30=6'd30;parameter dat31=6'd31;parameter
dat32=6'd32;parameter
dat33=6'd33;parameter dat34=6'd34;parameter dat35=6'd35;parameter
dat36=6'd36;parameter
dat37=6'd37;parameter dat38=6'd38;parameter dat39=6'd39;parameter dat40=6'd40;
always@(posedge CLK or posedge RST)begin if(RST)next<=dat0;else end always@(next)begin case(next)
dat0 : begin CS<=1'b1;SCLK<=1'b0;now<=dat1;end dat1 : begin CS<=1'b0;SCLK<=1'b0;now<=dat2;end dat2 : begin CS<=1'b0;SCLK<=1'b0;now<=dat3;end dat3 : begin CS<=1'b0;SCLK<=1'b1;now<=dat4;end dat4 : begin CS<=1'b0;SCLK<=1'b0;now<=dat5;end next <= now;
dat5 : begin CS<=1'b0;SCLK<=1'b1;now<=dat6;end dat6 : begin CS<=1'b0;SCLK<=1'b0;now<=dat7;end dat7 : begin CS<=1'b0;SCLK<=1'b1;now<=dat8;end dat8 : begin CS<=1'b0;SCLK<=1'b0;now<=dat9;end dat9 : begin CS<=1'b0;SCLK<=1'b1;now<=dat10;end dat10 : begin CS<=1'b0;SCLK<=1'b0;now<=dat11;end dat11 : begin CS<=1'b0;SCLK<=1'b1;now<=dat12;end dat12 : begin CS<=1'b0;SCLK<=1'b0;now<=dat13;end dat13 : begin CS<=1'b0;SCLK<=1'b1;now<=dat14;end dat14 : begin CS<=1'b0;SCLK<=1'b0;now<=dat15;end dat15 : begin CS<=1'b0;SCLK<=1'b1;now<=dat16;end
dat16 : begin CS<=1'b0;SCLK<=1'b0;now<=dat17;end dat17 : begin CS<=1'b0;SCLK<=1'b1;now<=dat18;end dat18 : begin CS<=1'b0;SCLK<=1'b0;now<=dat19;end dat19 : begin CS<=1'b0;SCLK<=1'b1;now<=dat20;end dat20 : begin CS<=1'b0;SCLK<=1'b0;now<=dat21;end endcase end always@(next)begin case(next)
dat16: begin DO[9] <=SDI;end dat18: begin DO[8] <=SDI;end dat20: begin DO[7] <=SDI;end dat22: begin DO[6] <=SDI;end dat24: begin DO[5] <=SDI;end
dat26: begin
dat28: begin
dat30: begin
dat32: begin dat34: begin endcase end assign FS=1'b1;endmodule
DO[4] <=SDI;DO[3] <=SDI;DO[2] <=SDI;DO[1] <=SDI;DO[0] <=SDI;end end end end end
封裝后
(2)、鎖相環
利用軟件中的宏模塊分頻電路圖如下
功能設計圖(3)、累計器
累加器用于選通數碼管,用于點亮數碼管,代碼如下: module CNT10(CLK,Q);input CLK;output [2:0] Q;reg [2:0] Q1;assign Q = Q1;always @(posedge CLK)begin Q1 <= Q1+1;end Endmodule 電路圖為:
(4)、多路選擇器
第三章 模擬仿真
總結結論
通過此次設計研究,最終完成了 串行ADC的的設計與制作。在整個設計過程中,我們組從各個模塊的思路設計到實際程序編寫,從點到面。在出現與處理問題的過程中,不斷提升自己處理細節問題的能力,雖然遇到了很多的困難但最終還是基本上完成了設計達到了預期的效果。而更重要的是通過系統設計這項項目,使我們對于設計整體流程有了更加明晰的感受,對于今后的深入學習與應用奠定了基礎。在今后的學習中,我們將繼續加強EDA理論知識和Verilog語言的熟練掌握,爭取更大的突破。
最后,感謝老師這學期的辛勤授課,您的敬業精神值得很多老師和學生學習,通過一學期的課程學習也是我進步很多。謝謝您王老師!
參考文獻
1、《EDA技術實用教程》
2、《Verilog HDL狀態機編寫技巧》
3、《基于Verilog的狀態機設計》等
第二篇:交通燈控制邏輯電路設計與總結報告
交通燈控制邏輯電路設計與總結報告
一、設計任務
用CPLD設計路口交通燈控制器
二、設計要求
1、滿足一下時序要求:南北方向紅燈亮,東西方向綠燈亮;南北方向綠燈亮,東西方向紅燈亮;
2、每一方向的紅(綠)黃燈總共維持30秒;
3、十字路口要有時間顯示,具體為:當某一方向綠燈亮時,置顯示器為30秒,然后以每秒減一技術方式工作,直至減到數為4秒時,紅綠燈熄滅,黃燈開始間隙閃耀4秒,減到0時,紅綠燈交換,一次工作循環結束,進入下一步另一方向的工作循環;
4、紅綠燈均采用發光二極管;
5、設計由晶振電路產生1Hz標準秒信號的單元電路(實際秒脈沖由開發箱提供);
6、要求對整體電路進行仿真,觀察并記錄下仿真波形;
7、選作部分:
a、手動調整和自動控制,夜間為黃燈閃耀;
b、白天黃燈亮時,以2Hz的速度閃爍點亮四秒; c、紅綠燈循環點亮時間可以自由修改。
三、設計設備
含有Quartus軟件的電腦一臺,可下載的試驗臺;
四、設計方法
使用VHDL語言進行程序的設計運行和仿真,以及波形的運行仿真,最后進行下載仿真;
五、方案論證
方案1:把整個流程分成幾個進程來做;
方案2:每個進程都使用if和case語句實現功能的實現; 方案3:使用狀態機來實現狀態間的轉換;
方案論證:
1、要實現整個流程,需要做的輸出內容類型不同,如果放在一個進程里面就比較容易混淆,產生混亂。而采用分成幾個進程來做的方式就明確了每個模塊的內容和分工,使其調理清晰,一目了然;
2、if語句是條件語句,是VHDL語言中常用的基本語句。該流程中的變量比較繁多,而使用case語句分情況列出來,簡潔明了。
3、狀態機的使用格式簡潔,使用簡單方便,特別是在進行狀態的轉換時候。并行的狀態轉換不易出錯,可將狀態轉換、賦值、計數等多個功能封裝在某一個狀態中,并且更加便于為系統添加新的狀態功能。
方案選定:
通過以上分析,確定用以上方案為本次設計的方案。
六、工作原理
先對所給時鐘脈沖進行分頻到標準時鐘脈沖;設計兩個時鐘控制倒計時,倒計時的時間可自由修改,由輸入決定;設計另一個時鐘,用以控制白天與夜間模式的轉換;在白天時,根據倒計時的數字進行紅綠燈的狀態轉換;夜間時,紅綠燈狀態改為夜間模式:黃燈閃爍。
七、程序設計
------交通燈控制系統所使用的庫和包
-------------------------library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;
-------------------------------交通燈控制系統的實體
-------------------------entity jt is
port(clk,reset:in std_logic;
------------------時鐘脈沖clk由系統直接提供,需要進行分
頻;reset是啟動鍵,當reset為1是,系統啟動
t0:integer range 0 to30;
------------------紅綠燈循環點亮的時間,根據輸入的不同
系統運行的不同
r1,y1,g1,r2,y2,g2:out std_logic;
------------------r1為東西方向紅燈,y1為東西方
向黃燈,g1為東西方向綠燈;r2為南北方向紅燈,y2為南北方向黃燈,g2為南北方向綠燈
ec0,ec1,nc0,nc1:out std_logic_vector(3 downto 0));
------------------ec0,ec1分別為東西方向的倒計時間的個位和十位;
nc0,nc1分別為南北方向的倒計時間的個位和十位
end jt;-------------------------------交通燈控制系統的結構體(5個進程)
-------------------------architecture one of jt is
type state_type is(s0,s1,s2,s3);
------------------定義狀態的類型
signal state:state_type;
------------------使用狀態機
signal k:std_logic;
------------------分頻后的1Hz的標準時鐘脈沖
signal c1,c2:integer range 0 to 30;
------------------定義東西、南北方向的兩個
倒計時的計數
signal t1:integer range 0 to 3600;
signal t2:integer range 0 to 24;------------------定義一個時鐘,用以控制白天與夜間模式 Begin------該進程用以分頻
-------------------------q0:process(clk)
variable tt:std_logic_vector(9 downto 0);
------------------中間變量
begin
if clk'event and clk='1' then
if tt=“1111101000” then
----------------------把所給1kHz分頻成1Hz的脈沖
k,10000分頻,仿真值用“ 0000000100”八分頻
tt:=(others=>'0');
k<='1';
else
tt:=tt+1;k<='0';
end if;
end if;end process q0;-------------------------
------該進程用以設計時鐘
-------------------------q1:process(k,reset)
begin
if reset='1' then
------------------啟動開關為1時,系統開始運行
t1<=0;t2<=0;
------------------從0點開始 elsif k='1' and k'event then if t1=3599 then
------------------一個t1循環是一個秒,仿真值用“35” if t2=23 then
-------------------一個t1循環是一個小時,一天24小時 t2<=0;
else t2<=t2+1;end if;t1<=0;else t1<=t1+1;end if;end if;end process q1;-------------------------------該進程用以控制白天黑天模式和紅綠燈狀態轉換
-------------------------q2:process(k,reset,t2)
begin
if t2>=5 and t2<=22 then
-------------------白天模式5:00到22:00之間
if reset='1' then
-------------------啟動開關為1時,系統開始運
行,進行狀態轉換
r1<='0';y1<='0';g1<='1';-------------------東西方向綠燈亮 r2<='1';y2<='0';g2<='0';-------------------南北方向紅燈亮 state<=s0;-------------------紅綠燈處于初始狀態s0 c1<=t0;
c2<=t0;-------------------倒計時從自由輸入值開始遞減 elsif k='1' and k'event then
case state is
when s0=>-------------------當處于第1狀態時,討論
if c1=5 then
--------------由于進程內部的并列進
行,當倒計時第4秒時,進入到第2狀態s1
state<=s1;
c1<=c1-1;
c2<=c2-1;
--------------倒計時遞減
elsif c2=0 then
------------倒計時減到0時,再從
初始值開始
c1<=t0;
c2<=t0;
else
----------------否則繼續保持第1狀態s0
state<=s0;
c1<=c1-1;
c2<=c2-1;
end if;
when s1=>-------------------當處于第2狀態時,討論
if c1=1 then--------------由于進程內部的并列進行,當
倒計時第t0秒時,進入到第3狀態s2
state<=s2;
c1<=c1-1;
c2<=c2-1;
else----------------否則繼續保持第2狀態
state<=s1;
c1<=c1-1;
c2<=c2-1;
end if;
when s2=>-------------------當處于第3狀態時,討論
if c2=5 then--------------由于進程內部的并列進行,當倒計時第4秒時,進入到第4狀態s3
state<=s3;
c1<=c1-1;
c2<=c2-1;
elsif c1=0 then
------------倒計時減到0時,再從初
始值開始
c1<=t0;
c2<=t0;
else
----------------否則繼續保持第3狀態
state<=s2;
c1<=c1-1;
c2<=c2-1;
end if;
when s3=>-------------------當處于第4狀態時,討論 if c2=1 then--------------由于進程內部的并列進行,當倒
計時第t0秒時,進入到第1狀態s0
state<=s0;
c1<=c1-1;
c2<=c2-1;
else----------------否則繼續保持第4狀態
state<=s3;
c1<=c1-1;
c2<=c2-1;
end if;
when others=> state<=s0;
end case;if state=s0 then
r1<='0';y1<='0';g1<='1';
r2<='1';y2<='0';g2<='0';elsif state=s1 then
r1<='0';g1<='0';
r2<='1';y2<='0';g2<='0';
if c1=4 or c1=2 then y1<='1';
else y1<='0';
end if;elsif state=s2 then
r1<='1';y1<='0';g1<='0';
r2<='0';y2<='0';g2<='1';elsif state=s3 then
r1<='1';y1<='0';g1<='0';
r2<='0';g2<='0';
if c2=4 or c2=2 then y2<='1';
else y2<='0';
end if;end if;
--各個狀態的紅綠燈變量的賦值,‘1’亮‘0’熄 end if;else-------------------夜間模式22:00到次日5:00之間
c2<=0;c1<=0;r1<='0';r2<='0';g1<='0';g2<='0';y1<=k;y2<=k----------------紅綠燈的狀態:脈沖k賦給黃燈變量,黃燈閃爍
end if;end process q2;-------------------------------該進程用于東西方向倒計時的譯碼顯示
-------------------------q3:process(c1)
begin case c1 is when 0=>ec0<=“0000”;ec1<=“0000”;when 1=>ec0<=“0001”;ec1<=“0000”;when 2=>ec0<=“0010”;ec1<=“0000”;when 3=>ec0<=“0011”;ec1<=“0000”;when 4=>ec0<=“0100”;ec1<=“0000”;when 5=>ec0<=“0101”;ec1<=“0000”;when 6=>ec0<=“0110”;ec1<=“0000”;when 7=>ec0<=“1000”;ec1<=“0000”;when 9=>ec0<=“1001”;ec1<=“0000”;when 10=>ec0<=“0000”;ec1<=“0001”;when 11=>ec0<=“0001”;ec1<=“0001”;when 12=>ec0<=“0010”;ec1<=“0001”;when 13=>ec0<=“0011”;ec1<=“0001”;when 14=>ec0<=“0100”;ec1<=“0001”;when 15=>ec0<=“0101”;ec1<=“0001”;when 16=>ec0<=“0110”;ec1<=“0001”;when 17=>ec0<=“0111”;ec1<=“0001”;when 18=>ec0<=“1000”;ec1<=“0001”;when 19=>ec0<=“1001”;ec1<=“0001”;when 20=>ec0<=“0000”;ec1<=“0010”;when 21=>ec0<=“0001”;ec1<=“0010”;when 22=>ec0<=“0010”;ec1<=“0010”;when 23=>ec0<=“0011”;ec1<=“0010”;when 24=>ec0<=“0100”;ec1<=“0010”;when 25=>ec0<=“0101”;ec1<=“0010”;when 26=>ec0<=“0110”;ec1<=“0010”;when 27=>ec0<=“0111”;ec1<=“0010”;when 28=>ec0<=“1000”;ec1<=“0010”;when 29=>ec0<=“1001”;ec1<=“0010”;when 30=>ec0<=“0000”;ec1<=“0011”;----------------------------當在設定范圍內時,分別為個位十位譯碼并顯示
when others=>ec0<=“0000”;ec1<=“0000”;
-------------------------否則,LED燈顯示0
end case;
end process q3;-------------------------------該進程用于南北方向倒計時的譯碼顯示
-------------------------q4:process(c2)
begin
case c2 is when 0=>nc0<=“0000”;nc1<=“0000”;when 1=>nc0<=“0001”;nc1<=“0000”;when 2=>nc0<=“0010”;nc1<=“0000”;when 3=>nc0<=“0011”;nc1<=“0000”;when 4=>nc0<=“0100”;nc1<=“0000”;when 5=>nc0<=“0101”;nc1<=“0000”;when 6=>nc0<=“0110”;nc1<=“0000”;when 7=>nc0<=“0111”;nc1<=“0000”;when 8=>nc0<=“1000”;nc1<=“0000”;when 9=>nc0<=“1001”;nc1<=“0000”;when 10=>nc0<=“0000”;nc1<=“0001”;when 11=>nc0<=“0001”;nc1<=“0001”;when 12=>nc0<=“0010”;nc1<=“0001”;when 13=>nc0<=“0011”;nc1<=“0001”;when 14=>nc0<=“0100”;nc1<=“0001”;when 15=>nc0<=“0101”;nc1<=“0001”;when 16=>nc0<=“0110”;nc1<=“0001”;when 17=>nc0<=“0111”;nc1<=“0001”;when 18=>nc0<=“1000”;nc1<=“0001”;when 19=>nc0<=“1001”;nc1<=“0001”;when 20=>nc0<=“0000”;nc1<=“0010”;when 21=>nc0<=“0001”;nc1<=“0010”;when 22=>nc0<=“0010”;nc1<=“0010”;when 23=>nc0<=“0011”;nc1<=“0010”;when 24=>nc0<=“0100”;nc1<=“0010”;when 25=>nc0<=“0101”;nc1<=“0010”;when 26=>nc0<=“0110”;nc1<=“0010”;when 27=>nc0<=“0111”;nc1<=“0010”;when 28=>nc0<=“1000”;nc1<=“0010”;when 29=>nc0<=“1001”;nc1<=“0010”;when 30=>nc0<=“0000”;nc1<=“0011”;---------------------------當在設定范圍內時,分別為個位十位譯碼并顯示
when others=>nc0<=“0000”;nc1<=“0000”;
end process q4;-------------------------end architecture one;
----所有進程結束-------------------------
八、仿真結果
1、clk為輸入脈沖;開始令reset為’1’,啟動系統,系統正常工作后值為’0; t0為紅綠燈循環時間,可自由修改,如果輸入值為’0010000’,則為16秒倒計時。如下圖:系統從0點開始運行,處于夜間模式時,倒計時都為“00”,兩個方向都為黃燈閃爍,紅綠燈都熄滅。
---------------------------否則,LED燈顯示0
end case;2、5:00之后,進入到白天模式:從第1狀態(東西方向綠燈亮、南北方向紅燈)開始,倒計時從16秒開始遞減。倒計時第4秒后進入第2 狀態(東西方向黃燈閃爍,南北方向紅燈亮)。
3、倒計時第0秒后進入第3 狀態(東西方向紅燈亮,南北方向綠燈亮),倒計時再從16秒開始遞減;倒計時第4秒后進入第4 狀態(東西方向紅燈亮,南北方向黃燈閃爍);倒計時第0秒后進入第1 狀態(東西方向綠燈亮,南北方向紅燈亮),倒計時再從16秒開始遞減
。如此循環。
4、當計時器到22:00時,再次進入夜間模式:東西南北方向黃燈閃爍;到次日5:00時又回到白天模式。如此循環。
九、討論與改進
特點:
1、在整個設計過程中,分進程實現整個功能,簡單明了;
2、狀態機的功能和優點得到了較為完整的體現;
3、分夜間和白天模式不同,系統自動調節;
4、黃燈以閃爍的形式亮;系統運行后紅綠燈循環點亮的時間也可自由修改。不足:
1、整個系統啟動后從夜間0點開始運行,而不能隨意調為哪個時間的交通燈狀態,只能從程序中改,不能手動調節;
2、整個功能還是比較簡單,未能分左右轉和直行的情況;
3、緊急情況處理時也無特殊處理的設置。
改進:
1、在進程中可增加一個輸入量,用以控制系統的時鐘時間,方便調節模式和交通燈狀態;
2、在進程中可加入幾個紅綠燈狀態來分別控制東西方向和南北方向的左轉、右轉和直行的紅綠燈狀態;
3、在原有程序的基礎上,可通過增加一個輸入量來控制一種特殊狀態,用以控制特殊情況的處理,視該特殊情況而定。
二○一○年九月三日
第三篇:電壓采樣電路設計總結報告
電壓采樣電路設計總結報告
專業班級: 電氣工程及其自動化
實習日期:2013年7月22日---7月26日
2013年7月26日
目錄
一、設計要求及目的:................................................2
二、所用元件:......................................................2
三、設計思路:......................................................2
1、電源部分電路.................................................3
2、電流-電壓轉化電路............................................4
3、電壓抬升電路:...............................................5
4、二階濾波電路.................................................6
5、方波轉換電路.................................................7
四、課程設計中出現的問題及解決方案..................................9
五、設計總結........................................................9
一、設計要求及目的:
1、設計目標:設計一個電壓采樣電路,對220v交流信號進行采樣,并利用運放對其進行處理,使其成為數模轉換器(A/D)能夠處理的信號。
2、基本要求:根據元件列表設計采樣電路及其工作電源回路,將220v交流輸入信號變為0-3v信號,并對其進行二階有源濾波,濾除高頻干擾信號,濾波后的信號平滑無畸變。
3、擴展:設計電路,將交流信號變為方波,過零點處干凈無毛刺信號。
4、設計目的:
1)加強自主性學習、研究性學習,加強團隊合作,提高創新意識; 2)通過該設計學會并掌握常用電子元器件的選擇和使用方法; 3)結合所學的電子電路的理論知識完成電壓采樣課程設計。
二、所用元件:
變壓器
1個、1N4007單向二極管
5個、470uF電解電容
4個 芯片7815和7915、緊密電流型電壓互感器
1個、LM324芯片 10K電位器
1個、201pF電容
2個
電阻:110KΩ1個、10KΩ5個、1Ω1個、1KΩ2個、470Ω1個、200Ω1個
三、設計思路:
電壓采樣電路基礎模塊的設計思路首先是220v交流電源經過電流型電壓互感器使強電轉換為弱電,再通過電流/電壓變換電路使其輸出電壓為-1.5v~+1.5v,接著通過一個反相加法運算電路使其輸出電壓抬升為0~3v,最后經過一個二階有源低通濾波電路對其進行濾波,濾除高頻干擾信號,濾波后的信號平滑無畸變,最后用一遲滯比較器將正弦波變成方波信號。
總電路圖為:
1、電源部分電路
電路圖為:
分析:通過電路圖中三個萬用表的示數可知,變壓器輸出交流電的有效值為15.078V,輸出的直流電壓為+15.517V和-15.633V,符合要求。
此電壓用于給給芯片LM324提供直流電源,以及提升電壓用。
1)電源變壓器:是降壓變壓器,它將電網220V交流電壓變換成符合需要的交流電壓,并送給整流電路,變壓器的變比由變壓器的副邊電壓確定。2)整流電路:利用4個單向導電元件,把50Hz的正弦交流電變換成脈動的直流電。
3)濾波電路:由于經過整流的直流脈沖電壓還含有較大的紋波,因此需要設計濾波電路將整流電路輸出電壓中的交流成分大部分加以濾除,從而得到比較平滑的直流電壓,用兩個470uF的電解電容。
4)穩壓電路:穩壓電路的功能是使輸出的直流電壓穩定,不隨交流電網電壓、負載的變化而變化,用7815和7915芯片。
2、電流-電壓轉化電路
思路:220V(有效值)交流電源經過110K歐姆的電阻后電流變為2mA(有效值),經過2mA/2mA的精密電流型的電壓互感器后電流仍未2mA,根據運放的虛短虛斷的原理可知,運放輸出的電壓峰峰值為-1.5V到+1.5V。
計算過程為:1.8mA*580Ω*√2=1.47V(由于給的功率電阻是121K的,所以電流為1.8mA)電路圖為:
輸出波形圖為:
3、電壓抬升電路:
思路:利用反向加法器的原理將正負1.5V的電壓提升到0-3V,所用提升電壓為直流電源提供的-15.633V電壓,通過參數選擇可以實現此模塊。
電路圖為:
計算公式為:U02=-[U01*1KΩ/1KΩ+(-15)*1KΩ/10KΩ],U02為0-3V的正弦波。其中470歐姆的電阻是平衡電阻,其計算過程為1K//1K//10K,三個電阻并聯的阻值。
輸出波形為:
經測試后在示波器上得到的波形與仿真波形相似,但稍有毛刺。
4、二階濾波電路
思路:利用所學的二階低通濾波電路可以設計出符合要求的濾波電路
電路圖為:
根據其要求對0-3V電壓進行二階有源濾波,濾除高頻干擾信號,濾波后的信號平滑無畸變。
根據二階低通有源濾波的公式得:
f0=1/(2*3.14*R*C),我們選擇電阻值為1MΩ,電容值為201pF,故 f0=1/(2*3.14*1*10*201*10)=792.2Hz,近似為800Hz,符合要求。由“虛短”和“虛斷”的特點可得方程:
U+=U-=U03*R8/(R7+R8)=U03/(1+R8/R7)=U03/Aup,應使U+=U-=U03 得Aup =1,則取R7=2MΩ,R8=1Ω,目的是使濾波的低通增益為1,不會改變之前0—3v電壓的波形。經濾波后的U03的波形為0-3V正弦波。
輸出波形圖為: 6
2從示波器上測試的結果稍微有點相位差,兩個波形并不是完全的重合,但是誤差不大,分析原因為電阻有一定的誤差。
5、方波轉換電路
思路:利用遲滯比較器,不用過零比較器的原因是,過零比較器是輸入信號與零點相比較,但正弦波的零點會有抖動,所以方波會出現脈沖,用遲滯比較器可以將零點越過去。然后后面加一單向導通的二極管,只留下方波的上半部分。
電路圖為:
分析過程為:
R11之前接的是第一個運放的輸出U01即峰值1.5V的正弦波,設計要求中,需要將輸出波形的毛刺去除,所以所用電路為遲滯比較器。為運放的正輸入端電壓近似為0,有公式得:
U+=U04*R14/(R14+R11),則應使R14遠小于R11。經多次的仿真調試,我們選擇R14=150Ω,R11=10KΩ.波形圖為:
所焊的電路在示波器上檢測的波形雖有一定的相位差,但總體上符合要求,分析產生相移的原因為,用的是遲滯比較器,不可能嚴格過零點只能盡量去接近零點。
四、課程設計中出現的問題及解決方案
1、設計電路首先在電腦上用軟件仿真,以此來選取參數,不同的仿真軟件可能有不同的結果,運放也會出現問題,不過通過不斷的更改參數,不斷的理論計算在仿真,最終出現了各部分波形圖。
2、這次所用的芯片是LM324,是四個運放集合在一個芯片上,所以布局很重要,通過組內討論,將繞線最少,電路最簡單為目的。
3、剛開始輸出的方波和正弦波有一定的相位差,分析其原因是電阻參數選取的不合適,運放是用作電壓比較器用,所以輸入端電壓越接近零越好。通過改變參數,最終在老師那檢測的結果基本符合要求。
五、設計總結
1、通過近幾天的實習,我們學習了采樣電路設計的相關知識,遇到問題互相討論最終解決;
2、實踐出真知,無論課本上講的內容如何,只有通過實踐才能獲得真正的真 理,所以在以后的學習生活中要理論聯系實際,多動手動腦;
3、團隊的力量大于個人,我們三人分工明確并將遇到的各種問題討論后一一解決,所以只有團隊合作,才能把事情做好;
4、這次實習進一步的提高了我們的焊接與整體布局能力,對于電路的焊接在技術上更加熟練,在布局上更加美觀,讓學長檢查電路時,學長建議能走錫的話盡量少走線;
5、我們對于Multism軟件有了更深一層次的掌握與運用,在今后的學習中會有很大的幫助。
下面是我們的電路實物圖和布局圖
第四篇:數字電子鐘邏輯電路設計總結報告
課程設計總結報告
寫總結報告是對學生寫科學論文和科研總結報告的能力訓練。總結報告包括以下內容: 1.報告名稱
2.內容摘要(<300字)3.設計內容及要求
4.方案比較,畫出系統框圖,確定使用的方案。
5.單元電路設計、參數計算和器件的選擇(含器件功能表)并說明單元電路工作原理。
6.畫出完整的電路圖 7.安裝調試內容,包括:
(1)使用的主要儀器和儀表;(2)調試電路的方法和技巧;
(3)測試的數據和波形,并與計算結果比較分析;(4)調試中出現的故障、原因及排除方法。
8.總結設計電路的特點和方案的優缺點,提出進一步的改進意見和未來的發展。9.列出所用的元器件 10.列出參考文獻
第五篇:基于FPGA的交通燈控制電路設計
基于FPGA的交通燈控制電路設計
關鍵字: 交通信號機 FPGA 脈沖發生器
目前交通燈廣泛應用于道路交通建設中。本文設計一個十字路口交通燈控制電路,要求東西、南北兩條干道的紅、綠、黃交通燈按要求循環變化,并以倒計時方式指示干道通行或禁止的維持時間。在QuartusⅡ軟件環境中設計、仿真,并在FPGA實驗板上實現所設計電路的功能。
系統概述
1.1 設計思想
基于FPGA的交通燈系統控制設計包括4大模塊,分別為脈沖發生、狀態定時、交通燈閃爍的控制、閃爍時間的控制,基本原理如圖1所示。
1.2 總體工作情況
交通燈控制要求如表1所示。
該設計的交通燈控制分為6個狀態。由于各狀態持續時間不同,所以電路的核心控制部分是狀態機和定時器,狀態機在定時器觸發下周期性循環,狀態碼控制6個燈以一定的規律變化。變化情況如圖2所示。
系統脈沖由FPGA開發板晶振經過分頻電路實現。狀態定時由74190可逆十進制計數器和T’觸發器實現,只要置數合理,翻轉信號到位,就可以使電路在東西(I)、南北(J)兩個控制狀態間翻轉。紅、黃、綠燈的閃爍由7485數字比較器和組合邏輯控制,其中7485數字比較器用于比較計數器當前持續狀態和所需要的狀態全部時間,并做出相應的變化。組合邏輯控制由AHDL文件編寫真值表實現。時間顯示由AHDL文件編寫真值表實現,輸入正確的邏輯,七段譯碼電路即能得到正確的時間顯示。
1.3 各功能的組成
整個電路可以分為4大部分,包括脈沖發生、狀態定時、時間顯示和數字比較一組合邏輯控制。
1.3.1 脈沖發生
脈沖發生器為整個系統提供驅動,將輸入端分配給FPGA實驗板的PIN55引腳,則會由實驗板上產生頻率為10 MHz的輸入脈沖,用7片7490,每一級都構成10分頻電路,使頻率從10 MHz降低為1Hz。
1.3.2 狀態定時
狀態定時可由預置BCD碼初值的74190級聯實現,構成減計數器。級聯原則是:低位計數器從全0狀態變為最大碼值狀態時可使高位計數器減1。級聯方式分為異步和同步兩種,本文采取的是異步級聯方式,即低位計數器溢出信號控制高位計數器的記數脈沖輸入端。可根據計數器的時鐘觸發方式,在低位計數器狀態碼從全“0”變為最大碼值的瞬間,為高位計數器提供有效的計數脈沖邊沿。具體做法是將低片位的溢出信號RCON端口接到高片位的計數脈沖CLK,實現兩位BCD碼的置數、翻轉和借位,使系統表示的數字能在22~16之間循環。
74190功能說明:
(1)GN為計數器使能控制端,低電平有效。當GN為高電平時,禁止計數。
(2)DNUP為計數方式控制,接高電平為減計數,接低電平為加計數。
(3)LDN為異步預置數控制。當LDN為低電平時,計數器狀態QD,QC,QB,QA分別等于D,C,B,A。
(4)計數器位序由高至低順序為QD,QC,QB,QA。QD為最高位MSB,QA為最低位LSB。
(5)計數脈沖CLK上升沿有效。
(6)當計數器輸出QDQCQBQA為十進制加計數的最大狀態碼“1001”或為減計數的最小狀態碼全“0”時,極值狀態碼指示MAX/MIN輸出為高電平。
(7)當極值狀態碼指示MAX/MIN為高電平且CLK為低電平時,溢出信號RCON為低電平,即RCON與計數脈沖同步。
系統記數脈沖為1 Hz時,如表2所示,當I狀態(東西控制狀態)的定時時間為22 s,計數器應該先預置22的BCD碼;同理,J狀態(南北控制狀態)之前應該預置16的BCD碼。
狀態計時電路由兩片74190級聯而成,構成22和16自翻轉的電路。其要解決的核心問題包括置數,翻轉和借位。根據74190芯片的特點,可分析其實現原理如圖4所示,通過溢出信號RCON的上升沿實現借位,使得數字能夠從20到19,個位向十位借位,順利過渡。
置數和翻轉之間有先后關系,即須先置數后翻轉。如表3所示,分析兩個BCD碼各位特點,可知兩者D7D6D3D0位均為1,D1位均為0,而D5D4D2位不同,如圖5,D5D4D2位由狀態電平S來控制,當為I狀態時,計數器的預置的數為D5=0,D4=D2=1,而為J狀態時,計數器的預置的數為D5=1,D4=D2=0,根據74190的功能,將2片74190的MAX/MIN引出,通過與非門,分別連在高位和低位的LDN置數端,通過分析可知,當計數器從01減到00時候,高低位的MAX/MIN均為高電平,經過與非門以后為低電平,74190被置數,其置數值由狀態S來決定,S是由LDN端信號經過一個T’觸發器決定的,即LDN信號每置數一次,S翻轉1次,從而區分16和22狀態。按這個結構,可分別置數16和22,使其實現自翻轉。
圖5為狀態定時模塊的實際連接圖。
1.3.3 時間顯示
時間顯示要用到7段顯示譯碼電路,由于是兩位BCD碼,故用二選一數據選擇器。選擇端S接一個頻率很高的方波(如1 kHz);數據比較器的輸出和1 Hz脈沖作為AHDL模塊的輸入,即可正確顯示時間。
為正確顯示時間,用AHDL文件自編譯碼真值表如下:
1.3.4 數字比較一組合邏輯控制
該模塊將狀態定時模塊輸出的時間與時間節點進行比較,從而確定電路處于22 s或者16 s的具體的某個狀態。由表1可知,東西(I)或南北(J)的控制狀態都有3個階段的控制邏輯,分別對應3個時間段:1~3 s,4~6 s和大于6 s,因此,采用數字比較器進行比較,確定定時值小于4 s或大于6 s,方法如圖7所示,采用4片7485數字比較器,兩兩級聯,其中一個由狀態定時模塊的輸出與4即二進制0100比較;另一個由狀態定時模塊的輸出與6即二進制0110比較。
編寫組合邏輯真值表,將狀態信號S,兩個數字比較器的輸出Y1,Y2和1 Hz脈沖作為輸入,各個燈的狀態作為輸出。從而根據邏輯關系得出對應時間電路的狀態,控制紅、黃、綠燈處于不同的狀態。S判斷電路處于22 s狀態還是16 s狀態,Y1,Y2區分東西、南北六個階段狀態,1 Hz脈沖實現綠燈閃爍。電路的組構與調試
來用QuartusⅡ軟件設計各個模塊,并進行仿真。確認結果后,下載至FPGA實驗板中,進行相應的硬件調試,調試結果與仿真結果相一致。圖8為仿真波形,系統上電需要調整的過程,因此電路正常工作前重復了22s的狀態。