何 成,焦 杰
(1.葫蘆島廣播電視監(jiān)測臺,遼寧 葫蘆島 125000;2.吉林省廣播電視研究所,吉林 長春 130041)
在設(shè)計數(shù)字電子系統(tǒng)時,通常采用高頻時鐘分頻的方法產(chǎn)生指定頻率信號。例如,用單片機(jī)中的定時器對頻率為F的系統(tǒng)時鐘N分頻,可生成頻率F1=F/N;若進(jìn)行N+1 分頻,則生成頻率F2=F/(N+1)。然而,這種方法無法產(chǎn)生介于F1與F2之間的頻率,只能用F1或F2近似替代。隨著輸出頻率的升高,分頻數(shù)值N相應(yīng)減小,導(dǎo)致F1與F2兩個頻率之間的步進(jìn)間隔增大。也就是說,頻率越高,分辨度越差,精度越低。本文以一種多路調(diào)頻廣播調(diào)制器的應(yīng)用為例,介紹窄帶調(diào)頻(Narrow Band Frequency Modulation,NBFM)方法來解決這個問題。用單片機(jī)的DMA 去高速調(diào)頻定時器,輸出信號不但頻率精度較高,而且頻率變更迅速,可以滿足廣播節(jié)目調(diào)制應(yīng)用的需要。
我國調(diào)頻廣播標(biāo)準(zhǔn)GB/T 4311—2000 規(guī)定,調(diào)頻廣播采用頻率調(diào)制,100%調(diào)制度下的頻偏為±75 kHz[1]。傳統(tǒng)調(diào)制方式采取把數(shù)字化的聲音電壓數(shù)據(jù)經(jīng)過D/A 變換成為模擬量后,送給壓控振蕩器產(chǎn)生調(diào)頻信號。這種方式不僅電路元件較多,而且失真和噪聲較大。當(dāng)多個模擬調(diào)制電路靠近安裝在一起時,因?yàn)榇嬖陬l率占據(jù)[2]現(xiàn)象,還會導(dǎo)致不同節(jié)目之間串音。本文用單片機(jī)把多套節(jié)目同時分別調(diào)制到幾個較低的中頻信號上[3],再用后級電路進(jìn)行二次調(diào)制發(fā)射[4]。不僅電路元件少,調(diào)制節(jié)目多,而且電路免調(diào)試,各通道之間無串?dāng)_。
調(diào)頻廣播聲音信號的每一個電壓值對應(yīng)一個頻率,是線性V/F 變換。因此,設(shè)計目標(biāo)是用單片機(jī)輸出方波,不同的聲音數(shù)據(jù)對應(yīng)輸出不同的頻率。采用型號為STM32F407 的單片機(jī)進(jìn)行設(shè)計,通過設(shè)置定時器的重裝載寄存器ARR 就能對系統(tǒng)時鐘分頻輸出。然而,在傳統(tǒng)分頻方案中,分頻的頻率步進(jìn)間隔太大,無法滿足調(diào)頻廣播節(jié)目對頻率分辨度的要求。例如,定時器在翻轉(zhuǎn)模式下分頻168 MHz 主時鐘,進(jìn)行42 分頻時可輸出2 MHz頻率方波,而在41 分頻時輸出方波頻率卻是2.048 MHz。即使對于8 位聲音信號調(diào)制應(yīng)用,要求的頻率分辨度也必須優(yōu)于0.586 kHz,這比傳統(tǒng)分頻的指標(biāo)高出近百倍。
用一個角頻率為Ω 的調(diào)制信號對另一個角頻率為ω的載波信號進(jìn)行調(diào)頻,當(dāng)調(diào)頻指數(shù)為m時,輸出調(diào)頻信號為:
由此可見,窄帶調(diào)頻信號V由載波信號和上下兩個邊帶信號組成,邊帶信號的振幅正比于調(diào)頻指數(shù)。若調(diào)頻指數(shù)m非常小接近零,則窄帶調(diào)頻信號V≈cosωt。
通常由調(diào)頻所引起的最大瞬時相位偏移小于30°時,可作為窄帶調(diào)頻[5]。
實(shí)際電路中,多套節(jié)目聲音信號從網(wǎng)絡(luò)接口輸入,分別調(diào)制成中心頻率為1~2 MHz 的幾個調(diào)頻中頻信號。系統(tǒng)結(jié)構(gòu)如圖1 所示。
圖1 中,虛線內(nèi)的部分是這種調(diào)制裝置的核心部分,主要由網(wǎng)絡(luò)接口芯片和單片機(jī)芯片組成。輸出的中頻信號按照參考文獻(xiàn)[3]中的方式二次調(diào)制到調(diào)頻廣播頻率上,電路原理如圖2 所示。
單片機(jī)芯片U1與網(wǎng)絡(luò)芯片U12用RMII 接口連接,從而通過網(wǎng)絡(luò)收到需要調(diào)制的廣播節(jié)目聲音數(shù)據(jù)。在單片機(jī)內(nèi)部用DMA 驅(qū)動定時器實(shí)現(xiàn)窄帶調(diào)頻,然后將信號從定時器的輸出引腳送出單片機(jī)。若采用型號為STM32F407 的單片機(jī),則最多可同時調(diào)制產(chǎn)生FRQ1~FRQ6共計6 個獨(dú)立信號。
采取與小數(shù)分頻[6]相似的設(shè)計思路,單片機(jī)的定時器分別用N和N+1 兩個分頻數(shù)值交替分頻,只要N>6,即可滿足窄帶分頻條件。利用單片機(jī)中的DMA 控制器,在定時器每次計數(shù)溢出前設(shè)置下一次的計數(shù)溢出門限為N或N+1,能動態(tài)改變定時器的周期,使輸出的等效頻率等于設(shè)計值。圖3描述了這種頻率合成的載波頻率計算方法。
圖3 中先產(chǎn)生X個頻率F1的信號,再產(chǎn)生Y個頻率F2的信號,共產(chǎn)生X+Y個周期,合成信號的等效頻率f為:
也就是說,這兩種信號恰好共經(jīng)過L個T周期合成了等效頻率為f的信號。這需要在單片機(jī)中用長度為M=X+Y的緩存區(qū)保存定時器的M個分頻值,形成了一個分頻緩存區(qū)。
為了減少內(nèi)存占用,應(yīng)盡可能減小分頻緩存區(qū)長度M,主要有變長和定長兩種設(shè)計方式。
1.3.1 變長緩存區(qū)
分頻緩存區(qū)保存有分頻值N及N+1 兩種數(shù)值,若系統(tǒng)時鐘頻率為F,設(shè)計目標(biāo)頻率為f,則其中N值為:
若定時器用N分頻時溢出周期為T1,用N+1分頻時溢出周期為T2,則對于要輸出周期為T的信號時,有比例關(guān)系:
式中,X為分頻緩存區(qū)中N數(shù)值的個數(shù),Y為N+1 數(shù)值的個數(shù)。計算X/Y的最簡整數(shù)比后,可得到分頻緩存區(qū)的長度M=X+Y。這種方式下,分頻緩存區(qū)長度M隨輸出頻率變化而改變,適用于單片機(jī)輸出固定精密頻率場合。
1.3.2 定長緩存區(qū)
對于單片機(jī)系統(tǒng)來說,為了快速頻率切換需要頻繁暫停DMA,因此會導(dǎo)致輸出信號不連續(xù),不適用于調(diào)頻廣播節(jié)目調(diào)制,需要采用分頻緩存區(qū)長度固定的方法。
根據(jù)頻率分辨度的設(shè)計需求,可計算分頻緩存區(qū)長度M的最小值。如果用M個T1合成一個頻率f1,相鄰下一個頻率f2使用M個T2合成,那么兩種合成周期的步進(jìn)差值Δf經(jīng)過M次累計可以達(dá)到系統(tǒng)時鐘的一個周期t:
因此,可計算緩存區(qū)長度M的最小極Mmin:
只要緩存區(qū)長度大于此極限值,就可以保證頻率步進(jìn)差值精度Δf。表1 舉例了一些對系統(tǒng)時鐘F=84 MHz 進(jìn)行窄帶調(diào)頻廣播節(jié)目所需要的Mmin。
表1 合成不同頻率時分頻緩存區(qū)長度
由表1 可見,隨著合成頻率的增加,所需的分頻緩存區(qū)長度M急劇增大。
單片機(jī)STM32F407 的定時器有兩組:一組有TIM1 和TIM8 兩個定時器,輸入為高頻168 MHz系統(tǒng)時鐘,并支持DMA;另一組輸入低頻84 MHz的系統(tǒng)時鐘,支持DMA 的定時器有TIM2、TIM3、TIM4、TIM5。因此,這個芯片最多可以同時調(diào)制6套節(jié)目。
為了使輸出方波的占空比盡可能接近50%以減少諧波,需要設(shè)置定時器輸出比較功能的管腳工作在翻轉(zhuǎn)模式下。因?yàn)槊看味〞r器溢出時管腳電平只翻轉(zhuǎn)一次,所以輸出頻率是定時器溢出頻率的一半,相當(dāng)于定時器輸入的時鐘頻率降低一半。
整體原理是在定時器每次溢出重裝載前,用DMA 設(shè)置定時器的重裝載寄存器ARR 中的數(shù)值為N或N+1,即用兩個分頻值交替分頻實(shí)現(xiàn)調(diào)頻。
用定時器溢出事件觸發(fā)DMA,再用DMA 修改定時器的重裝載寄存器ARR;設(shè)置DMA 為循環(huán)工作模式,只需軟件為合成頻率一次性準(zhǔn)備好數(shù)據(jù),剩下的工作交給定時器和DMA 硬件;此后不再需要軟件干預(yù),即可能持續(xù)輸出指定頻率的信號,具有很高的運(yùn)轉(zhuǎn)效率。
因?yàn)槎〞r器具備影子寄存器功能,所以對重裝載寄存器的修改不會立即生效,需等到下次定時器溢出時才能生效。這個特性可以保證定時器輸出的方波周期不會被意外打斷,在任何時刻都可以由DMA 直接修改重裝載寄存器ARR。
當(dāng)定時器溢出時,生成更新事件用于觸發(fā)DMA。程序中必須注意,在設(shè)置DMA 與定時器中任何一個設(shè)備前,必須先把這兩個硬件的時鐘全部開啟,否則可能導(dǎo)致兩個硬件不能聯(lián)動工作。以調(diào)用固件庫函數(shù)設(shè)置DMA2 和TIM8 為例,其中的要點(diǎn)有:
軟件用一維數(shù)組定義分頻緩存區(qū),DMA 依次傳送每個數(shù)據(jù)元素給定時器。廣播節(jié)目的每個聲音電壓值都對應(yīng)一個分頻數(shù)組。只要把這個數(shù)組的起始地址和長度設(shè)置到DMA,硬件就可以自動輸出指定的精密頻率。在調(diào)頻廣播調(diào)制器中,若設(shè)計輸出中心頻率為2 MHz,分頻緩存長度為96,則可以枚舉所有聲音電壓值,計算出對應(yīng)的一維數(shù)組,再把所有一維數(shù)組合并,保存成為一個二維數(shù)組。圖4 舉例介紹了產(chǎn)生這些中頻信號的原理。
設(shè)計聲音電壓值127 與中心頻率2 000 kHz對應(yīng)。例如,聲音電壓值等于2 時,對應(yīng)的頻率是1 926.171 9 kHz。DMA 控制器在每次TIM8 溢出時,從這個電壓值對應(yīng)的數(shù)組行數(shù)據(jù)中依次取得一個分頻數(shù)據(jù)更新ARR 寄存器,即可使TIM8 輸出1 926.171 9 kHz 頻率。每當(dāng)聲音電壓發(fā)生變化時,只需設(shè)置DMA 更換傳輸對應(yīng)的數(shù)組行,就能精確輸出這個電壓對應(yīng)的頻率信號。
每當(dāng)聲音電壓值變化時,理論上只需重設(shè)DMA 控制器的內(nèi)存讀取地址就可以合成相應(yīng)的頻率。然而,因?yàn)閷MA 的調(diào)整需要暫時打斷DMA,所以這種方式會引入較大的相位噪聲。為避免這一現(xiàn)象,采取DMA 緩存區(qū)固定而更新緩存區(qū)數(shù)據(jù)的方式,即DMA 控制器不停傳輸一個固定緩存區(qū)中數(shù)據(jù)給定時器,每當(dāng)聲音電壓值改變時,由軟件復(fù)制新的數(shù)組數(shù)據(jù)到這個緩存區(qū)。這種方式因不打擾DMA 可保證輸出信號切換準(zhǔn)確穩(wěn)定。
從窄帶調(diào)頻分析可見,減小調(diào)頻指數(shù)可降低邊頻振幅。對于任何輸出頻率,頻偏都已經(jīng)被單片機(jī)時鐘頻率和分頻數(shù)值N限定,因此提高調(diào)制頻率可降低調(diào)頻指數(shù)。也就是說,在分頻數(shù)組中使N和N+1兩種分頻數(shù)值分布均勻,對降低相位噪聲有利。因此,可編寫一個函數(shù),在自動計算出每個電壓值對應(yīng)每個頻率所有分頻值數(shù)據(jù)的同時,把它們均勻排列在數(shù)組中。
設(shè)計函數(shù)輸入?yún)?shù)有合成目標(biāo)頻率、定時器時鐘頻率以及分頻計數(shù)緩存區(qū)長度3 個參數(shù)。輸出這個頻率對應(yīng)的分頻值數(shù)組,在其中均勻填充供每次DMA 傳送給定時器的分頻值。圖5 是這個函數(shù)的流程圖。
因?yàn)樯婕暗臄?shù)值范圍不太大,所以可用定點(diǎn)數(shù)計算來提高速度。為了減小定點(diǎn)計算誤差,需要先算乘法再算除法,還需要檢查數(shù)據(jù)防止乘法數(shù)值過大而溢出。
受單片機(jī)中定時器和DMA 硬件性能的限制,實(shí)際測試STM32F407 單片機(jī)進(jìn)行這種窄帶調(diào)頻的輸出頻率上限約為7 MHz。若設(shè)置輸出頻率過高,輸出的信號會發(fā)生無規(guī)律的瞬時間斷現(xiàn)象。也就是說,本方案中的單片機(jī)不受傳統(tǒng)必須整數(shù)分頻的限制,可以輸出不高于7 MHz 的任意高精度頻率。
在窄帶調(diào)頻輸出信號中,主要雜波是上下兩個邊頻信號。只要調(diào)頻指數(shù)足夠小,邊頻振幅就可以小到忽略不計。當(dāng)N分頻數(shù)量與N+1 分頻所占比重相等時,邊頻振幅達(dá)到最大值時,調(diào)頻指數(shù)m=1/(2N+1)。因此,當(dāng)輸出中心頻率在2 MHz 附近的調(diào)頻廣播中頻信號時,N值為42,可計算出最差情況是:存在比輸出信號高或低24 kHz 的上、下兩個邊頻信號,其振幅只有輸出信號振幅的0.6%,在廣播調(diào)制器應(yīng)用中可忽略不計。
模擬V/F 變換電路通常采用深負(fù)反饋的積分電路,所以精度較高[7],但是不容易分析一個實(shí)際電路的精度,而用單片機(jī)設(shè)計的變換精度可以直接計算。
在晶體時鐘精度足夠高時,數(shù)字V/F 變換輸出的頻率精度由頻率分辨度確定。分頻緩存區(qū)越長,頻率分辨度越高。然而,用于2 MHz 中頻的廣播調(diào)制器時,因輸入16 kHz 的聲音采樣電壓信號,要求頻率快速改變。相鄰兩個數(shù)據(jù)的時間間隔62.5 μs,可以容納2 MHz 頻率的125 個周期,因此分頻緩存區(qū)長度超過125 將失去意義。實(shí)際系統(tǒng)設(shè)計分頻緩存區(qū)長度為96,通過計算所有8位電壓值對應(yīng)的頻率數(shù)據(jù)可以看到,在設(shè)計頻率為2.030 469 MHz 時誤差最大,實(shí)際合成頻率為2.030 723 MHz,相對誤差為0.012 5%。
用單片機(jī)設(shè)計的V/F 變換器響應(yīng)速度明顯比模擬V/F 變換電路快,只要DMA 把分頻數(shù)值送給了定時器,那么新頻率在定時器溢出后即可生效。因此,最大延遲時間只有定時器的一個溢出周期。
本文介紹的窄帶調(diào)頻方式可以在設(shè)置后無需軟件參與,持續(xù)輸出較高頻率精度的信號,突破傳統(tǒng)定時器分頻的頻率間隔限制。應(yīng)用這種技術(shù)設(shè)計的多通道調(diào)頻廣播數(shù)字調(diào)制電路,因?yàn)闆]有模擬電路環(huán)節(jié),所以具有電路簡單、體積小和免調(diào)試的優(yōu)點(diǎn),節(jié)目之間隔離不會相互串音。經(jīng)過實(shí)際試用,設(shè)備樣機(jī)效果良好。