摘要:標(biāo)量網(wǎng)絡(luò)分析儀在進(jìn)行器件測試時(shí)對測試周期時(shí)間和數(shù)據(jù)準(zhǔn)確度有較高要求,為提升標(biāo)量網(wǎng)絡(luò)分析儀下位機(jī)運(yùn)行效率及降低硬件功耗,下位機(jī)固件程序采用了匯編語言。文章提出下位機(jī)固件程序中2種重要的算法:一種是壓縮BCD(二進(jìn)制編碼十進(jìn)制,Binary-Coded Decimal)碼的編碼與解碼算法,算法規(guī)避了下位機(jī)接收上位機(jī)數(shù)據(jù)的邏輯錯(cuò)誤;另一種是直接數(shù)字頻率合成器頻率字的改進(jìn)移位除法算法,解決了被除數(shù)小于除數(shù)的運(yùn)算限制。固件程序運(yùn)行結(jié)果顯示,標(biāo)量網(wǎng)絡(luò)分析儀測試速度、準(zhǔn)確度及功耗滿足測試需求。
關(guān)鍵詞:標(biāo)量網(wǎng)絡(luò)分析儀;下位機(jī)程序;編碼;解碼;移位
中圖分類號:TP31 文獻(xiàn)標(biāo)識(shí)碼:A? ?文章編號:1674-0688(2023)05-0024-04
0 引言
標(biāo)量網(wǎng)絡(luò)分析儀是一種便捷且分析結(jié)果顯示直觀的幅頻特性測試設(shè)備,可對射頻放大器、天線、耦合器、濾波器等器件進(jìn)行傳輸特性和反射特性進(jìn)行實(shí)時(shí)測量調(diào)試。商品化的標(biāo)量網(wǎng)絡(luò)分析儀體積龐大,因此在戶外或一些移動(dòng)測試作業(yè)場景上使用受到限制。構(gòu)建一個(gè)便攜、性能穩(wěn)定的標(biāo)量網(wǎng)絡(luò)分析儀測試系統(tǒng)可以使標(biāo)量網(wǎng)絡(luò)分析儀在體積上適于手持使用,同時(shí)能配合個(gè)人電腦系統(tǒng)進(jìn)行精細(xì)化操作。便攜標(biāo)量網(wǎng)絡(luò)分析儀整體結(jié)構(gòu)分為上位機(jī)和下位機(jī)2個(gè)部分,上位機(jī)利用開源軟件WinNWT作為測試控制前端,下位機(jī)主要由閉環(huán)硬件架構(gòu)和高效固件程序組成,上位機(jī)和下位機(jī)通過特殊定義的串口進(jìn)行通信并完成各類測試任務(wù)。由于標(biāo)量網(wǎng)絡(luò)分析儀對測試實(shí)時(shí)響應(yīng)的要求較高,所以下位機(jī)固件程序的算法效率直接影響整個(gè)標(biāo)量網(wǎng)絡(luò)分析儀的工作性能。為有效提升下位機(jī)數(shù)據(jù)處理效率,本研究采用壓縮BCD編解碼算法,同時(shí)基于計(jì)算直接數(shù)字頻率合成器頻率字的方法,提出改進(jìn)移位除法算法。
1 運(yùn)行原理
1.1 硬件運(yùn)行原理
標(biāo)量網(wǎng)絡(luò)分析儀的工作流程如圖1所示,上位機(jī)程序和單片機(jī)通過串口協(xié)議連接,單片機(jī)通過上位機(jī)發(fā)送的協(xié)議命令解析并執(zhí)行網(wǎng)絡(luò)分析儀的相應(yīng)測試功能。被測器件(Device Under Test,DUT)執(zhí)行幅頻特性測試時(shí),單片機(jī)根據(jù)上位機(jī)發(fā)送的頻率范圍及頻率步進(jìn)值控制直接數(shù)字頻率合成器(Direct Digital Synthesizer,DDS),輸出一系列掃頻信號,掃頻信號通過寬帶放大電路產(chǎn)生足夠的測試功率,放大后的掃頻信號輸入DUT的輸入端并從DUT的輸出端輸出,輸出信號進(jìn)入對數(shù)放大電路后轉(zhuǎn)換成直流信號,單片機(jī)的模數(shù)采樣端對直流信號進(jìn)行模數(shù)采樣并轉(zhuǎn)發(fā)給上位機(jī),由此進(jìn)行正確的測量顯示[1]。
1.2 軟件運(yùn)行原理
上位機(jī)軟件WinNWT通過自定的串口協(xié)議規(guī)則和下位機(jī)通信,控制下位機(jī)完成標(biāo)量網(wǎng)絡(luò)分析儀的主要測試任務(wù),如點(diǎn)頻率輸出、掃頻及功率測量等。網(wǎng)絡(luò)分析儀在掃頻測量時(shí),不僅要求頻率分辨率高,而且對掃頻速度也有很高的要求,因此下位機(jī)軟件程序需要有足夠快的執(zhí)行和響應(yīng)速度。為此,標(biāo)量網(wǎng)絡(luò)分析儀采用了匯編語言編寫下位機(jī)微控制器的軟件程序,下位機(jī)微控制器采用PIC系列單片機(jī)[2]。
WinNWT上位機(jī)軟件和下位單片機(jī)通信時(shí)執(zhí)行的串口協(xié)議,其規(guī)則在軟件的官方文檔中有具體的描述[3]。協(xié)議中指出:每條協(xié)議命令以十六進(jìn)制的8 F為開始字符,緊接8 F后的是具體的命令字符,例如對數(shù)掃頻會(huì)在8 F字節(jié)后發(fā)送22個(gè)ASCII字符“x001000000000140002000”,每個(gè)字符占用1個(gè)字節(jié),即相當(dāng)于22個(gè)字節(jié);其中,“x”表示對數(shù)掃頻,第2至第10個(gè)字節(jié)表示起始頻率,第11至第18個(gè)字節(jié)表示掃頻步進(jìn)頻率值,第19至第22個(gè)字節(jié)表示掃頻采樣點(diǎn)數(shù)。網(wǎng)絡(luò)分析儀的其他命令格式也相同,唯一的區(qū)別是每個(gè)命令字節(jié)的長短不同。
2 協(xié)議解析
2.1 下位機(jī)選擇
由于標(biāo)量網(wǎng)絡(luò)分析儀和上位機(jī)軟件分工聯(lián)動(dòng)工作,因此可以極大地減輕下位機(jī)單片機(jī)的負(fù)荷,同時(shí)降低單片機(jī)的編程量。標(biāo)量網(wǎng)絡(luò)分析儀中的單片機(jī)負(fù)責(zé)控制直接數(shù)字頻率合成芯片,生成上位機(jī)所需的頻率,同時(shí)在掃頻時(shí)負(fù)責(zé)對數(shù)放大芯片的電壓數(shù)據(jù)進(jìn)行采樣,并將采樣數(shù)據(jù)通過串口協(xié)議回傳給上位機(jī)進(jìn)行處理;上位機(jī)對單片機(jī)回傳的數(shù)據(jù)進(jìn)行處理后顯示正確的測量結(jié)果。因?yàn)镈DS生成的頻率的幅度不一致,所以上位機(jī)軟件需要在網(wǎng)絡(luò)分析儀測量前進(jìn)行測量數(shù)據(jù)校準(zhǔn),并將校準(zhǔn)數(shù)據(jù)存儲(chǔ)在上位機(jī)中?;赑C平臺(tái)的上位機(jī)軟件可以更準(zhǔn)確、詳細(xì)地顯示大量測量數(shù)據(jù)。
網(wǎng)絡(luò)分析儀下位機(jī)和上位機(jī)軟件WinNWT通信時(shí)也需要滿足相應(yīng)的串口協(xié)議,為此下位機(jī)微控制器選用PIC16F876單片機(jī)。PIC16F876單片機(jī)只有35條指令,時(shí)鐘頻率可以在低功耗狀態(tài)下達(dá)到20 MHz,其芯片內(nèi)部自帶USART串行通信模塊,從而方便與上位機(jī)軟件通信,減少編程量。由于網(wǎng)絡(luò)分析儀對測試的實(shí)時(shí)性和速度有較高要求,因此采用MPASM匯編語言進(jìn)行單片機(jī)編程。MPASM是美國微芯科技公司的原廠免費(fèi)匯編系統(tǒng),其編譯的程序更穩(wěn)定、可靠;匯編語言程序具有占用空間小、執(zhí)行效率高的優(yōu)勢,而且硬件功耗低。
2.2 協(xié)議解析算法
以下簡化程序段為下位機(jī)對上位機(jī)串口命令的解析子程序,子程序通過分析上位機(jī)串口發(fā)送的ASCII協(xié)議字符命名,控制下位機(jī)單片機(jī)執(zhí)行相應(yīng)的操作任務(wù)。例如,程序段中先判斷接收的第一個(gè)字符是否為“x”;如果是,再判斷命令長度是否為22個(gè)字符;如果是,則執(zhí)行對數(shù)掃頻;否則再判斷是否是其他命令;最后通過循環(huán)控制,不斷解析上位機(jī)串口發(fā)送的命令。
ParseCommand:
MES_WAIT:
CALL sub_174;讀1個(gè)字節(jié)
BTFSS STATUS,C
GOTO MES_WAIT;為空
XORLW 'x';AD8307掃頻
BTFSS STATUS,Z
GOTO TRY_COM_F;去點(diǎn)頻設(shè)置
XORLW .22;是否22個(gè)字符
BTFSS STATUS,Z
GOTO TRY_COM_F;去點(diǎn)頻設(shè)置
CALL Sweep;調(diào)用掃頻程序
TRY_COM_F:
XORLW 'f';點(diǎn)頻設(shè)置
BTFSS STATUS,Z
GOTO MES_WAIT
XORLW .10
BTFSS STATUS,Z
GOTO MES_WAIT
CALL Set_VFO;調(diào)用點(diǎn)頻程序
RETURN
3 核心算法
3.1 壓縮BCD碼算法
在上位機(jī)軟件WinNWT發(fā)送的命令數(shù)據(jù)中,這些數(shù)據(jù)的主體部分都是ASCII形式十進(jìn)制數(shù),每一位十進(jìn)制數(shù)需要占用1個(gè)字節(jié),例如上位機(jī)發(fā)送的對數(shù)掃頻命令A(yù)SCII碼為“x001000000000140002000”,22個(gè)字符需要占用22個(gè)字節(jié)長度,這種長度增加了下位機(jī)數(shù)據(jù)處理的負(fù)擔(dān),為此本文在下位機(jī)中采用壓縮BCD算法,壓縮BCD算法可以將串口協(xié)議碼的空間占用減少到原來的一半[4]。
用4位二進(jìn)制數(shù)來表示1位十進(jìn)制數(shù)有16種組合,從中選出10種表示十進(jìn)制數(shù)的10個(gè)數(shù)碼有很多種方法,較常用的是壓縮BCD碼,即4位二進(jìn)制數(shù)的“權(quán)”由左至右分別是8、4、2、1,因此也稱為“8421碼”,用1個(gè)字節(jié)表示的2位BCD碼稱為壓縮型BCD碼。例如ASCII碼“10”用2個(gè)壓縮BCD碼表示為“00010000”,其中“0001”為ASCII碼的“1”,“0000”為ASCII碼的“0”,具體匯編程序代碼如下。
sub_2DD:
SWAPF 0x61,W ;高低4位互換
ANDLW 0xF0;取高4位
MOVWF 0x3F;填充高4位
MOVF 0x62,W
ANDLW 0xF ;取低4位
IORWF 0x3F,F(xiàn);填充低4位
RETURN
以上子程序?yàn)閴嚎sBCD碼算法,例如ASCII碼“12”的“1”和“2”分別存放在0x61(00000001)、0x62(00000010)中,通過上述壓縮編碼子程序處理后,分別將0x61低4位存放在0x3F的高4位,0x62的低4位存放在0x3F的低4位,這樣ASCII碼“12”就以壓縮BCD碼(00010010)存放在0X3F中。
3.2 BCD解碼算法
如果將上述壓縮BCD碼算法處理后的數(shù)據(jù)直接送至下位機(jī)單片機(jī)中使用,會(huì)產(chǎn)生嚴(yán)重的邏輯錯(cuò)誤。具體原因可通過數(shù)據(jù)實(shí)例分析,例如上位機(jī)串口傳來的數(shù)據(jù)為10,壓縮BCD碼表示為00010000,如果單片機(jī)直接對該8位壓縮BCD碼進(jìn)行運(yùn)算處理,則會(huì)認(rèn)為是16,這與上位機(jī)發(fā)送數(shù)據(jù)意圖不一致,因此需要采用BCD解碼算法,具體程序如下。
sub_220:
MOVLW 0x8;8位
MOVWF 0x2C
loc_233:
BCF STATUS,C ;清零
RRF 0x52,F(xiàn)
RRF 0x57,F(xiàn) ;輔助空間
BTFSS 0x52,7;判斷第7位
GOTO loc_246;不為1
MOVLW 0x30 ;為1
SUBWF 0x52,F(xiàn);減0x30
loc_246:
BTFSS 0x52,0x3 ;判斷第3位
GOTO loc_24A ;不為1
MOVLW 0x3;為1
SUBWF 0x52,F(xiàn) ;減0x3
loc_24A:
DECFSZ 0x2C,F(xiàn)
GOTO loc_233 ;循環(huán)
RETURN
上述程序采用循環(huán)右移算法,其中0x52中存放待處理的8位壓縮BCD碼,0x57中存放解碼結(jié)果,0x52的最低位數(shù)據(jù)每次右移進(jìn)入0x57的最高位,由于狀態(tài)標(biāo)志寄存器的c位每次循環(huán)移位前都要清零,所以不予考慮;0x52的7位和3位如果為1,則需分別減去0x30和0x3,程序中0x52和0x57分別進(jìn)行8次循環(huán)右移,最后0x57中存放的結(jié)果正好是0x52壓縮碼的解碼結(jié)果。具體解碼流程見表1。
從表1中可見,0x52的初始值為00010000(ASCII碼為10),通過8次循環(huán)右移,0x57中的值為00001010,而該值正好是十進(jìn)制的10或十六進(jìn)制的A。該解碼程序?qū)SCII碼“10”進(jìn)行了正確解碼,使下位機(jī)可以正確處理后續(xù)數(shù)據(jù)。
3.3 頻率控制字算法
直接數(shù)字頻率合成芯片的頻率輸出是網(wǎng)絡(luò)分析儀的核心功能,是掃頻輸出各項(xiàng)指標(biāo)正確與否的關(guān)鍵。頻率控制字決定著直接數(shù)字頻率合成芯片的輸出頻率,其具體計(jì)算公式如下:
[k = foutfc2n]? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(1)
公式(1)中,k表示頻率控制字,fout表示輸出頻率,fc表示時(shí)鐘頻率;由于式中的輸出頻率小于時(shí)鐘頻率,即被除數(shù)小于除數(shù),因此不能按計(jì)算機(jī)中常規(guī)的除法運(yùn)算規(guī)則計(jì)算,本文采用改進(jìn)的除法運(yùn)算規(guī)則,具體直接數(shù)字頻率合成芯片的程序算法如下[5]。
sub_260:
MOVF 0x2E,W
MOVWF 0x58
MOVLW .8;8位計(jì)數(shù)
MOVWF 0x56
loc_26C:;循環(huán)
CLRF 0x60
BCF STATUS,C
RRF 0x52,F(xiàn);右移
BTFSS STATUS,C
GOTO loc_291;無溢出
MOVF 0x58,W
ADDWF 0x60,F(xiàn) ;求和
loc_291:
BCF STATUS,C ;清零
RLF 0x58,F(xiàn)
RLF 0x59,F(xiàn)
DECFSZ 0x56,F(xiàn) ;更新計(jì)數(shù)
GOTO loc_26C
RETURN
為使代碼描述方便、直觀,對其進(jìn)行一定程度的數(shù)據(jù)量簡化,假設(shè)0x58中存放的是系統(tǒng)時(shí)鐘值2(00000010),0x52中存放的是系統(tǒng)輸出頻率值4(00000100),n為8,那么按照公式(1)計(jì)算k等于8。將上述值代入程序驗(yàn)證,表2為程序的直觀數(shù)據(jù)處理過程[6]。從表2可以看到,0x52中的數(shù)值先進(jìn)行一次右移,如果沒有溢出,則0x58中的數(shù)值進(jìn)行一次左移;0x52第2次右移,此時(shí)產(chǎn)生了溢出,為此將0x52中的數(shù)值和0x58中的數(shù)值相加,并將結(jié)果賦給0x60,從程序代碼可以看出,運(yùn)算結(jié)果正好是8,與公式(1)的運(yùn)算結(jié)果保持一致。當(dāng)然,程序代碼中的0x52本應(yīng)該右移8次,相應(yīng)的0x58左移8次(相當(dāng)于28),但為了示例直觀,在數(shù)據(jù)和程序上進(jìn)行了一定的簡化。
4 試驗(yàn)測試
為驗(yàn)證上述算法的正確性,標(biāo)量網(wǎng)絡(luò)分析儀首先在上位機(jī)軟件WinNWT校準(zhǔn)狀態(tài)下,對中心頻率為8.998 MHz的晶體濾波器進(jìn)行幅頻特性測試;然后使用標(biāo)準(zhǔn)設(shè)備“安捷倫”8714ET網(wǎng)絡(luò)分析儀對該濾波器進(jìn)行相同參數(shù)的測試。表3為標(biāo)量網(wǎng)絡(luò)分析儀和“安捷倫”8714ET網(wǎng)絡(luò)分析儀主要測量數(shù)據(jù)的對比結(jié)果,從表3中可看出,標(biāo)量網(wǎng)絡(luò)分析儀WinNWT的測試數(shù)據(jù)在誤差范圍內(nèi),說明下位機(jī)算法是正確且可行的,尤其掃頻測試涉及數(shù)據(jù)量大時(shí),能更有效驗(yàn)證算法的正確性。表3對比的兩者中心頻率有50 Hz的誤差,主要是由標(biāo)量網(wǎng)絡(luò)分析儀硬件電路中的時(shí)鐘晶振引起的。
5 結(jié)論
(1)通過WinNWT上位機(jī)軟件串口協(xié)議編寫下位機(jī)軟件的具體程序,不僅很好地利用了上位機(jī)軟件的豐富功能,還減少了網(wǎng)絡(luò)分析儀的開發(fā)工作量。
(2)下位機(jī)使用匯編語言極大地提高了對上位機(jī)的響應(yīng)速度。
(3)網(wǎng)絡(luò)分析儀在程序開發(fā)過程中使用壓縮BCD編碼方法,該方法能有效降低數(shù)據(jù)的空間占用量;采用BCD解碼程序?qū)嚎sBCD碼進(jìn)行解碼處理,從而使下位機(jī)得到正確的處理結(jié)果。
(4)直接數(shù)字頻率合成芯片的頻率控制字按常規(guī)算法編程不可行,進(jìn)行相應(yīng)的算法改進(jìn)后,直接數(shù)字頻率合成芯片的頻率控制字可以正確生成。
通過對上述程序算法進(jìn)行改進(jìn)和創(chuàng)新,標(biāo)量網(wǎng)絡(luò)分析儀各項(xiàng)測試功能的可靠性得到了有效保障。經(jīng)試驗(yàn)測試,標(biāo)量網(wǎng)絡(luò)分析儀運(yùn)行穩(wěn)定且可靠,能夠直觀、準(zhǔn)確地測試射頻類器件的幅頻特性,其速度、準(zhǔn)確度及功耗均滿足工程實(shí)踐的測試需求。后續(xù)可通過提升軟件功能為標(biāo)量網(wǎng)絡(luò)分析儀添加更多實(shí)用測試功能。
6 參考文獻(xiàn)
[1]陳玉.TDC-GP22時(shí)間數(shù)字芯片關(guān)鍵編程算法研究與實(shí)現(xiàn)[J].軟件工程,2018,21(8):4-6.
[2]Microchip Technology Inc.PIC16F87XA Datasheet[EB/OL].(2012-12-29)[2023-05-01].https://www.microchip.com/en-us/product/PIC16F877A.
[3]黃克亞,余雷,李曉旭.STM32與PC機(jī)USART通信教學(xué)實(shí)驗(yàn)設(shè)計(jì)[J].現(xiàn)代電子技術(shù),2022,45(10):21-25.
[4]劉昆.一種基于壓縮感知的快速圖像處理算法研究[J].軟件工程,2016,19(10):18-21.
[5]陳沈理,郭廣建,李敏毅.一種基于DDS的三頻點(diǎn)標(biāo)準(zhǔn)超聲功率源的設(shè)計(jì)[J].計(jì)量學(xué)報(bào),2021,42(11):1488-1493.
[6]蔣林,田璞,鄧軍勇.一種模式可配置的單精度浮點(diǎn)乘法器設(shè)計(jì)[J].西安郵電大學(xué)學(xué)報(bào),2020,25(6):63-66,81.
*山西省教育科學(xué)“十四五”規(guī)劃2022年度課題“虛擬仿真技術(shù)在高等職業(yè)實(shí)踐教學(xué)中的研究與實(shí)踐”(GH-220443);2022年度山西工程科技職業(yè)大學(xué)校級科研基金計(jì)劃項(xiàng)目“DDS型標(biāo)量網(wǎng)絡(luò)分析儀設(shè)計(jì)”(KJ202222)。
【作者簡介】陳玉,男,山西大同人,碩士,任職于山西工程科技職業(yè)大學(xué)信息工程學(xué)院,高級實(shí)驗(yàn)師,研究方向:計(jì)算機(jī)應(yīng)用技術(shù)、嵌入式開發(fā)。
【引用本文】陳玉.標(biāo)量網(wǎng)絡(luò)分析儀下位機(jī)程序算法實(shí)現(xiàn)[J].企業(yè)科技與發(fā)展,2023(5):24-27.