楊會玲,唐彬,王軍
(1.蘇州科技學院,蘇州215011;2.安徽理工大學)
時間,作為一個基本的參考量,是人們在各個領域進行工作的標準。作為高精度時間傳輸系統的首選標準碼,IRIG-B碼因其眾多優點得到廣泛運用。本設計提出了一種新的B碼解調方案,區別于傳統的將單片機作為解調核心,而是從硬件處理效率等角度出發,利用微控制器STM32輔助Altera的可編程邏輯器件工作,從而解調出時間信息。
ST的STM32F103是一款增強型芯片,使用ARM公司的Cortex-M3內核技術。Cortex-M3內核功耗、能效比、處理速度、價格等方面的優勢以及快速中斷處理等技術,不僅滿足了工控領域的高實時性要求,還為其在其他領域的運用奠定了一定基礎,而且這些優點也完全符合B碼時統解碼要求。B碼有直流碼和交流碼,交流碼解碼比直流碼解碼復雜。直流碼可以通過FPGA直接解調出,而交流碼則需要經過STM32處理后,將其變成偽DC碼輸入到FPGA進行解調出處理。
本設計主要功能是將輸入B碼的DC/AC碼信號分別解調出來,DC碼信號經電平轉換后直接輸入到FPGA進行解調,而AC碼信號是交流信號,經通道傳輸后會發生衰減等現象,所以需要將AC碼進行波形整形,預處理后再將傳輸的波形輸入到STM32,最后將其產生的偽DC碼和1kHz的脈沖進行處理,其總體設計如圖1所示。

圖1 總體設計框圖
AC碼處理模塊[1-3]主要包括隔離變壓模塊、絕對值放大模塊和過零比較模塊。隔離變壓器用來產生兩路等幅反相的AC碼,為方便硬件處理,需要將波形進行放大與過零比較處理,其硬件設計如圖2所示,上半部分是絕對值放大部分,下半部分為過零比較部分。

圖2 硬件設計電路
絕對值放大部分主要是由可編程電位器X9312WP和運算放大器LM324組成,作用是通過STM32的上升沿外部中斷進行A/D采集,將波形的幅值調節到所需范圍之內。X9312WP是Xicor公司生產的具有100個抽頭的數字可編程電位器,驅動電壓為3.3V,電阻范圍為0~10kΩ,利用STM32控制端口INC和U/D來使阻值變化,其功能相當于一個10kΩ可變電阻和R并聯成一個0~8kΩ范圍的電阻,一路AC經過LM324反相后由這個并聯電阻和X9312WP組成的自動增益電路來輸出一個2~3V的反相正弦波(即AC_1),再將其經過LM324后輸出一路與AC_1反相等幅的AC_2。
過零比較部分主要是由LM324、雙電壓比較器LM393和反相器組成,作用就是用來產生1kHz的脈沖。另一路AC碼經過LM324等幅反相后經過LM393,用來產生標準的1kHz脈沖。為了增加信號翻轉的可靠性,在LM393輸出部分加了一個5.1kΩ的電阻作為上拉電阻。該部分因涉及模擬信號與數字信號共用,需要將模擬地和數字地進行信號隔離,使系統電路不受電源干擾。
本設計使用了STM32的外部中斷和A/D轉換功能。在外部中斷服務程序中啟動A/D采集,得到當前輸入AC碼的幅值,并判斷其幅值電壓是否介于2~3V之間。如果不在幅值范圍,則在中斷程序中通過調節X9312WP的阻值控制自動增益放大器倍數,以使AC碼幅值滿足A/D采集要求,最后通過STM32的I/O口輸出偽DC碼。
STM32微控制器具有18路12位的ADC,可進行單次或者多次轉換,輸入時鐘在14MHz之內,可將采集的結果放在16位的存儲器中。輸入2kHz脈沖情況下,利用其下降沿中斷啟動AC碼的A/D采集功能,參考電壓是由可調分流基準源TL431提供的3.3V電壓,AC_1和AC_2分別連接著STM32的I/O口。若AC碼輸入是原相位方式而沒有反相,則采用一路ADC即可,這樣直接輸入到STM32的I/O端口進行上升沿中斷處理從而得出偽DC碼。但是由于AC碼的反相問題,所以需要AC_1、AC_2以及2kHz的脈沖。這里要注意的是,經測試STM32的外部中斷延時是600ns,由FPGA產生2kHz脈沖信號的高電平脈寬需進行調整,以此來保證采集的幅值是最大的。
由系統的3.3V的參考電壓和系統中ADC的12位分辨率得到信號采集靈敏度為0.806mV,AC碼的幅值調節在2~3V且高低電平幅值比為1/2~1/6,故得出A/D采集的 VHmin=1240,VLmin=414,STM32系統AC碼幅值采集流程圖如圖3所示。

