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!