Propeller based oscillator noise test system measures within 1ppB every millise
Bean
Posts: 8,129
At my work·www.greenrayindustries.com we build ultra-high precision oscillators.
Mostly TCXOs (Temperature compensated xtal·oscillator)·and OCXOs (Oven controlled xtal oscillator).
Some of the OCXOs that we build will hold 10ppB from -40°C to +85°C.
We needed a system to test the noise of some of these oscillators. We needed to measure the frequency to within 1ppB every millisecond on a 20MHz oscillator.
There were plenty of high-end (read expensive) systems that would do it, but we wanted to design our own.
I have attached a block diagram of the system.
It starts with the 20MHz TCXO device to be tested. This 20MHz signal and a 19.999000MHz signal from a low-noise synthisizer are fed into a mixer.
The output from the mixer contains both the sum and difference of the two signals (39.999000MHz and 1000Hz).
This is fed into a low-pass filter so only the 1000Hz signal gets through.
The 1000Hz signal is fed into a schmitt trigger gate to make it a nice square-wave. This 1Khz square-wave is fed into the propeller pin P0.
An output from our in-house Rubidium atomic 10MHz standard is fed into the XIN pin of the propeller.
The propeller software uses the PLL8X setting so the propeller runs @ 80MHz.
The software times the duration of the 1KHz signal using the system counter (cnt).
From this count we can calculate the frequency of the 1Khz signal using the formula:
80MHz / count = Freq
A perfect 1KHz signal would get 80_000 counts so 80_000_000 / 80_000 = 1000.0000
If the signal is off by one count (let's say 79_999) then what is the frequency ?
80_000_000 /·79_999 = 1000.0125
So we are getting 0.0125Hz resolution every 1millisecond (the time to measure 1KHz).
At 20MHz 1 part per billion is 0.02 Hz, so we are able to measure to less than 1ppB of the 20MHz signal.
It's important to realize that the 1KHz is NOT a division of the 20MHz, it is an offset. So if the 20MHz signal varies by 1Hz, so does the 1Khz signal.
The counts are send to a PC to be logged for post processing, and also a graph is generated on a VGA monitor for real-time viewing.
We built and tested the prototype using the Propeller demo board. Everyone was very impressed with how well it worked.
I thought everyone would get a kick out of how the propeller can be used to replace some very expensive equipment.
Bean
I'm sorry I cannot post the code (it's in PropBASIC of course) it is property of my work.
·
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Use BASIC on the Propeller with the speed of assembly language.
PropBASIC thread http://forums.parallax.com/showthread.php?p=867134
Post Edited (Bean (Hitt Consulting)) : 1/30/2010 2:28:56 AM GMT
Mostly TCXOs (Temperature compensated xtal·oscillator)·and OCXOs (Oven controlled xtal oscillator).
Some of the OCXOs that we build will hold 10ppB from -40°C to +85°C.
We needed a system to test the noise of some of these oscillators. We needed to measure the frequency to within 1ppB every millisecond on a 20MHz oscillator.
There were plenty of high-end (read expensive) systems that would do it, but we wanted to design our own.
I have attached a block diagram of the system.
It starts with the 20MHz TCXO device to be tested. This 20MHz signal and a 19.999000MHz signal from a low-noise synthisizer are fed into a mixer.
The output from the mixer contains both the sum and difference of the two signals (39.999000MHz and 1000Hz).
This is fed into a low-pass filter so only the 1000Hz signal gets through.
The 1000Hz signal is fed into a schmitt trigger gate to make it a nice square-wave. This 1Khz square-wave is fed into the propeller pin P0.
An output from our in-house Rubidium atomic 10MHz standard is fed into the XIN pin of the propeller.
The propeller software uses the PLL8X setting so the propeller runs @ 80MHz.
The software times the duration of the 1KHz signal using the system counter (cnt).
From this count we can calculate the frequency of the 1Khz signal using the formula:
80MHz / count = Freq
A perfect 1KHz signal would get 80_000 counts so 80_000_000 / 80_000 = 1000.0000
If the signal is off by one count (let's say 79_999) then what is the frequency ?
80_000_000 /·79_999 = 1000.0125
So we are getting 0.0125Hz resolution every 1millisecond (the time to measure 1KHz).
At 20MHz 1 part per billion is 0.02 Hz, so we are able to measure to less than 1ppB of the 20MHz signal.
It's important to realize that the 1KHz is NOT a division of the 20MHz, it is an offset. So if the 20MHz signal varies by 1Hz, so does the 1Khz signal.
The counts are send to a PC to be logged for post processing, and also a graph is generated on a VGA monitor for real-time viewing.
We built and tested the prototype using the Propeller demo board. Everyone was very impressed with how well it worked.
I thought everyone would get a kick out of how the propeller can be used to replace some very expensive equipment.
Bean
I'm sorry I cannot post the code (it's in PropBASIC of course) it is property of my work.
·
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Use BASIC on the Propeller with the speed of assembly language.
PropBASIC thread http://forums.parallax.com/showthread.php?p=867134
Post Edited (Bean (Hitt Consulting)) : 1/30/2010 2:28:56 AM GMT
Comments
Very nice app for the Prop! From what does the 19.999000MHz synth signal derive? The same rhubidiium frequency source?
-Phil
Yes, I should have drawn a line from the standard to the synth too.
I'll see if I can get a video of the system in action.
Bean
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Use BASIC on the Propeller with the speed of assembly language.
PropBASIC thread http://forums.parallax.com/showthread.php?p=867134·
http://www.youtube.com/watch?v=fkYL7fluv5E
Bean
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Use BASIC on the Propeller with the speed of assembly language.
PropBASIC thread http://forums.parallax.com/showthread.php?p=867134·