Ik hou van Arduino microcontroller programmeren, en ik gebruik het regelmatig in ruimtevaartonderzoek, evenals in home projects home projecten. Als ik werk op mijn vele home projects home projecten, echter vind vaak ik mezelf een zeer nauwkeurige timer nodig. Dit komt omdat mijn focus home projects home projecten rond Radio Control (RC) vliegtuigen en RC hobby mededeling signalen op basis van timing signalen. Deze mededeling van de RC-signalen heten PWM (Pulse Width Modulation) en PPM (Pulse positie Modulation). De signalen, de uitwijking van een volledige stick in één richting, op een handheld-zender, meestal correspondeert met ~ 1000us (microseconden), en correspondeert met een volledige stick doorbuiging in de tegenovergestelde richting ~ 2000us.
Voor het meten van de timing in deze signalen, ik voor het eerst gebruikt de Arduino micros() functie, in combinatie met externe interrupts. De ingebouwde Arduino micros() functie is goed, maar niet goed genoeg voor mijn behoeften. Het heeft een nauwkeurigheid van 4us (Zie hier). Dit betekent dat als ik lees een PWM-signaal dat ik weet precies 1500us (centrum-stick positie op een hand-held zender), I 'd see lezingen van 1496, 1504, 1500, en soms zelfs 1492 of 1508us. Dit is teveel afwijking.
So... Ik keek en ik keek en ik zocht naar een oplossing. De enige oplossing die ik kon vinden gebruikt de Atmega328 microcontroller van Timer1, wat onaanvaardbaar is voor mijn behoeften, want dan verlies ik gebruik van de Arduino servo bibliotheek. Daarom besloten heb ik om te doen een ton van lezing en naar beneden in de ingewanden van de microcontroller, rechtstreeks toegang krijgen tot de Atmel's timers en het schrijven van mijn eigen timer-functie.
Vanuit dit streven is geboren mijn Timer2_Counter "bibliotheek", waarin functies die kunnen worden gebruikt in plaats van de micros()-functie en die bieden een nauwkeurigheid van 0.5us, die 8 x beter dan de micros()-functie is!
Voor meer gedetailleerde informatie over mijn code, evenals de nieuwste versie van mijn code, met inbegrip van een volledige lijst van de functies, gelieve te verwijzen naar mijn artikel hier:
Arduino micros() functie met 0.5us precisie - met behulp van mijn Timer2_Counter "Bibliotheek".