资讯详情

使用Python自动调节EFR32的高频晶振(HFXO)电容器组-CTune

EFR32 该设备配备了可配置的内部电容器组,用于加载外部晶体振动,以实现正确的操作和频率校准。我们通常称这个电容器组的可配置值为CTune。

CTUNE高频晶振值(HFXO)启动阶段应用程序。电容器的配置值与实际值之间的关系如下: Ctune = Cpar CTUNE<8:0> * 40fF,

Cpar寄生电容的值取决于电路板的类型、布局、温度和晶体类型。内部电容的大小与频率成反比,电容值越大,HFXO 频率越低。

CTune设置会影响芯片HFXO(frequency crystal oscillator)时钟,无线射频也使用HFXO时钟,因此调节CTune调整无线电链路的质量也是不正确的CTune设置可能导致两个设备之间的无线电链路断开。

CTune校准值可存储在设备的非易失性存储器中。校准操作应始终在客户定制板上进行。每个板都可以校准,但需要更长的时间。首选的方法是测量每个设计的10-20块板HFXO在所有设备中计算频率和平均值CTune这样,值就得足够好的校准值。

校准过程 在使用 RAILEST 编程设备按顺序发出以下命令,以便在初始化校准后重置:

rx 0 setPower 1 getCTune setCTune <0x[hex-value] or [decimal value]> setTxTone 1 

RAILTEST 以rx 模式启动设备,因为功放电源只能在RAIL_RF_STATE_IDLE因此,设备应首先切换到状态IDLE模式。可以使用 getCTune命令读取实际的CTune变量。通过 setCTune 命令改写值。配置完成后,setTxTone 1 命令将无线电设置为载波信号的发射模式。

HFXO自动启动和CTune 配置 CMU_HFXOAutostartEnable() 可在从EM2/3唤醒后启动自动启动。如果最后两个参数中的任何一个是true调用此API,它会阻止HFXO从而防止重启,从而防止重启CTune值的变化。该功能默认用于蓝牙堆栈。

测量 使用频谱分析仪和868MHz的EFR32MG14射频板 (BRD4169A) 完成。建议使用传导射频连接进行校准。建议在测量过程中使用低功率输出,以避免功率放大器电流消耗引起的温度升高引起的校准漂移。

频谱分析仪的频率跨度(Span)应设置不超过1000 kHz,分辨率带宽较低,以便能够测量由晶体频率调整引入的微小频率变化。

最佳 CTune 值 通过迭代找到最佳方法 CTune 值。 设置频谱仪标记为所需频率并更改CTune值,直到无线电以此频率发射。

频率漂移 由于芯片加热会影响晶体的谐振频率,因此发射功率越高,最佳值就越难找到。 下图是频谱仪"max hold"在使用高传输功率的2分钟内拍摄模式。 结果表明,频率漂移约为0.5KHz,这可能导致校准不准确。 在这里插入图片描述

安装并导入python的pynput模块检测键盘事件,serial收发模块控制串口数据,subprocess模块通过Shell调用Silicon labs 的Commander:

from pynput import keyboard import serial import time import threading  txser = serial.Serial("COM1",115200,5) ctuneValue = 0x67    def ReadEchoData():     global ctuneValue       while True:         Rx_Buffer = txser.read(txser.in_waiting).decode("gbk")         if len(Rx_Buffer) > 6:              print(Rx_Buffer)              CtunePosition = Rx_Buffer.find("{ 
       {(getCtune)}{CTUNEXIANA:0x")             if CtunePosition > 0:                 CtunePosition = CtunePosition + 25 print("CTUNE Value") newStr = Rx_Buffer[36:41] print(newStr) ctuneValue = int(newStr,16) print(ctuneValue) def IncCtuneValue(): global ctuneValue ctuneValue = ctuneValue + 16 txser.write(b"settxtone 0\r\n") time.sleep(0.1) txser.write(b"rx 0\r\n") time.sleep(0.1) txser.write(b"setCtune 0x%x \r\n" %ctuneValue) time.sleep(0.1) txser.write(b"settxtone 1\r\n") time.sleep(0.1) return 

使用pynput模块检测键盘事件并做出相应处理:

def on_press(key):
    try:
        print('alphanumeric key {0} pressed'.format(key.char))
    except AttributeError:
        print('special key {0} pressed'.format(key))
        if key == keyboard.Key.space: InitTx();
        if key == keyboard.Key.up: IncCtuneValue();
        if key == keyboard.Key.down: DecCtuneValue();
        if key == keyboard.Key.left: AddCtuneValue();
        if key == keyboard.Key.right: ReduceCtuneValue();
        if key == keyboard.Key.enter: PrKeyValue(key);
 
if __name__ == "__main__":
    ''' Start the app if this file is executed'''
    
    if len(sys.argv)>1:
        portx=sys.argv[1]
    try:
        self=ProCTuneCalibration()       # open the serial port for Z-Wave chip
    except:
        print('error - unable to start program')
        ProCTuneCalibration.usage()
        exit()
        
    while True:
        with keyboard.Listener(
            on_press = on_press,
            on_release = on_release) as listener:
            listener.join()

标签: 功率调整串电容电容的if

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台