-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 13

Thema: PWM mit Atmega uC

  1. #1

    PWM mit Atmega uC

    Anzeige

    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

    N
    un zur Frage. Wenn ich das richtig verstanden habe wird an PC0 ein Analoger Wert eingelesen (durch Poti einstellbar). mit diesem analogen wert wird dann im programm gerechnet. Der Wert durch 4 geteilt und dann für die PWM genutzt um eine LED zum Leuchten zu bringen.

    Ich möchte nun keine LED zum leuchten bringen sondern einen Servo Motor anschliessen. Hierfür benötige ich ja ein Rechtecksignal mit einer Frequenz von 50Hz sowie einer Pulsbreite von 1ms (linksanschlag) bis 2ms (rechtsanschlag). Wie genau bekomme ich das hin das wenn der Poti bei 0 Ohm steht der Motor am linksanschlag ist und bei 1000 Ohm am rechtsanschlag oder umgekehrt. Mit dem Programm was dort vorgegeben ist habe ich ja nicht unbedingt exakt die Werte die ich haben möchte. Es soll ja auch funktional sein also nach Möglichkeit wirklich Anschlag Poti = Anschlag Motor und nicht nen Bereich mittendrin.

    Ich hoffe ihr versteht mein Anliegen , wenn ihr jetzt für den Fall noch bedenkt das ich ein Vollidiot und gnadenloser Anfänger mit dem Zeug bin und dementsprechend die Antworten formuliert bin ich euch wirklich SEHR dankbar.

    Danke

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    33
    Beiträge
    2.364
    du musst nur ein wenig rechnen, du brauchst eine andere pulsfrequenz und ein anderen tastverhältnis, bei der LED geht das tastverhältnis von 0 zu 100% bei einer Frequenz im kHz-Bereich damit es nicht flimmert, der Servo braucht 50Hz, also Pulsabstand 20mS ... die Pulsbreite liegt zwischen 2ms und 1ms jetzt kannst du dir das Tastverhältnis ausrechnen bzw. iss ja recht simpel 5-10% das wird bei der Auflösung der Timer aber sehr ungenau, besser du machst 500Hz und Tastverhältnis 50-100% ABER du darfst nur jeden 10ten Impuls an den Servo schicken!
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.01.2006
    Beiträge
    4.556
    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

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    24
    Beiträge
    1.544
    Hallo,

    es wäre sehr hilfreich, wenn du uns sagst, mit welcher Sprache du programmierst und wie deine Hardware aussieht?! Hast du einen Quarz, wenn ja, welche Frequenz? Wo ist der Servo angeschlossen? usw...
    Dann solltest du ersteinmal ein Programm schreiben, welches den Servo von einen Anschlag zum anderen fahren lässt, damit du weißt, welche Minimal/Maximal Werte du hast. Dann ist das ganze ganz einfach
    Hier die Formel:
    servopos=servomin+(servomax-servomin)*poti/1024 (Zitat von Radbruch!)

    Gruß
    Chris

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    33
    Beiträge
    2.364
    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.

  6. #6
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    7.551
    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

  7. #7
    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  

  8. #8
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.781
    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:
    http://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
    http://www.roboternetz.de/community/...l=1#post364346

    Gruß

    mic

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

  9. #9
    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:
    http://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
    http://www.roboternetz.de/community/...l=1#post364346

    Gruß

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

  10. #10
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.01.2006
    Beiträge
    4.556
    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

Seite 1 von 2 12 LetzteLetzte

Ä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, 12:41
  2. serielle Komunikation von Atmega zu Atmega
    Von info8sn im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 4
    Letzter Beitrag: 21.04.2008, 07:17
  3. ATMEGA 32L8 DIP vs. ATMEGA 32-16 DIP
    Von manchro im Forum AVR Hardwarethemen
    Antworten: 9
    Letzter Beitrag: 10.10.2007, 22:29
  4. Atmega 128
    Von desperado im Forum AVR Hardwarethemen
    Antworten: 4
    Letzter Beitrag: 12.07.2005, 14: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, 13:31

Berechtigungen

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