Dual H-Brücke ansteuern funktioniert nicht

Hallo an alle,

nach langer Auszeit bin ich mal wieder hier.

Aktuell hänge ich bei einem merkwürdigen Problem und hoffe hier wieder geholfen zu bekommen.

Ich hab mir dieses Modul gekauft:
Link
Grund für den Kauf waren 28V Versorgungsspannung, die ich auch zum Teil benötige. Viele dual h-brücken funktionieren jedoch nur bis 12V.

Ich stutze meinen Code mal entsprechend runter damit man nur die Logik dahinter versteht.

Aktuell verwende ich ein wemos D1 mini (ESP8266) aber davor hat es mit einem UNO auch nicht funktioniert.
Der Code sieht so aus:

#define motor_1_PinA2 D6  // motor 01 pin 
#define motor_1_PinA1 D5 // motor 02 pin
#define motor_1_LogicHigh  1

void motor_1_forward()
{
    //turn motor forward
    digitalWrite(motor_1_PinA1, !motor_1_LogicHigh);
    digitalWrite(motor_1_PinA2, motor_1_LogicHigh);
}

void setup()
{
  pinMode(motor_1_PinA2, OUTPUT);
  pinMode(motor_1_PinA1, OUTPUT);
}

Das funktioniert auch - allerdings gibts hier nur vollgas oder nichts.

Das ist leider deutlich zu schnell.

Auf dem Dual H-Bridge Modul sind zwei A4950 (Datenblatt)) verbaut, die wohl auch PWM erlauben.

Wenn ich jetzt die Funktion so ändere, dass ich ein PWM-Signal ausgeben kann und die Frequenz des PWMs von Standart 1kHz auf 20kHz ändere wie hier:

#define motor_1_PinA2 D6  // motor 01 pin
#define motor_1_PinA1 D5 // motor 02 pin
#define motor_1_LogicHigh  1

void motor_1_forward(int PWM)
{
    //drive motor according to PWM speed
    analogWrite(motor_1_PinA1, PWM);
    digitalWrite(motor_1_PinA2, !motor_1_LogicHigh);
}
void setup()
{
  pinMode(motor_1_PinA2, OUTPUT);
  pinMode(motor_1_PinA1, OUTPUT);

  // set the PWM frequency to 20kHz for better efficiency of the dual H-bridge
  // by default its 1kHz which should be the least efficient
  analogWriteFreq(20000);
}

Und dann die Funktion motor_1_forward(int PWM) mit irgendwas zwischen 1-255 aufrufe, läuft der Motor dennoch mit voller Geschwindigkeit.

Vielleicht verstehe ich was hier grundsätzlich nicht, daher frage ich lieber mal nach.

Vielen Dank, liebe Grüße und allen Gesundheit!

Was hast Du nun?


Das Modul hat keine A4988.
Die A4988 können nicht für DC Motore verwendet werden. Sie sind spezifisch für Schrittmotore mit Stromsteuerung in Microschrittmodus.

Beide Sketche sind nicht kompilierbar weil ein Teil fehlt, genaugesagt die loop() Funktion.

Grüße Uwe

uwefed:
Das Modul hat keine A4988.

Wie kommst Du auf A4988? Die Rede war von A4950, und das ist eine reine H-Brücke zur Ansteuerung von DC-Motoren.

Und ja, wir brauchen schon den vollständigen Sketch. Oder zumindest einen lauffähigen, der das Problem zeigt. Außerdem solltest Du ein Schaltbild von deiner Verkabelung zeigen.

Edit: ich würde keine Module kaufen, wo die IC-Bezeichnung unkenntlich gemacht wurde. Aus welchem Grund wird sowas gemacht?

MicroBahner:
Wie kommst Du auf A4988? Die Rede war von A4950, und das ist eine reine H-Brücke zur Ansteuerung von DC-Motoren.

Unafufmerksam gelesen.
Grüße UWe

MicroBahner:
Und ja, wir brauchen schon den vollständigen Sketch. Oder zumindest einen lauffähigen, der das Problem zeigt. Außerdem solltest Du ein Schaltbild von deiner Verkabelung zeigen.

Edit: ich würde keine Module kaufen, wo die IC-Bezeichnung unkenntlich gemacht wurde. Aus welchem Grund wird sowas gemacht?

Keine Ahnung, warum so etwas gemacht wird. Sah ich ja erst, nachdem sie hier waren.
Dennoch gibt es in dem Bereich über 12V kaum bezahlbare Alternativen.

Ich verstehe auch nicht, warum hier immer nach einem vollständigen Sketch und einem Schaltbild gefragt wird.
Wie die entscheidenden pins "verkabelt" sind, steht im Beispiel.
Es ist sinnlos einen 3000 Zeilen Sketch zu posten, wenn es um einen kleinen Teilbereich geht.
Mein Problem kann man an meinen Beispiel-Codes erkennen, wenn man es liest und weiß wie die H-Brücke angesteuert werden will - und das war auch meine Frage.

Naja - läuft jetzt jedenfalls.

Leon333:
Ich verstehe auch nicht, warum hier immer nach einem vollständigen Sketch und einem Schaltbild gefragt wird.

Weil sich der Fehler erfahrungsgemäß gerne im unsichtbaren Teil befindet.

Leon333:
Wie die entscheidenden pins "verkabelt" sind, steht im Beispiel.

Das ist eine Behauptung, die mit der Realität übereinstimmen kann, aber nicht muß. Dies zu überprüfen ist Teil einer möglichen und nicht selten erfolgreichen Hilfe.

Leon333:
Es ist sinnlos einen 3000 Zeilen Sketch zu posten, wenn es um einen kleinen Teilbereich geht.

Da stimme ich Dir zu, ein kompilierbares Testprogramm - ich beginne immer damit, um die Hardware zu überprüfen - wäre genau richtig.

Leon333:
Naja - läuft jetzt jedenfalls.

Ein Forum lebt von Geben und Nehmen. Du konntest nichts nehmen, aber Du könntest Lesenden mit der gleichen Problematik Deine Lösung geben. Einfach so!

Sorry, ich war erst beschäftigt und hab es dann vergessen :wink:

Also es war lediglich eine Invertierung der Pegel im Gegensatz zu den H-Brücken, die ich sonst hatte.
Auch die Dokumentation, wenn man das so nennen will zu diesem Treiber war da falsch.

Ich hoffe mit meiner Auflösung dem ein oder anderen Exoten in Zukunft helfen zu können.

Liebe Grüße!

Hi

Leon333:
Also es war lediglich eine Invertierung der Pegel...

Genau deshalb habe ich in meinen Sketchen Variablen für AN und AUS.
const bool _AN=LOW;
const bool _AUF=!_AN;

So muß ich nur 1x was Ändern und der ganze Sketch läuft wieder mit dem verdreht arbeitendem Gerät.

MfG

Der Hinweis ist gut und ich mache das auch immer so
(siehe #define motor_1_LogicHigh 1)

Allerdings war bei mir die Schwierigkeit, dass die Infos dazu falsch waren.
Ich hab also alle Kombinationen durchgetestet :slight_smile:

Auf das die Info jemandem helfen möge :smiley:

Danke für die Auflösung
Uwe