China Post – Arduino Motortreiber L9110

L9110 Motor Driver
L9110 Motor Driver

Arduino L9110 Motorsteuerung für 2 Motoren

Dieses kleine Modul verfügt über zwei unabhängige HG7881 (L9110S) Motor-Treiber-Chips, die jeweils 800mA Dauerstrom liefern können. Logik und Spannungsversorgung der Motoren können von 2,5 V bis 12 V betrieben werden, so dass dieses Modul mit 3,3V und 5V Mikrocontrollern verwendet werden kann.
Ein PWM Pulsweitenmodulationssignal wird verwendet, um die Drehzahl eines Motors zu steuern und ein digitaler Ausgang wird verwendet, um seine Richtung zu ändern. Dieses Modul kann 2 Gleichstrommotoren oder einen zwei Phasen-Schrittmotor antreiben. Die Ausgänge verfügen über Integrierte Schutzdioden. Einen Temperatur-/ Überlastungsschutz gibt es wohl nicht. Bei einem 1A Steppermotor fingen die Treiber-IC an zu rauchen. Erstaunlicherweise haben sie dies überstanden. Die maximale Chiptemperatur ist mit 80 Grad angegeben.

Betrieb Gleichstrommotoren am Arduino
Motor an Klemme A bzw. B.
Eingang IA steuert per PWM vom Arduino die Drehzahl. Für IB reicht ein einfacher Digital Pin für die Drehrichtung.

Betrieb Stepper am Arduino

Arduino L9110 Stepper Modul
Arduino L9110 Stepper Modul

4 Digitalpins. Die zwei Wicklungen an den A bzw. B-Ausgang. Polung beachten bzw. ausprobieren. Der L9110 Treiber kommt mit der Arduino Stepper Bibliothek gut zurecht. Der Funktionsumfang ist allerdings bescheiden.

Für den Treiber auf jeden Fall eine externe Versorgungsspannung verwenden.
Mangels Kühlung kommen die Treiber bei größeren Motoren schnell an ihre Grenzen.

Bei eBay wird das Modul ab 2€ gehandelt.

Motor Control Interface
Pin Description
B-IA Motor B Input A (IA)
B-IB Motor B Input B (IB)
GND Ground
VCC Operating Voltage 2.5-12V
A-IA Motor A Input A (IA)
A-IB Motor A Input B (IB)


IA IB Motor State
Low Low Off
High Low Forward
Low High Reverse
High High Off

Fazit:
Billig, klein und einfach zu verwenden. Für Modellbau-Gleichstrommotoren (fischertechnik & Co) und kleinere Schrittmotoren ideal.

/* Adafruit Arduino - Lesson 16. Stepper */

#include <Stepper.h>

int in1Pin = 10;
int in2Pin = 11;
int in3Pin = 12;
int in4Pin = 13;

Stepper motor(512, in1Pin, in2Pin, in3Pin, in4Pin);  

void setup()
{
  pinMode(in1Pin, OUTPUT);
  pinMode(in2Pin, OUTPUT);
  pinMode(in3Pin, OUTPUT);
  pinMode(in4Pin, OUTPUT);

  // this line is for Leonardo's, it delays the serial interface
  // until the terminal window is opened
  while (!Serial);
  
  Serial.begin(9600);
  motor.setSpeed(20);
}

void loop()
{
  if (Serial.available())
  {
    int steps = Serial.parseInt();
    motor.step(steps);
  }
}
/*
 HG7881_Motor_Driver_Example - Arduino sketch
  
 Arduino digital output D10 to motor driver input B-IA.
 Arduino digital output D11 to motor driver input B-IB.
 Motor driver VCC to operating voltage 5V.
 Motor driver GND to common ground.
 Motor driver MOTOR B screw terminals to a small motor.
*/
 
// wired connections
#define HG7881_B_IA 10 // D10 --> Motor B Input A --> MOTOR B +
#define HG7881_B_IB 11 // D11 --> Motor B Input B --> MOTOR B -
 
// functional connections
#define MOTOR_B_PWM HG7881_B_IA // Motor B PWM Speed
#define MOTOR_B_DIR HG7881_B_IB // Motor B Direction
 
