← All projects
Embedded & Hardware

Feedforward-Assisted PI Speed Control for Geared DC Motors

Data-driven feedforward plus PI speed control, with automatic position holding, for small geared DC motors — a student research paper under review at the EIUSC International Conference 2026.

Role
Research mentor & co-author
Period
2026
Partners
EIU FabLab student team
Status
Under review (EIUSC 2026)
Motor ControlPI ControlFeedforwardSTM32Embedded
Control architecture and speed-tracking tests on the robot platform.
Control architecture and speed-tracking tests on the robot platform.

Overview

Small geared DC motors such as the N20 are cheap and common in student robots, but they are hard to control smoothly at low speed: friction and breakaway torque make the motor stall or jump, and the low-resolution encoders give noisy speed feedback. A plain PI loop either reacts too slowly or oscillates.

This student project studies a simple, practical fix: a data-driven feedforward term that supplies most of the PWM needed for a given speed — including the extra push to break away from rest — while a PI velocity loop only corrects the remaining error. A small state machine adds automatic position holding, so the wheel stays in place when no speed is commanded.

Paper (under review): “Data-Driven Feedforward-Assisted PI Speed Control with Automatic Position Holding for Geared DC Motors” — Hoang Anh Nguyen Trong, Thuy Dao Le Ngoc, Toan Pham Dang Huu, Uyen Vo Pham Mai, Duy Nhat Tran.

My role

I mentored the student team through the project and the writing of the paper, and I am a co-author. The experiments run on the FabLab’s STM32 self-balancing robot platform, the same robot used in our weekly workshop.

Control architecture

HOLD — position hold

With no speed command, a position loop keeps the wheel at the hold position: speed_ref = Kp,pos(θhold − θ), limited to ±hold_speed_max.

VELOCITY — run

When |ωcmd| exceeds a threshold, a motion profile ramps the speed reference up and down with limited acceleration.

STOPPING — decelerate

The profile brings the speed to zero; once the measured speed stays below a threshold for several samples, the hold position is updated and the motor returns to HOLD.

Feedforward

A static + breakaway PWM term, identified from measured data, gives most of the drive signal for the requested speed.

PI velocity loop

Corrects the remaining speed error; the total PWM is saturated to ±100% before the motor driver.

Feedback

Hall encoders on the motor shaft (7 PPR) give position and velocity; the control loop runs at 200 Hz on the STM32.

Hardware platform

Overview of the robot platform: mechanical design, sensing and actuation, electronics and firmware, technical specifications
Test platform: two N20 gear motors with Hall encoders, STM32L476 controller board, ESP32-C3 telemetry to a TCP dashboard.

Results

The controller was tested with step speed commands from 0.5 rad/s up to 5.0 rad/s (see the plots in the banner above and the demo video). Detailed results will be added here once the paper is published.

← All projects