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

Thema: PWM mit Atmega uC

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.01.2006
    Beiträge
    4.555
    Zitat Zitat von KrosseKrabbe Beitrag anzeigen
    Habe einen Artikel auf mikrocontroller.net gefunden indem Anfängern ein paar Beispiele gezeigt werden. Ich brauche die PWM siehe Link ganz unten:
    http://www.mikrocontroller.net/articles/Absolute_Beginner-AVR_Steckbrettprojekte

    hierfür benötige ich ja ein Rechtecksignal mit einer Frequenz von 50Hz sowie einer Pulsbreite von 1ms (linksanschlag) bis 2ms (rechtsanschlag).
    Du brauchst keine PWM (Pulsweiten Modulation) sondern PPM (Puls Pausen Modulation) und das ist ein klein wenig anders. Gelöst wird das meistens mittels Timer realisiert. Auf das jeweilige Servo müssen die Pulszeiten empirisch ermittelt werden, da jeder Servo etwas anders reagiert, diese 1...2 ms sind nur Richtwerte. Mit PWM Regelt man normale Gleichstrom Motore oder halt Lampen. Im RN Wissen Bereich sind beides PWM PPM mit Beispielen beschrieben.

    Gruß Richard

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    40
    Beiträge
    3.416
    Zitat Zitat von Richard Beitrag anzeigen
    Du brauchst keine PWM (Pulsweiten Modulation) sondern PPM (Puls Pausen Modulation) und das ist ein klein wenig anders. Gelöst wird das meistens mittels Timer realisiert. Auf das jeweilige Servo müssen die Pulszeiten empirisch ermittelt werden, da jeder Servo etwas anders reagiert, diese 1...2 ms sind nur Richtwerte. Mit PWM Regelt man normale Gleichstrom Motore oder halt Lampen. Im RN Wissen Bereich sind beides PWM PPM mit Beispielen beschrieben.

    Gruß Richard
    Aber mit PWM geht das genauso ... nur die Wiederholrate bleibt fix!
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

  3. #3
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.694
    Zitat Zitat von Richard
    Du brauchst keine PWM ... sondern PPM ... und das ist ein klein wenig anders ...
    Zitat Zitat von Ceos
    Aber mit PWM geht das genauso ... nur die Wiederholrate bleibt fix!
    Auf die Gefahr hin dass ich als Klugsch...er dastehe. Ich möchte nicht, dass der Kollege KK als Anfänger, der Servos steuern möchte, ungenau oder falsch informiert wird.

    Servos werden durch PWM angesteuert. Die RC-Fuzzies übertragen ihre Informationen zwischen Steuerung und Empfänger in PPM, ABER daraus macht dann der RC-Empfänger für den Servo ne PWM. Korrekt wird ein Servo mit PWM angesteuert - obwohl es meist auch mit konstanten Pausen zwischen den Pulsen sosolala funktioniert.

    Kurz. PWM hat variable Pulse und variable Pausen bei konstanter Periodenlänge. Die Information liegt genaugenommen im Puls. PPM hat konstante Pulse und variable Pausen, also eine variable Periodenlänge, die Information liegt in der Pause.
    Ciao sagt der JoeamBerg

  4. #4
    Danke für die Antworten.

    Da gefragt wurde mit welcher SPrache ich programmiere und wie die Hardware aussieht.

    Programmiersprache: C (Benutze als Programm AVR Studio)
    Hardware: STK500 mit einem Atmega48-20PU dort hatte ich dann vor einfach die Ports über ein Flachbandkabel auf die Platine zu bringen und dann an PD6 die Signalleitung vom Servo anklemmen. Was mir auch eingefallen ist. Es ist nicht notwendig das ich den Motor über den Poti regeln kann. Noch lieber wäre mir eine Möglichkeit das PWM Signal direkt am PC Live zu ändern das macht das ganze eventuell etwas einfacher da ich nicht auf die Werte vom Poti angewiesen bin.

    Brauche ich dafür Software? Was für ein Signal muss ich am Ausgang ausgeben wenn ich 2ms Pulsbreite Bei periodendauer von 20ms haben will.

    (Ich habe den Schaltplan mal drangehangen damit nicht jeder auf den Link muss)
    Danke
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken LCDundPWM.jpg  

  5. #5
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    Unter den vielen möglichen Ansteuerarten für Servos drängt sich dies nahezu auf: Impulserzeugung mit dem ADC-Interrupt.

    Dazu wird der ADC im Freerunnig-Modus gestartet, dessen Prescaler bildet zusammen mit dem Systemtakt die kleinste Zeiteinheit für die Servoimpulsbildung. In der ADC-ISR werden klassisch (wie im RN-Wiki beschrieben) die Aufrufe der ISR gezählt und die Impulse ausgegeben.

    Wirklich trickreich wird es jedoch, wenn man das an einem analogen Pin macht, denn dann kann man in der Impulspause am selben Pin eine Spannung messen und so ein Poti oder einen Taster auswerten. So funktioniert übrigends auch der Servo-Sensor:
    https://www.roboternetz.de/community...g-Servo-Sensor

    Oder mein Tiny-CD-Racer. Hier werden die Servos zusammen mit Fotodioden am selben Pin betrieben:
    http://www.youtube.com/watch?v=XTYzLqgKMLM
    https://www.roboternetz.de/community...l=1#post364346

    Gruß

    mic
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  6. #6
    Zitat Zitat von radbruch Beitrag anzeigen
    Hallo

    Unter den vielen möglichen Ansteuerarten für Servos drängt sich dies nahezu auf: Impulserzeugung mit dem ADC-Interrupt.

    Dazu wird der ADC im Freerunnig-Modus gestartet, dessen Prescaler bildet zusammen mit dem Systemtakt die kleinste Zeiteinheit für die Servoimpulsbildung. In der ADC-ISR werden klassisch (wie im RN-Wiki beschrieben) die Aufrufe der ISR gezählt und die Impulse ausgegeben.

    Wirklich trickreich wird es jedoch, wenn man das an einem analogen Pin macht, denn dann kann man in der Impulspause am selben Pin eine Spannung messen und so ein Poti oder einen Taster auswerten. So funktioniert übrigends auch der Servo-Sensor:
    https://www.roboternetz.de/community...g-Servo-Sensor

    Oder mein Tiny-CD-Racer. Hier werden die Servos zusammen mit Fotodioden am selben Pin betrieben:
    http://www.youtube.com/watch?v=XTYzLqgKMLM
    https://www.roboternetz.de/community...l=1#post364346

    Gruß

    mic
    Ich bin zu blöd um soetwas zu verstehen . Wiegesagt Absoluter Anfänger.

  7. #7
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.694
    Zitat Zitat von KrosseKrabbe
    ... lieber wäre mir eine Möglichkeit das PWM Signal direkt am PC Live zu ändern das macht das ganze eventuell etwas einfacher da ich nicht auf die Werte vom Poti angewiesen bin ...
    Und am PC? Ein Poti am PC?

    Der Empfang von Daten vom PC und das Umsetzen dieser Daten zu entsprechenden Ansteuerwerten im Controller ist nicht so simpel. Auch nicht schwer, aber vermutlich erstmal deutlich aufwendiger als Poti auslesen und den Wert im Controller weiter verrechnen.
    Ciao sagt der JoeamBerg

  8. #8
    Zitat Zitat von oberallgeier Beitrag anzeigen
    Und am PC? Ein Poti am PC?

    Der Empfang von Daten vom PC und das Umsetzen dieser Daten zu entsprechenden Ansteuerwerten im Controller ist nicht so simpel. Auch nicht schwer, aber vermutlich erstmal deutlich aufwendiger als Poti auslesen und den Wert im Controller weiter verrechnen.
    Damit meine ich einfach das ich den Wert im programm einfach live änder. Der uC ist ja aufm STK500 verbaut da geht ja soweit ich weiß sowas.

  9. #9
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.01.2006
    Beiträge
    4.555
    Zitat Zitat von KrosseKrabbe Beitrag anzeigen
    Damit meine ich einfach das ich den Wert im programm einfach live änder. Der uC ist ja aufm STK500 verbaut da geht ja soweit ich weiß sowas.
    Im Prizip brauchst Du nur die entsprechenden PWM Werte für rechts,links, mitte per z.B. Hyperterm oder ähnlich zum µC senden und in das PWM Register schreiben.
    Es gibt auch PC Programme mit denen eine Fernsteuerung simuliert werden kann oder man greift auf z.B. so etwas zurück http://www.shop.robotikhardware.de/s...a9ce059e8c6063

    Code:
    'Config Servos = 2 , Servo1 = Portb.0 , Servo2 = Portb.1 , Reload = 10
    $regfile = "2313def.dat"
    
    Config Servos = 1 , Servo1 = Portb.0 , Reload = 10
    'as an option you can use TIMER1
    'Config Servos = 2 , Servo1 = Portb.0 , Servo2 = Portb.1 , Reload = 10 , Timer = Timer1
    
    
    'we use 2 Servos with 10 uS resolution(steps)
    
    'we must configure the port pins used to act as output
    Config Portb = Output
    
    'finally we must turn on the global interrupt
    Enable Interrupts
    
    'the servo() array is created automatic. You can used it to set the
    'time the servo must be on
    Servo(1) = 10                                               '10 times 10 = 100 uS on
    'Servo(2) = 20                                               '20 times 10 = 200 uS on
    Do
    Loop
    
    Dim I As Byte
    Do
     For I = 0 To 100
       Servo(1) = I
       Waitms 1000
     Next
    
     For I = 100 To 0 Step -1
     '  Servo(1) = I
       Waitms 1000
     Next
    Loop
    End
    Gruß Richard
    Geändert von Richard (11.10.2011 um 15:10 Uhr)

  10. #10
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.01.2006
    Beiträge
    4.555
    Zitat Zitat von oberallgeier Beitrag anzeigen
    Auf die Gefahr hin dass ich als Klugsch...er dastehe. Ich möchte nicht, dass der Kollege KK als Anfänger, der Servos steuern möchte, ungenau oder falsch informiert wird.

    Servos werden durch PWM angesteuert. Die RC-Fuzzies übertragen ihre Informationen zwischen Steuerung und Empfänger in PPM, ABER daraus macht dann der RC-Empfänger für den Servo ne PWM. Korrekt wird ein Servo mit PWM angesteuert - obwohl es meist auch mit konstanten Pausen zwischen den Pulsen sosolala funktioniert.

    Kurz. PWM hat variable Pulse und variable Pausen bei konstanter Periodenlänge. Die Information liegt genaugenommen im Puls. PPM hat konstante Pulse und variable Pausen, also eine variable Periodenlänge, die Information liegt in der Pause.
    Danke für die Richtigstellung.

    Gruß Richard

Ähnliche Themen

  1. ATMEGA 32-16 DIP :: ATMega AVR-RISC-Controller, DIL-40 |ISP-KABEL ?
    Von welt-von-max im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 3
    Letzter Beitrag: 16.05.2011, 11:41
  2. serielle Komunikation von Atmega zu Atmega
    Von info8sn im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 4
    Letzter Beitrag: 21.04.2008, 06:17
  3. ATMEGA 32L8 DIP vs. ATMEGA 32-16 DIP
    Von manchro im Forum AVR Hardwarethemen
    Antworten: 9
    Letzter Beitrag: 10.10.2007, 21:29
  4. Atmega 128
    Von desperado im Forum AVR Hardwarethemen
    Antworten: 4
    Letzter Beitrag: 12.07.2005, 13:56
  5. Warum ist ATMEGA 32L8 DIP teurer als ATMEGA 32 DIP
    Von Frank im Forum AVR Hardwarethemen
    Antworten: 10
    Letzter Beitrag: 16.03.2004, 12:31

Berechtigungen

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

12V Akku bauen