- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 9 von 9

Thema: Servos per Hardware PWM ansprechen

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter-Spezialist Avatar von MiniMax
    Registriert seit
    26.07.2007
    Ort
    Bremen
    Beiträge
    241

    Servos per Hardware PWM ansprechen

    Moin Zusammen,
    es geht "einfach" nur um die Ansteuerung von 6 Servos mit nem Mega48.
    Nun habe ich es bisher immer mit der Timer und Schleifen Methode gemacht. Da ich aber für mein aktuelles Projekt Zeit zum Rechnen brauche ohne Interrupts wollte ich das über die 6 Hardware PWM's machen. Nun finde ich über die Hardware Methode mit den Timern kaum was im I-Net (zumindest mit meinen Suchbegriffen wie "Hardware Servo PWM" usw.)
    Daher wollte ich euch fragen ob ihr mir da nen bissel auf die Sprünge helfen könnt.
    Freue mich auf eure Antworten
    Gruß
    MiniMax

  2. #2
    Erfahrener Benutzer Begeisterter Techniker Avatar von Torrentula
    Registriert seit
    10.10.2009
    Ort
    Procyon A
    Beiträge
    355
    Per Hardware ist das eigentlich noch einfacher, weil du dich nur ein mal um die Konfiguration kümmern musst und dann einfach immer den Compare-Wert verändern musst.

    Du musst eben die Timer so konfigurieren, dass du eine PWM-Frequenz von 50Hz bekommst (bei analogen Servos) und dann die Compare-Werte für die Pulsbreite berechnen / durch ausprobieren feststellen.

    Ich weiß nicht wie man die Timer in Bascom konfiguriert aber hier ist die grundlegende Vorgehensweise ganz gut erklärt:

    *Click*
    MfG Torrentula

  3. #3
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    So wirklich einfach geht die Erzeugung des PWM Signals per Hardware PWM leider nur mit dem 16 Bit Timer. Nach der Konfiguration des Timers auf etwa 50 Hz und PWM Mode muss man nur noch den Wert in das OC1... Register schreiben. Beim Mega48 hat man aber nur 2 PWM Kanäle mit 16 Bit Auflösung. Mit den 8 Bit Timern geht das leider nicht so gut. Da ist die Auflösung doch sehr eingeschränkt: um auf etwa 20 ms Period zu kommen entspricht ein Schritt für den Timer und die Auflösung für den PWM Puls dann etwa 50-100 µs. Bei einer Pulsbreite von 1,5-2,5 ms für den Servo sind das also nur 10-20 Stufen die man einstellen kann. Teils ist der Bereich sogar noch kleiner.

    Wenn man die Softwareversion richtig macht, also die Pulse nach einander, und mit nur je 1 Interrupt je Puls, hält sich die Belastung durch Interrupts in Grenzen und man hat noch den größten Teil der Rechenleistung zur Verfügung. Da stört mehr der zusätzliche Bedarf auf dem Stack.

  4. #4
    Erfahrener Benutzer Begeisterter Techniker Avatar von Torrentula
    Registriert seit
    10.10.2009
    Ort
    Procyon A
    Beiträge
    355
    Wenn man die Softwareversion richtig macht, also die Pulse nach einander, und mit nur je 1 Interrupt je Puls, hält sich die Belastung durch Interrupts in Grenzen und man hat noch den größten Teil der Rechenleistung zur Verfügung. Da stört mehr der zusätzliche Bedarf auf dem Stack.
    Gibt es dazu auch ein Beispiel? Du hast mich jetzt auch neugierig gemacht
    MfG Torrentula

  5. #5
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Passenden Code gibt es im RN-Wissen unter Servoansteuerung.

  6. #6
    Erfahrener Benutzer Roboter-Spezialist Avatar von MiniMax
    Registriert seit
    26.07.2007
    Ort
    Bremen
    Beiträge
    241
    Also haltet ihr die Hardwaremethode nicht vorteilhaft? Dann mache ich es einfach so wie immer? :
    Code:
    Servoirq: 
    If Kanal = 0 Then    
    If Portb.0 = 0 Then                            'wenn port low       
    Timer1 = Servo(1)                           'dann timer auf entsprechende verzögerung      
     Portb.0 = 1                                 'und port anschalten    
    Else                                           'das hier passiert erst bei dem darauf folgenden interrupt      
     Portb.0 = 0                                 'dann port wieder ausschalten       
    Incr Kanal                                  'und den nächsten kanal bearbeiten    
    End If 
    End If 
    [...] 
    If Kanal = 6 Then   
    Timer1 = 40000                                  'eine pause von ca. 12ms bis zum nächsten interrupt. Bei guten Servos oder Brushlessreglern kann man hier bis auf 65530 gehen ==> ansteuerfrequenz von ~ 200Hz   
    Kanal = 0 
    End If 
    Return
    Gruß
    MiniMax

Ähnliche Themen

  1. RFM ansprechen
    Von runner02 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 8
    Letzter Beitrag: 11.03.2012, 11:01
  2. Welche Hardware für Ansteuerung von Servos
    Von roboterfips im Forum Suche bestimmtes Bauteil bzw. Empfehlung
    Antworten: 4
    Letzter Beitrag: 10.01.2010, 19:01
  3. Config Servos Befehl und allg. Servos
    Von Foooob im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 0
    Letzter Beitrag: 09.08.2007, 16:43
  4. USB Ansprechen
    Von DHigh im Forum Software, Algorithmen und KI
    Antworten: 8
    Letzter Beitrag: 05.10.2006, 20:37
  5. Servos ansprechen mit Atmega16
    Von zersus im Forum AVR Hardwarethemen
    Antworten: 8
    Letzter Beitrag: 22.05.2006, 21:35

Berechtigungen

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

12V Akku bauen