标量网络分析仪下位机程序算法实现
2023-08-30陈玉
摘要:标量网络分析仪在进行器件测试时对测试周期时间和数据准确度有较高要求,为提升标量网络分析仪下位机运行效率及降低硬件功耗,下位机固件程序采用了汇编语言。文章提出下位机固件程序中2种重要的算法:一种是压缩BCD(二进制编码十进制,Binary-Coded Decimal)码的编码与解码算法,算法规避了下位机接收上位机数据的逻辑错误;另一种是直接数字频率合成器频率字的改进移位除法算法,解决了被除数小于除数的运算限制。固件程序运行结果显示,标量网络分析仪测试速度、准确度及功耗满足测试需求。
关键词:标量网络分析仪;下位机程序;编码;解码;移位
中图分类号:TP31 文献标识码:A 文章编号:1674-0688(2023)05-0024-04
0 引言
标量网络分析仪是一种便捷且分析结果显示直观的幅频特性测试设备,可对射频放大器、天线、耦合器、滤波器等器件进行传输特性和反射特性进行实时测量调试。商品化的标量网络分析儀体积庞大,因此在户外或一些移动测试作业场景上使用受到限制。构建一个便携、性能稳定的标量网络分析仪测试系统可以使标量网络分析仪在体积上适于手持使用,同时能配合个人电脑系统进行精细化操作。便携标量网络分析仪整体结构分为上位机和下位机2个部分,上位机利用开源软件WinNWT作为测试控制前端,下位机主要由闭环硬件架构和高效固件程序组成,上位机和下位机通过特殊定义的串口进行通信并完成各类测试任务。由于标量网络分析仪对测试实时响应的要求较高,所以下位机固件程序的算法效率直接影响整个标量网络分析仪的工作性能。为有效提升下位机数据处理效率,本研究采用压缩BCD编解码算法,同时基于计算直接数字频率合成器频率字的方法,提出改进移位除法算法。
1 运行原理
1.1 硬件运行原理
标量网络分析仪的工作流程如图1所示,上位机程序和单片机通过串口协议连接,单片机通过上位机发送的协议命令解析并执行网络分析仪的相应测试功能。被测器件(Device Under Test,DUT)执行幅频特性测试时,单片机根据上位机发送的频率范围及频率步进值控制直接数字频率合成器(Direct Digital Synthesizer,DDS),输出一系列扫频信号,扫频信号通过宽带放大电路产生足够的测试功率,放大后的扫频信号输入DUT的输入端并从DUT的输出端输出,输出信号进入对数放大电路后转换成直流信号,单片机的模数采样端对直流信号进行模数采样并转发给上位机,由此进行正确的测量显示[1]。
1.2 软件运行原理
上位机软件WinNWT通过自定的串口协议规则和下位机通信,控制下位机完成标量网络分析仪的主要测试任务,如点频率输出、扫频及功率测量等。网络分析仪在扫频测量时,不仅要求频率分辨率高,而且对扫频速度也有很高的要求,因此下位机软件程序需要有足够快的执行和响应速度。为此,标量网络分析仪采用了汇编语言编写下位机微控制器的软件程序,下位机微控制器采用PIC系列单片机[2]。
WinNWT上位机软件和下位单片机通信时执行的串口协议,其规则在软件的官方文档中有具体的描述[3]。协议中指出:每条协议命令以十六进制的8 F为开始字符,紧接8 F后的是具体的命令字符,例如对数扫频会在8 F字节后发送22个ASCII字符“x001000000000140002000”,每个字符占用1个字节,即相当于22个字节;其中,“x”表示对数扫频,第2至第10个字节表示起始频率,第11至第18个字节表示扫频步进频率值,第19至第22个字节表示扫频采样点数。网络分析仪的其他命令格式也相同,唯一的区别是每个命令字节的长短不同。
2 协议解析
2.1 下位机选择
由于标量网络分析仪和上位机软件分工联动工作,因此可以极大地减轻下位机单片机的负荷,同时降低单片机的编程量。标量网络分析仪中的单片机负责控制直接数字频率合成芯片,生成上位机所需的频率,同时在扫频时负责对数放大芯片的电压数据进行采样,并将采样数据通过串口协议回传给上位机进行处理;上位机对单片机回传的数据进行处理后显示正确的测量结果。因为DDS生成的频率的幅度不一致,所以上位机软件需要在网络分析仪测量前进行测量数据校准,并将校准数据存储在上位机中。基于PC平台的上位机软件可以更准确、详细地显示大量测量数据。
网络分析仪下位机和上位机软件WinNWT通信时也需要满足相应的串口协议,为此下位机微控制器选用PIC16F876单片机。PIC16F876单片机只有35条指令,时钟频率可以在低功耗状态下达到20 MHz,其芯片内部自带USART串行通信模块,从而方便与上位机软件通信,减少编程量。由于网络分析仪对测试的实时性和速度有较高要求,因此采用MPASM汇编语言进行单片机编程。MPASM是美国微芯科技公司的原厂免费汇编系统,其编译的程序更稳定、可靠;汇编语言程序具有占用空间小、执行效率高的优势,而且硬件功耗低。
2.2 协议解析算法
以下简化程序段为下位机对上位机串口命令的解析子程序,子程序通过分析上位机串口发送的ASCII协议字符命名,控制下位机单片机执行相应的操作任务。例如,程序段中先判断接收的第一个字符是否为“x”;如果是,再判断命令长度是否为22个字符;如果是,则执行对数扫频;否则再判断是否是其他命令;最后通过循环控制,不断解析上位机串口发送的命令。
ParseCommand:
MES_WAIT:
CALL sub_174;读1个字节
BTFSS STATUS,C
GOTO MES_WAIT;为空
XORLW 'x';AD8307扫频
BTFSS STATUS,Z
GOTO TRY_COM_F;去点频设置
XORLW .22;是否22个字符
BTFSS STATUS,Z
GOTO TRY_COM_F;去点频设置
CALL Sweep;调用扫频程序
TRY_COM_F:
XORLW 'f';点频设置
BTFSS STATUS,Z
GOTO MES_WAIT
XORLW .10
BTFSS STATUS,Z
GOTO MES_WAIT
CALL Set_VFO;调用点频程序
RETURN
3 核心算法
3.1 压缩BCD码算法
在上位机软件WinNWT发送的命令数据中,这些数据的主体部分都是ASCII形式十进制数,每一位十进制数需要占用1个字节,例如上位机发送的对数扫频命令ASCII码为“x001000000000140002000”,22个字符需要占用22个字节长度,这种长度增加了下位机数据处理的负担,为此本文在下位机中采用压缩BCD算法,压缩BCD算法可以将串口协议码的空间占用减少到原来的一半[4]。
用4位二进制数来表示1位十进制数有16种组合,从中选出10种表示十进制数的10个数码有很多种方法,较常用的是压缩BCD码,即4位二进制数的“权”由左至右分别是8、4、2、1,因此也称为“8421码”,用1个字节表示的2位BCD码称为压缩型BCD码。例如ASCII码“10”用2个压缩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;填充低4位
RETURN
以上子程序為压缩BCD码算法,例如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码算法处理后的数据直接送至下位机单片机中使用,会产生严重的逻辑错误。具体原因可通过数据实例分析,例如上位机串口传来的数据为10,压缩BCD码表示为00010000,如果单片机直接对该8位压缩BCD码进行运算处理,则会认为是16,这与上位机发送数据意图不一致,因此需要采用BCD解码算法,具体程序如下。
sub_220:
MOVLW 0x8;8位
MOVWF 0x2C
loc_233:
BCF STATUS,C ;清零
RRF 0x52,F
RRF 0x57,F ;辅助空间
BTFSS 0x52,7;判断第7位
GOTO loc_246;不为1
MOVLW 0x30 ;为1
SUBWF 0x52,F;减0x30
loc_246:
BTFSS 0x52,0x3 ;判断第3位
GOTO loc_24A ;不为1
MOVLW 0x3;为1
SUBWF 0x52,F ;减0x3
loc_24A:
DECFSZ 0x2C,F
GOTO loc_233 ;循环
RETURN
上述程序采用循环右移算法,其中0x52中存放待处理的8位压缩BCD码,0x57中存放解码结果,0x52的最低位数据每次右移进入0x57的最高位,由于状态标志寄存器的c位每次循环移位前都要清零,所以不予考虑;0x52的7位和3位如果为1,则需分别减去0x30和0x3,程序中0x52和0x57分别进行8次循环右移,最后0x57中存放的结果正好是0x52压缩码的解码结果。具体解码流程见表1。
从表1中可见,0x52的初始值为00010000(ASCII码为10),通过8次循环右移,0x57中的值为00001010,而该值正好是十进制的10或十六进制的A。该解码程序对ASCII码“10”进行了正确解码,使下位机可以正确处理后续数据。
3.3 频率控制字算法
直接数字频率合成芯片的频率输出是网络分析仪的核心功能,是扫频输出各项指标正确与否的关键。频率控制字决定着直接数字频率合成芯片的输出频率,其具体计算公式如下:
[k = foutfc2n] (1)
公式(1)中,k表示频率控制字,fout表示输出频率,fc表示时钟频率;由于式中的输出频率小于时钟频率,即被除数小于除数,因此不能按计算机中常规的除法运算规则计算,本文采用改进的除法运算规则,具体直接数字频率合成芯片的程序算法如下[5]。
sub_260:
MOVF 0x2E,W
MOVWF 0x58
MOVLW .8;8位计数
MOVWF 0x56
loc_26C:;循环
CLRF 0x60
BCF STATUS,C
RRF 0x52,F;右移
BTFSS STATUS,C
GOTO loc_291;无溢出
MOVF 0x58,W
ADDWF 0x60,F ;求和
loc_291:
BCF STATUS,C ;清零
RLF 0x58,F
RLF 0x59,F
DECFSZ 0x56,F ;更新计数
GOTO loc_26C
RETURN
为使代码描述方便、直观,对其进行一定程度的数据量简化,假设0x58中存放的是系统时钟值2(00000010),0x52中存放的是系统输出频率值4(00000100),n为8,那么按照公式(1)计算k等于8。将上述值代入程序验证,表2为程序的直观数据处理过程[6]。从表2可以看到,0x52中的数值先进行一次右移,如果没有溢出,则0x58中的数值进行一次左移;0x52第2次右移,此时产生了溢出,为此将0x52中的数值和0x58中的数值相加,并将结果赋给0x60,从程序代码可以看出,运算结果正好是8,与公式(1)的运算结果保持一致。当然,程序代码中的0x52本应该右移8次,相应的0x58左移8次(相当于28),但为了示例直观,在数据和程序上进行了一定的简化。
4 试验测试
为验证上述算法的正确性,标量网络分析仪首先在上位机软件WinNWT校準状态下,对中心频率为8.998 MHz的晶体滤波器进行幅频特性测试;然后使用标准设备“安捷伦”8714ET网络分析仪对该滤波器进行相同参数的测试。表3为标量网络分析仪和“安捷伦”8714ET网络分析仪主要测量数据的对比结果,从表3中可看出,标量网络分析仪WinNWT的测试数据在误差范围内,说明下位机算法是正确且可行的,尤其扫频测试涉及数据量大时,能更有效验证算法的正确性。表3对比的两者中心频率有50 Hz的误差,主要是由标量网络分析仪硬件电路中的时钟晶振引起的。
5 结论
(1)通过WinNWT上位机软件串口协议编写下位机软件的具体程序,不仅很好地利用了上位机软件的丰富功能,还减少了网络分析仪的开发工作量。
(2)下位机使用汇编语言极大地提高了对上位机的响应速度。
(3)网络分析仪在程序开发过程中使用压缩BCD编码方法,该方法能有效降低数据的空间占用量;采用BCD解码程序对压缩BCD码进行解码处理,从而使下位机得到正确的处理结果。
(4)直接数字频率合成芯片的频率控制字按常规算法编程不可行,进行相应的算法改进后,直接数字频率合成芯片的频率控制字可以正确生成。
通过对上述程序算法进行改进和创新,标量网络分析仪各项测试功能的可靠性得到了有效保障。经试验测试,标量网络分析仪运行稳定且可靠,能够直观、准确地测试射频类器件的幅频特性,其速度、准确度及功耗均满足工程实践的测试需求。后续可通过提升软件功能为标量网络分析仪添加更多实用测试功能。
6 参考文献
[1]陈玉.TDC-GP22时间数字芯片关键编程算法研究与实现[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机USART通信教学实验设计[J].现代电子技术,2022,45(10):21-25.
[4]刘昆.一种基于压缩感知的快速图像处理算法研究[J].软件工程,2016,19(10):18-21.
[5]陈沈理,郭广建,李敏毅.一种基于DDS的三频点标准超声功率源的设计[J].计量学报,2021,42(11):1488-1493.
[6]蒋林,田璞,邓军勇.一种模式可配置的单精度浮点乘法器设计[J].西安邮电大学学报,2020,25(6):63-66,81.
*山西省教育科学“十四五”规划2022年度课题“虚拟仿真技术在高等职业实践教学中的研究与实践”(GH-220443);2022年度山西工程科技职业大学校级科研基金计划项目“DDS型标量网络分析仪设计”(KJ202222)。
【作者简介】陈玉,男,山西大同人,硕士,任职于山西工程科技职业大学信息工程学院,高级实验师,研究方向:计算机应用技术、嵌入式开发。
【引用本文】陈玉.标量网络分析仪下位机程序算法实现[J].企业科技与发展,2023(5):24-27.