第一篇:簡易信號發生器設計
《單片機原理及應用》課程設計任務書 課程設計題目:簡易信號發生器設計
一、設計目的和要求
(一)、設計目的通過設計簡易信號發生器,完成系統設計、編碼、調試及維護工作的實踐,了解單片機應用系統的一般設計思路,熟悉和掌握硬件系統和軟件設計的一般方法。
(二)、設計要求
1.設定功能:能通過按鍵設定信號類型、頻率
2.顯示功能:通過數碼管或液晶顯示當前波形類型和頻率。
3.計數功能:能設定自動輸出多少個周期該波形后停止輸出,直到再次按下觸發按鈕
二、設計內容及步驟
1.系統分析,完成系統分析報告
2.根據的系統結構圖、課程實驗,查閱資料,確定系統各個模塊的譯碼電路和地址范圍以及其它硬件型號,詳細畫出系統硬件原理圖。
3.程序流程圖,編制程序。
4.調試修改顯示子模塊、鍵盤掃描子模塊、定時器中斷子模塊和主程序
5.編寫課程設計報告
內容包括:題目、摘要、目錄、正文、結論、致謝、參考文獻等。學生在完成上述全部工作之后,應將全部內容以先后順序寫成設計報告一份,闡述整個設計內容,要求重點突出、特色鮮明、語言簡練、文字通暢,字跡工整。報告要求在專用報告書上書寫。
6.完成課程設計報告,設計報告字數不得少于3000 字撰寫要求如下: ·設計任務
·問題定義、理論分析
·理論設計(程序功能結構、算法說明和程序框圖)
·上機調試(實驗環境、實驗說明和程序清單)
·結果分析
·心得體會
三、進度安排
按教學計劃規定,單片機原理及應用課程設計總學時為一周,其進度及時間大致分配如下:
序號 設計內容天數(約占比例)查閱資料(約占8%)確定設計思路(約占15%)畫出硬件圖、確定各個模塊的電路實現方法(約占27%)編寫程序(約占25%)調試修改各子模塊和主程序(約占15%)總結設計過程,編寫課程設計報告1(約占10%)
第二篇:簡易正弦信號發生器的設計
實驗六 簡易正弦信號發生器的設計
一、實驗目的1.進一步熟悉Quatus軟件的使用方法;
2.掌握邏輯分析儀的使用方法;
3.掌握LPM-ROM的使用方法;
二、實驗內容
定制LPM-ROM模塊,并利用其設計一個簡易的正弦信號發生器,該信號發生器由以下三部分組成:
(1)計數器或地址信號發生器;
(2)正弦信號數據存儲器ROM(6位地址線,8位數據線),含有128個8位波形數據(一個正弦波形周期)。
(3)VHDL頂層程序設計
注意:本實驗中未給正弦信號波形接D/A轉換器,因而采用邏輯分析儀進行觀察,具體觀察方法見教材208頁。
本實驗中待測信號為ar和q。時鐘選擇clk;時能信號為en,高電平觸發。
三、實驗記錄
1.VHDL語言程序
2.仿真波形
3.邏輯分析儀觀察結果。
四、問題討論
1.總結宏功能模塊的應用環境,可實現哪些設計?
2.設計一個方波生成器。
第三篇:簡易函數信號發生器設計.doc
摘 要
本方案主要用集成運放LM324和74HC04等元器件設計組成一個簡易函數信號發生器。該函數信號發生器主要由振蕩電路、模擬比較器電路、二階RC有源低通濾波器電路和反相放大器電路等四部份組成。
振蕩電路形成方波,再經模擬比較器電路升高幅度完成輸出;二階RC有源低通濾波器電路形成正弦波,再經過電位器實現1~12V可調。由此構成了一個簡易的函數信號發生器。
本實驗主要通過使用Orcad、DXP軟件等完成電路的軟件設計。
目 錄 方案比較與選擇(須詳細闡述創新點或新見解)························· 3 2 電路分析與仿真················································································ 5 3電路板制作、焊接、調試 ······························································· 11 3.1 軟件制作 ················································································ 11 3.2 硬件制作 ················································································ 13 3.3 電路板調試 ··········································································· 14 4討論及進一步研究建議 ··································································· 18 5課程設計心得 ·················································································· 18 6 Abstract ····························································································· 19 7參考文獻 ·························································································· 20
一、方案分析:
方案一:
方案
二、R3U1A1274HCT04R2R165k6.5kC150nvoR5210kLM324-1U2A274HCT043voVCC310k10kVCC1U3A+V+4R40OUTV-1R620kvo1VCC211R7C2100nR8vo11k1kC3R93VCC1U4A41k0V++OUT-V-1vo2C4vo3R1210kR13vo310kR14210kLM3243VCC1U7A+4V+0100n2LM324100nOUT-V-1Vo4VCC211R100VCC2R172kR112kVCC1VCC2V2-9Vdc5VdcVCC3V340k0R16112k009VdcV10
以上就是我們所查閱到的兩個方案,對于方案一,此方案對比方案二,增加了由方波轉 變為三角波部分,而且使用電位器來分壓,方波--三角波部分主要是同一個積分器和一 個比較器組成的.積分器部分中的RC可以調整三角波的頻率,而比較器部分可以調整三角
波的幅值,理論上存在很大的優越性,但經過仿真,卻發現輸出波形失真較大,跟理論有較大差別,而反復調試后沒能改正,于是轉向執行方案二,方案二雖然少了三角波部分,但經仿真,輸出波形比較接近理想正弦波,而且此方案簡單明了,各部分功能清晰,更易于操作。故最終選擇方案二。
二、電路分析與仿真
1、多諧振蕩器
由CMOS門電路組成的多諧振蕩器主要是利用RC電路的充放電特性來實現,以獲得所需要的振蕩頻率.方波電路圖
0—5v仿真圖如下
參數確定:
因為VDD=5V,74HCT04的輸入高電平為3.5V,所以對于第一暫穩態(電壓為0時)T1=R2*C1*㏑[VDD/(VDD-Vth)],第二暫穩態T2=R2*C1*㏑(VDD/Vth),T=T1+T2≈R2*C1*㏑4≈1.4*RC.又由f=1KHZ,f=1/T得,f=1/(1.4R2*C1).設C1=100nF,則可求得R2≈7.2K.2、比較器
比較器主要由LM324構成,VCC3=5V,R3=R4=10K,起到分壓作用,因此3腳的電壓為2.5V,當0—5V方波由2腳進入時,高于2.5V時1腳輸出+5V,低于2.5V時1腳輸出-5V,因此得到±5V方波.參數選擇適合的即可.比較器
±9v仿真圖
3、二階低通濾波器
二階低通濾波器由LM324和R,C組成,設置它的頻率為1.5KHZ,則它的功能是從0到1.5KHZ的低頻信號,而對大于1.5KHZ的所有頻率則完全衰減.C4作用是過濾正弦波里的直流電壓.參數確定:
f=1/(2*3.14*RC)=1.5KHZ,設C=100nF,則可求得R≈1K.因為增益A=1+R10/R11=2,所以取R10=R11=2K.二階低通濾波器電路圖
仿真圖
4、反相比例放大器
對上述濾波器得到的正弦波進行放大或縮小,因為vo4=-(R16/R14)*vo3,所以R16/R14比例變化,vo4峰峰值就能由1伏調至12伏。
反相比例放大器電路圖
仿真圖
幅頻響應
相頻響應
三、板制作、焊接、調試 3.1、軟件制作
1、繪制原理圖
1).打開DXP軟件,選擇FILE,NEW,PCB PROJECT,新建一個項目文件,保存新建的項目文件,在項目文件中新建原理圖文件和PCB文件,保存新建的原理圖文件和PCB文件。
2).畫出下面的原理圖(圖3.1)。
圖3.1
3).雙擊各元件,更改數值,并通過【Tools】菜單【Annotate】命令來自動編號,校正原理圖。
2、生成PCB圖
1).在KEEP-OUT LAYER 層畫出電氣邊界,在Mechanicall層畫出機械邊界。
2).原理圖的元器件連接表的載入,打開原理圖,打開【Design】菜單中的【Update pcb document?】命令,將PCB導入到PCB文件中。3).元器件布局,按照走線最短的原則放置元件的位置。
4).設定布線規則,步驟是在電氣邊界內部右擊,選擇【Design】/[Rules?]打開設置對話框設置相應的選項。
5).布線:先設定為制作單層板,然后使用【Auto Route】菜單中的【All】進行自動布線,打開對話框后,點擊右下角的Route All按鈕即可。但自動布線一般是不能達到最佳效果的,所以自動布線只是有一個大概的模型,之后還要經過手工調整才能達到想要的效果。
6)、最后做成PCB圖如下所示:
3、在DXP中遇到的問題:
1)、布線沒有調整線的寬度,用默認的0.25mm的線,但有些同學改為了0.5mm的線打印出來還是很細,這樣腐蝕的時候就有可能斷掉,所以我們最后又重新把每一根線改為了1mm。
2)、畫圖的時候沒有注意焊盤的大小,雖然打印之前有逐一加大,但由于一開始沒有考慮到線與焊盤之間的關系,以至于有些線與焊盤靠得太近,所以不能改太大,所以最后打印出來有些焊盤還是偏小。
3)、沒有注意元器件的封裝問題。我們一開始電容用的封裝是RAD0.3,這個封裝兩個針腳之間可以穿越一條線,這與實物不相符。再用回RAD0.1封裝時,兩個針腳之間不穿越
線,所以也得重新布局。封裝可以在原理圖上改,也可以在PCB圖里改。
4)、畫線之前忘記設定為單層板,以至于畫出來的線有一部分是紅色的,后來改為只選取bottom layer,畫出來的線就全部是藍色的了。
5)、用自動布線的時候,系統有些線是重連的,就如地線是經常重連的,我們只需要一條線都共地就可以了;有些線是布置得密,我們就把那些線分開一點。以免敷銅時線會接在一起短路。
3.2、硬件制作
電路板的制作共分為四個部份:
第一、用熱敏紙打印DXP電路圖。
第二、將用熱敏紙打印出來的DXP電路圖印在電路板上。首先把用沙紙磨擦過的電路板(能更好地吸碳粉)對準熱敏紙電路圖封裝好,盡量貼緊,然后放進封塑機進行封塑,封塑機的溫度要保持在恒溫150攝氏度,封塑過程要進行十幾個來回,以保證熱敏紙上的電路圖形態的碳粉能盡量多地印在電路板上。這個過程要持有一定的耐心。有些同學在加熱的時候把封塑機上加熱/冷悼的健打到冷悼上,以至于雖然進行了二十多個來回,但最后也只是把一部分電路印在了電路板上,既浪費了時間,也浪費了電路板。
第三、電路板去銅。這個過程首先必須要注意安全。首先是調配溶液,溶液總量以剛沒盤底為宜,以節省材料。所用的水、過氧化氫、鹽酸的比例是2:1:1,但如果要爭取時間也可以適當加多鹽酸和過氧化氫的量,調配好溶液后,輕輕地把印有電路圖的電路板放進去,然后觀察板上銅的反應直至除碳粉覆蓋的銅外全部銅都反應溶解完全。看到銅被溶解完之后就拿去用清水洗干凈。在這一過程中還要注意手套是否穿了。
第四、打孔。這一步也具有一定的危險性,指導老師反復強調要注意安全。打孔時,固定好電路板,先將鉆頭對準電路板上的需要打孔的點,然后用手操作控制桿快速往下壓,這樣就可以。在打孔之前最后先調好鉆頭的轉速,打快或太慢都不好。這一步要極具耐心與細心,否則容易出事故導致前功盡棄。
電路板的制作也就完成了,接下來就到了電路板的焊接。首先,測試好元器件的值,然后對照電路圖對號入座,由于我們的布線比較細,所以在焊接的過程中一定要小心,否則很容易就會發生短路現象。
3.3電路板調試
電路板的制作與焊接都完成后,就到了電路的調試過程。連接電源,這一過程可先用萬用表測量給出是否為±9V,連到器件上的時候千萬不要接錯工作電壓,不然會燒掉運放LM324。
1、觀察給+5V的方波輸出:示波器一端接多諧振蕩器輸出測試點,一端接地;觀察輸出波形如圖
3.1,該圖為為輸出幅度+5V
方波。
圖3.1
2、觀測±9V的方波輸出:將示波器另一端接比較器輸出點,這個主要是觀測幅度是否達到±9V。如圖3.2:
圖3.2
4、最后觀測輸出波:經濾波放大后 如圖3.3
圖3.3
最后,因為我們用是電位器分壓,而實際給出的正弦波與仿真時的Vpp相差較多,仿真時可以達到Vpp=14V,而實際出來的只是9V,最后因為實際與仿真相差過大,從而用電位器不能分到12V,這是本電路的一個缺點。
四、討論及進一步研究建議
本設計雖然最終實現了正弦波形的輸出,但仍存在較大的不足,尤其是多諧振蕩器輸出的方波不能實現占空比的調整,這就使最后輸出的正弦波形的可調性產生了很大的局限性,這對一個函數信號發生器而言顯然是個很大的缺陷,但由于在設計過程中的疏忽而最終沒能實現這一功能,實在是一大敗筆。另外,對于方案一中的電路,雖然我們不知什么原因沒能通過仿真而最終舍棄了,但理論上確實存在著很大的可行性,尤其是三角波部分的電路,相當于一個過渡,使得方波到正弦波的轉換更加自然,最終輸出的波形當然就更加接近正弦波了,所以如果在我們的電路上再加上調節占空比與三角波電路的部分將使電路更加理想。
五、課程設計心得
通過對函數信號發生器的設計,我深刻認識到了“理論聯系實際”的這句話的重要性與真實性。而且通過對此課程的設計,我不但知道了以前不知道的理論知識,而且也鞏固了以前知道的知識。最重要的是在實踐中理解了書本上的知識,明白了學以致用的
真諦。也明白老師為什么要求我們做好這個課程設計的原因。他是為了教會我們如何運用所學的知識去解決實際的問題,提高我們的動手能力。在整個設計到電路的焊接以及調試過程中,我個人感覺調試部分是最難的,因為你理論計算的值在實際當中并不一定是最佳參數,我們必須通過觀察效果來改變參數的數值以期達到最好。而參數的調試是一個經驗的積累過程,沒有經驗是不可能在短時間內將其完成的,而這個可能也是老師要求我們加以提高的一個重要方面吧!另外也學到了團隊協作的重要性,在整個設計過程中,正是因為我們各位隊員分工合作,攜手合力,最終才能在規定的時間內順利的完成了任務。雖然完成的結果仍然存在著種種的不如人意,但我們確實在實踐過程中受益匪淺。
―
參考文獻
[1].康華光,陳大欽等。電子技術基礎數字部份(第四版)。高等教育出版社。2006.4:355~356。
[2].康華光,鄒壽彬等。電子技術基礎模擬部份(第四版)。高等教育出版社。2006.4:370~371。
[3].謝自美,電子線路設計.實驗.測試(第二版)。華中科技出版社。2000.7 ISBN7-5609-2166-3
第四篇:簡易函數信號發生器
波形發生器是一種常用的信號源,廣泛地應用于電子電路、自動控制系統和教學實驗等領域。本次課程設計使用的AT89S51 單片機構成的發生器可產生鋸齒波、三角波、正弦波等多種波形,波形的周期可以用程序改變,并可根據需要選擇單極性輸出或雙極性輸出,具有線路簡單、結構緊湊等優點。在本設計的基礎上,加上按鈕控制和LED顯示器,則可通過按鈕設定所需要的波形頻率,并在LED上顯示頻率、幅值電壓,波形可用示波器顯示。
二、系統設計
波形發生器原理方框圖如下所示。波形的產生是通過AT89S51 執行某一波形發生程序,向D/A轉換器的輸入端按一定的規律發生數據,從而在D/A轉換電路的輸出端得到相應的電壓波形。在AT89S51的P2口接5個按扭,通過軟件編程來選擇各種波形、幅值電壓和頻率,另有3個P2口管腳接TEC6122芯片,以驅動數碼管顯示電壓幅值和頻率,每種波形對應一個按鈕。此方案的有點是電路原理比較簡單,實現起來比較容易。缺點是,采樣頻率由單片機內部產生故使整個系統的頻率降低。
1、波形發生器技術指標
1)波形:方波、正弦波、鋸齒波;
2)幅值電壓:1V、2V、3V、4V、5V;
3)頻率:10HZ、20HZ、50HZ、100HZ、200HZ、500HZ、1KHZ;
2、操作設計
1)上電后,系統初始化,數碼顯示6個‘-’,等待輸入設置命令。
2)按鈕分別控制“幅值”、“頻率”、“方波”、“正弦波”、“鋸齒波”。
3)“幅值“鍵初始值是1V,隨后再次按下依次增長1V,到達5V后在按就回到1V。
4)“頻率“鍵初始值是10HZ,隨后在按下依次為20HZ、50HZ、100HZ、200HZ、500HZ、1000HZ循環。
三、硬件設計
本系統由單片機、顯示接口電路,波形轉換(D/A)電路和電源等四部分構成。電路圖2附在后
1、單片機電路 功能:形成掃描碼,鍵值識別、鍵處理、參數設置;形成顯示段碼;產生定時中斷;形成波形的數字編碼,并輸出到D/A接口電路和顯示驅動電路。
AT89S51外接12M晶振作為時鐘頻率。并采用電源復位設計。復位電路采用上電復位,它的工作原理是,通電時,電容兩端相當于短路,于是RST引腳上為高電平,然后電源通過對電容充電。RST端電壓慢慢下降,降到一定程序,即為低電平,單片機開始工作。
AT89S51的P2口作為功能按鈕和TEC6122的接口。P1口做為D/A轉換芯片0832的接口。用定時/計數器作為中斷源。不同的頻率值對應不同的定時初值,允許定時器溢出中斷。定時器中斷的特殊功能寄存器設置如下:
定時控制寄存器TCON=20H;
工作方式選擇寄存器TMOD=01H;
中斷允許控制寄存器IE=82H。
2、顯示電路
功能:驅動6位數碼管顯示,掃描按鈕。
由集成驅動芯片TEC6122、6位共陰極數碼管和5個按鈕組成。當某一按鈕按下時,掃描程序掃描到之后,通過P2口將數字信號發送到 TEC6122芯片。TEC6122是一款數字集成芯片。它的外接電壓也是+5V,并且由于數碼管的載壓較小,為了保護數碼管,必須在兩者間接電阻,大約是560歐。
掃描利用軟件程序實現,當某一按鍵按下時,掃描程序立即檢測到,隨后調用子程序,執行相應的功能。
3、D/A電路
功能:將波形樣值的編碼轉換成模擬值,完成雙極性的波形輸出。
由一片0832和兩塊LM358運放組成。DAC0832是一個具有兩個輸入數據寄存器的8位DAC。目前生產的DAC芯片分為兩類,一類芯片內部設置有數據寄存器,不需要外加電路就可以直接與微型計算機接口。另一類芯片內部沒有數據寄存器,輸出信號隨數據輸入線的狀態變化而變化,因此不能直接與微型計算機接口,必須通過并行接口與微型計算機接口。DAC0832是具有20條引線的雙列直插式CMOS器件,它內部具有兩級數據寄存器,完成8位電流D/A轉換,故不需要外加電路。0832是電流輸出型,示波器上顯示波形,通常需要電壓信號,電流信號到電壓信號的轉換可以由運算放大器LM358實現,用兩片LM358可以實現雙極性輸出。
單片機向0832發送數字編碼,產生不同的輸出。先利用采樣定理對各波形進行抽樣,然后把各采樣值進行編碼,的到的數字量存入各個波形表,執行程序時通過查表方法依次取出,經過D/A轉換后輸出就可以得到波形。假如N個點構成波形的一個周期,則0832輸出N個樣值點后,樣值點形成運動軌跡,即一個周期。重復輸出N個點,成為第二個周期。利用單片機的晶振控制輸出周期的速度,也就是控制了輸出的波形的頻率。這樣就控制了輸出的波形及其幅值和頻率。
四、軟件設計
主程序和子程序都存放在AT89S51單片機中。
主程序的功能是:開機以后負責查鍵,即做鍵盤掃描及顯示工作,然后根據用戶所按的鍵轉到相應的子程序進行處理,主程序框圖如圖1所示。
子程序的功能有:幅值輸入處理、頻率輸入處理、正弦波輸出、鋸齒波輸出、方波輸出、顯示等。
下面是程序
include
#define uchar unsigned char
#define uint unsigned int
sbit LCP=P2^2;
sbit SCP=P2^1;
sbit SI=P2^0;
sbit S1=P2^3;
sbit S2=P2^4;
sbit S3=P2^5;
sbit S4=P2^6;
sbit S5=P2^7;
sbit DA0832=P3^3;
sbit DA0832_ON=P3^2;uchar fun=0,b=0,c=0,d=0,tl,th;
uchar code tab[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar code tosin[256]={0x80,0x83,0x86,0x89,0x8d,0x90,0x93,0x96,0x99,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae,0xb1,0xb4,0xb7,0xba,0xbc,0xbf,0xc2,0xc5 ,0xc7,0xca,0xcc,0xcf,0xd1,0xd4,0xd6,0xd8,0xda,0xdd,0xdf,0xe1,0xe3,0xe5,0xe7,0xe9,0xea,0xec,0xee,0xef,0xf1,0xf2,0xf4,0xf5 ,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd ,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,0xf4,0xf2,0xf1,0xef,0xee,0xec,0xea,0xe9,0xe7,0xe5,0xe3,0xe1,0xde,0xdd,0xda ,0xd8,0xd6,0xd4,0xd1,0xcf,0xcc,0xca,0xc7,0xc5,0xc2,0xbf,0xbc,0xba,0xb7,0xb4,0xb1,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x99 ,0x96,0x93,0x90,0x8d,0x89,0x86,0x83,0x80,0x80,0x7c,0x79,0x76,0x72,0x6f,0x6c,0x69,0x66,0x63,0x60,0x5d,0x5a,0x57,0x55,0x51 ,0x4e,0x4c,0x48,0x45,0x43,0x40,0x3d,0x3a,0x38,0x35,0x33,0x30,0x2e,0x2b,0x29,0x27,0x25,0x22,0x20,0x1e,0x1c,0x1a,0x18,0x16 ,0x15,0x13,0x11,0x10,0x0e,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02 ,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x15 ,0x16,0x18,0x1a,0x1c,0x1e,0x20,0x22,0x25,0x27,0x29,0x2b,0x2e,0x30,0x33,0x35,0x38,0x3a,0x3d,0x40,0x43,0x45,0x48,0x4c,0x4e ,0x51,0x55,0x57,0x5a,0x5d,0x60,0x63,0x66 ,0x69,0x6c,0x6f,0x72,0x76,0x79,0x7c,0x80 };
void display(unsigned char command){
unsigned char i;LCP=0;
for(i=8;i>0;i--){
SCP=0;
if((command & 0x80)==0){
SI=0;}
else {
SI=1;}
command<<=1;
SCP=1;}
LCP=1;}
void key1(void){
fun++;
if(fun==4)
fun=0x00;}
void key2(void){
tl++;
if(tl==0x1f)
th++;}
void key3(void){
tl--;
if(tl==0x00)
th--;}
void key4(void){
double t;
int f;
TR0=0;
t=(65535-th*256-tl)*0.4;
f=(int)(1000/t);
S3=tab[f%10];
f=f/10;S2=tab[f%10];
f=f/10;
if(f==0)
S1=0;
else
S1=tab[f];
TR0=1;}
void key5(void){
tl--;
if(tl==0x00)
th++;}
void judge(void){
uchar line,row,de1,de2,keym;
P1=0x0f;
keym=P1;
if(keym==0x0f)return;
for(de1=0;de1<200;de1++)
for(de2=0;de2<125;de2++){;} P1=0x0f;
keym=P1;
if(keym==0x0f)return;
P1=0x0f;
line=P1;
P1=0xf0;
row=P1;
line=line+row;/*存放特征鍵值*/
if(line==0xde)key1();
if(line==0x7e)key2();
if(line==0xbd)key3();
if(line==0x7d)key4();}
void time0_int(void)interrupt 1 //中斷服務程序 {
TR0=0;
if(fun==1){
DA0832=tosin[b];//正弦波
b++;}
else if(fun==2)//鋸齒波 {
if(c<128)
DA0832=c;
else
DA0832=255-c;
c++;}
else if(fun==3)// 方波
{
d++;
if(d<=128)
DA0832=0x00;
else
DA0832=0xff;}
TH0=th;
TL0=tl;
TR0=1;}
void main(void){
TMOD=0X01;TR0=1;
th=0xff;
tl=0xd0;
TH0=th;
TL0=tl;
ET0=1;
EA=1;
while(1){
display();
judge();} }
五、心得體會
開始的時候由于沒有經驗,不知如何下手,所以就去圖書管找了一些書看,盡管有許多的設計方案,可是總感覺自己還是有許多的東西弄不太清楚,于是就請教同學。他常做一些設計,有一些經驗。經過他的解釋分析各方案之后,決定用查表的方法來做。這樣可以降低一些硬件設計的難度,初次設計應切合自己的水平。用8031需要擴展ROM,這樣還要進行存儲器擴展。而且現在8031實際中已經基本上不再使用,實際用的AT89S51芯片有ROM,這樣把經過采樣得到的數值制成表,利用查表來做就簡單了。我認為程序應該不大,片內ROM應該夠用的。用LED顯示頻率和幅值,現有集成的接口驅動芯片,波形可通過示波器進行顯示,單片機接上D/A轉換芯片即可,這樣硬件很快就搭好了。
我以為這些做好了,構思也有了,寫程序應該是相對容易的。誰知道,寫起程序來,才想到功能鍵要有掃描程序才行呀,我真的感到很難。那時真的有點想放棄?于是就去請教了老師,老師幫忙分析了一下,自己又查閱了一些資料,終于明白了掃描程序怎么寫。
于是在自己的努力下,程序很快就寫好了。這次是我的第一個設計器件,盡管經歷了不少的艱辛,但給我積累了一點設計的經驗,最后也有點小小的成就感。后面的路還很長,我還的努力!
參考文獻
[1] 童詩白,華成英.模擬電子技術基礎〔M〕.北京:高等教育出版社,2003.345-362
[2] 潘永雄,沙河,劉向陽.電子線路CAD實用教程〔M〕.西安:西安電子科技大學出版社,2001.13-118.[3] 張毅剛,彭喜源,譚曉昀,曲春波.MCS-51單片機應用設計[M].哈爾濱:哈
爾濱工業大學出版社,1997.53-61.
第五篇:基于單片機設計的簡易信號發生器資料
遼東學院信息技術學院
《可編程邏輯器件原理及應用》教學實習報告
簡易信號發生器
學生姓名: 楊剛 學 號: 0915110619 班 級: B1106 專 業: 電子信息工程 指導教師: 張俊芳
2014年07月
遼東學院EDA教學實習報告
簡易信號發生器
1引言
信號發生器又稱信號源或振蕩器,在生產實踐和科技領域中有著廣泛的應用。它能夠產生多種波形,如三角波、鋸齒波、矩形波(含方波)、正弦波等,在電路實驗和設備檢測中具有十分廣泛的用途。例如在通信、廣播、電視系統中,都需要射頻(高頻)發射,這里的射頻波就是載波,把音頻(低頻)、視頻信號或脈沖信號運載出去,就需要能夠產生高頻的振蕩器。在工業、農業、生物醫學等領域內,如高頻感應加熱、熔煉、淬火、超聲診斷、核磁共振成像等,都需要功率或大或小、頻率或高或低的信號發生器。
本設計采用FPGA來設計制作多功能信號發生器。該信號發生器可以產生鋸齒波、三角波、方波等波形。FPGA簡介
FPGA(Field-Programmable Gate Array)即現場可編程門陣列,它是在PAL、GAL、CPLD等可編程器件的基礎上進一步發展的產物。它是作為專用集成電路(ASIC)領域中的一種半定制電路而出現的,既解決了定制電路的不足,又克服了原有可編程器件門電路數有限的缺點。
與傳統們陣列和掩模可編程門陣列(MPGA)相比,FPGA具有很多的優點,傳統門陣列可以用來設計任何電路,但是只能在工廠中一次性編程,而且還需要針對該電路的特定的掩模。FPGA是標準通用器件。使用其代替MPGA,可以將設計時間由幾個月縮短至幾小時,并且使設計更加簡單,從而減少了錯誤修改和設計指標變更的花費。
FPGA器件在結構上,由邏輯功能塊排列為陣列,它的結構可以分為三個部分:可編程快CLB(Configurable Logic Blocks)、可編程I/O模塊IOB(Input Block)和可編程內部連線PI(Programmable Interconnect)。CLB在器件中排列為陣列,周圍有環形內部連線,IOB分布在四周的管腳上。
FPGA也存在缺點,FPGA中,每個可編程的點都有電阻和電容。電阻和電容的使用
遼東學院EDA教學實習報告
減慢了信號的傳輸速度,所以FPGA的速度比傳統門陣列要低,而且,FPGA中互聯延遲是不可預測的。
FPGA的基本特點主要有:
一、采用FPGA設計ASIC電路,用戶不需要投片生產,就能得到合用的芯片。
二、FPGA可做其它全定制或半定制ASIC電路的中試樣片。
三、FPGA內部有豐富的觸發器和I/O引腳。
四、FPGA是ASIC電路中設計周期最短、開發費用最低、風險最小的器件之一。
五、FPGA采用高速CHMOS工藝,功耗低,可以與CMOS、TTL電平兼容。
使用FPGA時,可以根據不同的配置模式,采用不同的編程方式。加電時,FPGA芯片將EPROM中數據讀入片內編程RAM中,配置完成后,FPGA進入工作狀態。掉電后,FPGA恢復成白片,內部邏輯關系消失,因此,FPGA能夠反復使用。FPGA的編程無須專用的FPGA編程器,只須用通用的EPROM、PROM編程器即可。當需要修改FPGA功能時,只需換一片EPROM即可。這樣,同一片FPGA,不同的編程數據,可以產生不同的電路功能。因此,FPGA的使用非常靈活。FPGA有多種配置模式:并行主模式為一片FPGA加一片EPROM的方式;主從模式可以支持一片PROM編程多片FPGA;串行模式可以采用串行PROM編程FPGA;外設模式可以將FPGA作為微處理器的外設,由微處理器對其編程。VHDL & Verilog簡介
VHDL(Very High Speed Integrated Circuit Hardware Description Language,超高速集成電路硬件描述語言)是一種用來描述數字系統行為和結構的硬件描述語言,被廣泛的運用于描述和仿真各種數字系統,小到幾個門,大到許多復雜集成電路相連的系統。
VHDL誕生于1982年,是由美國國防部開發的一種快速設計電路的工具,目前已經成為IEEE(The Institute of Electrical and Electronics Engineers)的一種工業標準硬件描述語言。相比傳統的電路系統的設計方法,VHDL具有多層次描述系統硬件功能的能力,支持自頂向下(Top to Down)和基于庫(Library Based)的設計的特點,因此設計者可以不必了解硬件結構。從系統設計入手,在頂層進行系統方框圖的劃分和結構設計,在方框圖一級用VHDL對電路的行為進行描述,并進行仿真和糾錯,然后在系統一級進行驗證,最后再用邏輯綜合優化工具生成具體的門級邏輯電路的網表,下載到具體的FPGA器件中去,從而
遼東學院EDA教學實習報告
實現可編程的專用集成電路(ASIC)的設計。
Verilog也是一種流行的硬件描述語言,他是由工業界開發的,1984年,Verilog作為一種私用的硬件描述語言,由Gateway Design Automation公司給出,1988年,Synopsis公司為Verilog開發了綜合工具。1995年,Verilog成為IEEE的一個標準。Verilog 適合算法級,寄存器級,邏輯級,門級和版圖級等各個層次的設計和描述。
VHDL的語法是基于ADA語言的,而Verilog的語法是基于C語言的。由于是基于C語言,所以它更容易掌握,但是VHDL語言在設計和描述大型系統時具有突出優勢。目前兩種語言各占一半市場份額,兩種語言都可以滿足數字系統設計者的需求。
本設計中采用VHDL語言進行設計。設計工具簡介
本次設計是基于Altera公司的QuartusII軟件。
Quartus II 是Altera公司的綜合性PLD開發軟件,支持原理圖、VHDL、VerilogHDL以及AHDL(Altera Hardware Description Language)等多種設計輸入形式,內嵌自有的綜合器以及仿真器,可以完成從設計輸入到硬件配置的完整PLD設計流程。
QuartusII支持Altera的IP核,包含了LPM/MegaFuction宏功能模塊庫,使用它,可以簡化設計的復雜性,加快設計速度。QuartusII平臺支持一個工作組環境下的設計要求,其中包括支持基于Internet的協作設計。此外,QuartusII通過和DSP Builder工具與Matlab/SIMULINK相結合,可以方便地實現各種DSP應用系統;支持Altera的片上可編程系統開發,集系統級設計、嵌入式軟件設計、可編程邏輯設計于一體,是一種綜性的開發平臺。系統設計
基于VHDL語言設計一個多功能信號發生器,通過選擇輸入信號,可以輸出遞增鋸齒波、遞減鋸齒波、三角波、方波等四種信號。信號發生器的控制模塊可以選用數據選擇器實現,4種信號的數據選擇可以使用4選1數據選擇器實現。
遼東學院EDA教學實習報告
5.1 VHDL程序語言基本設計
一個VHDL語言的設計程序描述的是一個電路單元,這個電路單元可以是一個門電路,或者是一個計數器,也可以是一個CPU,一般情況下,一個完整的VHDL語言程序至少包括實體、結構體和程序包三個部分。實體給出電路單元的外部輸入輸出接口信號和引用信息,結構體給出了電路單元的內部結構和信號的行為特點,程序包定義在設計結構體和實體中將用到的常數、數據類型、子程序和設計好的電路單元等。
第一部分是程序包,程序包是用VHDL語言編寫的共享文件,定義在設計結構體和實體中將要用到的常數、數據類型、子程序和設計好的電路單元等,放在文件目錄名稱為IEEE的程序包庫中。
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;第二部分是程序的實體,定義電路單元的輸入/輸出引腳名稱。程序的實體名稱可以任意取,但必須與VHDL程序的文件名稱相同。實體的標示符是ENTITY,實體以ENTITY開頭,以END結束。
ENTITY fulladder IS PORT(a,b,Ci:in std_logic;Co,s: out std_logic_vector(7 downto 0));END fulladder;其中,定義了a,b, Ci為輸入信號引腳,定義Co,s為輸出信號引腳。
第三部分是程序的結構體,具體描述電路的內部結構和邏輯功能。結構體有三種描述方式,分別是行為(BEHAVIOR)描述方式、數據流(DATAFLOW)描述方式和結構描述方式。其中數據流描述方式又被稱為寄存器(RTL)描述方式。結構體以表示ARCHITECHTURE開頭,以END結尾。結構體的名稱可以任取。
architecture behav of fulladder is BEGIN
s<=a xor b xor Ci;Co<=(a and b)or(a and Ci)or(b and Ci);
遼東學院EDA教學實習報告
END fulladder 上面程序段中結構體的描述方式屬于程序流描述方式。以上三段程序是一個完整的VHDL程序段,實現的功能是一位全加器。
5.2 波形發生器設計
采用DDS技術可以很方便地產生各種高質量的波形。DDS技術是從相位概念出發之結合成所需要波形的一種頻率合成技術。以正弦波為例,首先要按照一定的采樣點數將正弦波形一個周期的數據信息存于ROM表中,表中包含著一個周期正弦波的數字幅度信息,每個地址對應正弦波中0到360度范圍內的一個相位點的幅度值,查找表時即是把輸入的地址相位信息映射成正弦波幅度的數字量信號,通過設置的輸出端口輸出。在實物設計中,可以使用D/A接口來實現波形信號的輸出。
為簡化設計過程,本設計并未采用DDS技術,而是采用描點輸出的方式,實現波形發生器的設計。程序中設置一個波形的起始點,經過比較、計算得出波形的其他數值,將這些點依次連續輸出,從而實現波形的仿真。以遞增鋸齒波為例,首先定義初始點為
tmp=“00000000”;在時鐘上升沿到來時,執行tmp<=tmp+1;語句,同時將tmp輸出,當
tmp=“11111111”;時,將tmp值清零,執行下一個循環。
在本設計中,采用QuartusII軟件仿真,所以可以通過波形文件直觀的反映出輸出的數字量的變化情況,以達到波形輸出的仿真。
設計中分別對四種波形進行編程,編譯無誤后,封裝生成模塊文件,以供在后面的頂層電路設計中使用。
inst3triangleclkresetq[7..0]squareclkresetq[7..0]sawtooth_adderclkresetq[7..0]sawtooth_minusclkresetq[7..0]instinst16
inst2遼東學院EDA教學實習報告
圖5-1 四種波形封裝圖塊
本設計中設置了四種波形,分別是遞增鋸齒波、遞減鋸齒波、三角波、方波。四種波形通過一個4選1數據選擇器來實現選擇性輸出。
5.3 四選一數據選擇器設計
可以采用集成四選一數據選擇器CT54153/CT74153,也可以使用軟件編程生成模塊的方式實現數據四選一的功能。在本設計中采用后者,程序中,為每一種波形分配一個通道,并為之賦予一唯一的代碼,當在sel端輸入不同的代碼時,被選中的通道打開,響應的波形發生模塊產生波形。
entity mux41 is port(sel:in std_logic_vector(2 downto 0);--定義輸入端口sel d1,d2,d3,d4: in std_logic_vector(7 downto 0);--定義輸入端口d1,d2,d3,d4 q: out std_logic_vector(7 downto 0));--定義輸出端口 end mux41;architecture behav of mux41 is begin process(sel)begin
case sel is when “001”=>q<=d1;
mux41when “010”=>q<=d2;when “011”=>q<=d3;when “100”=>q<=d4;when others=>null;end case;
sel[2..0]d1[7..0]d2[7..0]d3[7..0]d4[7..0]inst4q[7..0]end process;
圖5-2四選一數據選擇器封裝圖塊 end behav;以上為四選一數據選擇器程序段,其中sel端口為外部輸入選擇信號,d1,d2,d3,d4分
遼東學院EDA教學實習報告
別連接四個波形發生模塊,以二進制形式給sel幅值,選擇相應的通道。q為輸出端口,將波形信息的數字代碼輸出。
5.4 程序設計
遞增鋸齒波遞減鋸齒波12開始波形選擇(1、2、3、4)43三角波方波波形輸出結束圖5-3 系統流程圖
5.5 主要函數語句分析
在程序設計中,主要使用的函數語句有兩種:If-else語句和case-when語句。這兩種語句也是VHDL程序設計中常用的語句。二者都屬于流程控制語句。流程控制語句通過條件控制開關決定是否執行一條或幾條語句或重復執行一條或幾條語句或跳過一條或幾條語句。
IF語句是一種條件語句,它根據語句中所設置的一種或多種條件,有選擇地執行指定的順序語句。IF語句的語句結構有以下三種:
IF 條件句 Then
--第一種IF語句結構
順序語句
END IF
遼東學院EDA教學實習報告
IF 條件句 Then
--第二種IF語句結構
順序語句
ELSE
順序語句
END IF
IF 條件句 Then
--第三種IF語句結構
順序語句
ELSIF 條件句 Then
順序語句
ELSE
END IF
...順序語句
CASE語句根據滿足的條件直接選擇多項順序語句中的一項執行,CASE語句的結構如下:
CASE 表達式 IS When 選擇值 => 順序語句 When 選擇值 => 順序語句
...END CASE
當執行到CASE語句時,首先計算表達式的值,然后根據條件句中與之相同的選擇值。執行對應的順序語句,最后結束 CASE語句。表達式可以是一個整數類型或枚舉類型的值,也可以是由這些數據類型的值構成的數組。
5.6 系統頂層文件
將上述5個模塊(遞增鋸齒波sawtooth_adder、遞減鋸齒波sawtooth_minus、三角波triangle、方波square、4選1數據選擇器mux41)封裝成為模塊文件,供頂層電路調用。可以得到以下頂層文件電路:
sel[2..0]sawtooth_adderclkINPUTVCCINPUTVCCINPUTVCCclkresetq[7..0]resetinst1sawtooth_minussel[2..0]遼東學院EDA教學實習報告
clkresetq[7..0]mux41sel[2..0]d1[7..0]d2[7..0]d3[7..0]d4[7..0]q[7..0]OUTPUTq[7..0]圖5-4 系統頂層電路圖
inst2triangleclkresetq[7..0]
instinst4squareclkresetq[7..0]
inst3 10
遼東學院EDA教學實習報告
6系統仿真
通過選擇不同的sel值,可以實現不同的波形輸出。仿真中reset復位信號一直置高電平,即沒有仿真復位情況。
輸入的選擇信號為1時,信號發生器頂層電路的仿真輸出波形為遞增鋸齒波。輸出的波形線性遞增。
圖6-1 遞增鋸齒波仿真波形
輸入的選擇信號為2時,信號發生器頂層電路的仿真輸出波形為遞減鋸齒波。輸出的波形線性遞減。
圖6-2 遞減鋸齒波仿真波形
輸入的選擇信號為3時,信號發生器頂層電路的仿真輸出波形為三角波。輸出的波形線性減小到最小值0后,再線性增加。
圖6-3 三角波仿真波形
遼東學院EDA教學實習報告
輸入的選擇信號為4時,信號發生器頂層電路的仿真輸出波形為方波。輸出的波形為周期性的全0或全1。(在仿真中,只有將CLK信號頻率取得很高的時候,才可以清晰地看出仿真效果。)
圖6-4 方波仿真波形 設計總結
7.1 小結
FPGA是當前數字系統設計領域比較火熱的一種工具,它可以大大縮短設計需要的時間,降低成本的同時也提高了系統的穩定性。使用VHDL語言描述硬件系統使得FPGA技術有了更廣闊的應用領域。本設計使用了基于Altera公司的FPGA系列,采用Altera公司提供的系統開發工具Quartus II軟件進行了系統的設計和仿真。數字信號發生器在實驗室以及工業場所都被大量使用著,本系統即實現了可以輸出四種波形的簡易多功能波形發生器,仿真結果證明,該設計正確有效,可以作為制作實物的理論依據。但由于設計者能力有限,本系統仍然有著很多可改進的地方,比如可以升級為輸出頻率、幅值可調的波形,或者輸出任意波形以更貼近實際情況。
7.2 心得體會
對FPGA一直都有著濃厚的興趣,借做課設的機會,認真的研究了一下這門科學。發現FPGA技術比我想象中的要有很大的難度。里面有很多的思想來源于信息電子技術里面的基本知識,包括門電路的概念以及寄存器傳送的基本知識。VHDL語言與C語言有很大的不同,但是C語言的編程思想也可以移植到VHDL語言中,尤其是一些邏輯算法的設計,需要有很強的C語言編程功底。學習一門知識要從最基本的體系架構開始,倘若一開始就從
遼東學院EDA教學實習報告
頂層設計入手,就會造成很多基本原理、基本概念上的偏差,甚至會拖延學習設計的時間,事倍功半。雖然課設完成了,但是我意識到,我對FPGA技術僅僅只是停留在入門的階段,想要有更大的發展,更深入的研究,還需要更多的努力與實踐。
遼東學院EDA教學實習報告
參考文獻
[1] 蔣小燕,俞偉鈞.EDA技術及VHDL.南京:東南大學出版社.2008年12月.[2] 李國麗,朱維勇.EDA與數字系統設計.北京:機械工業出版.2005年3月.[3] 江國強.EDA技術與實驗.北京:電子工業出版社.2005年1月.[4] 歐偉明.基于MCU、FPGA、RTOS的電子系統設計方法與實例.北京:北京航空航天大學出版社.2007年4月.[5] Charles H.Roth,Jr、Lizy Kurian John著,金明錄譯.數字系統設計與VHDL.北京:電子工業出版社.2008年8月
遼東學院EDA教學實習報告
附錄
附錄一:遞增鋸齒波程序
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;
entity sawtooth_adder is port(clk,reset:in std_logic;
q:out std_logic_vector(7 downto 0));end sawtooth_adder;
architecture behav of sawtooth_adder is begin process(clk,reset)
variable tmp:std_logic_vector(7 downto 0);
begin
if reset='0'then
tmp:=“00000000”;
elsif rising_edge(clk)then
if tmp=“11111111”then
tmp:=“00000000”;
else
tmp:=tmp+1;
end if;
end if;q<=tmp;
end process;
end behav;
附錄二:遞減鋸齒波程序
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity sawtooth_minus is port(clk,reset:in std_logic;
q:out std_logic_vector(7 downto 0));end sawtooth_minus;architecture behav of sawtooth_minus is begin process(clk,reset)variable tmp:std_logic_vector(7 downto 0);begin
if reset='0'then
tmp:=“11111111”;
elsif rising_edge(clk)then
--程序包
--定義clk、reset為輸入信號--定義q為輸出信號--實體
--定義進程
--定義變量,8位
--如果復位信號為0,tmp為0--捕捉時鐘上升沿
--如果tmp遞增至最大,增歸零
--否則,tmp繼續遞增
--q等于變量tmp--進程結束
--結構體結束
遼東學院EDA教學實習報告
if tmp=“00000000”then
tmp:=“11111111”;
else
tmp:=tmp-1;
end if;
end if;q<=tmp;end process;end behav;附錄三:三角波程序
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;
entity triangle is
port(clk,reset:in std_logic;
q:out std_logic_vector(7 downto 0));end triangle;architecture behav of triangle is
begin process(clk,reset)
variable tmp:std_logic_vector(7 downto 0);
variable a:std_logic;begin
if reset='0'then
tmp:=“00000000”;
elsif rising_edge(clk)then
if a='0'then
if tmp=“11111110”then
tmp:=“11111111”;
a:='1';
else
tmp:=tmp+1;
end if;
else
if tmp=“00000001”then
tmp:=“00000000”;
a:='0';
else
tmp:=tmp-1;
end if;
end if;
end if;q<=tmp;
end process;end behav;
--程序包
--定義三角波實體
--定義三角波結構體--進程開始
--定義中間變量tmp、a
--復位信號設置
--捕捉時鐘信號上升沿
--a=0時依次輸出三角波上升沿--a=1時依次輸出三角波下降沿--輸出信號q=tmp--結構體結束
遼東學院EDA教學實習報告
附錄四:方波程序
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity square is port(clk,reset: in std_logic;
q:out std_logic_vector(7 downto 0));end square;architecture behav of square is signal a:std_logic;begin process(clk,reset)
variable tmp:std_logic_vector(7 downto 0);
begin
if reset='0'then
a<='0';
elsif rising_edge(clk)then
if tmp=“11111111”then
tmp:=“00000000”;
else tmp:=tmp+1;
end if;
if tmp<=“10000000”then
a<='1';
else
a<='0';
end if;
end if;end process;process(clk,a)
begin
if rising_edge(clk)then
if a='1' then
q<=“11111111”;
else
q<=“00000000”;
end if;
end if;end process;end behav;附錄五:四選一數據選擇器程序
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;
entity mux41 is
port(sel:in std_logic_vector(2 downto 0);
--程序包
--定義實體
--信號選擇端口sel
遼東學院EDA教學實習報告
d1,d2,d3,d4: in std_logic_vector(7 downto 0);
--d1d2d3d4分別連接四個波形發生模塊
q: out std_logic_vector(7 downto 0));end mux41;architecture behav of mux41 is
begin
process(sel)
begin
case sel is
when “001”=>q<=d1;
when “010”=>q<=d2;
when “011”=>q<=d3;
when “100”=>q<=d4;
when others=>null;
end case;end process;
end behav;
--定義輸出信號端口
--結構體
--case when語句進行信號位的選擇
--進程結束
--結構體結束