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

Thema: Servosteuerung ohne Arduino und Co

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #11
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    Mit dem Prescaler erzeugt man den heruntergeteilten Takt für den Timer aus dem Takt des Kontrollers. Der Takt des Timers ist um der Faktor des Vorteilers geringer als der Kontrollertakt. Ein 8MHz-Mega8 zählt mit Prescaler /8 in 20ms bis 8000000/8*0,020=20000. In einer Millisekunde zählt er bis 1000.

    Weil es so einfach ist, wählt man den Mode 14 "Fast-PWM mit ICR1 als TOP" und begrenzt den Zählbereich mit dem IRC1-Register auf 20000. Das Zählregister TCNT1 zählt dann von 0 (Bottom) nach 20000 (Top) und wird beim Erreichen von Top wieder auf Bottom gesetzt. Ein Zyklus dauert nun 20ms.

    Das Vergleichsregister OCR1A (A für Kanal A) wird mit 1000 geladen und der Ausgang OC1A wird so eingestellt, dass der Ausgang (beim Mega8 ist OC1A der Pin PB1) bei TCNT1==Bottom auf High und bei TCNT1==OCR1A wieder auf Low gesetzt wird. Wenn dann noch das Datenrichtungsregister auf Ausgang konfiguriert ist, wird am Pin PB1 ein Impuls ausgegeben,der 1ms dauert. Wenn man nun den Wert in OC1A ändert, ändert sich auch die Impulsdauer.

    In den Registern TCCR1A und TCCR1B (hier bezeichen A und B die zwei Register und nicht die zwei Kanäle!) werden der Prescaler (CS), der Modus (WGM) und die Ansteuerung des Ausgang (COM1A0 und COM1A1, A ist hier wieder der Kanal) durch setzen der entsprechenden Bits ausgewählt.

    Ich habe die Datenblätter nur überflogen, aber ich denke, die Register vom Mega8 und vom Mega256 stimmen in etwa überein. Bis auf das Setup des Pins kannst du deshalb die Konfiguration von oben übernehmen.

    Was müsste ich wie manipulieren um den einen oder anderen Servo anzusteuern?
    Mit OCR1A beeinflußt man die Impulsdauer an OC1A (PB1). Mit OCR1B funktioniert das dann auch mit OC1B an PB2, wenn du COM1B0 und COM1B1 und das DDR für Pin PB2 auch konfiguriert hast. Der Prescaler, der Mode, das Zählregister und die Einstellung für Top gilt für beide Kanäle.

    Übrigends läuft das alles automatisch im Hintergrund ohne dein Programm zu beeinflussen oder gar zu bremsen.

    Gruß

    mic
    Geändert von radbruch (21.02.2015 um 18:29 Uhr) Grund: Kanal B hinzugefügt
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

Ähnliche Themen

  1. Messen einer Entfernung mit einem Arduino OHNE Kit
    Von Unregistriert im Forum Microcontroller allgemeine Fragen/Andere Microcontroller
    Antworten: 5
    Letzter Beitrag: 25.01.2015, 10:58
  2. ARDUINO und C++???
    Von Dr. Bombe im Forum Microcontroller allgemeine Fragen/Andere Microcontroller
    Antworten: 7
    Letzter Beitrag: 03.01.2013, 12:27
  3. Antworten: 1
    Letzter Beitrag: 05.12.2012, 19:11
  4. Antworten: 1
    Letzter Beitrag: 14.10.2012, 16:12
  5. Servosteuerung und STK500
    Von raoul.m@gmx.ch im Forum Assembler-Programmierung
    Antworten: 10
    Letzter Beitrag: 16.12.2006, 02:23

Stichworte

Berechtigungen

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

Solar Speicher und Akkus Tests