-         

Ergebnis 1 bis 8 von 8

Thema: Motor - Geschwindigkeitssteuerung funktioniert nicht

  1. #1

    Motor - Geschwindigkeitssteuerung funktioniert nicht

    Anzeige

    Hallo zusammen,

    Ich probiere verzweifelt bei einem DC-Motor die Geschwindigkeit zu steuern.
    Ich habe einen Arduino und den L293D. Die Drehrichtung steuern ist kein Problem.
    Heute hab ich mal den Wert eines Potentiometers ausgelesen und bin mit dem Wert auf den Enable-Eingang vom IC. Ab einem PWM Wert von ca. 80 fängt der Motor an zu drehen. Auch wenn ich jetzt höher gehe ändert sich die Drehzahl nicht.
    Kann mir vielleich jemand sagen an was es liegen kann? Vielleicht habe ich auch einfach einen Denkfehler gemacht.


    Mfg Relaxed
    Geändert von Relaxed (12.04.2011 um 20:47 Uhr)

  2. #2
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.183
    Kannst du mit einem Oszi kontrollieren ob sich das PWM-Verhältnis auch entsprechend ändert.
    Wenn der Motor unbelastet ist, kann es auch sein das er auch bei einem geringerem PWM-Verhältnis die der Spannung entsprechende max. Drehzahl erreicht.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  3. #3
    Zitat Zitat von Hubert.G Beitrag anzeigen
    Kannst du mit einem Oszi kontrollieren ob sich das PWM-Verhältnis auch entsprechend ändert.
    Wenn der Motor unbelastet ist, kann es auch sein das er auch bei einem geringerem PWM-Verhältnis die der Spannung entsprechende max. Drehzahl erreicht.

    Hm leider besitze ich kein Oszilloskop... Ich denke aber, dass die PWM-Ausgabe in Ordnung ist. Ich habe hier einen 5V und einen 24V Motor. Bei beiden besteht das gleiche Problem ob unbelastet oder belastet. Die Spannung am Motor-Terminal Ausgang bleibt auch immer konstant.

    Welche Alternativen gäbe es noch um die Spannung mit PWM-Werten zu steuern? Dass ich zum Beispiel beim PWM-Wert 0, 0V habe und bei einem Wert von 255 24V.

    Danke für die Hilfe.


    Gruss Relaxed

  4. #4
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.183
    Die einfachste Art zu testen ob der PWM Ausgang vom µC funktioniert ist eine LED mit Vorwiderstand dran hängen. Die Helligkeit der LED ist zwar nicht propotional der PWM, aber man kann die Änderung erkennen.
    Das was du willst sollte sich schon mit PWM machen lassen, allerdings kenne ich weder Hardware noch Software von dir.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  5. #5
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    7.551
    Zitat Zitat von Relaxed
    ... denke aber, dass die PWM-Ausgabe in Ordnung ... 5V und einen 24V Motor. Bei beiden besteht das gleiche Problem ...
    Das klingt ja eher so, als sei die PWM eben nicht in Ordnung. Keine Ahnung wie Du den L293 am arduino angeschlossen hast. Aber ich habe hier (m)einen Schaltplan und dazu gibts auch den Code für die Ansteuerung von zwei Motoren. Im Schaltplan ist eine funktionierende Anbindung des L293D, der Controller ist ein m328 (mitunter ein m168er), im Code die dazugehörige Software. Möglicherweise hilft es Dir, wenn Du diesen Code mit Deinem vergleichst. . . . .

    Code:
    /* >> 
     . . . . . 
     ===================================================================================
      Target MCU        : siehe main
      Target Hardware   : MiniD0
      Target cpu-frequ. : In der Quelle wählbar
     ===================================================================================
            Enthaltene Routinen:        Alle Motorroutinen
    . . .
      void TC0PWM_init(void) //Init Timer/Counter0 für Erzeugung des PWM-Signals
      void setPWMrechts(uint8_t speed)        //Geschwindigkeit rechter Motor
      void setPWMlinks(uint8_t speed)         //Geschwindigkeit linker Motor
      void Mrechtsvor(void) //Motor dreht im mathematischer Drehsinn
      void Mrechtszur(void) //Motor 1,2 dreht im Uhrzeigersinn
      void Mrechtsstop(void) //Motor  aus
      void Mlinksvor(void) //Motor dreht im mathematischer Drehsinn
      void Mlinkszur(void) //Motor 3,4 dreht im Uhrzeigersinn
      void Mlinksstop(void) //Motor  aus 
     ===================================================================================
      *** Versionsgeschichte:
     ====================
     x32 11Okt10 1730 In ~tst~/RC5t_17: Bitanalyse "just in time" - LÄUFT gut
            Ausgabe nur als dezimale Darstellung von Adress- und Befehlsbyte
     x00 01Nov09 1910 Übernahme des Originals, aus dem Directory 
     . . .
     ===================================================================================
      *** Aufgabenstellung : Software für R3D01    
      Original:        . . . .
     ===================================================================================
     
     ================================================================================ */
     
    // =================================================================================
    // =================================================================================
     void TC0PWM_init(void) //Init Timer/Counter0 für Erzeugung des PWM-Signals
     {
       TCCR0A |= (1<<COM0A1)|(1<<COM0B1);   //Clear/set OC0A/OC0B on Compare Match,
                                            //    doc S102 , OC0A/OC0B ist Port PD6/D5
       TCCR0A |= (1<<WGM01)|(1<<WGM00);     // Fast PWM, TOP=0xFF=dez255,     doc S104
                    //  das ergibt aus 20 MHz mit Prescaler 1/64  1220 Hz
       TCCR0B |= (1<<CS01)|(1<<CS00);       // Prescaler ist clk/64           doc S106
       TIMSK0 &= ~(1<<OCIE0A)|(1<<OCIE0B); // Tmr/Cntr0 Oput CompB Match intrrpt dsabld
       TIMSK0 &= ~(1<<TOIE0);  // Tmr/Cntr0 Overflow interrupt disabled
       OCR0A     = 0;                       // PWM auf Null setzen
       OCR0B     = 0;                       // PWM auf Null setzen
    }            
    // =================================================================================
    void setPWMrechts(uint8_t speed)        //Geschwindigkeit Motor 12 (rechter)
    {OCR0B = speed;}                        //  PWM auf PD5/OC0B, korrig. 24mrz09
    // =================================================================================
    void setPWMlinks(uint8_t speed)         //Geschwindigkeit Motor 34 (linker)
    {OCR0A = speed;}                        //  PWM auf PD6/OC0A, korrig. 24mrz09
    // =================================================================================
     
    // =================================================================================
    // Motoransteuerung mit dem L293D, hier werden die Drehrichtungen gesetzt 
    //   Anschlüsse M168 für R3D01 für die Motoransteuerung (Stand 24mrz09 1410) :
    //   Motor 12 ist in Fahrtrichtung rechts (Kennzeichen 1 Punkt)
    //   Motor 34 ist in Fahrtrichtung links  (Kennzeichen 2 Punkte)
    /*                                 
      (E7)  _|-- 1,2 Guz, PD4___6   23___PC0, SFH 5110, IN irDME 1-2    
                          . . . . . . . . . . . .
                   XTAL1  PB6___9   20___VCC
                   XTAL2  PB7  10   19   PB5, SCK                           
      (E6) PWM 1,2 uz+Guz,PD5  11   18   PB4, MISO,  _|-- 1,2  uz, Taster1  
      (E5) PWM 3,4 uz+Guz,PD6__12   17___PB3, MOSI, Reserve 2               
      (E8)   _|-- 3,4  uz,PD7  13   16   PB2                                
      (E9)   _|-- 3,4 Guz,PB0  14   15   PB1                                          */
    //                -----------------------
    //  Drehrichtungsbefehle für Motor 1,2 = "rechter" Motor
     void M12pos (void)             // Mot12 dreht im Uhrzeigersinn = neg. math.
     { PORTB  |=  (1<<PB4);  PORTD  &= ~(1<<PD4);  mdir12 = 1; }
    //             r r r r r r r Motor 1,2 = rechter Motor r r r r r r
     void M12neg (void)             // Mot12 dreht im mathematisch positiven Drehsinn
     { PORTB  &= ~(1<<PB4);  PORTD  |=  (1<<PD4);  mdir12 = -1; }
    //             r r r r r r r Motor 1,2 = rechter Motor r r r r r r
     void M12stp (void)             // Motor 12 aus
     { PORTB  &= ~(1<<PB4);  PORTD  &= ~(1<<PD4); }
    //                -----------------------
    //  Drehrichtungsbefehle für Motor 3,4 = "linker" Motor
     void M34neg (void)             // Mot3,4 dreht im Uhrzeigersinn = neg. math.
     { PORTB  |=  (1<<PB0);  PORTD  &= ~(1<<PD7);  mdir34 = 1; }
    //             l l l l l l l Motor 3,4 = linker Motor l l l l l l
     void M34pos (void)             // Mot3,4 dreht im mathematisch positiven Drehsinn
     { PORTB  &= ~(1<<PB0);  PORTD  |=  (1<<PD7);  mdir34 = -1; }
    //             l l l l l l l Motor 3,4 = linker Motor l l l l l l
     void M34stp (void)             //  Motor 12 aus
     { PORTB  &= ~(1<<PB0);  PORTD  &= ~(1<<PD7); }
    //
    // - - - - - - - Übersetzungstabelle für "alten" Code
      void Mrechtsvor (void)        
      {  M12pos ();  return; }                    
      void Mrechtszur (void)        
      {  M12neg ();  return; }                    
      void Mrechtsstop (void)       
      {  M12stp ();  return; }                    
      void Mlinksvor (void)         
      {  M34neg ();  return; }                    
      void Mlinkszur (void)
      {  M34pos ();  return; }                    
      void Mlinksstop (void)
      {  M34stp ();  return; }                    
    // =================================================================================
     
    // =================================================================================
    // =====  ENDE    Subroutinen  =====================================================
    // =================================================================================
    Immerhin: dieser Antrieb in meine beiden autonomen Dosen R2D03 und R3D01/MiniD0 läuft und läuft und läu...
    Ciao sagt der JoeamBerg

  6. #6
    Ich hab das Problem gefunden! Ich habe den Enable-Eingang an einen Ausgang ohne PWM-Unterstützung angeschlossen...peinlich.
    Jetzt funktioniert alles wie es soll.

    Vielen Dank an euch!


    Mfg Relaxed

    PS: @oberallgeier: Danke für den Code und den Schlatplan.

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.01.2006
    Beiträge
    4.556
    Zitat Zitat von Relaxed Beitrag anzeigen
    Hallo zusammen,

    Ich probiere verzweifelt bei einem DC-Motor die Geschwindigkeit zu steuern.
    Ich habe einen Arduino und den L293D. Die Drehrichtung steuern ist kein Problem.
    Heute hab ich mal den Wert eines Potentiometers ausgelesen und bin mit dem Wert auf den Enable-Eingang vom IC. Ab einem PWM Wert von ca. 80 fängt der Motor an zu drehen. Auch wenn ich jetzt höher gehe ändert sich die Drehzahl nicht.
    Kann mir vielleich jemand sagen an was es liegen kann? Vielleicht habe ich auch einfach einen Denkfehler gemacht.


    Mfg Relaxed
    Kannst Du das etwas näher beschreiben? Du liest über ADC das Poti aus und legst den Gemessenen Wert auf den Enable Eingang des Treibers? Das wird so nicht gehen. Der Poti Wert gehört in ein OCRA oder OCRB Register und der Pin OCRA Oder OCRB gehört an den Enable Eingang. PWM Muss natürlich eingeschaltet sein. Oder hast Du es so gemacht und nur etwas ungenau beschrieben?

    Gruß Richard

  8. #8
    Zitat Zitat von Richard Beitrag anzeigen
    Kannst Du das etwas näher beschreiben? Du liest über ADC das Poti aus und legst den Gemessenen Wert auf den Enable Eingang des Treibers? Das wird so nicht gehen. Der Poti Wert gehört in ein OCRA oder OCRB Register und der Pin OCRA Oder OCRB gehört an den Enable Eingang. PWM Muss natürlich eingeschaltet sein. Oder hast Du es so gemacht und nur etwas ungenau beschrieben?

    Gruß Richard

    Ich hab den Wert des Potis ausgelesen und dann mit dem PWM Spektrum gemappt. Der Code war richtig, nur hab ich einen "falschen" Pin vom Arduino benützt welcher keine PWM unterstützt.

    Es war auch nur ein Vorprojekt und zu schauen ob die Geschwindigkeitssteuerung funktioniert. Ich baue an einem autonomen Fahrzeug. Jedoch hab ich jetzt ein Ultraschallsensor dran welcher ab 100cm die Geschwindigkeit drosselt und die Motoren immer längsämer werden lässt je näher er einem Hinderniss zufährt.

    Hier noch der Arduino Code:
    Code:
    #include "Ultrasonic.h"
    
    
    
    int analogOutPin = 9; 
    int digitalPin = 7;
    int trig = 12;
    int echo = 13;
    int var = 0;
    int outputValue = 0; 
    
    Ultrasonic ultrasonic(12,13);
    
    
    void setup() {
    
      Serial.begin(9600); 
      
      
      pinMode(digitalPin, OUTPUT);
      pinMode(analogOutPin, OUTPUT);
      pinMode(trig, OUTPUT);
      pinMode(echo, INPUT);
      
    }
    
    
    void loop() {
      
      digitalWrite(7, HIGH);
     
      (var) = (ultrasonic.Ranging(CM));
      
    if ((var) > 100){
      
      analogWrite(analogOutPin, 255);           
    }
    
    else {
            
      outputValue = map(var, 0, 100, 0, 255);  
      analogWrite(analogOutPin, outputValue);           
    }
    Serial.println(outputValue);
     
      delay(10);                     
    }

    Mfg Relaxed

Ähnliche Themen

  1. RP6 Motor funktioniert nicht
    Von ComFreek im Forum Motoren
    Antworten: 2
    Letzter Beitrag: 16.09.2010, 18:28
  2. Nibobee: Motor funktioniert nicht
    Von GoZu im Forum Sonstige Roboter- und artverwandte Modelle
    Antworten: 11
    Letzter Beitrag: 27.01.2010, 14:22
  3. RN-Motor funktioniert nicht mehr!
    Von sitt im Forum Bauanleitungen, Schaltungen & Software nach RoboterNetz-Standard
    Antworten: 3
    Letzter Beitrag: 07.11.2005, 23:15
  4. RN - Motor funktioniert nicht
    Von Neonx im Forum Bauanleitungen, Schaltungen & Software nach RoboterNetz-Standard
    Antworten: 7
    Letzter Beitrag: 24.08.2005, 20:43
  5. PWM Motor Richtungswechsel funktioniert nicht
    Von Chris266 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 15.03.2005, 12:39

Berechtigungen

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