ich habe da mal eine kleine Frage an die Spezialisten hier.....
Vermutlich denke ich auch nur verkehrt.
Also, Ziel ist es, mittels eines Potis, einen Motor vorwärts und rückwärts laufen zu lassen.
Poti 0-300 dreht der Motor 0-100 rückwärts
Poti 310 - 1023 dreht der Motor 0-255 vorwärts
Quasi ein Gsapedal.
const int potigas = A0; // Gas-Poti an Analog 0
const int motor1vor = 6; // Ausgang Motor 1 Vorwärts
const int motor1ruck = 5; // Ausgang Motor 1 Rückwärts
int sensor = 0;
int pwm5 = 0;
int pwm6 = 0;
void setup() {
Serial.begin(9600);
}
void loop() {
sensor = analogRead(potigas);
pwm5 = map(sensor, 0, 300, 0, 100);
analogWrite(motor1ruck, pwm5);
pwm6 = map(sensor, 310, 1023, 0, 255);
analogWrite(motor1vor, pwm6);
Serial.print("Poti = ");
Serial.print(sensor);
Serial.print(" PWM 5 = ");
Serial.println(pwm5);
Serial.print(" PWM 6 = ");
Serial.println(pwm6);
delay(50);
}
Vielleicht könnt ihr mir helfen den Denkfehler zu finden ?
Ich hatte angenommen, daß z.b. an Pin 6 NIX ankommt, solange der Poti im Bereich 0-309 ist.
Stattdessen liefert mir auch die serielle Ausgabe am PC MINUS-Werte.
Poti 0-300 dreht der Motor 0-100 rückwärts
Poti 310 - 1023 dreht der Motor 0-255 vorwärts
Bist Du sicher daß es so funktionieren soll? Wenn der Poty von 300 auf 320 wechselt steuerst Du den Motor von 100 Rückwerts zu 2 vorwärts also mehr als einen Vollbremsung. Du solltest Dir überlegen wie das funktionieren soll. Wennschon einen Nullstellug in der Mitte bei 300 und 300 bis 0 ein PWM von 0 bis 100 rückwerts und von 310 bis 1023 von 0 bis 255 vorwärts.
Wenn Du einen Eingang der H-Brücke PMW-Ansteuerst und den anderen auf HIGH legst dann mußt Du den anderen Eingang auch ansteuern. Besser als beide Eingänge auf HIGH zu legen( HIGH und PWM), wodurch der Motor kurzgeschlossen wird, ist die PWM Steuerung über den Enable Eingang zu regeln und die Drehrichtung über die beiden Eingänge.
uwefed:
Wenn Du einen Eingang der H-Brücke PMW-Ansteuerst und den anderen auf HIGH legst dann mußt Du den anderen Eingang auch ansteuern. Besser als beide Eingänge auf HIGH zu legen( HIGH und PWM), wodurch der Motor kurzgeschlossen wird, ist die PWM Steuerung über den Enable Eingang zu regeln und die Drehrichtung über die beiden Eingänge.
Grüße Uwe
Danke Uwe,
DAS war die Lösung !
und mit diesem Thema habe ich mich sogar etwas in die bisher vernachlässigte IF-THEN-Thematik eingearbeitet.
Programm sieht nun so aus:
const int potigas = A0; // Gas-Poti an Analog 0
const int motor1vor = 4; // Ausgang Motor 1 Vorwärts
const int motor1ruck = 2; // Ausgang Motor 1 Rückwärts
const int drehzahl = 3; // Drehzahl für Motor
int sensor = 0;
int drehvor = 0;
int drehruck = 0;
void setup() {
Serial.begin(9600);
}
void loop() {
sensor = analogRead(potigas);
if (sensor > 350)
{
digitalWrite(motor1vor, HIGH);
digitalWrite(motor1ruck, LOW);
drehvor = map(sensor, 350, 1023, 0, 255);
analogWrite(drehzahl, drehvor);
Serial.print("Poti = ");
Serial.print(sensor);
Serial.print(" ");
Serial.print("Vorwärts");
Serial.print(" ");
Serial.print("Drehzahl = ");
Serial.println(drehvor);
}
else if (sensor < 300)
{
digitalWrite(motor1vor, LOW);
digitalWrite(motor1ruck, HIGH);
drehruck = map(sensor, 0, 300, 100, 0);
analogWrite(drehzahl, drehruck);
Serial.print("Poti = ");
Serial.print(sensor);
Serial.print(" ");
Serial.print("Rückwärts");
Serial.print(" ");
Serial.print("Drehzahl = ");
Serial.println(drehruck);
}
else
{
digitalWrite(motor1vor, LOW);
digitalWrite(motor1ruck, LOW);
Serial.print("Poti = ");
Serial.print(sensor);
Serial.print(" ");
Serial.println("STOP");
}
delay(10);
}
Die Ports 2 und 4 gehen beim L293 an die Input-Pins 10 und 15.
Die Drehzahl Port 3 geht beim L293 an den Enable-Pin 9
So funktioniert, was ich haben wollte.... VIELEN DANK !!
Eine kurze Frage noch.....
wie sage ich z.B.
if (sensor = ZWISCHEN 300 UND 350) bzw (sensor >300 UND <350) ??
bist Du jetzt auf Uwe´s Vorschlag eingegangen und verwenest einen PWM Ausgang für die Geschwindigkeit und zwei digitale Augänge ( vor/ zurück) für die Richtung.
Damit könntest Du einen feste Offset als Mittelstellung verwenden, z.B Deine 300. Denn ziehst Du vom eingelesen Analogwert ab. Damit bekommst Du einmal einen Positiven Wert und einmal einen negativen Wert. (-300 bis 700) Die Info benutzt Du zur Ansteuerung der Ausgänge vorwärts rückwärts. Dann bildes Du den Betrag des Sollwerten und mäppst Ihn nach Belieben für Vorwärts und Rückwärts und gibst Ihn auf den PWM Ausgang.
Ich hab das jetzt nicht probiert , ich würde aber den Ansatz jetzt mal versuchen.