Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Industriële technologie

Real Time Clocks (RTC's) in Microcontroller Timers

Dit artikel is het derde van een serie over microcontroller-timers waarin de RTC's in een microcontroller worden beschreven.

Dit artikel is het derde in een serie over timers voor microcontrollers. Het eerste artikel beschrijft de belangrijkste kenmerken van de meeste soorten timers en behandelt periodieke timers, en het tweede artikel behandelt MCU-timers met pulsbreedtemodulatie.

Real-time klokken (RTC) zijn timers die zijn bedoeld om een ​​tijdbasis van één seconde bij te houden. Bovendien wordt een RTC vaak gebruikt om de kloktijd en kalenderdatum bij te houden, hetzij in software of hardware. Veel van de functies van een RTC zijn zeer gespecialiseerd en vereist voor het handhaven van een hoge nauwkeurigheid en een zeer betrouwbare werking. Er zijn RTC-apparaten buiten een microcontroller die communiceren met een I 2 C- of SPI-bus.

Dit artikel beschrijft RTC's in een microcontroller.

Overzicht van real-time klokken

De basisfunctie van de real-time klok is om intervallen van één seconde te produceren en een continue telling bij te houden.

U kunt hiervan een weergave zien in het onderstaande diagram.

Figuur 1. Dit timingdiagram toont de basisfunctie van een RTC

Er wordt ook een programmafunctie getoond, A, die een secondenteller afleest en een gebeurtenis, B, plant voor drie seconden in de toekomst. Deze actie wordt een alarm genoemd. Merk op dat de secondenteller continu loopt en niet stopt en start. Twee primaire vereisten van een RTC zijn nauwkeurigheid en continue werking.

Het volgende diagram toont algemene hardwarekenmerken van een RTC.

Figuur 2. Hardwarefuncties voor realtime klok

Een RTC heeft vaak zijn eigen interne oscillator met een extern kristal en een optie om een ​​externe frequentiereferentie te gebruiken. Alle klokbronnen draaien op 32.768 Hz. Een externe klokbron maakt het gebruik van een zeer nauwkeurig en stabiel apparaat mogelijk, zoals een TCXO (temperatuurgecompenseerde kristaloscillator).

Een klokbron wordt geselecteerd met een multiplexer en ingevoerd in een prescaler die de klok deelt met een factor 32.768 (215) om een ​​klok van één seconde te produceren.

Een basis-RTC heeft een secondenteller die gewoonlijk 32 bits of meer is. Sommige RTC's hebben gespecialiseerde tellers om de tijd van de dag en de kalenderdatum bij te houden.

Een basis-RTC zonder tijd- en datumtellers gebruikt hiervoor software. Een veelgebruikte optie is een blokgolf van 1 Hz vanaf een uitgangspen. Een RTC heeft verschillende mogelijke gebeurtenissen om een ​​processoronderbreking te genereren.

Een RTC heeft vaak een speciale voedingspin om te kunnen werken wanneer de rest van de microcontroller is uitgeschakeld. Deze voedingspin is meestal aangesloten op een batterij of een aparte voeding.

RTC-nauwkeurigheid en frequentiecompensatie

De nauwkeurigheid van een RTC hangt af van de 32.768 Hz klokbron. In een goed ontworpen kristaloscillator is de belangrijkste bron van fouten het kristal. Een externe TCXO kan worden gebruikt voor zeer nauwkeurige timing, of speciale technieken voor frequentiecompensatie worden gebruikt met goedkopere kristallen en de interne oscillator. Er zijn drie belangrijke bronnen van fouten van een kristal.

  • Initiële circuit- en kristaltolerantie
  • Kristaldrift met temperatuur
  • Kristalveroudering

De onderstaande grafiek toont verschillende concepten met betrekking tot RTC-nauwkeurigheid.

Figuur 3. Grafiek met foutmeting met behulp van temperatuur gebruikt met dank aan Texas Instruments

Het donkerblauwe spoor op deze grafiek toont een typische initiële tolerantie en de verandering met temperatuur. Het roze spoor toont alleen de temperatuurfout. De sleutel tot het compenseren van temperatuur is het feit dat het gedrag van een kristal goed bekend is en voorspeld wordt met een kwadratische vergelijking. Als de initiële fout wordt gemeten nadat de printplaat is vervaardigd en de temperatuur bekend is, is het mogelijk om de grootste foutbronnen te compenseren.

De gele band is een redelijk doelwit voor nauwkeurigheid na zorgvuldige compensatie. Houd er rekening mee dat 1 ppm per jaar ongeveer 30 seconden is. Kristalveroudering is moeilijk te compenseren. Gelukkig is veroudering meestal maar een paar ppm per jaar.

RTC-timing wijzigen

Hier zijn twee manieren om de timing van een RTC te wijzigen als onderdeel van een systeem om fouten te compenseren.

Het eerste diagram (Figuur 4) geeft het aantal oscillatorcycli weer dat door de prescaler is geteld voor elke periode van de secondenteller.

De eerste twee seconden zijn de gebruikelijke 32.768 cycli. De software gebruikt temperatuurmetingen en de initiële fout om te bepalen dat de oscillator een beetje snel loopt en 32.768 cycli is eigenlijk een periode van 0,99990 seconden. Om deze kleine fout te compenseren, vertelt de software de RTC om de modulus van de prescaler te veranderen in 32.781 voor elke vierde seconde om wat tijd toe te voegen.

Figuur 4. Een weergave van oscillatorcycli geteld door een prescaler

Deze techniek heeft het voordeel van een kleine verandering in de periode van seconde naar seconde. De techniek vereist echter een instelbare prescaler en extra registers om de speciale prescale-telling en het aantal seconden tussen toepassing van de speciale telling vast te houden. Ik denk dat dit best cool is. Een beetje ingewikkeld maar best gaaf.

Wat als de RTC geen speciale prescaler heeft om de timing aan te passen? Dit diagram toont een andere methode.

Figuur 5. Dezelfde situatie als weergegeven in figuur 4, maar zonder een prescaler

In dit geval is het getal in de vakjes de secondenteller. De getoonde telling is 100251 gevolgd door 100252. De software heeft continu de aanpassing berekend en de RTC-secondentelling bijgehouden. Wanneer de fout oploopt tot precies één seconde, telt de software een seconde op of trekt er een seconde van af om de geaccumuleerde fout aan te passen.

Een nadeel van deze techniek is dat de verandering van seconde naar seconde groot is wanneer een aanpassing wordt gedaan. Deze techniek heeft het voordeel dat deze compatibel is met elke RTC.

Beveiliging in RTC's

Beveiliging is een interessante eis. Er zijn toepassingen waarbij tijd wordt gebruikt om klanten te factureren voor het gebruik van een dienst of het verbruiken van een bron. Er bestaat een uitgebreide praktijk rond het voorkomen of detecteren van hacks van RTC's. Technieken variëren van inbraakdetectie voor behuizingen tot speciale functies binnen de microcontroller.

De RTC op een microcontroller die ik momenteel gebruik, heeft speciale registers waarmee software kritieke registers permanent kan vergrendelen. Eenmaal vergrendeld, kunnen ze niet meer worden gewijzigd en zijn ze beschermd tegen hacking of onbeheerde code. Het wijzigen van de tijd vereist een volledige reset van de microcontroller.

Tijd en datum

Sommige RTC's hebben hardwaretellers om de tijd van de dag en de kalenderdatum bij te houden. Dit vereist tellers voor minuten, uren, dagen, maanden, jaren en aandacht voor schrikkeljaren. Tijd en kalenderdata kunnen ook door software worden bijgehouden.

Een prominent voorbeeld zijn de functies in de C Standard Library die te zien zijn in het time.h-bestand. Voor een microcontroller kan dit systeem gebaseerd zijn op de secondenteller van een RTC. Er moeten vier kleine, aangepaste functies worden geschreven om de time.h-bibliotheek volledig te ondersteunen.

De enige functie die hier van belang is, wordt aangeroepen door de functie time() in de bibliotheek, die de tijd retourneert als het aantal seconden sinds een startpunt dat een "tijdperk" wordt genoemd, gewoonlijk 1 januari 1970. Meestal is de aangepaste functie om te lezen de hardwaretimer heet get_time( ) of een vergelijkbare variatie. Het enige wat get_time( ) doet, is de secondenteller lezen en de waarde retourneren. De bibliotheek doet de rest om deze tijd in seconden om te zetten in de huidige tijd en datum.

Problemen met 32-bits secondentellers

Een 32-bits secondenteller loopt lang maar niet voor altijd. Er kunnen ernstige problemen optreden vanwege het beperkte bereik van de telling. Een systeemtijd die is gebaseerd op een 32-bits teller die gebruikmaakt van de C-standaardbibliotheek en een tijdvak van 1 januari 1970, kan bijvoorbeeld mislukken in januari 2038 wanneer de teller na de maximale telling doorloopt. Dit probleem staat bekend als het Y2038-probleem.

Er is een mislukking opgetreden tijdens de NASA Deep Impact-ruimtemissie om een ​​komeet te bestuderen. Het primaire missiedoel was bereikt en het ruimtevaartuig ging door met het bestuderen van andere objecten. In 2013 viel de communicatie echter plotseling weg. Hier is een officieel NASA-commentaar.

"Hoewel de exacte oorzaak van het verlies niet bekend is, heeft analyse een potentieel probleem met computertijdregistratie aan het licht gebracht dat had kunnen leiden tot verlies van controle over de oriëntatie van Deep Impact."

- NASA-nieuwsbericht in 2013

Een waarschijnlijke oorzaak van het falen is dat een 32-bits timer de tijd in stappen van 0,1 seconde aanhield en overliep waardoor de missie werd "beëindigd".

Mijn suggestie, als het om tijd en datum gaat, is om een ​​langer dan verwachte levensduur in je ontwerp te gebruiken.

Wat nu

Het volgende artikel sluit de serie af met Watchdog-timers.


Industriële technologie

  1. Het is tijd om van cloudbeheer een echte IT-praktijk te maken
  2. Opladen en ontladen van condensator
  3. Tijdconstante vergelijkingen
  4. Spannings- en stroomberekeningen
  5. De echte kans is de industriële kans
  6. Werkuitrusting:is het tijd voor een upgrade?
  7. 7 aanjagers van digitale transformatie
  8. Is het tijd om high-performance machinale bewerkingen te omarmen?
  9. Robot detecteert en deelt veranderingen in 3D in realtime
  10. Een betere sensor detecteert ijsvorming, in realtime
  11. Realtime bedrijfsinteroperabiliteit