摘要:在了解DAC0832芯片的基礎上,實現數字到模擬量的轉換,通過對8255A的內部構造、控制字、方式字的設置以及如何將開關置入的數字信號傳輸到DAC0832進行數模轉換,最終達到能輸出正弦波、三角波、鋸齒波、脈沖波,根據開關輸入情況進行波形切換,實現用戶操作的隨意性。
關鍵詞:函數發(fā)生器;單片機;DAC0832;8255A
中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2008)09-11738-04
A Design and Implementation of Function Generator Based on PC
WANG Peng
(Department of Computer Science and Technology,Hefei University, Hefei 230601, China)
Abstract: DAC0832 understanding on the basis of chips, Implementation of the digital-to-analog converter. Through the internal structure, Control characters and the word means settingsof the 8255 A, Placement will be switching to the transmission of digital signals to analog converter DAC0832. Sine wave output can reach the final, triangle wave, sawtooth, pulse wave. According to switch input waveform switching, User operating arbitrariness.
Key words: Function Generator; single-chip compute; DAC0832; 8255A
1 引言
在電子工程、通信工程、自動控制、遙測控制、測量儀器、儀表和計算機等技術領域,經常需要用到各種各樣的函數發(fā)生器。隨著集成電路的迅速發(fā)展,用集成電路可很方便地構成各種函數發(fā)生器。用集成電路實現的信號波形發(fā)生器與其它信號波形發(fā)生器相比,其波形質量、幅度和頻率穩(wěn)定性等性能指標,都有了很大的提高。
2 解決問題方法及思路
題義需求分析:以 PC 微機基礎設計開發(fā)能輸出多種波形的函數發(fā)生器:(1)能輸出正弦波、三角波、鋸齒波、脈沖波。(2)能根據開關的變化進行波形切換。
2.1 硬件部分
(1)根據題義要求及分析,本設計中硬件部分數/模轉換器選用National Semiconductor的DAC0832。
(2)選擇8255A作為CPU與DAC0832之間的并行接口芯片,其中A口作為開關量的輸入端。
(3)另外還需要有:intel 8086 CPU(中央處理器)芯片1顆;EL-8086型單板機開發(fā)環(huán)境一套;PC機(Personal Computer,個人計算機)一臺。
2.2 軟件部分
(1)程序采用循環(huán)依次顯示四組波段的方式。
(2)首先對8255A進行初始化,方式0,A口輸入。
(3)在顯示過程中判斷開關量是否有變化。
(4)若沒有變化,則繼續(xù)顯示;若有改變,就重新判斷要輸出的波形。
(5)相應地,在程序中編制顯示正弦波段、三角波段、鋸齒波段和脈沖波段,由上述的判斷結果,根據條件進行跳轉。
3 硬件設計
3.1 選擇芯片:8086CPU
3.1.1 8086CPU在本設計中的作用
由于這個程序是基于PC機的,故在單板機上必須要用到8086CPU,它作為計算機的核心芯片,在實驗中起著關鍵的作用。
3.1.2 8086的功能分析
它被設計為兩個獨立的功能部件:總線接口部件(BIU)和執(zhí)行部件(EU)。
BIU主要負責從內存儲器的指定區(qū)域中取出指令,送到指令隊列中排隊;執(zhí)行指令所需的操作數也由它從內存或I/O端口取出送至EU。
EU負責從BIU的指令隊列中獲得指令,然后執(zhí)行該指令,完成指令所規(guī)定的操作,它負責全部指令的執(zhí)行,向BIU提供數據和所需訪問的內存或I/O端口地址,并對通用寄存器,標志寄存器和指令操作數進行管理。
3.2 選擇芯片:8255A
3.2.1 8255A在設計中的作用
它是把打入的數據鎖存,8255A有3個8位端口PA,PB,PC。本設計只用到PA口中的一個8位數據輸入鎖存器,把通過開關裝置打入的數據鎖存,再由8255A通過數據總線傳送到8086,由8086送到DAC0832的DI7~DI0對其進行數模轉換,最后在示波器上顯示波形。
3.2.2 8255A的功能分析
它是一種通用的可編程并行I/O接口芯片,又稱“可編程外設接口芯片”。8255A由4部分組成:數據總線緩沖器;三個8位端口PA、PB、PC;A組和B組的控制電路;讀寫控制邏輯。
(1)數據總線緩沖器 :一個三態(tài)8位的雙向緩沖器,用作8255A同系統(tǒng)數據總線相連是的緩沖部件。CPU通過執(zhí)行輸入/輸出指令來實現對緩沖器發(fā)送或接受數據。8255A的控制字或狀態(tài)字也是通過該緩沖器傳送的。
(2)端口A中有一個8位數據輸入鎖存器和一個8位輸出鎖存/緩沖器。
(3)A、B組控制電路:A組控制部件用來控制PA口和PC口的高4位。B組控制部件用來控制PB口和PC口的低四位。
(4)讀寫控制邏輯:用來管理數據信息,控制字和狀態(tài)字的傳送。
8255A的工作方式有3種:方式0、方式1、方式2。本設計只用到方式0,即基本輸入/輸出。在方式0下,每個口都作為基本的輸入/輸出口。C口的高四位和低四位以及A口、B口都可以獨立地設計輸入口或輸出口。在方式0下,CPU可以采用無條件讀寫方式與8255A交換數據。本設計只用到了PA口作為數據輸入。
3.2.3 8255A的技術參數
與TTL完全兼容,采用40條引腳的雙直插式封裝,減少了系統(tǒng)器件數,提高了直流驅動能力。
3.3 選擇芯片:數/模轉換器DAC0832
3.3.1 DAC0832在本設計中的作用
DAC0832是National Semiconductor生產的一款D/A(數字/模擬)轉換器,其采用CMOS工藝和R-2RT形電阻解碼網絡, 轉換結果為一對差動電流 I01和 I02輸出。在本設計中主要用來將開關打入的數字信號轉換為相應的模擬信號。圖1為DAC0832在本設計中的應用模式:
3.3.2 DAC0832的功能分析
DAC0832是8位D/A轉換器,轉換周期為1μs。它由8位輸入鎖存器、8位DAC寄存器、8位D/A轉換電路組成。當ILE為高電平,CS為低電平,WR1為負脈沖時,在LE1產生正脈沖;LE1為高電平時,輸入寄存器的狀態(tài)隨數據輸入線狀態(tài)變化,LE1的負跳變將輸入數據線上的信息存入輸入寄存器。當Xfer為低電平,WR2輸入負脈沖時,則在LE2產生正脈沖;LE2為高電平時,DAC寄存器的輸入與輸出寄存器的狀態(tài)一致,LE2的負跳變,輸入寄存器內容存入DAC寄存器。
DAC0832的輸出是電流型的。在微機系統(tǒng)中,通常需要電壓信號,電流信號和電壓信號之間的轉換可由運算放大器實現。
3.4 選擇芯片:運算放大器LF351
3.4.1 LF351在本設計中的作用
由于DAC0832本身不帶有運算放大器,則在實際應用時應該外接運算放大器。本設計中采用的同樣是National Semiconductor生產的運算放大器LF351,使由DAC0832產生的模擬信號效果增強。
3.4.2 LF351的功能分析
LF351是一款低價位高速度、具有內部電壓平衡功能的JFET(Junction Field Effect Transistor,結晶型場效應晶體管)運算放大器。它只需要微量的電流,就可以產生并保持寬帶高速的回轉電流。另外,它可以很好的匹配輸入,產生相當電壓伏度。LF351可以用在高速求積器、快速數/模轉換、抽樣保持電路及諸多要求低輸入偏移電壓、低輸入偏轉電流、高回轉速率和廣帶寬的場合??偟膩碚f,LF351是一個很好的選擇。LF351系統(tǒng)連接方式如圖3所示:
4 硬件總邏輯圖及其說明
邏輯圖說明:
(1)DAC0832的IOUT與示波器紅頭相連;
(2)DAC0832的GND與示波器的黑頭相連,即接地;
(3)DAC0832的CS片選與CS1相連;
(4)數字信號來源于開關量,輸出于LF351,顯示于示波器;
(5)8255的CS片選與CS0相連;
(6)其余DAC0832,8255與CPU及其他數據線都固定于單板機開發(fā)環(huán)境中,故未在圖中詳細畫出。
5 控制程序設計
控制程序設計思路說明:
(1)程序分為五個段落,分別是主程序、正弦波、三角波、鋸齒波、脈沖波。
(2)在每個“段落”中檢查開關量是否有改變,有則切換到相應波形,無則循環(huán)顯示本波段。
(3)在開關中設置開關量:00h:鋸齒波 01h:三角波 02h:正弦波 03h:脈沖波。
(4)四個波段循環(huán)切換顯示。
6 上機調試過程
6.1 硬件調試
一開始把8255A的片選CS接口CS1,但因為設計時8255A的口地址為04a0,而CS1的地址范圍為:04B0~04BF偶地址有效,故編譯不能通過,經檢查發(fā)現8255A片選應接為CS0.又發(fā)現連線時粗心漏連了DAC0832的片選,應連CS1。另外,打開實驗箱上的電源開關,發(fā)現數字顯示區(qū)的數字閃爍不停,后檢查是因為CPU插在面包板上的時候接觸不良造成。
6.2 軟件調試
程序開始調試時總是顯示鏈接不成功,原因應該是程序結構的問題,但通過查資料,知道了可以通過調用一個事先編寫好的延遲子程序來實現。在延遲子程序中通過設置循環(huán)次數CX,再利用loop循環(huán),當CX減為0時停止循環(huán),這樣就可以“畫”出高低電平。另外,再編寫正弦波的時候,定義正弦波表也需要注意把點設計成對稱分布的。否則示波器顯示出來的波形是有問題的。最重要的是為了滿足用戶使用的隨意性,在每一個波的程序中都必須寫有這樣的步驟:每從開關讀取一個開關量后,都必須檢查用戶有沒有撥動開關,即:用戶是不是需要切換到另一種波形輸出。
6.3 調試結果及問題的提出
8255A的PA口作為開關量的輸入端,其與開關相連的時候,PA0、PA1分別與K0、K1相連,那么K0是低位,K1是高位.那么每個波形對應的開關量應使用開關正確輸入,不能把高低位弄反了。
正弦波在示波器上的顯示,成斷續(xù)的點狀,本想使之能顯示連續(xù)的波形,但一直無法通過多加入一些點,使波形變密。顯示出來的總是不對稱的、扭曲的、有的地方點很密、有的地方點很疏。
脈沖波的顯示也不能做到很精確,因為高電平和低電平總是不平,怎么都有一點傾斜的趨勢,一直不清楚問題出在什么地方,怎么才能夠解決。
鋸齒波和三角波顯示情況都較準確,沒有什么問題。
在波形切換方面,能夠實現用戶任意時刻,變換輸出四種波形中的任意波形。
7 結束語
本設計的結果基本達到了要求:能輸出正弦波、三角波、鋸齒波、脈沖波;能根據開關輸入情況進行波形切換,實現用戶操作的隨意性。在本設計中的四個波形中,鋸齒波、三角波輸出較準確.但脈沖波、正弦波的輸出還有一點欠缺,都不能很正確的反映波形曲線。即:脈沖波不能很好的反映電平的平穩(wěn),會有一定的斜度,可能是延遲子程序寫得不太好,延遲時間沒控制好。而正弦波不能很好的表現波的連續(xù)性,表現成斷續(xù)的點狀,原因是正弦波表沒有編寫好,沒有把握好點的分布情況,對稱性的要求,設置的點不夠多。
參考文獻:
[1] 潭博學,苗江靜.集成電路原理及應用[M]. 北京:電子工業(yè)出版社,2003.
[2] 周國祥.微機原理與接口技術復習考試指南[M]. 安徽:合肥工業(yè)大學出版社,2006
[3] 戴梅萼.微型計算機技術及應用(第3版)[M]. 北京:清華大學出版,2003.
[4] 劉彥文,張向東,譚峰. 微機原理與接口技術[M]. 北京:北京大學出版,2006.
[5] 童詩白,華成英.模擬電子技術基礎[M]. 北京:高等教育出版社,2001.