DC Motor

How to drive a standard DC motor using PWM and an H-Bridge

Hello World

Import programMotor_HelloWorld

Hello World for a simple motor driver class, used to control an H-Bridge with PwmOut and 2 DigitalOuts


Import libraryMotordriver

motor drive libary to use speed control, coasting and dynamic braking. NOTE, dynamic braking my result in large currents. this may or may not set the motor driver on fire/break it/other undesired effects. so read the data sheet folks.



The speed function takes a value from 1 to -1. full forward to full reverse. however it will not switch from foward to reverse or reverse to forward without going through speed = 0, coast or stop. this stops the motor from going from full one direction to the other, and the large current draw associated with this. it returns the duty on the PWM line.

The coast function means the motor driver switches off, and does nothing.

The stop function dynamically brakes, which is supported on L298's but if dynamic braking develops more current than the motor drivers are rated for, things start to fail. read data sheet, and if in doubt, don't. it returns the duty on the PWM line, or -1 if you didn't set brakeable to 1.


// test code, this demonstrates working motor drivers. 
// full reverse to full stop, dynamicaly brake and switch off.
#include motordriver.h
Motor A(p22, p6, p5, 1); // pwm, fwd, rev, can brake 
Motor B(p21, p7, p8, 1); // pwm, fwd, rev, can brake
int main() {
    for (float s= -1.0; s < 1.0 ; s += 0.01) {

Connection diagram, note the current sense pins(1,15) should be connected to ground through a 0.5 Ohm resistor. attaching to analog inputs is not required.


You need to log in to post a discussion