采用MCS-51單片機(jī)實現(xiàn)CPFSK調(diào)制
掃描二維碼
隨時隨地手機(jī)看文章
在遙測遙控系統(tǒng)中,數(shù)據(jù)的調(diào)制和解調(diào)是經(jīng)常遇到的問題。一些自報測站不接收遠(yuǎn)方的遙控命令,只是定時采集參數(shù)或在參數(shù)變化時采集,并自動將采集的參數(shù)發(fā)往監(jiān)控中心。這些遙測站不一定包含解調(diào)功能,但信號調(diào)制是遙測站的必要功能。
在水情自動測報系統(tǒng)中,數(shù)據(jù)傳輸大量采用超短波無線電臺。用模擬電臺傳輸數(shù)字信號時,調(diào)制方法多采用FSK。水情自動測報規(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)度,這樣在減小波形失真的同時,基波的損失也隨之增大。
如果采用正弦波脈寬調(diào)制(PWM)可以得到比較滿意的結(jié)果。PWM調(diào)制可以利用“0、1”變化的脈沖信號調(diào)制出模擬信號。
在計算機(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ù),因為正弦波圖形是一種對稱圖形。
對于一個周期函數(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ū)動作用。
因為單片機(jī)的P1~P3口是準(zhǔn)雙向口。作為輸出口時低電平有一定的吸收電流能力,但高電平輸出電流的能力很小,這就使輸出信號的開關(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)制是將正弦波分為若干個時段,并計算出每個時段內(nèi)高電平和低電平所占用的時間,這些時間在單片機(jī)中用軟件延時實現(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ī)的晶振頻率為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ù)1插補(bǔ)在20個時段中的某個時段中,也就是19個時段為T1180=39個機(jī)器周期,1個時段為T1180=40個機(jī)器周期。T0和T1的計算如表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ī)器周期數(shù)必須符合表2的要求。另外,在進(jìn)行FSK調(diào)制前應(yīng)該增加一定長度的980Hz 的載波信號(PWM980)作為前導(dǎo)碼信號。在數(shù)據(jù)發(fā)送完之后還應(yīng)該增加一定長度的PWM980作為停止位,因為單片機(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ì)會增加程序所占的空間。另一方面,時段的分割也不可能無限加大,因為采用軟件延時時,延時時間的最高分辨率為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)定性和靈活性。因為FSK的頻率只與單片機(jī)的晶振和軟件有關(guān),晶振的頻率是非常穩(wěn)定的。采用軟件編程調(diào)制可以根據(jù)信號的需要進(jìn)行靈活多樣的變化,而不用擔(dān)心專用元器件的供貨問題和元器件的質(zhì)量問題。該調(diào)制方式已在全國許多地區(qū)的水情自動測報系統(tǒng)中應(yīng)用,運(yùn)行結(jié)果是非常理想的。