□ 李鍵傑
信號(hào)發(fā)生器,也稱信號(hào)源,就是能夠產(chǎn)生并輸出符合用戶要求的電信號(hào)的裝置或儀器。信號(hào)發(fā)生器的基本構(gòu)成主要有頻率產(chǎn)生單元、緩沖放大單元、調(diào)制單元、輸出衰減和阻抗變換單元、指示及調(diào)節(jié)控制單元等。其核心和基礎(chǔ)的部分,是頻率或波形產(chǎn)生單元。
根據(jù)頻率產(chǎn)生方式可分為諧振法和合成法兩種。諧振法是傳承傳統(tǒng)技術(shù)的方法,即用具有頻率選擇性的諧振回路來產(chǎn)生正弦振蕩,并獲得所需頻率。頻率合成法是指由一個(gè)或多個(gè)頻率穩(wěn)定度和精確度很高的參考信號(hào)源通過頻率域的線性運(yùn)算,產(chǎn)生具有同樣穩(wěn)定度和精確度的大量離散頻率的過程。
頻率合成可分為直接頻率合成和間接頻率合成。而時(shí)下大多數(shù)研討的是直接頻率合成模式,這其中又分為非相干直接合成和相干直接合成。而相干直接合成模式大致可概括為直接數(shù)字合成(DDS)和直接模擬合成(DAS),間接模擬合成(PLL)和數(shù)字合成(PLL)。
DDS是一種全數(shù)字化的頻率合成器,由相位累加器、波形ROM、D/A轉(zhuǎn)換器和低通濾波器構(gòu)成,是一種從相位概念出發(fā)直接合成所需要波形的新的頻率合成技術(shù)。DDS實(shí)質(zhì)上是對(duì)一個(gè)(或少許幾個(gè))參考頻率進(jìn)行數(shù)字分頻的技術(shù),通過編程頻率控制字來對(duì)系統(tǒng)時(shí)鐘進(jìn)行分頻,從而獲得所需要的頻率。由于DDS工作在數(shù)字域,很方便得到任意周期以及非周期波形。
本文論述的數(shù)字合成波形發(fā)生器是一個(gè)實(shí)驗(yàn)裝置,主要通過實(shí)驗(yàn)加深對(duì)DDS的運(yùn)行過程和技術(shù)特點(diǎn)的理解和掌握。
實(shí)現(xiàn)數(shù)字頻率合成主要由單片機(jī)和數(shù)模轉(zhuǎn)換器DAC構(gòu)成,并沒有采用專用的DDS模塊,而是通過單片機(jī)來實(shí)現(xiàn)DDS的部分功能。
上圖是一幅仿真示圖,現(xiàn)在的單片機(jī)有很多都把數(shù)模轉(zhuǎn)換器DAC集成到單片機(jī)里面去了。
對(duì)照DDS構(gòu)成原理和流程:
Fc→地址計(jì)數(shù)器(÷N)→波形存儲(chǔ)器→D/A→LPF→fo
以DAC模塊為界分為前后兩個(gè)部分,DAC及后面部分,就是一個(gè)PCM譯碼輸出的過程。而DAC前面部分,主要是生成符合要求的PCM二進(jìn)制碼組,而這部分在本實(shí)驗(yàn)里將由單片機(jī)通過運(yùn)行程序代碼來實(shí)現(xiàn)。
當(dāng)DAC接收到一個(gè)二進(jìn)制數(shù)經(jīng)譯碼后輸出一個(gè)與其基準(zhǔn)電壓VREF為參照的電壓值,即量化樣值,并保持直到DAC接收下了一個(gè)數(shù)才會(huì)改變。因此在連續(xù)輸入一串二進(jìn)制數(shù)組的過程中,DAC的輸出將是一串階梯波,如下圖b,然后經(jīng)低通濾波器濾除高頻分量,便可得到模擬信號(hào)。顯然譯碼輸出階梯波要比還原為PAM波形(如下圖a),其高次諧波含量大為減少,從而也降低了對(duì)濾波器的要求。
圖b是二進(jìn)制碼組經(jīng)DAC譯碼還原為量化后的階梯波序列,階梯級(jí)數(shù)對(duì)應(yīng)脈沖抽樣次數(shù)。因此其實(shí)質(zhì)為以階梯波來逼近所要得到的模擬信號(hào)波形。
那么如果要輸出的是周期信號(hào),則其波形周期為:T=Tc×N。
Tc是階梯的脈沖寬度(每一級(jí)等寬),N是階梯級(jí)數(shù)??梢娖鋵?shí)質(zhì)就是實(shí)現(xiàn)了一種數(shù)字分頻,Tc就是合成頻率的基準(zhǔn)信號(hào)參數(shù),稱謂參考時(shí)鐘信號(hào)周期,T則是合成波形周期。改變輸出信號(hào)周期,一是保持階梯寬度Tc不變而改變階梯級(jí)數(shù)N,二是保持階梯級(jí)數(shù)值N不變而改變階梯寬度Tc,三是同時(shí)改變Tc、N。本實(shí)驗(yàn)裝置采取保持階梯寬度Tc不變而改變階梯級(jí)數(shù)N的形式來改變輸出信號(hào)頻率。
單片機(jī)應(yīng)用中常用的DAC芯片僅適用于單極性處理方式,采用的是自然二進(jìn)制編碼的PCM。即二進(jìn)制碼最小值為全0,中間值則按自然二進(jìn)制遞增規(guī)律遞增,最大值為全1,每一個(gè)二進(jìn)制碼對(duì)應(yīng)一個(gè)量化電壓值。
為了對(duì)應(yīng)上述DAC模塊對(duì)PCM編碼的要求,需要采用自然二進(jìn)制碼,均勻抽樣均勻量化,而完成把模擬信號(hào)變換為二進(jìn)制碼組。
為了對(duì)應(yīng)DAC特性,設(shè)想要得到的波形,首先是一個(gè)單極性的信號(hào),最小值為0V,峰值小于5V(或者是小于DAC的參考電壓VREF)。對(duì)其進(jìn)行均勻抽樣均勻量化及自然二進(jìn)制碼編碼,從而取得PCM二進(jìn)制碼組的波形數(shù)據(jù)。
在波形切換或者改變頻率時(shí),需要重新計(jì)算并生成所需要的PCM二進(jìn)制碼組。這大大降低了對(duì)內(nèi)存資源的要求,這里不強(qiáng)求切換速度。
從存儲(chǔ)器傳送數(shù)據(jù)到外設(shè)DAC的快慢,決定了輸出階梯波的寬度Tc。
在CPU指令代碼運(yùn)行形式中,有兩種方式。一是采用中斷運(yùn)行方式,這是通常做法。其優(yōu)點(diǎn)是,很便利地降低參考時(shí)鐘頻率,也降低了N的資源占用度。而其缺點(diǎn)則是Tc無法取得更小,不利于提升合成頻率。因?yàn)閳?zhí)行一句P0=waveArray[N]的C語(yǔ)言語(yǔ)句,大致需要14個(gè)機(jī)器周期,而執(zhí)行中斷最基本的現(xiàn)場(chǎng)保護(hù)與恢復(fù)指令,大致就要消耗24個(gè)機(jī)器周期,在只允許一個(gè)中斷例程運(yùn)行的條件下,中斷間隔都需要在50個(gè)機(jī)器周期以上,如果一個(gè)機(jī)器周期為1uS,則Tc=50uS,F(xiàn)c=1/Tc=20KHz。二是禁止一切中斷運(yùn)行,在設(shè)置好波形參數(shù)后就直接進(jìn)入向DAC傳送數(shù)據(jù)的死循環(huán),只有通過復(fù)位CPU才能推出循環(huán)。如執(zhí)行一句P0=waveArray[N]的語(yǔ)句,大致需要14個(gè)機(jī)器周期,那么Tc=14uS,F(xiàn)c=1/Tc=72KHz。顯然這種方式得到的時(shí)鐘脈沖頻率提高了很多。其中waveArray[N]表示儲(chǔ)存有待輸出波形的二進(jìn)制數(shù)組,若是合成周期信號(hào)波形,那么就是一個(gè)周期的數(shù)據(jù),共N個(gè)抽樣量化的數(shù)據(jù)值。
上述討論中,機(jī)器周期的長(zhǎng)短也是限制時(shí)鐘脈沖頻率提高的一個(gè)因素,只是畢竟C51單片機(jī)的運(yùn)算能力有限,通過選型來提升的空間也有限。
然而,進(jìn)一步提高時(shí)鐘脈沖頻率的方法是采用DMA(直接內(nèi)存存取)技術(shù)?,F(xiàn)在性能好的單片機(jī),都內(nèi)含有DMA(直接內(nèi)存存?。┘夹g(shù),由于數(shù)據(jù)從存儲(chǔ)器到外設(shè)DAC的轉(zhuǎn)移是通過硬件直接實(shí)現(xiàn)的,無須CPU的干預(yù),其內(nèi)存存取周期比CPU指令序列的運(yùn)行周期快多了,大致得到Tc≤機(jī)器周期的傳輸速率,也不受CPU其他中斷的影響。因此,在相似條件下,單片機(jī)利用內(nèi)置的DMA設(shè)備可提高合成信號(hào)頻率,在相對(duì)的低頻段輸出頻率信號(hào)方面,則通過中斷方式的運(yùn)行。
由于本實(shí)驗(yàn)是工作在數(shù)字域,很方便得到任意周期以及非周期波形信號(hào)。
本實(shí)驗(yàn)裝置數(shù)字合成波形發(fā)生器,由單片機(jī)、數(shù)模轉(zhuǎn)換器(DAC)、直接內(nèi)存存取控制(DMA)構(gòu)成,主要通過DMA來獲得更高合成頻率,通過單片機(jī)中斷方式的運(yùn)行來延展更低的合成頻率。在分配到2KB的RAM的占用度時(shí),就可獲得很高的頻率分辨率。另外,DAC的量化級(jí)數(shù)大于8位時(shí),占用的RAM會(huì)成倍增加,而壓縮到N的取值范圍??傮w上該裝置可輸出最高頻率約50KHz,最低1Hz的合成正弦波,尤其是采用了STM32F系列中具備DAC、DMA的芯片時(shí)。因?yàn)槭遣捎脝纹瑱C(jī),而非專業(yè)的DDS模塊,所以在輸出波形的頻率上限值和頻帶范圍會(huì)有一定的限制。