Kinder und Technik
Kinder und Technik - 3D Druck, Arduino, fischertechnik, LEGO, Elektronik
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
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 );
Der Beitrag China Post – Arduino Motortreiber L9110 erschien zuerst auf Kinder und Technik.