L9110S Dual H-Bridge DC & Stepper Motor Driver – Wiring, Arduino Code & Troubleshooting

AUSCOMTECH PRODUCT SUPPORT

L9110S Dual H-Bridge DC & Stepper Motor Driver – Wiring, Arduino Code & Troubleshooting

Model: L9110SSKU: 4-2-4-2

This L9110S dual H-bridge motor driver module uses two L9110S driver ICs to control two small brushed DC motors independently, or one 4-wire bipolar stepper motor.

This guide covers the module connections, external motor power, Arduino UNO wiring, direction and PWM speed control, a basic stepper example and common troubleshooting steps.

L9110S Module Overview

Driver ICs 2 × L9110S
Listed Module Supply 2.5–12V DC
Motor Outputs 2 × DC or 1 × Bipolar Stepper
Control 4 × Digital GPIO / PWM
Listed Current Up to 0.8A per motor channel
The module contains two separate H-bridges.

Inputs A-IA and A-IB control the OA1/OB1 motor output. Inputs B-IA and B-IB control the OA2/OB2 motor output. Reversing the input states reverses the voltage across the corresponding motor.

L9110S-labelled ICs are available from more than one semiconductor manufacturer.

The pictured AuscomTech module is specified as a 2.5–12V module, but electrical limits published for other L9110S-labelled ICs are not always identical. Do not assume that a different or replacement L9110S board has the same voltage and current ratings simply because the part number is similar. If the board or IC markings differ from this product, verify its specifications before applying power.

Motor Power & Current

The VCC connection powers the motor driver and supplies the energy used by the motors. There is no separate motor-power and logic-power input on this module.

Use a suitable motor power supply.

Do not assume the Arduino UNO 5V output can safely power the motor. Motor starting and stall current can be much higher than normal running current. For normal testing, connect a suitable external supply to VCC and GND, then connect the Arduino GND to the same GND.

  • Keep the supply voltage within both the module rating and the motor's rated voltage.
  • Check the motor stall current, not only its no-load or normal running current.
  • The stated 0.8A figure should be treated as an upper driver rating rather than a preferred continuous operating point. Allow practical thermal margin.
  • The small PCB and driver ICs can become hot when operating near their current limit.
  • The voltage reaching the motor will be somewhat lower than VCC under load because of losses in the H-bridge.
  • The onboard power LED indicates that supply voltage is present; it does not confirm that the supply voltage or motor current is safe.
Common ground is required.

When the Arduino is powered by USB and the motor driver uses a separate supply, connect the external supply negative, module GND and Arduino GND together. Do not connect an external motor-supply positive terminal to the Arduino 5V pin unless both are intentionally the same regulated 5V rail.

Module Connections

The supplied board uses the following control labels. Some listings omit the hyphen and show AIA, AIB, BIA and BIB instead.

Board Label Alternative Label Function
A-IBA1-B / AIBMotor A control input B
A-IAA1-A / AIAMotor A control input A
VCC+Motor-driver supply input
GND–Supply and logic ground
B-IBB1-B / BIBMotor B control input B
B-IAB1-A / BIAMotor B control input A
OA1 / OB1Motor AFirst DC motor, or first stepper winding
OA2 / OB2Motor BSecond DC motor, or second stepper winding

On the pictured board, with the screw terminals towards you and the 6-pin header along the opposite edge, the header is labelled A-IB, A-IA, VCC, GND, B-IB and B-IA. Always check the silkscreen on the actual module before wiring it.

Arduino UNO Wiring – Two DC Motors

L9110S Module Arduino / Supply Function
A-IAD5Motor A direction / PWM
A-IBD6Motor A direction / PWM
B-IAD9Motor B direction / PWM
B-IBD10Motor B direction / PWM
GNDArduino GNDCommon logic ground
VCCExternal supply +Motor and driver power
GNDExternal supply –Motor supply return
OA1 / OB1Motor AFirst motor
OA2 / OB2Motor BSecond motor
Why use D5, D6, D9 and D10?

All four are PWM-capable pins on the Arduino UNO. This allows either input of each H-bridge to be PWM-controlled for speed adjustment in either direction.

