[time-nuts] Arduino GPSDO with 1ns res TIC

Chris Albertson albertson.chris at gmail.com
Wed Feb 12 01:31:51 UTC 2014


Lars,

Thanks for posting this.   I think your design will be popular
especially with availability of the nano size Arduinos that sell for
$4 from China.
Your design could be built on a 3" perf board for about $10 with
change left over. (not counting the OCXO and GPS)

I like the little shields you've used but move to the nano sized
Arduino after the breadboard works

You say you have so rough edges with your code.  If you post it some
place (github.com, or just a file attachment here)  Anyways if you
post it I'll do what I can to clean it up and fix any problems.   I'm
wondering if you've addressed things like "wrap around" where the
clock goes to zero or if you maybe have problem with race conditions
in interrupt handers or something related to that.

I have an Arduino attached to my iMac as I type.  I know a bit about
software but little about control theory and I'm trying to get a PID
controller to be stable.  The darn thing just runs away, literally,
(t's a mobile robot.)   The good thing about placing 99% of the
functionality in software like you did is that your GPSDO can be
improved quickly once a few experts look at it and start testing it.

Already I am thinking about a real-time graphic display.  It would be
easy to add an LCD display to your GPSDO.   And then there are better
DACs and ADCs that are easy to connect to the Arunino's I2C bus

Thanks again for sharing this




On Tue, Feb 11, 2014 at 10:23 AM, Lars Walenius
<lars.walenius at hotmail.com> wrote:
> I have long thought I should make my first post to the Time-Nuts forum. Being very grateful to everything I learned here.
>
>
>
>
>
> I have tried to attach a picture showing one of my two Arduino GPSDO Shields . The first one I put together in 2011. It only needs two HCMOS circuits (HC390+HC4046), one diode and passive components. Still it has 1nsec resolution.
>
>
>
> From the simplified schematic it can be seen that the TIC uses a HC4046 very similar to the Shera controller but instead of using a digital counter I just added a diode and RC-net that goes directly into one of the 10-bit AD channels. So the TIC has about 1nsec resolution and 1usec range when the HC4046 is fed with 1MHz from the HC390. The linearity of the TIC is quite good as I use the 1.1Volt ADC range. 500ns gives a reading of about 530 if 1000ns is a reading of 1000. See also the picture that shows a hanging bridge measured with the board. Scale is AD value but is very close to 1ns per bit.
>
>
>
> To get a broader TIC range I added a 5MHz input to timer 1 in the Arduino. Sorry to say I am not a good programmer so I have managed to get it to read the timer and add usecs to the analog nsec value but sometimes I get a wrong value so I am not using it to regulate yet.
>
>
>
> As DAC I use two 8-bit PWMs in the Arduino Uno. They are summed by two resistor and to get ripple down I have a two-pole RC lowpass filter. My measurements with a Keithley 2000 6 digit DMM indicates at least 13-14bits monotonic range with 1% resistors. The internal 5Volt in the Arduino UNOs seems to have about or maybe less than 100ppm/C drift. With my OCXO I use only a 10ppb (1E-8) range so I get better than 1E-12 resolution and less than 1E-12/°C extra from the DAC. For the LPRO Rb I use 1ppb range so it gives better than 1E-13 resolution and less than 1E-13/°C extra from the DAC.
>
>
>
> I also read temperature of the OCXO or Rb I discipline. The program can correct for temperature drift if needed. I have used it for the OCXO I have, an old CEPE that look similar to an 8663,  but not for the LPRO. My LPRO have about 7E-13/°C tempdrift and 7E-14/mbar pressure drift so pressure drifts gives more problem for me.
>
>
>
> For the LPRO, that seems to need about 7000secs timecontant, I also found a new problem when I was testing that for the first time during Christmas. The problem was a truncation error with long time constants and heavy prefiltering that gives an apparent change in timecontant and damping (more ringing). It is not solved in my code yet. So right now I use 1000secs as time constant for the LPRO also.
>
>
>
> About my program:
>
> -The 1PPS gives an interrupt that starts almost all of the program and first reads the TIC ADC
>
> -Uses a prefilter after the TIC (Now set to one forth of time constant in my code )
>
> -Uses a PI loop
>
> -Senses four dipswitches for 16 different timecontansts between 100 and 30000secs
>
> -Senses four other dipswitches to set e.g fast locking (50 sec Tc), hold, max-, min-, mid-dac value for tests
>
> -Has a missed PPS counter (increments if more than 1.1secs since last PPS)
>
> -Has a  PPS lock indication that turns on if the TIC value is within 500+-x for more than five time constants
>
> -Sends out time, DAC value, temperature, missed PPS and Locked every second on the serial line
>
> -It also sends out the last 144 averaged 5minutes and 3hour TIC-values, DACvalue and temperature with one each of the values each second so after 300seconds all stored values are sent to the serial line. From the Arduino serial monitor it is rather easy to copy-paste to e.g. Excel for further processing.
>
> -It starts with the last stored 3 hour DAC-value if the EEPROM is not empty at start or if the board is reset. If the EEPROM is empty it starts with a value set in the program.
>
>
>
>
> My Arduino GPSDO shield is far from ready but probably very useful for those who like to experiment and have a GPS with 1PPS out and an OCXO with a voltage control input and 10MHz TTL level output.
>
>
>
>
> Lars Walenius
> _______________________________________________
> time-nuts mailing list -- time-nuts at febo.com
> To unsubscribe, go to https://www.febo.com/cgi-bin/mailman/listinfo/time-nuts
> and follow the instructions there.



-- 

Chris Albertson
Redondo Beach, California



More information about the Time-nuts_lists.febo.com mailing list