2024-07-02
GR5526 GUI专题(4) - Lvgl字体的位图数组合并转换为bin文件的说明
写技术文章
精选推荐
无敌浩克
在第二章节学习如何使用PyVISA控制信号发生器之后,我们继续以控制频谱仪为例程讲解仪器控制与PyLink和openpyxl结合使用,更为方便的处理数据。
openpyxl模块详细信息请参考:
https://openpyxl.readthedocs.io/en/stable/
https://pypi.org/project/openpyxl/
为了测试32Mhz晶体频偏与Goodix BLE MCU系列内部可调XO_CAP寄存器的关系,需要用到三个模块,PyVISA、PyLink和openpyxl,其中PyVISA控制频谱仪读取晶体振荡频率参数,PyLink控制Goodix BLE MCU内部XO_CAP参数,openpyxl负责记录频偏和XO_CAP信息。
以GR533x系列为例,调整XO_CAP寄存器位于0x4000A910地址,[18:10]bit域; xo_cap_ctrl<8:0>; Cload programmability from 50fF to 26pF on each side,default value=9'b100000000;
1, 首先创建Excel文件
test_results = openpyxl.Workbook()
file_time = time.strftime('%Y-%m-%d-%H_%M_%S', time.localtime(time.time()))
savefilename = 'XO_CAP_Test_' + file_time + '.xlsx'
folder_path = "D:\\ test_results_temp"
file_path = os.path.join(folder_path, savefilename)
del test_results['Sheet']
sheet_results = test_results.create_sheet('XO_CAP')
sheet_results.cell(1, 1, 'XO_CAP value(int)')
sheet_results.cell(1, 2, 'XO_CAP value(hex)')
sheet_results.cell(1, 3, 'frequency(hz)')
sheet_results.cell(1, 4, 'frequency offset(hz)')
sheet_results.cell(1, 5, 'frequency offset(ppm)')
2, 初始化JLINK控制实例
jlink_address = '670023585' #set the address of jlink
jlink_demo=Jlink_control.jlink_control_class(jlink_address=jlink_address)
jlink_demo.jlink_connect(jlink_type='SWD',jlink_pin_reset=0)
3, 初始化频谱仪控制实例
spectrum_address = 'TCPIP0::169.254.55.4::inst0::INSTR' # PXA N9030A 26.5G
n9030b=Spectrum.spectrum_control(spectrum_address)
n9030b.spectrum_init(instrument_rst=0)
4, 配置相关变量,测试XO_CAP与32Mhz晶体关系
将频谱仪RF口接入到GR533x系列SK板子SMA头,调整频谱仪设置直到可以观测到微弱的32Mhz信号。
xo_cap = 0x0
power_expected=-70 #dbm
span=0.02 #Mhz
for i in range(0,0x1ff+1):
jlink_demo.memWriteBit(0xA000C510,bitField = [19,23],bit_value = xo_cap)
sheet_results.cell(i+2, 1, int(xo_cap))
sheet_results.cell(i + 2, 2, hex(xo_cap))
if xo_cap >= 0x1FF:
break
xo_cap += 1
freq_32m = n9030b.xo_offset(center_freq=freq,ref_level=power_expected,span=span)
sheet_results.cell(i+2, 3, freq_32m)
sheet_results.cell(i+2, 4, freq_32m-32e6)
sheet_results.cell(i + 2, 5, (freq_32m - 32e6)/32)
test_results.save(file_path)
muRata晶体‘XRCGB32M000F1SBAR0’搭配GR533x SK板子测试结果如下:
N9030B频谱仪类定义如下:
class spectrum_control:
def __init__(self,instrument_address):
self.instrument_address = instrument_address
self.spectrum = 0
def spectrum_init(self,instrument_rst=0):
rm = pyvisa.ResourceManager()
self.spectrum = rm.open_resource(self.instrument_address)
# self.spectrum.read_termination = '\n'
# self.spectrum.write_termination = ''
print(self.spectrum.query('*IDN?'))
if instrument_rst == 1:
self.spectrum.write(':SYST:PRES')
print('spectrum reset success')
def xo_offset(self,center_freq=32,span=0.02,rbw='auto',vbw='auto',ref_level=-40,avg_number=10):
print('center_freq(Mhz)=', center_freq)
print('span(Mhz)=', span)
self.spectrum.write(f':FREQ:RF:CENT {center_freq} MHz')
self.spectrum.write(f':FREQ:SPAN {span} MHz')
self.spectrum.write(f':DISP:WIND:TRAC:Y:RLEV {ref_level} dBm')
self.spectrum.write(':BWID:AUTO ON')
self.spectrum.write(':BWID:VID:AUTO ON')
self.spectrum.write(':POW:ATT:AUTO ON')
self.spectrum.write(':INIT:SAN')
self.spectrum.write(':INIT:CONT ON')
self.spectrum.write(':AVERage:COUNt 10')
self.spectrum.write(':CALC:MARK1:MAX')
self.spectrum.write(':CALC:MARK:CPS ON')
time.sleep(0.2)
x_peak = self.spectrum.query(':CALC:MARK1:X?')
print('MARK PEAK(X)=', x_peak)
return round(float(x_peak), 1)
打开微信,使用“扫一扫”即可关注