圖3 幅度采集流程圖
在解碼設計中,STM32產生的偽DC碼和正常的DC碼除了在秒頭提取的方法上不一樣外,時間信息的提取方法是一樣的。DC解碼分為兩個部分:秒頭的提取(1pps)和時間信息的提取。利用10kHz的頻率進行碼元識別時,因為偏差的緣故,所以在判斷高電平個數時規定“0”的寬度為10~30,“1”的寬度為40~60,“P”的寬度為70~90,通過此法來提高準確性和精度性。
1.4.1 DC碼的秒頭的同步提取
B碼的秒頭和PR(一幀的起始位標識)的上升沿是一致的,這是對一個完整的數據進行讀取和識別的前提。對于DC碼的幀頭的提取,提出了兩種方法:精準計數法、位標檢測法。秒頭的同步提取如圖4所示,這里使用位標檢測法,給每個識別碼一個標志,從P0的0標志到P9的10逐一遞增,有三個狀態S0、S1和S2。S0表示當檢測到一個P(一幀所含的標志位)且此時標志位為11(立即賦值為0),即說明下一個狀態為PR,此時開啟啟動開關。當檢測到下一個上升沿的時產生秒頭,否則返回繼續監控并且檢測到一個P標志位加1。S1為檢測狀態,當檢測為P,說明此時為PR狀態轉到S2,如果檢測到的不是P,則返回到S0繼續檢測。S2主要是賦予標志位值,此時為PR狀態,所以給標志位為1,當檢測到DC碼上升沿的時候轉換到S0繼續監測。
由AC碼得出的偽DC碼只能用波形相“與”法[6]:為了產生pps_r,這里使用三個狀態機:S0、S1、S2。S0用來監測8ms的高電平,當檢測到后轉向S1,否則不斷檢測;S1主要是判斷連續的兩個8ms高電平,檢測到即轉向S2,否則轉回S0;考慮到PR的高電平數目不定,所以當檢測到時間上升沿時在S2給予計數起始信號,延時特定時間后留下0.25ms+0.4ms的高電平作為pps_r信號。利用偽秒頭pps_r和1kHz進行相“與”,從而得出AC碼的秒頭。

圖4 秒頭的同步提取
1.4.2 時間信息提取
對于時間信息提取的方法,DC碼和偽DC碼是一樣的。通過對DC碼的解碼,給每個碼元一個編號,將其高電平脈沖個數取出,然后判斷每個碼元的電平狀態,將結果存儲在寄存器里,最后轉換成易于使用的碼值。截取時間信息時,在一個完整的時間傳輸完后,由下一個P狀態標志結束后提取,這使得時間的準確性得到保障。設計模塊的RTL視圖如圖5所示。

圖5 總的RTL視圖
模塊U1的功能是保存每個碼元的位數及相應的脈沖數;模塊U2的主要功能是將每位的脈沖轉換成相應的二進制碼;模塊U3的主要功能是將二進制代碼轉換成相應的BCD代碼。
在硬件電路中使用兩塊實驗板進行測試。一塊實驗板用來顯示當前接收到的碼流所含的時間信息,并通過DC碼的形式輸出,另一塊實驗板則用來將解調出的時間信息通過數碼管顯示。當解碼正確時,兩者時間顯示一致,在示波器中顯示授時秒頭和解調秒頭,如圖6所示。
圖6采用的是第二種方法,可見精度完全在ns級。DC碼解碼的兩種方法經實驗后對比分析如下:第一種因需計數990ms,50MHz晶振所用的計數器位數高達26位,雖然理論上可以得到準確的秒脈沖,但實際運行中考慮到價格問題,使用的是普通晶振,而非恒溫晶振,所以產生結果與接收器所產生的秒頭有1μs左右的延時,且無論如何補償都有比較高的延時;第二種雖理論上有一個時鐘的延時,但由于沒使用計數器,所以對于時鐘頻率比較高的電路是有效的,這里使用了50MHz的晶振,所以在示波器上顯示的延時是30~40ns。

圖6 DC碼解碼秒頭
如圖7所示,上面是經過模擬電路處理后的AC碼,下面是將幾個模塊整合后由STM32的I/O口輸出偽DC碼,可以看出它比AC碼延時了250μs,符合設計要求。

圖7 偽DC碼與解碼時間
在硬件實驗板上將偽DC碼輸入到FPGA后進行解調處理,硬件電路顯示出的時間信息也完全一致。
本文針對普通單片機執行速度慢及精度低等問題,提出了一種新的B碼時統解碼方案。在AC碼的解碼方案中,一方面采用微控制器STM32的高速信號采集功能,另一方面通過STM32系統實現實時自動增益調節功能,輔助FPGA進行解碼;在DC碼的解碼部分采用“位標檢測法”使解調精度控制在ns級。通過實驗結果分析,該B碼解碼設計方案具有實時性高、占用資源少和抗干擾性能好等優點,同時提高了B碼解碼精度,增強了系統可靠性,故本文的設計方案對B碼技術在工程中的應用具有積極的借鑒價值。
[1]佟剛,崔明.MSP430F149在IRIG-B碼解碼中的應用[J].計算機測量與控制,2007,15(11):1597-1599.
[2]黃春林,趙云峰.基于 MSP430與FPGA的高授時精度時碼終端系統設計[J].戰略導彈技術,2011,1(1):115-122.
[3]李詠豪.時間統一系統終端設備的研究[D].長春:長春理工大學,2008.
[4]任志國.時統信號(B碼)在數字信道上畸變問題研究與解決[D].長沙:國防科技大學,2003.
[5]劉懿.基于FPGA的分布式采集系統時鐘同步控制技術研究與實現[D].成都:成都理工大學,2009.
[6]趙云峰,崔明,吳志勇.新型高授時精度時碼終端系統設計[J].電光與控制,2009,16(3):86-90.