PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Defekter Treiber?



Toran
08.08.2018, 08:07
Guten Tag Zusammen,
vor einigen Monaten habe ich angefangen einen Roboter zu basteln, der mit einer Kamera einen Ball erkennt, sich auf den Ball zu bewegt und dann schießt, wenn er ein Tor sieht. Das ganze hat auch bis zu meinem zweiten Prototypen ganz gut geklappt. Als ich die ganze Sensorik dann in das richtige Modell eingebaut habe, hat mein Motortreiber angefangen zu spinnen. Es ist ein L298N. Immer wenn ich ein Programm auf meinen Arduino Mega lade, ganz egal welches, fängt sich das rechte Rad an sich zu drehen. Der Quellcode kann auch ein "Hello World", oder sogar leer sein. Habt ihr vielleicht eine Ahnung, was das Problem sein könnte?
Gruß,
Thomas

Ceos
08.08.2018, 08:24
es besteht gut und gern die Möglichkeit dass die Pins zum Motortreiber sich mit irgend welchen Debug Pins oder Kommunikationspins während des Programmierens überlappen ... das kann auch den Treiber grillen

Toran
08.08.2018, 08:51
Und das durchgehende Signal an meinem Ausgang ist ein übliches Resultat einer solchen Überlappung?

HaWe
08.08.2018, 08:55
Und das durchgehende Signal an meinem Ausgang ist ein übliches Resultat einer solchen Überlappung?

steuerst du deinen L298N mit 2- oder mit 3-pin-Logik an?

Toran
08.08.2018, 09:06
Tut mir leid, leider sagen mir diese Begriffe nichts. Mit den Inputs 1-4 fahre ich an meine digitalen Pins vom Arduino und mit meinen Outputs an die DC Motoren. Immer jeweils zwei Outputs für einen Motor für die verschiedenen Drehrichtungen. Falls das wichtig sein sollte - Das sind die Motoren, die ich verwende: https://www.conrad.de/de/getriebemotor-com-motor01-gelb-schwarz-1573543.html
Gruß,
Thomas

HaWe
08.08.2018, 09:17
das klingt nach 2-Pin-Steuerlogik, 1 für Richtung und 1 für pwm.
Das führt sehr häufig zu diesen beschriebenen Problemen, auch bei mir.

Verwende lieber 3-Pin-Steuerlogik, die ist störungssicherer (L298 funktioniert logisch wie L293):

http://www.arduino-tutorial.de/motorsteuerung-mit-einem-h-bridge-ic/

Die Pin-Namen gehen im Web oft sehr durcheinander.
IC-Spannungsquelle Vss(Vcc)=5V
Leistungsspannungsquelle Vs(Vc)=z.B. 9-12V
MotorA: Inputs 1+2=direction, enable1=pwm, outputs 1+2
MotorB: Inputs 3+4=direction, enable2=pwm, outputs 3+4

verfügbare PWM Pins Arduino:
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

Steuerlogik:


in1(3) in2(4) en1(2)==pwm Funktion
================================================== ========
LOW LOW LOW coast
LOW HIGH pwm rechts pwm
HIGH LOW pwm links pwm
HIGH HIGH pwm brake pwm

Toran
08.08.2018, 09:27
Okay vielen Dank, ich werde das mal so probieren. Der L298N ist aber hinüber und muss ersetzt werden, nehme ich an? Oder ist das reparabel?

HaWe
08.08.2018, 09:41
das kann ich ohne meine Kristallkugel nicht entscheiden, und die ist grade zur Inspektion... ;)
Vermutlich kann der L298 aber nach wie vor in Ordnung sein, nur reparieren ist eher schlecht möglich.

Ceos
08.08.2018, 10:55
du meintest das ding spinnt nur während des programmierens, wie schon erwähnt zappelt eines der beinchen deines controllers während er programmiert wird, ich vermute das jetzt mal nur aber bei der 3-pin steuerung wird es wohl eine enable leitung sein oder irgendeine kombination die verhindert dass der treiber unkontrolliert anfährt


wenn er nur während des programmierens spinnt KANN das schäden verursachen, muss aber nicht! Hast du nicth irgend ein kleines Testprogramm dass den Motor einfach nur langsam drehen lässt um den treiber zu testen?!

das rumspinnen ist nur ein ergebnis von nciht treiber gerechten eingangssignalen weil dein bootloader zum firmware aufspielen keinen plan hat was da für hardware dran hängt :)

Toran
08.08.2018, 12:51
Ich habe das jetzt mal auf die 3-Pin Logik geändert. Ich kann zwar mit dem pwm-Signal die Stärke einstellen, aber das Rad kann sich nur in eine Richtung drehen, ganz egal, wie ich die Drehrichtung einstellen.


int motorForwardA=9;
int motorBackwardA=8;
int pmwMotorA=7;
int motorForwardB=10;
int motorBackwardB=11;
int pmwMotorB=6;

void setup() {
//setting up all the pins as input or output
Serial.begin(9600);
pinMode(motorForwardA,OUTPUT);
pinMode(motorBackwardA,OUTPUT);
pinMode(motorForwardB,OUTPUT);
pinMode(motorBackwardB,OUTPUT);
pinMode(pmwMotorA,OUTPUT);
pinMode(pmwMotorB,OUTPUT);
}



void loop() {
// put your main code here, to run repeatedly:

digitalWrite(motorForwardA,HIGH);
digitalWrite(motorBackwardA,LOW);
analogWrite(pmwMotorA,150);
delay(1000);

digitalWrite(motorForwardB,HIGH);
digitalWrite(motorBackwardB,LOW);
analogWrite(pmwMotorB,150);
delay(1000);
}

HaWe
08.08.2018, 17:18
ich sehe da aber keine Stelle, wo du die dir-Pins umschaltest für die andere Drehrichtung


LOW HIGH pwm rechts rum pwm
HIGH LOW pwm links rum pwm

Toran
15.08.2018, 10:38
Das habe ich jetzt angepasst, aber dennoch habe ich das Problem, dass sich bei manchen Bewegungen nicht beide Räder drehen...Vor allem bei Bewegungen, wo sich die Räder in verschiedene Richtungen drehen bleibt das linke Rad einfach stehen.