This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] LMX2571:LMX2571杂散算法

Guru**** 2577385 points
Other Parts Discussed in Thread: LMX2571, CODELOADER

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/clock-timing-group/clock-and-timing/f/clock-timing-forum/710895/lmx2571-lmx2571-spur-b-gone-algorithm

器件型号:LMX2571
主题中讨论的其他器件: CODELOADER

您好!

我们一直在民用项目中使用 LMX2571、现在我们正在努力解决一些杂散问题。
我们将杂散算法添加到了自己的代码中。 在下面的应用手册中、它说:" CodeLoader 上的 Spur-b-none 按钮通过迭代所有有效的 PLL_R_PRE、PLL_R 和 MULT 值来工作、并计算每个值的索引。 然后选择最高(最佳)索引。"。 但是、最高索引不能为某些输出频率提供最佳解决方案。

www.ti.com/.../snaa289.pdf

如下表所示、本例的最高索引为17、5、PrE_R、MULT 和 Post_R 分别为1、5和9。 但是、TICS Pro 选择第一个;1、5和4。 那么、TICS Pro 如何确定这是最佳指数?

  • 频率= 24MHz
  • Fout = 384.2MHz
  • Fvco = 4610.4MHz

此致、

Gul Yesa Yildirim

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    感谢您在 E2E 上发帖。 我已将您的职位分配给负责的工程师。

    此致、
    Boyd
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Gul、

    Spur-b-gone 算法旨在作为有关如何避免杂散的通用指南。 计算索引的方法更多的是经验法则、这是一种任意选择。 这可能是指数计算方式的差异。

    解决此问题的最简单方法可能就是向您展示 TICSPro 中的 Spur-b-Gone 代码。

    此致、
    Dean


    下面是在 TICSPro...上按下 SpurBGaone 按钮时运行的例程。

    默认 btn_SpurBGne_Update ():
    Fosc=Fosc_FREQ.dValue
    FPD = FPD_FREQ.dValue
    Fvco=Fvco_FREQ.dValue
    Fnum=flexPLL_NUM.iValue
    OldFden = flexPLL_den.iValue
    OldMult = flexMULT.iValue


    OldTotalR = int (Fosc * OldMult / FPD)

    MultInMin = 10
    MultInMax = 30
    MultOutMin = 60
    MultOutMax = 130

    FpdMin = FPD * 0.7
    FpdMax = FPD * 1.4
    如果(FpdMax > 140):
    FpdMax = 140

    BestIBSMetric = 0.00000000001

    FpdMin = FPD * 0.7
    FpdMax = FPD * 1.4
    如果(FpdMax > 140):
    FpdMax = 140

    BestIBSMetric = 0.00000000001
    FoundBest =错误

    对于范围(1、16)内的乘法器:
    如果(FoundBest=True):
    中断;
    如果(Mult=1):
    PLL_R_PRE_MIN = 1.
    PLL_R_PRE_max = 1.
    否则:
    PLL_R_PRE_MIN = int (math.ceil (Fosc / MultInMax))
    如果(Fosc > MultInMax* PLL_R_PRE_MIN):
    PLL_R_PRE_MIN = PLL_R_PRE_MIN + 1.

    PLL_R_PRE_max = int (Fosc / MultInMin)
    如果(Fosc / PLL_R_PRE_max < MultInMin):
    PLL_R_PRE_max = PLL_R_PRE_max - 1.


    对于范围内的 PLL_R_PRE (PLL_R_PRE_MIN、PLL_R_PRE_max+1):
    MultOut = Fosc / PLL_R_PRE * MULT
    如果(Mult=1)或(MultOut>MultOutMin - 0.0001)和(MultOutMax-0.0001):
    对于范围(1、10)内的 PLL_R:
    FPD = MULT * Fosc /(PLL_R_PRE * PLL_R)

    如果(<FpdMin):
    中断;

    如果(<FpdMax):
    PLL_N = 2 * int (0.5+ 1.0* math.floor (Fvco / FPD / 2))

    IBS = math.fabs (Fvco - PLL_N * FPD)
    如果(IBS > math.fabs (FPD - IBS)):
    IBS = math.fabs (FPD - IBS)

    IBS2 = math.fabs (FPD / 2 - IBS)


    如果(IBS < IBS2):
    IBSMetric = IBS
    否则:
    IBSMetric = IBS *(40 * IBS2)/(IBS + 40 * IBS2 + 0.000000000001)


    如果(IBS < 0.000001):
    #最佳案例场景、整数通道
    BestIBS = 0
    BestMult = MULT
    BestPreR = PLL_R_PRE
    BestPLL_R = PLL_R
    BestFPD = FPD
    BestIBS2 = IBS2
    BestIBSMetric = IBS2
    FoundBest =正确
    Elif (IBS2 > 0.000001)和(IBSMetric > BestIBSMetric):
    #根据加权度量确定
    BestIBS = IBS
    BestMult = MULT
    BestPreR = PLL_R_PRE
    BestPLL_R = PLL_R
    BestFPD = FPD
    BestIBS2 = IBS2
    BestIBSMetric = IBSMetric


    #确定是否需要更新小数分母
    FDEN = OldFden

    如果(OldMult % BestMult >0):

    #以精简形式查找原始分次的分母
    I=2
    while (<math.sqrt(Fden*1.0) ):
    如果(Fnum%i=0)和(Fden%i=0):
    FDEN = FDEN/I
    Fnum = Fnum/I
    否则:
    I=I+1

    # X 和 Y 为 Mult* x TotalR
    X = BestMult * OldTotalR
    Y = OldMult * BestPreR * BestPLL_R


    while (<math.sqrt(X*1.0) ):
    如果(X%I=0)和(X%I=0):
    X = X/I
    Y = Y/I
    否则:
    I=I+1

    #现在找到可能的最小简化分母
    如果(X*Fden >16777215):
    FDEN = OldFden
    否则:
    FDEN = FDEN*X

    #现在尝试将 Fden 缩放回接近原始值的值
    GCD = int (0.5+OldFden*1.0/Fden)
    如果(GCD<1):
    GCD=1
    FDEN=FDEN*GCD

    FlexPLL_R_Pre.iValue = BestPreR
    flexMULT.iValue= BestMult
    FlexPLL_R.iValue= BestPLL_R
    FPD_FREQ.dValue= BestFPD
    flexPLL_den.iValue=Fden
    Fvco_FREQ_Update ()
    如果(GetActivePLL()=1):
    PLL_R_PRE_F1.iValue=flexPLL_R_PRE.iValue
    MULT_F1.iValue=flexMULT.iValue
    PLL_R_F1.iValue=flexPLL_R.iValue
    FPD_F1_FREQ.dValue=FPD_FREQ.dValue
    PLL_N_F1.iValue=flexPLL_N.iValue
    PLL_NUM.iValue=flexPLL_NUM.iValue
    PLL_DEN_F1.iValue=flexPLL_DEN.iValue
    Fvco_f1_FREQ.dValue=Fvco_FREQ.dValue
    否则:
    PLL_R_PRE_F2.iValue=flexPLL_R_PRE.iValue
    MULT_F2.iValue=flexMULT.iValue
    PLL_R_F2.iValue=flexPLL_R.iValue
    FPD_F2_FREQ.dValue=FPD_FREQ.dValue
    PLL_N_F2.iValue=flexPLL_N.iValue
    PLL_NUM.iValue=flexPLL_NUM.iValue
    PLL_DEN_F2.iValue=flexPLL_DEN.iValue
    Fvco_F2_FREQ.dValue=Fvco_FREQ.dValue
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Dean:

    非常感谢您的快速回复。 这对我们非常有帮助。
    此致、

    是的