Direction, Stop & PWM Logic

Each motor channel has two logic inputs. The A channel uses A-IA and A-IB, while the B channel works the same way using B-IA and B-IB.

IA IB Motor Result
HIGHLOWRuns in one direction
LOWHIGHRuns in the opposite direction
LOWLOWNo forward/reverse drive; motor stops
HIGHHIGHNo forward/reverse drive; motor stops
Forward and reverse are relative.

Which state represents physical “forward” depends on how the motor is mounted and which motor wire is connected to each output terminal. Swap the two motor wires if you want to reverse the physical direction without changing the program.

Do not depend on a specific coast-versus-brake behaviour from the equal-input states.

L9110S implementations from different manufacturers do not all document these states identically. Both equal-input states stop active forward/reverse drive, but the exact output condition can differ. The examples below use both inputs LOW when stopping without relying on a particular braking characteristic.

For PWM speed control, keep one input LOW and apply PWM to the other. Reverse direction by moving the PWM signal to the opposite input.

Arduino Test – Two DC Motors

No additional Arduino library is required for this example. Connect the module as shown above, use an appropriate external motor supply and check the wiring before applying power.

Arduino UNO – L9110S Dual DC Motor Test
const int A_IA = 5;
const int A_IB = 6;
const int B_IA = 9;
const int B_IB = 10;

void setMotorA(int speedValue) {
  speedValue = constrain(speedValue, -255, 255);

  // Stop both inputs before changing direction.
  digitalWrite(A_IA, LOW);
  digitalWrite(A_IB, LOW);

  if (speedValue > 0) {
    analogWrite(A_IA, speedValue);
  } else if (speedValue < 0) {
    analogWrite(A_IB, -speedValue);
  }
}

void setMotorB(int speedValue) {
  speedValue = constrain(speedValue, -255, 255);

  // Stop both inputs before changing direction.
  digitalWrite(B_IA, LOW);
  digitalWrite(B_IB, LOW);

  if (speedValue > 0) {
    analogWrite(B_IA, speedValue);
  } else if (speedValue < 0) {
    analogWrite(B_IB, -speedValue);
  }
}

void stopMotors() {
  digitalWrite(A_IA, LOW);
  digitalWrite(A_IB, LOW);
  digitalWrite(B_IA, LOW);
  digitalWrite(B_IB, LOW);
}

void setup() {
  pinMode(A_IA, OUTPUT);
  pinMode(A_IB, OUTPUT);
  pinMode(B_IA, OUTPUT);
  pinMode(B_IB, OUTPUT);

  stopMotors();
}

void loop() {
  // About 70% PWM duty cycle.
  setMotorA(180);
  setMotorB(180);
  delay(2000);

  stopMotors();
  delay(1000);

  // Reverse both motors.
  setMotorA(-180);
  setMotorB(-180);
  delay(2000);

  stopMotors();
  delay(2000);
}

Expected Result

Both motors should run for two seconds, stop for one second, then run in the opposite direction for two seconds before stopping again. The sequence then repeats.

If a motor does not start at a PWM value of 180, temporarily test with 255. Small DC motors often need a higher duty cycle to overcome starting friction than they need once already moving.

Using a 4-Wire Bipolar Stepper Motor

The two H-bridges can also drive the two windings of a small 4-wire bipolar stepper motor. Use a multimeter to identify the two separate winding pairs before connecting the motor.

Stepper Connection L9110S Module
Winding 1, wire AOA1
Winding 1, wire BOB1
Winding 2, wire AOA2
Winding 2, wire BOB2
This is not a current-regulating stepper driver.

The L9110S directly applies the motor supply through the H-bridge. Use a small bipolar stepper whose winding current is suitable for the module at the chosen supply voltage. Do not treat this board as a substitute for a current-limited chopper driver used with low-resistance NEMA-style stepper motors.

A 5-wire unipolar stepper such as an unmodified 28BYJ-48 is not a direct match for this 4-wire bipolar connection.

Arduino Stepper Library

The example below uses the official Arduino Stepper library. It is normally available with the Arduino IDE. If the compiler reports that Stepper.h cannot be found, open Library Manager and install Stepper by Arduino.