// the actual values for "fast" and "slow" depend on the motor
#define PWM_SLOW 50 // arbitrary slow speed PWM duty cycle
#define PWM_FAST 200 // arbitrary fast speed PWM duty cycle
#define DIR_DELAY 1000 // brief delay for abrupt motor changes
 
void setup()
{
 Serial.begin( 9600 );
 pinMode( MOTOR_B_DIR, OUTPUT );
 pinMode( MOTOR_B_PWM, OUTPUT );
 digitalWrite( MOTOR_B_DIR, LOW );
 digitalWrite( MOTOR_B_PWM, LOW );
}
 
void loop()
{
 boolean isValidInput;
 // draw a menu on the serial port
 Serial.println( "-----------------------------" );
 Serial.println( "MENU:" );
 Serial.println( "1) Fast forward" );
 Serial.println( "2) Forward" );
 Serial.println( "3) Soft stop (coast)" );
 Serial.println( "4) Reverse" );
 Serial.println( "5) Fast reverse" );
 Serial.println( "6) Hard stop (brake)" );
 Serial.println( "-----------------------------" );
 do
 {
 byte c;
 // get the next character from the serial port
 Serial.print( "?" );
 while( !Serial.available() )
 ; // LOOP...
 c = Serial.read();
 // execute the menu option based on the character recieved
 switch( c )
 {
 case '1': // 1) Fast forward
 Serial.println( "Fast forward..." );
 // always stop motors briefly before abrupt changes
 digitalWrite( MOTOR_B_DIR, LOW );
 digitalWrite( MOTOR_B_PWM, LOW );
 delay( DIR_DELAY );
 // set the motor speed and direction
 digitalWrite( MOTOR_B_DIR, HIGH ); // direction = forward
 analogWrite( MOTOR_B_PWM, 255-PWM_FAST ); // PWM speed = fast
 isValidInput = true;
 break; 
 
 case '2': // 2) Forward 
 Serial.println( "Forward..." );
 // always stop motors briefly before abrupt changes
 digitalWrite( MOTOR_B_DIR, LOW );
 digitalWrite( MOTOR_B_PWM, LOW );
 delay( DIR_DELAY );
 // set the motor speed and direction
 digitalWrite( MOTOR_B_DIR, HIGH ); // direction = forward
 analogWrite( MOTOR_B_PWM, 255-PWM_SLOW ); // PWM speed = slow
 isValidInput = true;
 break; 
 
 case '3': // 3) Soft stop (preferred)
 Serial.println( "Soft stop (coast)..." );
 digitalWrite( MOTOR_B_DIR, LOW );
 digitalWrite( MOTOR_B_PWM, LOW );
 isValidInput = true;
 break; 
 
 case '4': // 4) Reverse
 Serial.println( "Fast forward..." );
 // always stop motors briefly before abrupt changes
 digitalWrite( MOTOR_B_DIR, LOW );
 digitalWrite( MOTOR_B_PWM, LOW );
 delay( DIR_DELAY );
 // set the motor speed and direction
 digitalWrite( MOTOR_B_DIR, LOW ); // direction = reverse
 analogWrite( MOTOR_B_PWM, PWM_SLOW ); // PWM speed = slow
 isValidInput = true;
 break; 
 
 case '5': // 5) Fast reverse
 Serial.println( "Fast forward..." );
 // always stop motors briefly before abrupt changes
 digitalWrite( MOTOR_B_DIR, LOW );
 digitalWrite( MOTOR_B_PWM, LOW );
 delay( DIR_DELAY );
 // set the motor speed and direction
 digitalWrite( MOTOR_B_DIR, LOW ); // direction = reverse 
 analogWrite( MOTOR_B_PWM, PWM_FAST ); // PWM speed = fast
 isValidInput = true;
 break;
 
 case '6': // 6) Hard stop (use with caution)
 Serial.println( "Hard stop (brake)..." );
 digitalWrite( MOTOR_B_DIR, HIGH );
 digitalWrite( MOTOR_B_PWM, HIGH );
 isValidInput = true;
 break; 
 
 default:
 // wrong character! display the menu again!
 isValidInput = false;
 break;
 }
 } while( isValidInput == true );

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.