摘? 要: 介紹一種用MCS-51單片機(jī)直接產(chǎn)生FSK信號的方法:首先采用PWM調(diào)制方法產(chǎn)生正弦波" title="正弦波">正弦波信號,,再根據(jù)串行口輸出的高,、低電平產(chǎn)生FSK信號。
關(guān)鍵詞: 頻移鍵控(FSK) 脈沖寬度調(diào)制(PWM)? 機(jī)器周期" title="機(jī)器周期">機(jī)器周期? 連續(xù)相位
?
在遙測遙控系統(tǒng)中,,數(shù)據(jù)的調(diào)制和解調(diào)是經(jīng)常遇到的問題,。一些自報(bào)測站不接收遠(yuǎn)方的遙控命令,只是定時采集參數(shù)或在參數(shù)變化時采集,,并自動將采集的參數(shù)發(fā)往監(jiān)控中心,。這些遙測站不一定包含解調(diào)功能,,但信號調(diào)制是遙測站的必要功能。
在水情自動測報(bào)系統(tǒng)中,,數(shù)據(jù)傳輸大量采用超短波無線電臺,。用模擬電臺傳輸數(shù)字信號時,調(diào)制方法多采用FSK,。水情自動測報(bào)規(guī)范推薦的標(biāo)準(zhǔn)為CCITT V.21,,即:數(shù)據(jù)串行速率為300波特率,數(shù)據(jù)電平“1”調(diào)制頻率為980Hz,,數(shù)據(jù)電平“0”調(diào)制頻率為1180Hz,。
調(diào)制解調(diào)的通常方法是采用專用的調(diào)制解調(diào)接口芯片,如MC145442,、XR2211,、XR2206等。采用專用調(diào)制解調(diào)接口芯片不僅增加了設(shè)備成本,,而且芯片質(zhì)量直接影響測控設(shè)備的性能,。就一般而言,設(shè)備中的元器件越多,,設(shè)備的可靠性越低,。因此,在滿足系統(tǒng)功能的前提下,,應(yīng)盡可能減少設(shè)備中元器件的品種和數(shù)量,。遙測遙控設(shè)備的信號調(diào)制解調(diào)是非常重要的環(huán)節(jié),如果能夠減少或省去調(diào)制解調(diào)專用接口芯片,,將對提高設(shè)備的穩(wěn)定性和可靠性大有好處,。
目前,幾乎所有的遙測設(shè)備都使用單片機(jī),,其中MCS-51系列單片機(jī)又占了很大比例,。本文將以MCS-51單片機(jī)為例,說明利用單片機(jī)的軟件調(diào)制產(chǎn)生標(biāo)準(zhǔn)的FSK信號,。
1 正弦波的調(diào)制
單片機(jī)的輸出接口一般只能輸出邏輯“0,、1”,即0,、Vcc兩種電位,。要想得到FSK信號,首先要得到正弦波信號,,再根據(jù)串行數(shù)據(jù)的變化產(chǎn)生FSK信號,。
從單片機(jī)獲得正弦波,最簡單的方法就是利用方波濾波得到正弦波。由于單片機(jī)的脈沖輸出只有正電平,,沒有負(fù)電平,,方波負(fù)半周,單片機(jī)無法產(chǎn)生負(fù)脈沖,。因此產(chǎn)生的信號波形應(yīng)該疊加一個直流正電平,,使信號波形完全處在正電平一側(cè)。如圖1所示,。
?
?
然而,,方波是由基波和一系列高次諧波組成。如果圖1可以用函數(shù)f(x)表示,,將函數(shù)f(x)進(jìn)行傅里葉級數(shù)展開可以得到:
從式(1)可以看出,,接近基波的諧波成分比重較大。采用低通濾波器濾波時,,接近基波的諧波成分難以濾去,,為了減小波形的失真往往需要增大濾波的強(qiáng)度,這樣在減小波形失真的同時,,基波的損失也隨之增大,。
如果采用正弦波脈寬" title="脈寬">脈寬調(diào)制(PWM)可以得到比較滿意的結(jié)果。PWM調(diào)制可以利用“0,、1”變化的脈沖信號調(diào)制出模擬信號,。
在計(jì)算機(jī)中,對連續(xù)曲線進(jìn)行數(shù)字化處理時,,通常將連續(xù)曲線用階梯圖形表示,,當(dāng)階梯的步長足夠小的時候,所表示的曲線被認(rèn)為是精確的,。圖2的上圖表示了不同時段內(nèi),,電壓的不同階梯,。
但是單片機(jī)輸出接口不能產(chǎn)生變化的電平,,即不能產(chǎn)生如圖2所示的電壓階梯,所能做的只能是“0,、1”電平的時間變化,,即PWM調(diào)制。
?
?
所謂正弦波PWM調(diào)制就是調(diào)制出的波形盡可能接近正弦波,,也就是傅里葉級數(shù)中的基波比重盡可能大,,高次諧波的比重盡可能小。對于圖2來說,,在調(diào)制過程中使每個時段內(nèi)下圖的陰影面積與上圖對應(yīng)部分的陰影面積相等,。在用PWM調(diào)制正弦波時,要求時段的分割是偶數(shù),,因?yàn)檎也▓D形是一種對稱圖形,。
對于一個周期函數(shù)可以進(jìn)行傅里葉級數(shù)的展開,,級數(shù)的一般表達(dá)式為:
????
當(dāng)按上述方法進(jìn)行PWM調(diào)制時,圖2下圖函數(shù)傅里葉級數(shù)的an均為0,,當(dāng)n為偶數(shù)時,,bn也為0。所以正弦波PWM調(diào)制的傅里葉級數(shù)為:
根據(jù)階梯圖形表示連續(xù)曲線時,,階梯越細(xì)圖形越精確的原理,,認(rèn)為用PWM調(diào)制正弦波時,時段分割越多,,調(diào)制出的正弦波越精確,。如果不考慮級數(shù)中的直流成分,可以得到不同時段的諧波系數(shù),,如表1所示,。
?
?
從表1可以看出,諧波系數(shù)隨著諧波次數(shù)的增加逐漸減小,,但在n=K-1處系數(shù)會突然增大,,之后又逐漸減小。而這種突然增大的比值隨著時段分割數(shù)的增加總體呈下降趨勢,。
另一方面,,突然增大的比值,隨著時段分割數(shù)的增加而向高次諧波方向移動,。對這種遠(yuǎn)離基波的高次諧波,,只要采用低通濾波器就能很容易將其去除,我們所關(guān)心的是如何盡可能減小基波附近諧波的系數(shù),。
從表1可以看出,,隨著時段分割數(shù)的增加,離基波較近的諧波系數(shù)也呈下降趨勢,。所以通過對時段的細(xì)分,,信號的高次諧波,特別是接近基波的諧波成分會進(jìn)一步減少,。
2 信號輸出
由于采用了正弦波PWM調(diào)制,,單片機(jī)輸出信號只要經(jīng)過簡單的低通濾波器就可以得到平滑的正弦波信號。圖3中的74HC04是CMOS反相器,,這里它起緩沖驅(qū)動作用,。
?
?
????因?yàn)閱纹瑱C(jī)的P1~P3口是準(zhǔn)雙向口。作為輸出口時低電平有一定的吸收電流能力,,但高電平" title="高電平">高電平輸出電流的能力很小,,這就使輸出信號的開關(guān)特性有較大差異。而CMOS反相器的輸出采用P溝道和N溝道MOS管構(gòu)成的對稱互補(bǔ)結(jié)構(gòu),使輸出信號的“0,、1”有相同的開關(guān)特性,,能保證低電平的吸收電流和高電平的輸出電流相同。圖3中R1,、R2為1kΩ的電阻,,C1、C2,、C3為0.1μF的獨(dú)石電容,。當(dāng)時段分割為20,正弦波信號頻率為1180Hz時,,圖3中A,、B、C三個端口的輸出波形如圖4所示,。
?
?
3 CPFSK調(diào)制
軟件調(diào)制是將正弦波分為若干個時段,,并計(jì)算出每個時段內(nèi)高電平和低電平所占用的時間,這些時間在單片機(jī)中用軟件延時實(shí)現(xiàn),。
為了敘述方便,,首先定義幾個符號:
φ——軟件調(diào)制所在的相位;
T——相位角為φ時對應(yīng)時段的機(jī)器周期總和;
T1——相位角為φ時對應(yīng)時段的高電平機(jī)器周期;
T0——相位角為φ時對應(yīng)時段的低電平機(jī)器周期;
T1180——相位角為φ時頻率為1180Hz正弦波對應(yīng)時段的機(jī)器周期總和;
T980——相位角為φ時頻率為980Hz正弦波對應(yīng)時段的機(jī)器周期總和。
根據(jù)圖2中面積相等,,即S1=S2的要求可以得到:
如果單片機(jī)的晶振" title="晶振">晶振頻率為11.0592MHz,,完成頻率為980Hz的正弦波調(diào)制需要=940個機(jī)器周期,完成頻率為1180Hz的正弦波調(diào)制需要=781個機(jī)器周期,。
20等分能夠?qū)?40整除,,得到每個時段的機(jī)器周期數(shù)T980=47。但=39余1,,如果將余數(shù)1丟掉,,就會造成頻率為1180Hz的正弦波頻率誤差變大。實(shí)際編程時可以將余數(shù)1插補(bǔ)在20個時段中的某個時段中,,也就是19個時段為T1180=39個機(jī)器周期,,1個時段為T1180=40個機(jī)器周期。T0和T1的計(jì)算如表2所示,。
?
?
如果波形調(diào)制是單一頻率的,,調(diào)制程序可以非常簡單,,只要編制順序程序就可以了,。如果波形調(diào)制的頻率是變化的,就需要根據(jù)串行數(shù)據(jù)“0”或“1”的變化來改變每個時段的延時時間,。在MCS-51單片機(jī)中,,串行數(shù)據(jù)流是由軟件設(shè)置,硬件自動產(chǎn)生,由TXD自動發(fā)出的,。TXD的高低電平變化可以通過單片機(jī)的程序測得,。根據(jù)這一特性,可以通過不斷檢測TXD的高低電平變化來決定每個時段的延時時間,。程序流程如圖5所示,。
?
?
從流程圖5可以看出,在每個相位中,,單片機(jī)將Px.x置“1”或置“0”后都要判斷TXD的電平,,以確定相應(yīng)延時的機(jī)器周期數(shù)。在某個相位TXD電平開始改變時,,程序就從這個相位改變脈沖的延時時間,,而程序中相位執(zhí)行的次序并不改變。所以在TXD的電平改變時,,兩種頻率的正弦波信號在同一個相位上交接,。因此,F(xiàn)SK調(diào)制相位是連續(xù)的,,見圖6,。
?
?
編程時必須注意,程序不論走哪條分支,,所用的機(jī)器周期數(shù)都必須跟蹤計(jì)算,,最終所用的機(jī)器周期數(shù)必須符合表2的要求。另外,,在進(jìn)行FSK調(diào)制前應(yīng)該增加一定長度的980Hz 的載波信號(PWM980)作為前導(dǎo)碼信號,。在數(shù)據(jù)發(fā)送完之后還應(yīng)該增加一定長度的PWM980作為停止位,因?yàn)閱纹瑱C(jī)的TI標(biāo)志出現(xiàn)在數(shù)據(jù)幀停止位的前沿,。
4 波形的優(yōu)化
圖4中B端的波形也就是帶有鋸齒的正弦波,,是PWM調(diào)制經(jīng)一階濾波后產(chǎn)生的波形。該波形已具有了正弦波的大致形狀,,但鋸齒也很明顯,,它和圖2的階梯波有些相似。通過前面的分析和表1的比較知道,,增加PWM調(diào)制的時段分割數(shù)可以提高正弦波的波形精確度,。
對于時段分割應(yīng)該選擇一個適當(dāng)?shù)臄?shù)字。分割太粗,,波形的失真就會嚴(yán)重,,給濾波帶來困難;分割過細(xì)會增加程序所占的空間。另一方面,,時段的分割也不可能無限加大,,因?yàn)椴捎密浖訒r時,,延時時間的最高分辨率為1個機(jī)器周期。從表2也可以看到,,在第4和第6時段出現(xiàn)了最小脈寬為1個機(jī)器周期的情況,,而在第5時段甚至出現(xiàn)了只有高電平?jīng)]有低電平的現(xiàn)象。如果繼續(xù)細(xì)分時段,,將會出現(xiàn)更多的只有一種電平的脈寬而另一種電平脈寬長度為0的現(xiàn)象,。按上述等分時段的方法,如果不提高單片機(jī)的晶振頻率,,20個時段的分割已達(dá)到極限,。所以不能單純地采用細(xì)分時段的方法來提高波形的精度。
從圖4中帶有鋸齒的正弦波可以看出,,鋸齒的大小在整個波形上不是處處相等的,,波峰左側(cè)的鋸齒要比右側(cè)的鋸齒小得多。
從圖2的階梯波形可以看出,,當(dāng)階梯波的精度最高時,,應(yīng)該是電壓的步長或時間的步長之一為最小,而不是電壓步長與時間步長之和為最小,,當(dāng)然更不能是電壓或時間的任何步長為0,。同樣,用脈寬波表示正弦波時,,精度最高的表示方法應(yīng)該是“0,、1”之一的脈寬為最小,而不一定是“0,、1”脈寬之和為最小,,也不能是“0、1”之一的脈寬為0,。
從圖4中可以看出,,波峰的左側(cè)恰好是“0、1”之一的脈寬較小的地方,,這里的鋸齒較小,。波峰的右側(cè)是“0、1”脈寬比較平均的地方,,這里的鋸齒較大,。
根據(jù)上述分析知道,要想提高波形的精度就要對時段細(xì)分,,細(xì)分的原則就是“0,、1”之一的脈寬為最小。這樣每個時段就不會是均等的,。在單片機(jī)中,,脈沖的延時的最小時間是一個機(jī)器周期,。如果PWM調(diào)制的是單一頻率的正弦波,,“0,、1”之一的最小脈寬就是一個機(jī)器周期。但是在進(jìn)行FSK調(diào)制時,,由于在執(zhí)行每個脈寬延時時要對TXD的電平進(jìn)行判斷,,一個機(jī)器周期顯然不夠用。如果某個時段的高電平脈寬T1180(H)=3,,T980(H)=4,,根據(jù)圖5的程序流程,具體的程序是:
?
從上面程序可以看出,,如果某個時段T1180(X)≠T980(X),,T1180(X)的最小值為3個機(jī)器周期,T980(X)的值則是根據(jù)T1180(X)所在相位做相應(yīng)的增加,。當(dāng)然,,當(dāng)T1180(X)=T980(X)時,T1180(X)和T980(X)的最小值可以是1個機(jī)器周期,。
單片機(jī)的晶振頻率為11.0592MHz,,采用這種方式調(diào)制,時段分割為52個,,調(diào)制的結(jié)果如圖7所示,。比較圖7與圖4可以發(fā)現(xiàn),波峰左側(cè)變化不大,,波峰右側(cè)的鋸齒卻大大減小了,,整個波形的精度有了很大提高。
?
?
采用單片機(jī)的輸出接口直接調(diào)制產(chǎn)生CPFSK信號,,充分利用了單片機(jī)的資源,,節(jié)省了元器件,同時也提高了信號頻率的穩(wěn)定性和靈活性,。因?yàn)镕SK的頻率只與單片機(jī)的晶振和軟件有關(guān),,晶振的頻率是非常穩(wěn)定的。采用軟件編程調(diào)制可以根據(jù)信號的需要進(jìn)行靈活多樣的變化,,而不用擔(dān)心專用元器件的供貨問題和元器件的質(zhì)量問題,。該調(diào)制方式已在全國許多地區(qū)的水情自動測報(bào)系統(tǒng)中應(yīng)用,運(yùn)行結(jié)果是非常理想的,。
?
參考文獻(xiàn)
1 ALAN V.OPPENHEIM? SIGNALS & SYSTEMS? Prentice? -Hall Inc.1997
2 張德民.數(shù)據(jù)通信.北京:科學(xué)技術(shù)文獻(xiàn)出版社,, 1997
3 白駒珩.單片計(jì)算機(jī)及其應(yīng)用.成都:電子科技大學(xué)出版社,1999