- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 10 von 10

Thema: Hochgenaue Impulse erzeugen

  1. #1

    Hochgenaue Impulse erzeugen

    Anzeige

    Powerstation Test
    Hallo zusammen,

    ich habe eine grundsätzliche Frage!
    In meinem Projekt brauche ich sehr genaue Impulse mit einem AtMega328P Mikrokontroller zu erzeugen. Die Genauigkeit soll besser sein wie 0,5 us.
    Meine Frage ist, kann man diese Genauigkeit diesen Mikrokontroller überhaupt erreicht werden und wenn ja, geht es auch bei den internen Taktquellen von dem Mikrokontroller und bei welchem Timer-Mode?
    Und meine zweite Frage: Ist die Genauigkeit generell besser wenn man einen externen Oszillator hat?

    Danke im Voraus für Eure Tipps!

  2. #2
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.683
    .. brauche ich sehr genaue Impulse mit einem AtMega328P .. Genauigkeit soll besser sein wie 0,5 us ..
    Vielleicht klinge ich jetzt recht dämlich: 0,5 - das ist also etwas zwischen 0,451 und 0,549 - nicht wahr? WENNS sehr genau sein sollte würde ich schon mal die Anzahl der signifikanten Stellen nennen. Vermutlich meinste Du aber etwas in der Art 0,5000?? µs denn die 0,5 µs dürfte selbst ein nackter mega328P schon hin und wieder schaffen: bei 8 MHz-Einstellung sind ja vier Takte theoretisch Deine 0,5 µs - nur die Frage was dann hinterm Komma steht . . .
    Die Frage wäre nach meiner Meinung klarer in der Art: 0,5unddieseNachkommastellen, dazu erlaubter/gewünschter Toleranzraum oder die zulässige Abweichung nach einem Tag oder einem Jahr *ggg*, Angabe der Umgebungsbedingungen wie: bewohnter Raum (sozusagen irgendwo zwischen 280K und 300K - im Sommer auch höher) oder "draussen" freistehend? usw usf.
    Werte für die Frequenzstabilität stehen im Datenblatt, meist unter ".. Typical Characteristics ..".

    .. Ist die Genauigkeit generell besser wenn man einen externen Oszillator hat ..
    Was heisst generell? Willst Du die Genauigkeit (siehe oben) OHNE Oszillator machen? Mal vorsichtig ausgedrückt: wenn ich genaue Impulse bräuchte würde ich keinesfalls an den internen Oszillator denken. Dann wären wir aber wieder bei der klarer(?er?)en Angabe.
    Ciao sagt der JoeamBerg

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    07.04.2015
    Beiträge
    898
    Bezogen auf den Quarz und analog zu AD-Wandlern:
    Es gibt nun mal die Begriffe "Auflösung" und "Genauigkeit". Der Timer löst in Takten auf, aber die Genauigkeit des internen RC-Oszillators liegt abhängig von Temperatur, Spannung und auch Exemplarstreuung im Prozentbereich.
    Mit einem Quarz kommst Du in den ppm-Bereich.

    Selber kann der Timer z.B. über die PWM-Funktionen auch eine taktgenaue Ausgabe produzieren, wenn man die Output-Compare-Pins verwendet. Da ist allerdings z.B. die Einschränkung, dass man aufgrund der Länge eines Pulses manchmal einen Prescaler (Vorteiler) bemühen muss, der die Auflösung wieder verringert.
    Dagegen gibt es zweifellos Mittel, wie z.B. den Timer ein paar mal komplett durchlaufen zu lassen und dann im entscheidenden Augenblick den fraktalen Rest als Overflow-Wert ins passende Register zu schreiben. Aber das ist nicht ganz unkompliziert.

    Kannst Du vielleicht mal beschreiben, wie Deine Pulse zeitlich verteilt sind? Also Länge (von..bis) und Wiederholrate?
    Geändert von Holomino (03.11.2024 um 16:58 Uhr)

  4. #4
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.683
    .. sehr genaue Impulse mit einem AtMega328P Mikrokontroller zu erzeugen ..
    Gestern fiel mir noch ne recht informative Seite ein zum Thema AVR/Takt/Quarz/Genauigkeit. Die hilft leider nicht wirklich bei genau Deiner Aufgabe aber erhellt ein bisschen das Thema "drumrum".
    Ciao sagt der JoeamBerg

  5. #5
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.683

    Nur ais eigenem Interesse

    Offenbar waren unsere Kommentare nicht der Hoppen . . . egal. Hat mich mal selbst interessiert. Daher:

    Breadboard, n rumliegender 328, ein x-belieber 20 MHz-Quarz, ein kurzes Progrämmchen, ne LED und der PC-Oskar (WaveForms fürs DISCOVERY-ANALOG2).

    Für eine leere while ( 1 ) -Schleife diese Initialisierung
    Code:
    // ============================================================================= =
    // ===  Initialisierung fuer Timer2 mega328 ==================================== =
      void TC2TMR_init ( void )     // Init 8bitTC2-Irupt Zeitbasis 20 kHz
     {                              //
      TCCR2A    |=   (1<<WGM21);    // Timer im CTC-Mode, Top=OCR2A
      TCCR2B    |=   (1<<CS20);     // NO Prescaler 1/1 / Clock <- CPU
      OCR2A      =          100;    // Preset 100 für  5µs bei 20Mhz
      TIMSK2    |=   (1<<OCIE2B);   // Tmr/Cntr2 Comp Match B Intrpt Enabl
     }                      // Ende void TC2TMR_init ( void )
    // ============================================================================= =
    und diese Interrupt-Routine
    Code:
    // ============================================================================= =
    // ===  Nicht unterbrechbare ISR für Timer2 - COMPB-vect  ====================== =
    //      - Routine toggelt PC3
    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      ISR (TIMER2_COMPB_vect)       // Tmr/Cntr2, @20kHz
     {                              //
      PORTC ^=  (1<<PC3);           // blLED PC3 toggeln
      return;
     }              // Ende ISR (TIMER2_COMPA_vect) ... Vektor...
    // ============================================================================= =
    bringen mir dieses Oscar-Bildchen - die Anzeige schwankt zwischen 5,044 und 5,046 µs.

    Bleistift und Papier sagen dazu SCHWANKUNGSbreite ist hier 0,4 %. Für die Vorgabe von "GENAU" 0,5 µs also schon ausreichend. Für Aufgaben im ppm-Bereich leider aber mau. UND wenn ich sehe, dass die PTB für ne hochgenaue Temperaturmessung (beispielsweise) gute drei Wochen Akklimatisierung der Messeinrichtung sinnvoll hält . . . Übrigens habe ich nicht nach der ppm-Abweidung der Atomuhr gefragt.

    Klar ist, dass sich dieser hübsche Wert mit zusätzlichen Rechneraktivitäten je nach Priorisierung von Interrupts etc verschlechtern wird.

    ......Klicke auf die Grafik für eine größere Ansicht