Set STEPS_PER_REV to the full-step count specified for your actual motor before using the RPM value as a meaningful shaft speed.

Arduino UNO – L9110S Bipolar Stepper Test
#include <Stepper.h>

const int A_IA = 5;
const int A_IB = 6;
const int B_IA = 9;
const int B_IB = 10;

// Change this to match your motor.
const int STEPS_PER_REV = 200;

Stepper motor(
  STEPS_PER_REV,
  A_IA,
  A_IB,
  B_IA,
  B_IB
);

void releaseMotor() {
  // Remove drive from the windings between movements.
  digitalWrite(A_IA, LOW);
  digitalWrite(A_IB, LOW);
  digitalWrite(B_IA, LOW);
  digitalWrite(B_IB, LOW);
}

void setup() {
  motor.setSpeed(10);
}

void loop() {
  motor.step(STEPS_PER_REV);
  releaseMotor();
  delay(1000);

  motor.step(-STEPS_PER_REV);
  releaseMotor();
  delay(1000);
}

Expected Result

The stepper should move one configured revolution in one direction, pause, then move the same number of steps in the opposite direction. If the motor only vibrates or locks without rotating, check that each output pair is connected to one complete winding rather than mixing wires from the two windings.

Release the windings when holding torque is not required.

A stepper can draw winding current continuously while energised. The example sets all four control inputs LOW after each movement to reduce unnecessary heating during the pause.

Troubleshooting

Power LED does not light

  • Measure the voltage directly between module VCC and GND.
  • Check supply polarity before reconnecting power.
  • Confirm the supply is switched on and capable of providing the required current.
  • Do not continue testing if the module becomes hot immediately after power is applied.

Motor does not move

  • Confirm the motor supply is present at VCC and GND.
  • Confirm Arduino GND and module GND are connected together.
  • Check that the motor is connected across one complete output pair: OA1/OB1 or OA2/OB2.
  • Verify the corresponding IA and IB pins are connected to the Arduino pins used in the sketch.
  • For initial testing, try a PWM value of 255 to rule out insufficient starting duty cycle.

Motor only runs in one direction

  • Check both control wires for that motor channel.
  • Confirm both Arduino pins are configured as outputs.
  • Test the two direction states manually: IA HIGH / IB LOW, then IA LOW / IB HIGH.
  • If one control input never changes voltage, inspect the jumper wire and Arduino pin assignment.

Arduino resets when a motor starts

  • Use a separate, adequately rated motor supply rather than drawing motor current through the Arduino regulator.
  • Make sure the separate supply and Arduino still share a common ground.
  • Keep motor-current wiring short and reasonably heavy.
  • Add suitable local bulk decoupling at the motor-driver supply if supply dips or wiring inductance are causing resets.
  • Check the motor stall current; an undersized supply may collapse when the motor starts.

L9110S chips become very hot

  • Disconnect power and check for a stalled motor or shorted output wiring.
  • Measure or verify the motor stall current.
  • Reduce the mechanical load or use a motor requiring less current.
  • Do not use the maximum current figure as a target for continuous operation on the small breakout board.
  • If the application requires sustained higher current, use a motor driver with a suitable continuous-current and thermal rating.

Stepper motor only buzzes or vibrates

  • Use a multimeter to identify the two winding pairs.
  • Connect one complete winding to OA1/OB1 and the other complete winding to OA2/OB2.
  • Reduce the commanded RPM during initial testing.
  • Confirm the motor is a suitable bipolar stepper and that its winding current is within the driver's capability.
  • If rotation is reversed, reverse one winding pair or reverse the commanded step direction.
⚠️ Important

L9110S-labelled motor-driver ICs are produced by multiple manufacturers and published electrical limits are not identical across all versions. The 2.5–12V and 0.8A figures in this guide relate to the supplied module specification and should not be assumed for unrelated look-alike boards. Always verify motor voltage, stall or winding current, supply polarity and the markings on the actual module before applying power.

Still need help?Contact AuscomTech Support and include the product or model shown above.
Contact Support →