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.

[参考译文] LMX2820:直列式算法代码

Guru**** 1812430 points
Other Parts Discussed in Thread: CODELOADER, LMX2571
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/clock-timing-group/clock-and-timing/f/clock-timing-forum/1067811/lmx2820-spur-b-gone-algorithm-code

部件号:LMX2820
《线程》中讨论的其他部件:CODELOADERLMX2571

你(们)好

我有兴趣使用 Dean Banerjee 的应用手册 SNAA289中提供的可编程输入乘数来最小化边界点。

从其他论坛帖子的情况看,它以前似乎已被 Codeloader 和 TIC PRO 捆绑为 python 脚本,但在我的安装文件中似乎没有任何位置。

如果 Dean 的算法在我正在处理的项目中可能有位置,那么是否可以提供 Dean 算法的副本代码,假设它为该部分提供了一些好处,并承认这是一个估计值?

非常感谢

伊恩·南盖特

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

    伊恩

    我很高兴您喜欢“斯普尔-已消失”代码。  一般策略是避免整数边界作为第一优先级起始。 但同时,当你接近,但不完全接近1/2的一小部分时,你也会得到更高的刺,尽管不那么严重。

    您也可以打开 LMX2571.py 文件并找到此代码。

    另外,请注意,对于任何 TICPro 部件,您可以将鼠标悬停在盒子上并看到名称。

    例如,“Fosc_FREQ”是 OSCin 框。  “Fosc_FREQ.dValue”是以双精度数表示的值

    这是在 python 中,但副本和粘贴破坏了缩进,但我认为你可以得到这个想法。

    此致,
    院长

    DEF btn_SpurBGone_Update():
    Fosc=Fosc_FREQ.dValue
    FPD = FPD_FREQ.dValue
    Fvc=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.000000000000001

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

    BestIBSMetric = 0.000000000000001
    FoundBest =错误

    对于范围(1,16)的多姆:
    如果(FoundBest =True):
    休息;
    如果(Mult=1):
    PLL_R_PRE_MIN = 1.
    PLL_R_PRE_max = 1.
    其他:
    PLL_R_PRE_MIN = int (数学.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=1)或(MultOut > MultOutMin -0.0001)和(MultOut < MultOutMax - 0.0001):
    对于范围(1,10)的 PLL R:
    FPD =多尔* Fosc /(PLL_R_PRE * PLL_R)

    如果(FPD<Fpdmin):
    休息;

    如果(FPD<FpdMax):
    PLL N = 2 * int (0.5+ 1.0*数学底板(Fvco / FPD / 2))

    IBS =数学法兰(Fvco - PLL_N * FPD)
    如果(IBS >数学法兰(FPD - IBS)):
    IBS =数学法兰(FPD - IBS)

    IBS2 =数学法兰(FPD / 2 - IBS)


    如果(IBS < IBS2):
    IBSMetric = IBS
    其他:
    IBSMetric = IBS *(40 * IBS2)/(IBS + 40 * IBS2 + 0.000000000001)


    如果(IBS < 0.000001):
    #最佳案例方案,整数通道
    BestIBS = 0
    BestMult =多
    最佳优先级= PLL_R_PRE
    BestPLL_R = PLL_R
    BestFPD = FPD
    BestIBS2 = IBS2
    BestIBSMetric = IBS2
    FoundBest =真
    Elif (IBS2 > 0.000001)和(IBSMetric > BestIBSMetric):
    #根据加权度量决定
    BestIBS = IBS
    BestMult =多
    最佳优先级= PLL_R_PRE
    BestPLL_R = PLL_R
    BestFPD = FPD
    BestIBS2 = IBS2
    BestIBSMetric = IBSMetric


    #确定是否需要更新分母
    芬德=奥尔德芬

    如果(OldMult % BestMult > 0):

    #以缩小形式查找原始分次的分母
    I=2
    与此同时(I<数学.sqrt(Fden*1.0)):
    如果(Fnum%i=0)和(Fden%i=0):
    芬德=芬德/I
    Fnum = Fnum /i
    其他:
    I=I+1

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


    与此同时(I<数学.sqrt(X*1.0)):
    如果(X%I=0)和(X%I=0):
    X = X/i
    Y = Y/I
    其他:
    I=I+1

    #现在可以找到最小的简化分母
    如果(X*Fden >16777215):
    芬德=奥尔德芬
    其他:
    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=芬登
    flexPLL 数字.iValue=Fnum
    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_F1.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_F2.iValue=flexPLL_NUM.iValue
    PLL_DEN_F2.iValue=flexPLL_DEN.iValue
    Fvco_F2_FREQ.dValue=Fvco_FREQ.dValue

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

    感谢您的算法 Dean 的回复。 您提到的 python 文件似乎不再与 TICSPro 绑定。 我在另一份与本主题相关的答复中注意到,应该有一个“配置”文件夹,但目录和子文件夹中似乎没有一个文件夹(见下文)。

    如果没有它,我还会错过什么吗?

    非常感谢。

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

    伊恩

    我们将配置目录分为 C:\ProgramData\Texas Instruments \TIC Pro。

    此致,

    德里克·佩恩

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

    感谢德里克。  没想到 会在那里找到它。

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

    伊恩,您好!

    由于你的问题已经解决,我将结束这一主题。 如果您还有其他问题,请重新发布。

    此致,

    朱利安