Name:	5p045µs +-0p02proz.jpg
Hits:	9
Größe:	36,5 KB
ID:	36023

    Grüße
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken 5p045µs +-0p02proz.jpg  
    Geändert von oberallgeier (05.11.2024 um 13:37 Uhr)
    Ciao sagt der JoeamBerg

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    07.04.2015
    Beiträge
    898
    bringen mir dieses Oscar-Bildchen - die Anzeige schwankt zwischen 5,044 und 5,046 µs.
    Ich will jetzt nicht mosern. Aber die absolute Abweichung liegt dann bei 2ns.
    Bist Du sicher, dass Dein Oszi mit mehr als 500 MSamples abtastet? Und Dir die Bandbreite Deines Tastkopfes nicht auch noch eine Strich durch die Rechnung, äh Messung macht?

    Nachtrag: 0,4% Abweichung wären bei einer Uhr knappe 6min Fehler pro Tag.
    Teile ich Deine 5046 durch die 5044, komme ich auf 1,0004. Das sind 0,04% oder etwa 35s/Tag.
    Genug geklugscheißert. Du hast heute einfach einen schlechten Tag. Lass uns was Sinnvolles machen und Glühwein trinken gehen (bevor wir hier noch mehr Schaden anrichten).
    Geändert von Holomino (05.11.2024 um 15:36 Uhr)

  7. #7
    Hallo zusammen,

    danke an @oberallgeier und @Holomino für Eure Beiträge und diese Diskussion.

    In Meinem Projekt möchte ich ein genaues Puls mit der Hilfe von einem AtTinay85 (ich habe es anderes überlegt!) zu erzeugen. Das Signal muss etwa 20 ms Sekunden "High! bleiben und dann nochmal auf Low gesetzt werden. Dieses Signal wird als externer Interrupt an einem AtMega328P geführt und dort verschiede Funktionen aufgerufen.
    Das Interrupt von AtMega328P muss möglichst genau alle Sekunde aufgerufen werden. Deswegen hier Definition der Genauigkeit ist: Der Abstand zwischen zwei nach einander erzeugten Pulse möglichst genau 1 Sekunde sein. Fehlertoleranz ist 0,5 us.

    Ich habe ehrlich gesagt, in der Konzeptionsphase und deswegen habe ich noch nichts programmiert. Meine Frage ist einfach, brauche ich unbedingt einen externen Quarz oder geht es bei dem internen Oszillator?
    Und außerdem habe ich in Microchip Studion bemerkt, dass die Option von 20 MHz gar nicht gibt. Könntet Ihr bitte mir einen Tipp geben, woran es liegen könnte?

    Viele Grüße,

    Klicke auf die Grafik für eine größere Ansicht

