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.

CodeLoader4 LMX2571 PLL and "Spur-b-Gone" button

Other Parts Discussed in Thread: CODELOADER

When spurs appear on the output of this device, there is a magic button called Spur-b-gone that alters some of the parameters to reduce the spurs.

What does this button do, what are the things that change and can this be done is a simple algorithm running on a microcontroller?

Also you seem to adjust a number parameters, including the channel spacing, which presumably want to be fixed at some nominal value and  not changed?

  • Hi Peter,

    Thank you for your interest in our products.
    Please read the following app note:

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

    Please let us know if you have any additional questions.

    Regards,
    Julian
  • Peter,

    This uses the programmable input multiplier to shift the phase detector frequency so that the VCO freqeuncy is far away from multiples of the phase detector freuqecy.  This is good for minimizing integer boudnary spurs.

    The following application note discusses this in more depth.

    http://www.ti.com/lit/an/snaa289/snaa289.pdf

    Regards,

    Dean

  • This is an extract from your document which explains the process with pseudo code

    "The Spur-b-Gone button on CodeLoader works by iterating through all valid PLL_R_PRE, PLL_R and
    MULT values and calculates an index for each one. Then it chooses the highest (best) index. The index
    works by putting 40x more weight on the distance to the closest integer channel compared to the midpoint
    and doing a parallel combination of these. Then it divides by the multiplier value to discourage higher
    multiplier values unless it provides some benefit.
    IBS = Fvco % Fpd (Distance to closest integer channel)
    IBS2 = Fvco % (Fpd/2) (Distance to closest midpoint between 2 integer channels
    If IBS = 0 then
    Index = Infinite (Ideal to be exactly on an integer channel)
    Else If IBS2=0 then
    Index = 0 (Stay away from ½ of integer boundary)
    Else
    If IBS<IBS then
    Index = IBS / Mult
    Else
    Index = IBS * (40 * IBS2) / (IBS + 40 * IBS2) / Mult
    End If
    End If"

    but the line 6th form the bottom that states "If IBS<IBS then" appears to be a missprint what is the correct line?

  • Any update on the above post??
    The IBS2 is not used in those lines.