[time-nuts] First success with very simple, very low cost GPSDO

Magnus Danielson magnus at rubidium.dyndns.org
Sat Apr 12 16:51:39 EDT 2014


Warren,

On 12/04/14 21:09, WarrenS wrote:
> Magnus
>
> Interesting, Am I missing something or is there an error in your code or
> logic.
>
> Looks to me like the code is a PI controller with a added "D" term
> (Vdf) of input,
> and the "D" is then Integrated with a scale factor of "F" at  Vi = Vi +
> F*Vdf ...
> An integrated derivative is exactly equal to a P

I may appear so, but the derivate, scale-factor F and integrate does not 
make the scale-factor F equalent to P, since you are forgetting that the 
derivate removes the DC term and the integration forms it's own DC term. 
This DC-term as scaled through oscillator gain and added to the 
oscillators offset is then subtracted from the reference frequency and 
thus the error frequency is input to the integrator stage.

The FLL variant model can be understood if the differentiation is pushed 
to both inputs of the phase comparator, where the reference frequency 
and oscillators frequency will be subtracted rather than their phase and 
the only remaining integrator in the loop is that holding the Vi term. 
The frequency error term will exponentially decay with the time-constant 
as set by the F coefficient.

So, F and P is not equivalents, as P will not contribute to the state of 
Vi, which is evident in the weak pull-in of a standard PI loop.

However, F and P will for the AC behaviour of the loop be equivalents, 
so care must be taken into setting P with regard to F in order to get 
the expected damping of the loop.

Anyway, this is a FLL-aided PI-loop, which looks like an incorrectly 
wired PID-loop. Quite minimalistic.

> Looks to me like the code is still just a standard PI controller where
> Vdp is the phase error;
> Vi = Vi + I*Vdp
> Vf = Vi + (P+F) * Vdp
>
> This can be simplified by dropping the F scale factor and increasing the
> P a little
>
> What am I missing?

I think I covered that above.

> One thing for sure that the code is missing is a pre-filter, which is
> very helpful because of the GPS phase noise.

It is missing a whole deal, but I wanted to illustrate the core.
One thing which is not covered is the un-wrapping of the phase detector 
in the case that it does not wrap around binary. Another thing, the 
frequency detector phase history may need to be unwrapped prior to 
subtraction in order to make sure the frequency estimate becomes correct.

> Turning on the "D" term in a PID with a prefilter is mostly not
> recommended, They tend to just cancel each other.

I avoided the "D" coefficient name as it will be confusing to a normal 
PID naming, when it will in fact does not do the normal "D".

Cheers,
Magnus


More information about the time-nuts mailing list