In mijn zoektocht naar (kleine) modules om motoren aan te sturen (vooral voor de 12V motoren van de modeltreintjes) kwam ik een paar aardige (H-brug) kandidaten tegen: de TB6612FNG en de A4950. Beide zijn geschikt voor 12 Volt en om d.m.v. PWM aangestuurd te worden. De eerste is een module voor twee motoren en is ca. 20 x 20 mm groot. De tweede is alleen een 8 pins chip in sop (Small outline package) formaat (ca. 7 x 5 mm), geschikt voor het aansturen van één motor.
De TB6612FNG module

Eerst aangesloten op een Arduino UNO (links) en daarna op een ESP32 (rechts) en onderstaande sketch zonder tussentijdse aanpassingen geüpload. De ESP heeft ook een analoge A1 om de waarde van de potmeter in te lezen, een pin 3 en 4 voor de aansturing van de motor en een pin 5 voor de snelheid d.m.v. PWM. Beide schakelingen werken prima!
/*
TB6612FNG H-Bridge Demo
TB6612-Demo.ino
Demonstrates use of TB6612FNG H-Bridge Motor Controller
Drives a DC Motor
DroneBot Workshop 2019
https://dronebotworkshop.com
*/
// Motor A
int pwmA = 5;
int in1A = 3;
int in2A = 4;
// Speed control potentiometer
int SpeedControl1 = A0;
// Motor Speed Value - Start at zero
int MotorSpeed1 = 0;
void setup()
{
// Set all the motor control pins to outputs
pinMode(pwmA, OUTPUT);
pinMode(in1A, OUTPUT);
pinMode(in2A, OUTPUT);
Serial.begin(112500);
Serial.println("TB6612FNG_H-Bridge_Demo.ino");
}
void loop() {
// Set Motor A forward
digitalWrite(in1A, HIGH);
digitalWrite(in2A, LOW);
delay (1000);
// Set Motor A backward
digitalWrite(in1A, LOW);
digitalWrite(in2A, HIGH);
delay (1000);
// Read potentiometers and convert to range of 0-255
MotorSpeed1 = map(analogRead(SpeedControl1), 0, 1023, 0, 255);
// Set the motor speeds
analogWrite(pwmA, MotorSpeed1);
Serial.println(MotorSpeed1);
}
De A4950 chip
Om de A4950 te testen wacht ik nog op onderstaande adapterbordje. De chip heeft namelijk zoals gezegd een sop-8 SMD (surface mounted device) formaat en het adapter bordje zorgt ervoor dat het als een DIP-8 (Dual-in-line Package) chip in een breadboard te prikken is en dat maakt het testen een stuk eenvoudiger!



Er bestaat ook een module met twee A4950 chippies erop. Hieronder zie je het schema. De weerstand (R1 en R2) van 0.25 Ohm dient om … en is optioneel.


Motor Current Limit
There is a VREF pin, labeled VCC on the boards. That voltage must be 5V or lower. It determines the maximum current that the motors require. If the current demand goes higher, then the chip will switch off the H-bridge, protecting the motors and the chip itself.
The formula is: Imax = (VREF/10)/R where R is 0.25. This can be simplified to: Imax = VREF * 0.4. So, if VREF is set to 5V, then the maximum current is 2A. That’s the maximum value (VREF must not be set higher than 5V). If your motors only require 1A max, then VREF would be set to 2.5V.
Hier het artikel waar bovenstaande fragment vandaan komt.
De SOT-8 naar DIP-8 adapterbordjes zijn ca. 12 x 12 mm en hebben twee zijden. Aan de ene kant SOT met een pitch van 0,65mm aan de andere kant een pitch van 1,27mm. Op deze tweede zijde kunnen de A4950 chips gesoldeerd worden.
Hieronder de sketch om de driver chip aan te sturen d.m.v. een Arduino/ESP32.
// *************************************************
// ******** Test A4950 driver chip *************
// *************************************************
// Motor aansluitingen
const int motorA1 = 9;
const int motorA2 = 10;
int rijrichting = 1; // Rijrichting is 1 = vooruit
int snelheid = 128;
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println("A4950_motor_test.ino");
pinMode(motorA1, OUTPUT);
pinMode(motorA2, OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
for (int i = 80; i <= 120; i=i+1) {
Serial.println("Steeds sneller vooruit");
Serial.println(i);
analogWrite(motorA1, i);
analogWrite(motorA2, 0);
delay(100);
}
for (int t = 120; t >= 80; t=t-1) {
Serial.println("Steeds langzamer vooruit");
Serial.println(t);
analogWrite(motorA1, t);
analogWrite(motorA2, 0);
delay(100);
}
delay(2000);
for (int i = 80; i <= 120; i=i+1) {
Serial.println("Steeds sneller achteruit");
Serial.println(i);
analogWrite(motorA1, 0);
analogWrite(motorA2, i);
delay(100);
}
for (int t = 120; t >= 80; t=t-1) {
Serial.println("Steeds langzamer achteruit");
Serial.println(t);
analogWrite(motorA1, 0);
analogWrite(motorA2, t);
delay(100);
}
delay(2000);
}
Testen is goed gelukt. Beide chippies voldoen prima. En ze zijn makkelijk aan te sturen!






