- Labornetzteil AliExpress         
Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 21

Thema: PWM im Interrupt

  1. #1
    Erfahrener Benutzer Begeisterter Techniker Avatar von Ferdinand
    Registriert seit
    10.09.2004
    Ort
    Stuttgart
    Alter
    44
    Beiträge
    230

    PWM im Interrupt

    Anzeige

    E-Bike
    Hallo gibt es die Möglichkeit ein PWM Signal zu generieren um eine Drehzahl für nen Motor zu stellen, das Signal soll aber im Interrupt erzeugt werden so dass das Hauptprogramm wenig beeinflusst wird wie wir das gemacht, früher hat man da ISR benutzt.
    habe schreiben erst heute gelernt.

    bin legasteniger.

    by Ferdinand.

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    39
    Beiträge
    3.416
    nunja, da du keinen Controller nennst auf dem das laufen soll hat man erstmal wenig Spielraum für Empfehlung

    aber Grundsätzlich würde ich das mit einem dafür vorgesehenen PWM Timer benutzen, dann braucht dein Hauptprogramm noch nicht mal für den Interrupt unterbrochen werden

    Zusätzlich wäre ein Hinweis mit welchen Tools du den Controller programmierst noch wichtig, wenn du z.B. Atmel Produkte einsetzt und das Atmel-Framework bin ich z.B. gleich raus, ich finde das Framework kastriert einen aufs übelste und ausgegoren ist es noch lange nicht geschweige denn Bugfrei
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    05.11.2007
    Beiträge
    1.076
    Hallo Ferninand,

    natürlich kann man eine PWM auch mit einem Interrupt (Timerinterrupt) erzeugen,
    das ist aber absolut nicht mehr zeitgemäss, es gibt kaum noch Controller die keine
    eingebaute PWM haben und diese sollte man dann auch benutzen, weil die völlig autark (eigenständig) läuft
    und dein Hauptprogramm nicht weiter belastet.
    Manchmal ist aber das Wort PWM garnicht im Datenblatt zu finden.
    Das ist zum Beispiel beim LPC1347 Controller der Fall.
    Der hat natürlich auch die Möglichkeit PWMs zu erzeugen,
    das findet man dann meist bei der Beschreibung der Timer. (Capture/Compare/Match/event counter....)

    Aber Du wirst uns sicher noch den Controller verraten, welchen Prozessor/Controller Du am Wickel hast....

    @Ceos: ich finde Bibliotheken, Frameworks teilweise auch "grausam" und benutze NIE welche.
    So schwierig ist das nun auch nicht, mal ein paar Register zu initialisieren.
    Für Einsteiger ist das aber oft sehr hilfreich und unumgänglich, bis dann Probleme auftauchen.....

  4. #4
    HaWe
    Gast
    hallo Leute....!?

    Wir befinden uns hier im Arduino-Forum!!

    Und Arduino hat für pwm-Erzeugung die universell verfügbare Funktion
    analogWrite()
    die auf den verschiedensten cores und boards läuft, vom simplen AVR (Uno, Nano, Micro, Mega) bis hin zu 32-bit ARM + ESP! (Zero, M0, MKR1000, Due, Teensy, esp8266, esp32) !!

    http://www.arduino-tutorial.de/analog-out/
    http://www.arduino-tutorial.de/befehle/
    https://www.arduino.cc/reference/en/...o/analogwrite/

    nur auf die Pins muss man achten, weil die Pin-Nummern für pwm-Pins von Board zu Board variieren können.
    Daher ist durchaus die Frage wichtig, welches Arduino-Board denn tatsächlich verwendet wird.

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von i_make_it
    Registriert seit
    29.07.2008
    Ort
    Raum DA
    Alter
    56
    Beiträge
    2.814
    Hier mal die PWM Pins für die folgenden 4 Boards:
    Nano: 3; 5; 6; 9; 10; 11
    Uno: 3; 5; 6; 9; 10; 11
    Due: 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13
    Mega 2560: 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13

    Und in diesem Post:
    https://www.roboternetz.de/community...l=1#post642754
    ein einfaches Demoprogramm, das mit analogWrite() immer maximal 2 von 4 PWM setzt.
    Die Randbedingungen gibt es weiter vorne im Thread und eine Demo bei der im Hauptprogramm feste Werte gesetzt werden gibt es in Post 35 des Thread.

    Eventuell ist das hilfreich.

  6. #6
    HaWe
    Gast
    Zitat Zitat von i_make_it Beitrag anzeigen
    Und in diesem Post:
    https://www.roboternetz.de/community...l=1#post642754
    ein einfaches Demoprogramm, das mit analogWrite() immer maximal 2 von 4 PWM setzt.
    Die Randbedingungen gibt es weiter vorne im Thread und eine Demo bei der im Hauptprogramm feste Werte gesetzt werden gibt es in Post 35 des Thread.

    Eventuell ist das hilfreich.
    Bevor man so etwas einem Arduino-Anfänger als Anleitung gibt, der noch nicht einmal von analogWrite gehört hat, müsste zumindest vorher geklärt werden, wie denn überhaupt der Motor mit welchen H-Brücken-Treibern genau angesteuert werden soll.
    Arduino-typisch für Standard-Setups (L293D u.a.) ist dein Code nämlich nicht, und schon gar nicht (didaktisch) "einfach", und auch für mich als Arduino- und RaspberryPi-User noch nicht einmal unbedingt intuitiv verständlich.

    Warten wir also vlt erst einmal ab, ob der OP das mit analogWrite verstanden hat, und dann mal sehen....

  7. #7
    Erfahrener Benutzer Robotik Einstein Avatar von i_make_it
    Registriert seit
    29.07.2008
    Ort
    Raum DA
    Alter
    56
    Beiträge
    2.814
    Zitat Zitat von HaWe Beitrag anzeigen
    und auch für mich als Arduino- und RaspberryPi-User noch nicht einmal unbedingt intuitiv verständlich.
    Da sollte man jetzt nicht einfach pauschal von sich auf andere schließen.
    Das hängt ja davon ab wie intuitiv das Verständniss von C++ und dem Zielsystem ist.
    Das ist so wie bei Muttersprache und Femdsprache.
    Was in der Muttersprache intuitiv geht, geht in einer Fremdsprache noch lange nicht, wenn man sie nicht entsprechend beherscht.
    Bei jedem gibt es irgenwas was er nicht versteht, was für andere aber ganz einfach ist.
    Zitat Zitat von i_make_it Beitrag anzeigen
    Die Randbedingungen gibt es weiter vorne im Thread
    In Post 26 z.B. auch die beiden Links:
    https://www.arduino.cc/en/Tutorial/PWM

    https://www.arduino.cc/reference/en/...o/analogwrite/
    mit denen man PWM und analogWrite() verstehen kann.

    Code:
    int IN1 = 9;
    int speed = 200;
    
    void setup()
    {
      pinMode(IN1, OUTPUT);
    }
    
    void loop()
    {
    PWMDrive(speed); //einmal pro Durchlauf der Hauptschleife kann man die Geschwindigkeit ändern, wenn man will und den Wert vonspeed in der Hauptschleife verändert
    
    //mach was ganz anderes
    }
    
    void PWMDrive(int speed){
      analogWrite(IN1, speed);
    }
    Das wäre jetzt ein minimalistisches Beispiel

  8. #8
    HaWe
    Gast
    Zitat Zitat von i_make_it Beitrag anzeigen
    Code:
    int IN1 = 9;
    int speed = 200;
    
    void setup()
    {
      pinMode(IN1, OUTPUT);
    }
    
    void loop()
    {
    PWMDrive(speed); //einmal pro Durchlauf der Hauptschleife kann man die Geschwindigkeit ändern, wenn man will und den Wert vonspeed in der Hauptschleife verändert
    
    //mach was ganz anderes
    }
    
    void PWMDrive(int speed){
      analogWrite(IN1, speed);
    }
    Das wäre jetzt ein minimalistisches Beispiel
    Über Arduino- und C/C++-Code kannst und brauchst du mir sicher nichts erzählen, aber das "minimalistische Beispiel" wird so auch nicht unbedingt funktionieren, denn mit analogWrite(pin, pwm) alleine kann man ja ohne weitere Hardware keinen Motor betreiben.
    Aber bevor ich hier mein (bewährtes) Beispiel poste oder verlinke - wie gesagt:
    Warten wir erst einmal ab, ob der OP das mit analogWrite verstanden hat, ob es ihm was nutzt, und welche Leistungsstufe oder H-Brücken mit welcher Logik er ggf verwendet, und dann mal sehen....

  9. #9
    Erfahrener Benutzer Begeisterter Techniker Avatar von Ferdinand
    Registriert seit
    10.09.2004
    Ort
    Stuttgart
    Alter
    44
    Beiträge
    230
    Danke für die rege Diskussion und Anregungen, ich verwende das UNO was im übrigen unerheblich ist da ich eigentlich nur wissen will od die Funktion analogWrite(); schon in einem Interrupt arbeitet oder od ma das ganze in eine Interrupt Funktion auslagern kann damit das Hauptprogramm nicht so belastet wird auch wen ich es nicht wirklich brauche ich finde es einfach sauberer, auch die Treiber Stufe ist erstmal unerheblich ich verwende eine L298N. Warum wollt ihr wissen was für ein Treiber ich benutze Danke für die Hilfe.
    habe schreiben erst heute gelernt.

    bin legasteniger.

    by Ferdinand.

  10. #10
    HaWe
    Gast
    Zitat Zitat von Ferdinand Beitrag anzeigen
    Danke für die rege Diskussion und Anregungen, ich verwende das UNO was im übrigen unerheblich ist da ich eigentlich nur wissen will od die Funktion analogWrite(); schon in einem Interrupt arbeitet oder od ma das ganze in eine Interrupt Funktion auslagern kann damit das Hauptprogramm nicht so belastet wird auch wen ich es nicht wirklich brauche ich finde es einfach sauberer, auch die Treiber Stufe ist erstmal unerheblich ich verwende eine L298N. Warum wollt ihr wissen was für ein Treiber ich benutze Danke für die Hilfe.
    es kann sein, dass die pwm-Signatur für versch. Treiberstufen bei Richtungsumkehr evtl. invertiert werden muss (war bei mir aber bisher nie ein Thema), beim L298N ist das aber jedenfalls nicht der Fall, da geht alles ganz easy, logisch und identisch für beide Laufrichtungen, und auch automatisch ohne weitere Interrupts.

    Wenn du dafür einen Arduino-Steuercode brauchst (3-pin-Logik für Richtung und Geschwindigkeit): sag Bescheid!

Seite 1 von 3 123 LetzteLetzte

Ähnliche Themen

  1. Interrupt
    Von amal im Forum C - Programmierung (GCC u.a.)
    Antworten: 13
    Letzter Beitrag: 22.07.2011, 23:38
  2. PVD-Interrupt
    Von kmrish im Forum ARM - 32-bit-Mikrocontroller-Architektur
    Antworten: 3
    Letzter Beitrag: 19.07.2011, 12:32
  3. For Next , Interrupt
    Von wodka im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 16.01.2009, 17:10
  4. Interrupt ADC
    Von Night_MaKu im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 15
    Letzter Beitrag: 27.04.2006, 18:05
  5. Interrupt waehrend Interrupt
    Von thomas05 im Forum PIC Controller
    Antworten: 7
    Letzter Beitrag: 08.11.2005, 07:13

Stichworte

Berechtigungen

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

12V Akku bauen