楊會玲,唐彬,王軍
(1.蘇州科技學(xué)院,蘇州215011;2.安徽理工大學(xué))
時間,作為一個基本的參考量,是人們在各個領(lǐng)域進行工作的標(biāo)準(zhǔn)。作為高精度時間傳輸系統(tǒng)的首選標(biāo)準(zhǔn)碼,IRIG-B碼因其眾多優(yōu)點得到廣泛運用。本設(shè)計提出了一種新的B碼解調(diào)方案,區(qū)別于傳統(tǒng)的將單片機作為解調(diào)核心,而是從硬件處理效率等角度出發(fā),利用微控制器STM32輔助Altera的可編程邏輯器件工作,從而解調(diào)出時間信息。
ST的STM32F103是一款增強型芯片,使用ARM公司的Cortex-M3內(nèi)核技術(shù)。Cortex-M3內(nèi)核功耗、能效比、處理速度、價格等方面的優(yōu)勢以及快速中斷處理等技術(shù),不僅滿足了工控領(lǐng)域的高實時性要求,還為其在其他領(lǐng)域的運用奠定了一定基礎(chǔ),而且這些優(yōu)點也完全符合B碼時統(tǒng)解碼要求。B碼有直流碼和交流碼,交流碼解碼比直流碼解碼復(fù)雜。直流碼可以通過FPGA直接解調(diào)出,而交流碼則需要經(jīng)過STM32處理后,將其變成偽DC碼輸入到FPGA進行解調(diào)出處理。
本設(shè)計主要功能是將輸入B碼的DC/AC碼信號分別解調(diào)出來,DC碼信號經(jīng)電平轉(zhuǎn)換后直接輸入到FPGA進行解調(diào),而AC碼信號是交流信號,經(jīng)通道傳輸后會發(fā)生衰減等現(xiàn)象,所以需要將AC碼進行波形整形,預(yù)處理后再將傳輸?shù)牟ㄐ屋斎氲絊TM32,最后將其產(chǎn)生的偽DC碼和1kHz的脈沖進行處理,其總體設(shè)計如圖1所示。
圖1 總體設(shè)計框圖
AC碼處理模塊[1-3]主要包括隔離變壓模塊、絕對值放大模塊和過零比較模塊。隔離變壓器用來產(chǎn)生兩路等幅反相的AC碼,為方便硬件處理,需要將波形進行放大與過零比較處理,其硬件設(shè)計如圖2所示,上半部分是絕對值放大部分,下半部分為過零比較部分。
圖2 硬件設(shè)計電路
絕對值放大部分主要是由可編程電位器X9312WP和運算放大器LM324組成,作用是通過STM32的上升沿外部中斷進行A/D采集,將波形的幅值調(diào)節(jié)到所需范圍之內(nèi)。X9312WP是Xicor公司生產(chǎn)的具有100個抽頭的數(shù)字可編程電位器,驅(qū)動電壓為3.3V,電阻范圍為0~10kΩ,利用STM32控制端口INC和U/D來使阻值變化,其功能相當(dāng)于一個10kΩ可變電阻和R并聯(lián)成一個0~8kΩ范圍的電阻,一路AC經(jīng)過LM324反相后由這個并聯(lián)電阻和X9312WP組成的自動增益電路來輸出一個2~3V的反相正弦波(即AC_1),再將其經(jīng)過LM324后輸出一路與AC_1反相等幅的AC_2。
過零比較部分主要是由LM324、雙電壓比較器LM393和反相器組成,作用就是用來產(chǎn)生1kHz的脈沖。另一路AC碼經(jīng)過LM324等幅反相后經(jīng)過LM393,用來產(chǎn)生標(biāo)準(zhǔn)的1kHz脈沖。為了增加信號翻轉(zhuǎn)的可靠性,在LM393輸出部分加了一個5.1kΩ的電阻作為上拉電阻。該部分因涉及模擬信號與數(shù)字信號共用,需要將模擬地和數(shù)字地進行信號隔離,使系統(tǒng)電路不受電源干擾。
本設(shè)計使用了STM32的外部中斷和A/D轉(zhuǎn)換功能。在外部中斷服務(wù)程序中啟動A/D采集,得到當(dāng)前輸入AC碼的幅值,并判斷其幅值電壓是否介于2~3V之間。如果不在幅值范圍,則在中斷程序中通過調(diào)節(jié)X9312WP的阻值控制自動增益放大器倍數(shù),以使AC碼幅值滿足A/D采集要求,最后通過STM32的I/O口輸出偽DC碼。
STM32微控制器具有18路12位的ADC,可進行單次或者多次轉(zhuǎn)換,輸入時鐘在14MHz之內(nèi),可將采集的結(jié)果放在16位的存儲器中。輸入2kHz脈沖情況下,利用其下降沿中斷啟動AC碼的A/D采集功能,參考電壓是由可調(diào)分流基準(zhǔn)源TL431提供的3.3V電壓,AC_1和AC_2分別連接著STM32的I/O口。若AC碼輸入是原相位方式而沒有反相,則采用一路ADC即可,這樣直接輸入到STM32的I/O端口進行上升沿中斷處理從而得出偽DC碼。但是由于AC碼的反相問題,所以需要AC_1、AC_2以及2kHz的脈沖。這里要注意的是,經(jīng)測試STM32的外部中斷延時是600ns,由FPGA產(chǎn)生2kHz脈沖信號的高電平脈寬需進行調(diào)整,以此來保證采集的幅值是最大的。
由系統(tǒng)的3.3V的參考電壓和系統(tǒng)中ADC的12位分辨率得到信號采集靈敏度為0.806mV,AC碼的幅值調(diào)節(jié)在2~3V且高低電平幅值比為1/2~1/6,故得出A/D采集的 VHmin=1240,VLmin=414,STM32系統(tǒng)AC碼幅值采集流程圖如圖3所示。
圖3 幅度采集流程圖
在解碼設(shè)計中,STM32產(chǎn)生的偽DC碼和正常的DC碼除了在秒頭提取的方法上不一樣外,時間信息的提取方法是一樣的。DC解碼分為兩個部分:秒頭的提?。?pps)和時間信息的提取。利用10kHz的頻率進行碼元識別時,因為偏差的緣故,所以在判斷高電平個數(shù)時規(guī)定“0”的寬度為10~30,“1”的寬度為40~60,“P”的寬度為70~90,通過此法來提高準(zhǔn)確性和精度性。
1.4.1 DC碼的秒頭的同步提取
B碼的秒頭和PR(一幀的起始位標(biāo)識)的上升沿是一致的,這是對一個完整的數(shù)據(jù)進行讀取和識別的前提。對于DC碼的幀頭的提取,提出了兩種方法:精準(zhǔn)計數(shù)法、位標(biāo)檢測法。秒頭的同步提取如圖4所示,這里使用位標(biāo)檢測法,給每個識別碼一個標(biāo)志,從P0的0標(biāo)志到P9的10逐一遞增,有三個狀態(tài)S0、S1和S2。S0表示當(dāng)檢測到一個P(一幀所含的標(biāo)志位)且此時標(biāo)志位為11(立即賦值為0),即說明下一個狀態(tài)為PR,此時開啟啟動開關(guān)。當(dāng)檢測到下一個上升沿的時產(chǎn)生秒頭,否則返回繼續(xù)監(jiān)控并且檢測到一個P標(biāo)志位加1。S1為檢測狀態(tài),當(dāng)檢測為P,說明此時為PR狀態(tài)轉(zhuǎn)到S2,如果檢測到的不是P,則返回到S0繼續(xù)檢測。S2主要是賦予標(biāo)志位值,此時為PR狀態(tài),所以給標(biāo)志位為1,當(dāng)檢測到DC碼上升沿的時候轉(zhuǎn)換到S0繼續(xù)監(jiān)測。
由AC碼得出的偽DC碼只能用波形相“與”法[6]:為了產(chǎn)生pps_r,這里使用三個狀態(tài)機:S0、S1、S2。S0用來監(jiān)測8ms的高電平,當(dāng)檢測到后轉(zhuǎn)向S1,否則不斷檢測;S1主要是判斷連續(xù)的兩個8ms高電平,檢測到即轉(zhuǎn)向S2,否則轉(zhuǎn)回S0;考慮到PR的高電平數(shù)目不定,所以當(dāng)檢測到時間上升沿時在S2給予計數(shù)起始信號,延時特定時間后留下0.25ms+0.4ms的高電平作為pps_r信號。利用偽秒頭pps_r和1kHz進行相“與”,從而得出AC碼的秒頭。
圖4 秒頭的同步提取
1.4.2 時間信息提取
對于時間信息提取的方法,DC碼和偽DC碼是一樣的。通過對DC碼的解碼,給每個碼元一個編號,將其高電平脈沖個數(shù)取出,然后判斷每個碼元的電平狀態(tài),將結(jié)果存儲在寄存器里,最后轉(zhuǎn)換成易于使用的碼值。截取時間信息時,在一個完整的時間傳輸完后,由下一個P狀態(tài)標(biāo)志結(jié)束后提取,這使得時間的準(zhǔn)確性得到保障。設(shè)計模塊的RTL視圖如圖5所示。
圖5 總的RTL視圖
模塊U1的功能是保存每個碼元的位數(shù)及相應(yīng)的脈沖數(shù);模塊U2的主要功能是將每位的脈沖轉(zhuǎn)換成相應(yīng)的二進制碼;模塊U3的主要功能是將二進制代碼轉(zhuǎn)換成相應(yīng)的BCD代碼。
在硬件電路中使用兩塊實驗板進行測試。一塊實驗板用來顯示當(dāng)前接收到的碼流所含的時間信息,并通過DC碼的形式輸出,另一塊實驗板則用來將解調(diào)出的時間信息通過數(shù)碼管顯示。當(dāng)解碼正確時,兩者時間顯示一致,在示波器中顯示授時秒頭和解調(diào)秒頭,如圖6所示。
圖6采用的是第二種方法,可見精度完全在ns級。DC碼解碼的兩種方法經(jīng)實驗后對比分析如下:第一種因需計數(shù)990ms,50MHz晶振所用的計數(shù)器位數(shù)高達26位,雖然理論上可以得到準(zhǔn)確的秒脈沖,但實際運行中考慮到價格問題,使用的是普通晶振,而非恒溫晶振,所以產(chǎn)生結(jié)果與接收器所產(chǎn)生的秒頭有1μs左右的延時,且無論如何補償都有比較高的延時;第二種雖理論上有一個時鐘的延時,但由于沒使用計數(shù)器,所以對于時鐘頻率比較高的電路是有效的,這里使用了50MHz的晶振,所以在示波器上顯示的延時是30~40ns。
圖6 DC碼解碼秒頭
如圖7所示,上面是經(jīng)過模擬電路處理后的AC碼,下面是將幾個模塊整合后由STM32的I/O口輸出偽DC碼,可以看出它比AC碼延時了250μs,符合設(shè)計要求。
圖7 偽DC碼與解碼時間
在硬件實驗板上將偽DC碼輸入到FPGA后進行解調(diào)處理,硬件電路顯示出的時間信息也完全一致。
本文針對普通單片機執(zhí)行速度慢及精度低等問題,提出了一種新的B碼時統(tǒng)解碼方案。在AC碼的解碼方案中,一方面采用微控制器STM32的高速信號采集功能,另一方面通過STM32系統(tǒng)實現(xiàn)實時自動增益調(diào)節(jié)功能,輔助FPGA進行解碼;在DC碼的解碼部分采用“位標(biāo)檢測法”使解調(diào)精度控制在ns級。通過實驗結(jié)果分析,該B碼解碼設(shè)計方案具有實時性高、占用資源少和抗干擾性能好等優(yōu)點,同時提高了B碼解碼精度,增強了系統(tǒng)可靠性,故本文的設(shè)計方案對B碼技術(shù)在工程中的應(yīng)用具有積極的借鑒價值。
[1]佟剛,崔明.MSP430F149在IRIG-B碼解碼中的應(yīng)用[J].計算機測量與控制,2007,15(11):1597-1599.
[2]黃春林,趙云峰.基于 MSP430與FPGA的高授時精度時碼終端系統(tǒng)設(shè)計[J].戰(zhàn)略導(dǎo)彈技術(shù),2011,1(1):115-122.
[3]李詠豪.時間統(tǒng)一系統(tǒng)終端設(shè)備的研究[D].長春:長春理工大學(xué),2008.
[4]任志國.時統(tǒng)信號(B碼)在數(shù)字信道上畸變問題研究與解決[D].長沙:國防科技大學(xué),2003.
[5]劉懿.基于FPGA的分布式采集系統(tǒng)時鐘同步控制技術(shù)研究與實現(xiàn)[D].成都:成都理工大學(xué),2009.
[6]趙云峰,崔明,吳志勇.新型高授時精度時碼終端系統(tǒng)設(shè)計[J].電光與控制,2009,16(3):86-90.