Zitat von
inka
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 von
inka
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);
}
Lesezeichen