Описание
H Bridge драйвер шагового двигателя на L9110S
Драйвер двигателя может работать в двух режимах:
- в режиме А – управление направлением вращения каждого двигателя по отдельности,
- в режиме В – Управление скорость вращения двигателей с помощью ШИМ
Особенности драйвера двигателя
Простота в использовании и 4-контактное подключение.
- Управление 2 электродвигателями постоянного тока одновременно или одним 4-проводным 2-х фазным шаговым двигателем.
- Напряжение питания двигателей от 2.5 до 12V.
- Потребление тока: до 800 мА на каждом канале.
- Компактные размеры (Д х Ш х В): 30 х 24 х 15 мм.
- Небольшой вес: всего 6 г.
Таблица подключения входных контактов драйвера к плате arduino
Контакт | Описание |
B-IA | Двигатель B Вход A (IA) |
B-IB | Двигатель B Вход B (IB) |
GND | Земля (-) |
VCC | Рабочее напряжение 2.5-12V (+) |
A-IA | Двигатель A Вход A (IA) |
A-IB | Двигатель A Вход B (IB) |
Таблица состояний подключенного двигателя
Вход IA | Вход IB | Состояние двигателя |
L | L | Остановлен |
H | L | Движение вперед |
L | H | Движение назад |
H | H | Отключен |
Подключение двухканального драйвера двигателя HG7881 к ардуино
- Arduino цифровой выход D8 — контакт драйвера двигателя B-IA.
- Arduino цифровой выход D9 — контакт драйвера двигателя B-IB.
- Arduino цифровой выход D10 — контакт драйвера двигателя B-IA.
- Arduino цифровой выход D11 — контакт драйвера двигателя B-IB.
- Напряжение питания 2.5-12V (+) — контакт драйвера двигателя VCC
- Arduino контакт GND и земля (-) — контакт драйвера двигателя GND
После проверки правильности подключения загружаем скетч в плату ардуино
Пример скетча
/*
HG7881_Motor_Driver_Example – Arduino sketch
This example shows how to drive a motor with using HG7881 (L9110) Dual
Channel Motor Driver Module. For simplicity, this example shows how to
drive a single motor. Both channels work the same way.
This example is meant to illustrate how to operate the motor driver
and is not intended to be elegant, efficient or useful.
Connections:
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 100 // 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 );
// repeat the main loop and redraw the menu…
}
Отзывы
Отзывов пока нет.