Crystal Clock accuracy is defined in terms of ppm or parts per million and it gives a convenient way of comparing accuracies of different crystal specifications.
Note:
The following headings give practical calculations showing the typical errors you will encounter when using a clock of a specific type with a specific accuracy.
If you look at a day's worth of timekeeping then you have 24 x 60 x 60 = 86400 seconds in a day. So the maximum error after a day has passed is 1% of 86400 = 864 seconds = 14.4 minutes!
Error: 14.4 minutes error per day.
A typical crystal has an error of 100ppm (ish) this translates
as 100/1e6 or (1e-4).
Number of seconds in a day = 24*60*60 = 86400
So the total error on a day is 86400 x 1e-4= 8.64 seconds per day. In a month you would loose 30x8.64 = 259 seconds or 4.32 minutes per month.
Error: 8.64 seconds per day
A watch crystal has an error of 20ppm (ish), but you have to design the board layout well, this translates as 20/1e6 (2e-5) which gives an error over a day of 86400 * 2e-5 = 1.73 seconds per day so in a month it looses 30x1.72 = 51 seconds or 1 minute a month (approx).
Error: 1.73 seconds per day.
One of the other factors in a wrist watch is that you wear it on your wrist - and the human body is at a constant temperature. Crystals have a temperature coefficient graph meaning that another source of error is temperature (This is why you can buy an OCXO or Oven Controlled Crystal Oscillator - that generates heat and keeps a constant temperature). The watch crystal will be better because you keep it at a constant temperature!
An OCXO is an Oven Controlled Crystal Oscillator. It is a crystal sealed in a small chamber with a controlled heating element inside to maintain a constant temperature.
A typical spec might be ±1 x 10^{-9} (1ppb) so the error after a day would be 86.4us and after a month 2.6ms (2.6e-3 seconds or 2.6 thousandths of a second!). They are not quoted in ppm as it becomes inconvenient to write e.g. this OCXO has a ppm value of 0.001 ppm or 1ppb.
Error: 84.6us per day.
To lose 1 second takes: 32.4 years; (1.0/84.6e-6/365)
Note: there are
many types designed for many different applications and
all costing different amounts!
This is also known as an atomic clock.
A rubidium clock has an accuracy of about ±1 x 10^{-12} so the error after a day would be 86.4ns (84e-9 seconds 84 billionths of a second!) so the error after a month would be 2.6us. Again using ppm is also inconvenient for writing : 0.000001ppm or 0.001ppb
Error: 86.4ns per day.
Error: 2.6us per month.
To lose 1 second takes: 32,384 years; (1.0/84.6e-9/365)
This is also known as an atomic clock.
Cesium beam atomic clocks are stable to 1 x 10^{-13} (8.64ns/day 8 billionths of a second!) or 259ns (259e-9 seconds) a month (ppm is 0.0000001ppm ! or 0.0001ppb).
Error: 8.46ns per day.
Error: 0.259us per month.
To lose 1 second takes: 323,844 years; (1.0/8.46e-9/365)
Note: A Cesium fountain is stable to 1 x
10^{-15}.
To lose 1 second takes: 32,384,400 years; (1.0/8.46e-9/365)*100
Type | Accuracy (ppm/ppb) | Accuracy | Aging / 10 Year |
Aging / 10 Year |
Crystal | 10ppm-100ppm | 10^{-5} - 10^{-4} | 10-20ppm | 10x10^{-6} |
TCXO | 1ppm | 10^{-6} | 3ppm | 3x10^{-6} |
OCXO 5-10Mhz | 0.02ppm (20ppb) |
2x10^{-8} | ~0.2ppm (200bpp) | 0.2x10^{-6} |
OCXO 15-100MHz |
0.5ppm (500ppb) |
5x10^{-7} | ~10ppb | 1x10^{-8} |
Rubidium Atomic | 1x10^{-6}ppm (0.001ppb) | 10^{-12} | 0.005ppm (5ppb) | 5x10^{-9} |
# Calculate the ppm given a nominal frequency and actual frequency.
# ppm? 20e6 19998485 Returns 75.75 ppm
proc ppm? { nomf f } {
return [expr (abs($f-$nomf)/$nomf)*1e6 ]
}
# given ppm return decimal e.g. ppm 200 is 0.0002
proc ppm { ppmv } { return [expr $ppmv/1e6] }
# given ppb return decimal e.g. ppb 10 is 1e-8
proc ppb { ppbv } { return [expr $ppbv/1e9] }
# ppm range show max and min of freq:nomf and ppm value
proc ppm_r { nomf ppmv } {
puts [expr $nomf+([ppm $ppmv]*$nomf) ]
puts [expr $nomf-([ppm $ppmv]*$nomf) ]
}
set secs_per_day [expr 24*60*60 ]
Download TCL from Active state (free) and download tkcon. Double click tkcon to start it and paste the above procedures into tkcon, then use the them by typing in commands at the tkcon command prompt (Turn on calculator mode in preferences):
e.g. ppm? 20e6 19999391
results in 30.450000000000003
i.e. It shows you the ppm value: 30ppm for given nominal frequency and actual measured frequency.
Arduino oversampling is a technique to increase ADC resolution by reading more samples then decimating. It really does work!
A tutorial on using the ADS1115 precision 16 bit ADC for low power use.
Arduino Analog Output: How to create the most accurate PWM analog ouput and how to create analog PWM sine waves.
Find out how digitalWrite() works...Now use 17x Faster macros!
How to use the TCS230 (/TCS3200) Color detector chip and easily add it to any of your projects.
With the ADXL345 acellerometer you can detect up to 16g! You can also find out how to use it for tap detection and more.
New! Comments
Have your say about what you just read! Leave me a comment in the box below.