基于單片機(jī)的直接數(shù)字頻率合成器的設(shè)計
1 引 言
頻率合成技術(shù)迄今已經(jīng)歷了三代:直接頻率合成技術(shù)、鎖相環(huán)頻率合成技術(shù)、直接數(shù)字式頻率合成技術(shù)。直接數(shù)字式頻率合成(Direct Frequency Synthesis,或DDS)是第三代頻率合成技術(shù)的標(biāo)志,他的主要特點(diǎn)是計算機(jī)參與頻率合成,既可以用軟件來實(shí)現(xiàn),也可以用硬件來實(shí)現(xiàn),或二者結(jié)合。直接數(shù)字式的最大優(yōu)點(diǎn)就是頻率切換的速度極快(可達(dá)幾微秒),并且頻率、相位和幅度都可控,輸出頻率穩(wěn)定度可達(dá)系統(tǒng)時鐘的穩(wěn)定度量級,易于集成化,更主要的是由于計算機(jī)參與頻率合成,故可充分發(fā)揮軟件的作用。雖然現(xiàn)有的專用芯片的功能也比較多,但控制方式卻是固定的,因此不一定是我們所需要的。本文利用、D/A轉(zhuǎn)換器以及一些外圍寄存器設(shè)計的直接數(shù)字,電路設(shè)計簡單、頻率控制靈活,具有良好的實(shí)用性,信號精度誤差也在允許范圍之內(nèi)。
2 的基本原理和總體框圖
DDFS基本上由5部分組成,如圖1所示:頻率碼鎖存器(FR)、相位累加器(PA)、ROM(正弦表)、數(shù)/模變換器(D/A)、低通(LPF),他們在時鐘的統(tǒng)調(diào)下工作。
首先,把一個單位幅度的正弦函數(shù)的相位在0~2π弧度內(nèi)分成盡可能小的等間隔點(diǎn),若用A位二進(jìn)制數(shù)表示,分成2A個間隔點(diǎn),則最小相位間隔應(yīng)是:
算出相應(yīng)相位點(diǎn)的單位正弦函數(shù)值,并用D位二進(jìn)制數(shù)表示,寫入有A位地址線、D位數(shù)據(jù)線的 ROM中,構(gòu)成一個所謂正弦表。合成頻率的過程是控制改變相位增量(即相位跳過的最小相位間隔θmin的數(shù)目),由于相位增量不同,在一個正弦周期內(nèi)的取樣點(diǎn)就不同,而取樣是在系統(tǒng)時鐘控制下進(jìn)行的,即取樣周期是一定的,這樣,根據(jù)相位增量的累加和所對應(yīng)的點(diǎn)(代表相位值)從ROM中讀出相應(yīng)的函數(shù)值所形成的量化正弦波的周期也隨相位增量的改變而改變,從而達(dá)到合成所需頻率的目的。
在圖1中,相位累加器根據(jù)頻率碼鎖存器中的頻率碼k每個時鐘累加一次,其輸出一方面(N位)回到加法器的另一個輸入端作為下一次累加的被加數(shù),另一方面(A位)作為ROM的地址碼對ROM尋址,讀出相應(yīng)的正弦函數(shù)值(二進(jìn)制代碼),經(jīng)過數(shù)據(jù)緩沖器穩(wěn)定之后送到D/A變換器,得到一個幅值對應(yīng)于PA輸出相位點(diǎn)的正弦函數(shù)值。下一個時鐘到來,累加器再增加一個k值,ROM同樣讀出累加器輸出的A位地址碼所對應(yīng)的正弦值,再送至D/A變換器。如此下去,相位累加器輸出值是一個階梯式的,相應(yīng)地,D/A的輸出是一個以正弦為包絡(luò)的階梯波。相位累加器的溢出正好對應(yīng)著階梯正弦波的一個周期結(jié)束,再開始下一個周期。經(jīng)低通的平滑濾波得到頻率為f0的正弦波。由于時鐘周期Tc=(1/fc)是定值,而且是高穩(wěn)定的,所以輸出頻率亦很穩(wěn)定。
頻率分辨率為:
輸出頻率為:
式中N為相位累加器的位數(shù),愚為頻率碼。如果N=A,設(shè)定的k就是每個時鐘 PA所跳過的最小相位間隔數(shù)。N的增加意味著頻率分辨率的提高,但是A的增加卻意味著ROM容量的增加,使設(shè)備復(fù)雜化,故一般N>A。本設(shè)計中的參數(shù)設(shè)置:N=12,A=10,D=8。
3 系統(tǒng)主要功能模塊的具體實(shí)現(xiàn)
3.1 頻率碼鎖存器(FR)、相位累加器(PA)
如圖2所示,頻率碼鎖存器由2片8位D型鎖存器構(gòu)成,第Ⅱ片只使用D0~D3,形成12位的頻率碼。相位累加器由3片4位全加器構(gòu)成,形成12位的加法器。加法器的輸出經(jīng)過2片寄存器后一方面(12位)反饋到全加器的輸入端作為被加數(shù),另一方面(10位,舍棄低2位)作為地址碼對ROM尋址,而頻率碼鎖存器輸出的頻率碼k作為加數(shù)。此處寄存器主要起數(shù)據(jù)緩沖的作用,他們都是在時鐘上升沿工作。
3.2 ROM正弦表
ROM正弦表用內(nèi)部的程序存儲器來實(shí)現(xiàn)。由于相位累加器輸出的地址A是10位,而每個正弦函數(shù)值用8位二進(jìn)制數(shù)來表示,所以正弦表的容量是1 kB。的片內(nèi)程序存儲器容量為4 kB,完全足夠,因此不用再擴(kuò)充片外程序存儲器了。用80C51的P3.1,P3.0以及P1.7~P1.0作為10位地址的輸人口,用查表程序根據(jù)地址讀出相應(yīng)的函數(shù)值,再由P0口輸出,送至D/A轉(zhuǎn)換。
所謂查表法,就是預(yù)先將滿足一定精度要求的表示變量與函數(shù)值之間關(guān)系的一張表求出,然后把這張表存于的程序存儲器中。這時自變量為單元地址,相應(yīng)的函數(shù)值為該地址單元中的內(nèi)容。在微機(jī)應(yīng)用系統(tǒng)中,一般使用的表均為線性表,他是一種最常用的數(shù)據(jù)結(jié)構(gòu),是n個數(shù)據(jù)元素a1,a2,…,an的集合,各元素之間具有線性的位置關(guān)系。每次查表時,首先將P3.1,P3.0以及P1.7~P1.0,輸入的10位地址存放在20H,21H兩個單元中(高字節(jié)在20H),他將作為查表時的地址偏移量(函數(shù)值存放在程序存儲器的實(shí)際地址=表首地址+偏移量)。
3.3 數(shù)/模轉(zhuǎn)換器(D/A)
數(shù)/模轉(zhuǎn)換器輸入數(shù)字量是8位,參考電壓Vref的工作范圍是-10~+10 V,通過他將外加高精度電壓源與內(nèi)部的電阻網(wǎng)絡(luò)相連接。芯片內(nèi)有一個8位輸入寄存器和一個8位DAC寄存器,形成兩級緩沖結(jié)構(gòu)。這樣可使DAC轉(zhuǎn)換輸出前一個數(shù)據(jù)的同時,將下一個數(shù)據(jù)傳送到8位輸入寄存器,以提高數(shù)/模轉(zhuǎn)換的速度。與80C51的如圖3所示,80C51的P0口直接與的數(shù)字輸入DI7~DI0相接,80C51的WR與DAC0832的WR1相接,P2.7與片選端CS連接,芯片采用的是單緩沖方式。這時芯片的地址為7FFFH。
3.4 系統(tǒng)時鐘的產(chǎn)生
系統(tǒng)時鐘可利用80C51的/計數(shù)器產(chǎn)生。時鐘頻率要根據(jù)最高輸出頻率確定,一般fc≥4f0max,而低通的截止頻率為最高輸出頻率。本設(shè)計中時鐘頻率要求為50 kHz,則要用器輸出周期為20μs方波。選用/計數(shù)器T0,工作于方式0,輸出為P2.0引腳。20μs的方波可由間隔10 μs的高低電平相間而成,因而只要每隔10μs對P2.0取反一次。由于實(shí)驗(yàn)用80C51的時鐘頻率為12 MHz,因此計數(shù)初值:
X=8192-(10μs×/12)=8192-10=8182
4 軟件設(shè)計
4.1 ROM查表程序
5 結(jié) 語
經(jīng)過觀察可以看到清晰的正弦波形,通過計算機(jī)改變頻率碼k,可以得到不同頻率的波形,且輸出頻率隨頻率控制字的增大而增大。但輸出頻率超過13 kHz時,輸出波形明顯失真,這主要由D/A轉(zhuǎn)換、低通濾波等部分產(chǎn)生的雜散所致。由于DDFS采用全數(shù)字結(jié)構(gòu),不可避免地引入了雜散。其來源主要有3個:相位累加器相位舍位誤差造成的雜散,幅度量化誤差(由存儲器有限字長引起)造成的雜散和DAC非理想特性造成的雜散。
本文的設(shè)計是以產(chǎn)生正弦波為例,實(shí)際上只要在DDFS的波形存儲器存放不同的波形數(shù)據(jù),就可以實(shí)現(xiàn)各種波形輸出,如三角波、鋸齒波和矩形波,甚至是任意波形。另外只要在DDFS內(nèi)部加上相應(yīng)控制,如調(diào)頻控制FM、調(diào)相控制PM和調(diào)幅控制AM,即可以方便靈活地實(shí)現(xiàn)調(diào)頻、調(diào)相和調(diào)幅功能,產(chǎn)生FSK,PSK,ASK和MSK等信號。在通信、雷達(dá)、電子對抗、導(dǎo)航、廣播電視、遙控遙測、等領(lǐng)域具有廣泛的應(yīng)用前景。