Sieh dir mal die Breakouts für den TB6612FNG an. Die haben je einen expliziten PWM-Eingang pro H-Brücke und kosten aus China genauso unverschämt wenig.
Sieh dir mal die Breakouts für den TB6612FNG an. Die haben je einen expliziten PWM-Eingang pro H-Brücke und kosten aus China genauso unverschämt wenig.
Mit den selben Bildern wird das auch als L298N Modul angeboten.
https://www.banggood.com/de/5pcs-Dua...p-1167075.html
Demnach hat der Chip 2 En Eingänge. Die sind einfach fest auf High gelegt.
Mit dem L298N hat dieser Chip aber nichts zu tun, ist vielleicht nur ein Suchbegriff.
Ich vermute, dass hier der fernöstliche MX1508 oder so was ähnliches verbaut ist.
- - - Aktualisiert - - -
so in der Art mache ich das:
Code:void Motor1Forw(char velo){ Motor1_In1 = 0; Motor1_Pwm = velo; } void Motor1Backw(char velo){ Motor1_In1 = 1; Motor1_Pwm = 255 - velo; }
@Witzkatz: stimmte das Pinout von dem MX1508 passt zumindest auf das was man auf der Platine sieht.
@inka: Enable braucht man nicht unbedingt.
Bei größeren Motorreglern nimmt man das halt, um sicherzustellen das die Steuerung bereit ist bevor die Motoren bestromt werden.
Das verhindert, daß beim Einschalten die Motoren rucken weil unbestimmte Pegel irgendwo anliegen, die der Regler als Fahrbefehl versteht.
Pro Motor braucht es halt bei dem Teil je ein PWM für Clockwise und ein PWM für Counter Clockwise.
Ob man das Richtungssignal auf 1 legt und per Enable ein PWM ausgibt oder ob man das PWM direkt an den Richtungsausgängen ausgibt ist eine reine Software Sache.
So spart man halt pro Motor einen Pin (bei DIR-CW plus DIR-CCW).
Wenn man so eine Treiber mit einem DIR und einem PWM ansteuern will, braucht man zwei UND und ein NICHT Gatter.
PWM je auf IN1 der beiden UND's und DIR einmal auf IN2 des einen UND und einmal auf das NICHT und von da auf IN2 des zweiten UND.
Dann kann man die Ausgänge der Beiden UND's auf den Treiber legen.
Coden ist aber schneller und braucht keine Hardware.
Geändert von i_make_it (20.02.2018 um 15:26 Uhr)
so habe ich versucht das umzusetzen:
mit dem aufruf von "Motor_1_Backw(200);"Code:int Motor_1_Pwm; . . . void Motor_1_Backw(char velo) { digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); Motor_1_Pwm = 255 - velo; }
dreht der motor zwar, allerdings unabhängig von der zahl "velo", also immer voll power...
gruß inka
verstehe nicht was du meinst.
du hast 2 Pins pro Motor, einer ist für die Richtung, der andere für die PWM.
welcher wofür, weiß ich nicht, möglicherweise der erste für PWM, der 2. für die Richtung. Oder umgekehrt - frag ggf. beim Händler an.
PS,
und lass mal das seltsame
255 - velo
weg - das ist normalerweise Unsinn.
velo alleine ist die PWM, für beide Richtungen.
Vorschlag:
Code:void Motor_1_Forw(char velo) { analogWrite(IN1, velo); digitalWrite(IN2, HIGH); } void Motor_1_Backw(char velo) { analogWrite(IN1, velo); digitalWrite(IN2, LOW); }
Geändert von HaWe (21.02.2018 um 08:49 Uhr)
Du übergibst fest "200"?
Dann kann aber auch nur der Wert verarbeitet werden.
Schon mal Versucht einfach eine Geschwindigkeitsrampe zu erzeugen?
0 bis max. Rückwärts und zurück zu 0 und bis max. Vorwärts und zurück zu 0.
Bsp.:
Was macht er denn mit diesem Code?Code:int speed; void loop(){ for (int speed=0; speed <=255; speed++){ void Motor_1_Backw(speed); delay(10); } for (int speed=255; speed >=0; speed--){ void Motor_1_Backw(speed); delay(10); } for (int speed=0; speed <=255; speed++){ void Motor_1_Forw(speed); delay(10); } for (int speed=255; speed >=0; speed--){ void Motor_1_Forw(speed); delay(10); } } void Motor1Forw(char velo){ Motor1_In1 = 0; Motor1_Pwm = velo; } void Motor1Backw(char velo){ Motor1_In1 = 1; Motor1_Pwm = 255 - velo; }
Wenn es zu langsam ist die "delay" rauswerfen.
Lesezeichen