- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 10 von 41

Thema: Alles PWM oder wie?

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #32
    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 inka Beitrag anzeigen
    bei gleicher hardware:
    Deine demoversion geht, die von mir korrigierte (ohne FOR schleife) nur bei eingestecktem USB kabel
    Ich vermute mal, das der Anlaufstrom der Motoren die Spannung einbrechen lässt.
    Mit USB hast Du ein halbes Ampere mehr.
    Beim Rampe mit den For Schleifen, wird die Drehzahl ja in diskreten Schritten erhöht, was den Motorstrom zeitlich entzerrt.
    Bei einem direkten Sprung von 0 auf 255 ziehen die Motoren halt Maximalstrom.
    Da kann man mal Stützkondensatoren in der Stromversorgung des Motorreglers versuchen oder halt mehrere Fahrstufen.

    Zitat Zitat von inka Beitrag anzeigen
    Man spürt nur am auf dem motor aufgelegtem finger, dass der motor alle halbe sekunde kurz tickt...
    Das deutet allerdings eher auf den Effekt durch EIN (1) delay(500) hin.

    Zum Testen, kannst Du mal diesen Code in void setup() einfügen
    Code:
      pinMode(LED_BUILTIN, OUTPUT);
      digitalWrite(LED_BUILTIN, HIGH);
      delay(800);
      digitalWrite(LED_BUILTIN, LOW); 
      delay(200);
      digitalWrite(LED_BUILTIN, HIGH);
      delay(500);
      digitalWrite(LED_BUILTIN, LOW); 
      delay(200);
      digitalWrite(LED_BUILTIN, HIGH);
      delay(300);
      digitalWrite(LED_BUILTIN, LOW);
    Das sollte ein Count Down Blinken der Build in LED verursachen, einmalig wenn der µC startet.
    Sollte die LED nach dem Rucken der Motoren wieder den Count Down blinken, dann bricht die Spanung ein und der µC geht durch den "brown out" in Reset.

    Zweite Maßnahme ist den Motoren statt 255 erst mal 10 als wert fürs PWM zu geben.

    Der folgene Code führt den Count Down Blink durch, rampt dann Vorwärts bis 250 hoch, stoppt und geht dann von 0 auf 255 in Rückwärts.
    Das sollte ggf. schon zeigen an welcher Stelle es hängt.

    Code:
    // PWM Pins Due: 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13
    
    int IN1 = 8;//9
    int IN2 = 9;//8
    int IN3 = 10;//7
    int IN4 = 11;//6
    int speedl1;
    int speedl2;
    int speedr1;
    int speedr2;
    
    void setup()
    {
      pinMode(IN1, OUTPUT);
      pinMode(IN2, OUTPUT);
      pinMode(IN3, OUTPUT);
      pinMode(IN4, OUTPUT);
    
      pinMode(LED_BUILTIN, OUTPUT);
      digitalWrite(LED_BUILTIN, HIGH);
      delay(800);
      digitalWrite(LED_BUILTIN, LOW); 
      delay(200);
      digitalWrite(LED_BUILTIN, HIGH);
      delay(500);
      digitalWrite(LED_BUILTIN, LOW); 
      delay(200);
      digitalWrite(LED_BUILTIN, HIGH);
      delay(300);
      digitalWrite(LED_BUILTIN, LOW); 
    }
    
    
    void loop()
    {
      speedl1 = 20;
      speedl2 = 0;
      speedr1 = 20;
      speedr2 = 0;
      PWMDrive(speedl1, speedl2, speedr1, speedr2);
      delay(50);
      speedl1 = 40;
      speedl2 = 0;
      speedr1 = 40;
      speedr2 = 0;
      PWMDrive(speedl1, speedl2, speedr1, speedr2);
      delay(50);
      speedl1 = 80;
      speedl2 = 0;
      speedr1 = 80;
      speedr2 = 0;
      PWMDrive(speedl1, speedl2, speedr1, speedr2);
      delay(50);
      speedl1 = 120;
      speedl2 = 0;
      speedr1 = 120;
      speedr2 = 0;
      PWMDrive(speedl1, speedl2, speedr1, speedr2);
      delay(50);
      speedl1 = 160;
      speedl2 = 0;
      speedr1 = 160;
      speedr2 = 0;
      PWMDrive(speedl1, speedl2, speedr1, speedr2);
      delay(50);
      speedl1 = 200;
      speedl2 = 0;
      speedr1 = 200;
      speedr2 = 0;
      PWMDrive(speedl1, speedl2, speedr1, speedr2);
      delay(50);
      speedl1 = 250;
      speedl2 = 0;
      speedr1 = 250;
      speedr2 = 0;
      PWMDrive(speedl1, speedl2, speedr1, speedr2);
      delay(50);
      speedl1 = 0;
      speedl2 = 0;
      speedr1 = 0;
      speedr2 = 0;
      PWMDrive(speedl1, speedl2, speedr1, speedr2);
      delay(50);
      speedl1 = 0;
      speedl2 = 255;
      speedr1 = 0;
      speedr2 = 255;
      PWMDrive(speedl1, speedl2, speedr1, speedr2);
      delay(350);
    }
    
    void PWMDrive(int speedl1, int speedl2, int speedr1, int speedr2)
    {
      analogWrite(IN1, speedl1);
      analogWrite(IN2, speedl2);
      analogWrite(IN3, speedr1);
      analogWrite(IN4, speedr2);
    }
    Geändert von i_make_it (04.03.2018 um 07:05 Uhr)

Ähnliche Themen

  1. 2 Atmegas verwenden oder doch alles in einem
    Von moritz31 im Forum Elektronik
    Antworten: 11
    Letzter Beitrag: 12.03.2014, 17:02
  2. Alles Matrix, oder?
    Von Roboternetz-News im Forum Neuigkeiten / Technik-News / Nachrichten / Aktuelles
    Antworten: 1
    Letzter Beitrag: 21.12.2012, 21:30
  3. Real Time Clock oder Uhrenquarz? Alles möglichst stromarm
    Von MelMan im Forum AVR Hardwarethemen
    Antworten: 6
    Letzter Beitrag: 08.06.2011, 17:01
  4. Was brauche ich alles
    Von Haveaniceday im Forum AVR Hardwarethemen
    Antworten: 17
    Letzter Beitrag: 02.08.2007, 12:07
  5. Ist in dem BAusatz alles drin, oder braucht man noch was ???
    Von michiE im Forum Bauanleitungen, Schaltungen & Software nach RoboterNetz-Standard
    Antworten: 3
    Letzter Beitrag: 07.03.2005, 16:10

Berechtigungen

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

12V Akku bauen