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