[time-nuts] Recording mains frequency/phase [WAS: NoGPSsatellites]
Tom Van Baak
tvb at LeapSecond.com
Mon Mar 2 04:57:58 EST 2015
> I'm going to have to build one of these. Assume you have some sort of
> circuit that converts low-voltage AC from a transformer secondary to a
> pulse train, start a timer, and count x amount of pulses?
Hi Ben,
Any microcontroller will allow you to poll for or capture events. Many even have capture/timer capability in h/w. Using a continuously running multi-byte timer you just subtract the current time from the previous time to get time interval (period). The traditional method of starting or resetting a timer after each event is prone to accumulated timing errors. Making periodic snapshots of a continuous timer avoids this.
Note that timer wrap-around is transparent for binary counters, as long as your timer won't wrap twice between events. For example, a 16-bit 1 MHz timer is more than sufficient for measuring 60 Hz events (since 16667 < 65536) with 1 us resolution.
In pseudo-code:
event()
time_now = get_timer()
interval = time_now - time_then
time_then = time_now
serial_output(interval)
Now, there are subtle issues with how interrupts and timers work, depending on the microcontroller, but the basic idea of measuring the precise interval between moderately rapid events (like 50/60 Hz cycles) is simple.
/tvb
More information about the time-nuts
mailing list