Name:	Device Programming_Microchip Studio.png
Hits:	4
Größe:	53,2 KB
ID:	36024

  8. #8
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.683
    .. danke an @oberallgeier und @Holomino für Eure Beiträge und diese Diskussion ..
    Gern geschehen - hoffentlich nützt es was. Für ne längere Antwort grad etwas zu müde (23h55), ABER:

    .. habe ich in Microchip Studion bemerkt, dass die Option von 20 MHz gar nicht gibt ..
    Klick mal mit dem Mauszeiger an den kleinen Pfeil im Auswahlfenster (Dein Bild=Link) - dann sollte ein Flyout kommen wie im zweiten Bild=Link-Studio4. Dort hast Du etliche Auswahlen von "8-.." (also "über acht..) MHz... Aber ich habe ja kein Mikrochip Studio . . kanns also nicht beschwören.
    Aber nu - Gute Nacht !

    Doch n PS: Die Option 20 MHz braucht aber auch nen entsprechenden Quarz, also 20 MHz (ich habe die meisten meiner Arduinos umgequarzt) - es wird eben getaktet entsprechend dem vorhandenen Quarz.
    Geändert von oberallgeier (Heute um 00:36 Uhr) Grund: Nachtrag
    Ciao sagt der JoeamBerg

  9. #9
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    07.04.2015
    Beiträge
    898
    Meine Frage ist einfach, brauche ich unbedingt einen externen Quarz oder geht es bei dem internen Oszillator?
    Antwort: Du brauchst mindestens einen Quarz (und das wird schon kritisch). Letztlich erfordert Deine Anforderung der 0,5µs Abweichung auf 1s eine Fehlertoleranz von 0,5ppm.

    Schau mal ins Datenblatt vom Tiny85 unter "typical characteristics->internal oscillator speed. Mit den Werten solltest Du grob berechnen und abschätzen können, wie sich die Länge Deiner "Sekunde" ändert, wenn sich die Umgebungstemperatur um nur ein halbes Grad ändert (ich komme da auf knappe 200µs).

    Dann schau mal in den temperaturabhängigen Frequenzverlauf, Alterungsfehler und Toleranz eines typischen Quarzes (z.B. https://cdn-reichelt.de/documents/da...4H_ENG_TDS.pdf). Auch das wird offensichtlich auf direktem Weg nix.
    Indirekt wäre dann natürlich möglich:
    - Toleranz und Alterung durch Langzeitmessung abgleichen (verpass der Schaltung einen Internetanschluss oder ein DCF-Modul und korrigiere entsprechend dieser Zeitmessungen die Taktzähler).
    - Temperaturfehler durch Temperaturmessung kompensieren.

  10. #10
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.683
    Nachtrag zum Mitternachtspost.

    Deine Anforderung sind 0,5 ppm. Damit vergleiche ich mal - nur beispielsweise - die Werte von meinen hochgenauen Uhrchip von MICRO CRYSTAL SWITZERLAND von dem ich hier ein paar Musterteile (die hochgenaue Ausführung: kalibriert) liegen habe : 3,5 mm x 5 mm mit eingebautem Quarz.

    Für diese genaue Ausführung werden vom Hersteller bei 25 °C ±3 ppm angegeben, für 0°C bis +50°C nennt der Hersteller ±4 ppm. Damit kann das am Chip abgreifbare Sekundensignal mit einer Toleranz von bestenfalls ± 3 µs ausgegeben werden. (Anmerkung - die Abweichungen sind dabei aber wohl eher nur langsam schwankend, es ist sicher kein weißes oder sonstwie Rauschen *gg*).

    Für Deine Ansprüche wird
    a) der eingebaute RC-Oszillator bei weitem nicht reichen,
    b) ein - handelsüblicher (nicht kalibrierter) Quarz sicher auch nicht - jedenfalls nicht ohne weitere Maßnahmen
    c) und auch möglicherweise keine handelsüblichen RTC-Chips.

    Leider ist auch die - viel genauere - PTB-Uhr nicht nutzbar - das Zeitsignal gibts ja nur im Minutentakt mit fast einer ganzen Minute Signaldauer. Daraus sind mit bescheidenem Aufwand auch nur Millisekunden darstellbar (zB in der Uhr-Grafik auf den Kasten [Δt] klicken) - und auch dort gibt die PTB ne Toleranz von mehreren Millisekunden an.

    Trotzdem: viel Erfolg
    Ciao sagt der JoeamBerg

Ähnliche Themen

  1. Solar Impulse: Solar Impulse 2 hebt zum ersten Mal ab
    Von Roboternetz-News im Forum Neuigkeiten / Technik-News / Nachrichten / Aktuelles
    Antworten: 0
    Letzter Beitrag: 02.06.2014, 11:00
  2. Solar Impulse: Solarflugzeug Solar Impulse 2 ist startklar
    Von Roboternetz-News im Forum Neuigkeiten / Technik-News / Nachrichten / Aktuelles
    Antworten: 0
    Letzter Beitrag: 09.04.2014, 22:40
  3. Impulse
    Von triti im Forum Elektronik
    Antworten: 11
    Letzter Beitrag: 30.11.2012, 13:49
  4. Impulse erzeugen mit Atmega32 und dann nach Line-in Notobook
    Von funkheld im Forum AVR Hardwarethemen
    Antworten: 3
    Letzter Beitrag: 19.02.2010, 18:53
  5. Hochgenaue Spannungsquelle
    Von Olle_Filzlaus im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 4
    Letzter Beitrag: 10.12.2007, 19:26

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen