** NEW ** STM3 Twin Brushless Motor ESC (Electronic Speed Controller)

Last Updated August 2020 - ** New ** User Instructions - Jon Freeman


Using the latest British designed 'ARM Cortex' technology, this board is designed to drive two Brushless (BLDC) Motors in the power range tiny to kilowatt!

STM3_ESC - Electronic Speed Controller - Features

Rugged Proven Design - 100% reliable through two years and nearly 200 miles of public passenger hauling duty at Ashton Court and Vivary Park


The 'Brushless Brute' locomotive runs on two bogies each of which has two powered axles. One STM3 ESC controller board is fitted to each bogie providing total high efficiency power, current, voltage and speed control - full four quadrant control, bidirectional with Regenerative Braking.

See a video of four STM3 ESC boards driving a selection of motors, rated from 100 to 1900 Watt (looks best at 'Full Screen')

'Brushless Brute' locomotive uses two bogies, each has two brushless motors, powered and controlled by one STM3 ESC module, all four loco axles under fully controlled power. See a short vid of loco in action

Join us for a whole lap around the beautiful track at Bristol Ashton Court


STM3 Twin ESC board - top

How It Works

An ARM Cortex controller is at the heart of the design. This accepts commands from any of the multiple inputs, and using advanced PWM (Pulse Width Modulation) techniques, provides independent control of voltage applied to, and peak current drawn by, each motor. A 'Regenerative Braking' mode enables conversion of mechanical power returning it to the system electrical power supply. This gives full four quadrant control : - Motoring and braking in both forward and reverse.

Massively rated 100V 120A MOSFET modules provide rugged and overload-protected outputs.


STM3 Twin ESC board - bottom

(That's it for the simple description. If you are interested in this board and you are experienced in electronics and engineering, the technical info below should give you all you need to build your own. If not, I have agreed to build a few for club members although I've plenty of other things to be doing, so contact me if you wish.)


Using Radio Control

A Radio Control receiver may be connected to the STM3_ESC. Using one or two channels, two motors can be controlled in tandem or independently. A Radiolink R8EF receiver was used during test and development but any similar should work. The receiver is powered by the STM3_ESC. External batteries or power sources ** Must Not ** be used, connection is made between receiver and ESC using one or two three conductor leads only, and no batteries.

See 'User Settings' below to find out how to setup the STM3_ESC for use with radio control.



Technical Stuff for Engineers

Everything you need to build your own STM3_ESC is here.

Two schematic sheets 1 -2

Zip of PCB Gerber files, right click and 'save as' here

Software developed and compiled using ARM Mbed free online toolchain. Published 29th September 2019 - Updated 18th August 2020, Import your own copy from https://os.mbed.com/users/JonFreeman/code/Brushless_STM3_ESC_2019_10/

Firmware binary file 29 Sept 2019 here

Latest Aug 2020 binary here

BOM (prices unlikely to be accurate) here

To follow - some useful data sheets

And that's your lot !


** New Aug 2020 ** Setting Up and Using the STM3_ESC Dual Brushless Motor Controller

Control from PC

Essential for tweaking User Settings, and useful during bench testing, the STM3_ESC can communicate with a PC, laptop etc using a USB to serial adapter. Type CP2104 from hobbytronics is one such. With the computer running 'PuTTY' or other terminal programme, commands typed into the terminal are sent to the ESC which responds accordingly. The current list of recognised commands is shown below. For example, typing a ? question mark character, followed by a press of 'Enter' (or Return) instructs the ESC to output the list below.

'pot' invokes a response "Driver's Pot x.xxx" where x.xxx reflects 'normalised' knob setting from 0.000 to 1.000

'fw' and 're' set motor directions, forward or reverse. Nothing prevents a change of direction while motors are running. That this is possible does not make it wise! Advice - stop motor before changing direction.

Some commands require numeric values e.g. 'v 50' or 'v50' sets motor voltage to 50% of max available, 'i 20' or 'i20' sets motor current limit to 20% of max. 'vi22 60' sets volts to 22% and current limit to 60%.

Some commands have '?' as the first character, these are, in general, requests to report voltage, current, speed, rpm or other measured parameters. Not all 'request' type commands use '?', e.g. 'rpm'.

'ssl 15.8' sets speed limit to 15.8 MPH, but beware of pitfalls here. Motor speed RPM is accurately measured, there will be no issues with rpm, but MPH is calculated from rpm with three other values set under 'us' User Settings, the "Wheel diameter mm", "Motor pinion", and "Wheel gear". Motor pinion and Wheel gear express reduction ratio between motor and wheel whether coupled using gears, belts or whatever. IT IS QUITE EASY TO SET STUPID VALUES TO THESE WHICH COULD PLAY HAVOK WITH YOUR SANITY as you wonder why the top motor speed is only in the tens of revs per minute!

You probably wouldn't read a handbook even if I wrote one. These are the commands, play and learn for yourself. It's the only way. Except for the most important function [us], the User Settings, which warrant a section of their own. Read on...

"WARNING - sema cnt 44" - ignore this.

 Dual BLDC ESC type STM3 2018-20, Ver 1.0.y2020.m05.d21
 At menucmd function - listing commands, source PC:-
 [ls]            Lists available commands
 [?]             Lists available commands, same as ls
 [pot]           read drivers control pot
 [fw]            forward
 [re]            reverse
 [rb]            regen brake 0 to 99 %
 [hb]            hand brake
 [v]             set motors V percent RANGE 0 to 100
 [i]             set motors I percent RANGE 0 to 100
 [vi]            set motors V and I percent RANGE 0 to 100
 [?v]            Report system bus voltage
 [?i]            Report motor both currents
 [?w]            show WatchDog timer contents
 [kd]            kick the dog, reloads WatchDog
 [who]           search for connected units, e.g. 3who returs 'who3' if found
 [us]            read or set user settings in eeprom
 [ssl]           set speed limit e.g. 10.7
 [sbe]           set brake effectiveness 5 to 90 percent
 [ver]           Version
 [rpm]           read motor pair speeds
 [mph]           read loco speed miles per hour
 [?s]            read loco speed miles per hour
 [?rc]           report RC1 and RC2 input condition and activity
 [nu]            do nothing
 End of List of Commands
 WARNING - sema cnt 44


User Settings

In response to entering the 'us' command with no numeric parameter, the STM3_ESC outputs a list similar to : -

 us - User Settings data in EEPROM
 Syntax 'us' with no parameters lists current state.
 No Changes
 us 11   MotorA direction [0 or 1] = 1, MotorB direction [0 or 1] = 0
 us 12   MotorA poles 4 or 6 or 8 = 8, MotorB poles 4 or 6 or 8 = 8
 us 13   Numof motor current shunt resistors [1 to 4], MotorA = 2, MotorB = 2
 us 14   Brake Effectiveness percentage [min 5, max 91] = 90
 us 15   POT_REGBRAKE_RANGE percentage 10 to 50[10 to 50] = 20
 us 16   Servo1 [0 or 1] = 0 Disabled, Servo2 [0 or 1] = 0 Disabled
 us 17   RCIn1 [0 disable, 1 Uni_dir, 2 Bi_dir] = 2, Bi_directional
         RCIn2 [0 disable, 1 Uni_dir, 2 Bi_dir] = 2, Bi_directional
 us 18   RCIN1 direction swap 0 normal, 1 reverse RCIN1 = 0, NORMAL
 us 19   RCIN2 direction swap 0 normal, 1 reverse RCIN2 = 0, NORMAL
 us 21   RCIn1 two's comp trim, [-128 to +127] = -3
 us 22   RCIn2 two's comp trim, [-128 to +127] = 3
 us 23   RCIn Regen braking uses this pcntage of movement range, [10 to 50] = 20
 us 24   RCIn Stick move Attack rate, [10 to 90] = 50
 us 25   Board ID ['0' to '9'] = '9'
 us 26   Top speed MPH, range 1.0 to 25.0 = 19.7
 us 27   Wheel diameter mm = 98, Motor pinion = 27, Wheel gear = 85
 us 28   Command Src [4] - 2=COM2 (Touch Screen), 3=Pot, 4=RC In1, 5=RC In2, 6=RC1+2
 us 29   Nominal system voltage, used to calculate current scaling = 24
 us 30   Baud rate, [1=9k6, 2=19k2, 3=38k4, 4=78k6, 5=115k2] =  1
 us 83   Set to defaults
 WARNING - sema cnt 50

"us11 0 0" sets both motor directions the same, as does "us11 1 1" setting both to the opposite direction. Thus motor directions can be independently set as required.

"us12 8 8" is used to indicate a pair of 8 pole motors are in use. Most motors seen are 8 pole, except the Nanotec which are 6. Only affects RPM and speed measurement.

"us13 n m" must be set to report the number of current sense resistors fitted to the board. These carry the ident 'R050' and are situated near the motor power connectors. This must be set correctly for proper operation.

"us15 xx" The anti-clockwise end of the driver's pot puts the STM3_ESC into Regenerative Braking, the fierceness of which is settable using "us14 xx". us 15 sets the percentage of pot travel in the braking region. Only applies when driving using a driver's pot.

"us 16" The STM3_ESC has two servo outputs, currently unused.

"us 17 n m" For Radio Control, us17 is used to disable or enable radio control inputs, and when enabled, allows specification of uni or bi directional action.

"us25 n" sets Board Identity to a single digit. This is important in systems using multiple STM3_ESC boards which should each have locally unique Board IDs.

"us 28 n" The STM3_ESC can be setup to be operated in a number of ways, curiously numbered 2 to 6.

us28 2 locks out radio control and locks out the driver's pot input. Commands are accepted via opto isolated serial link from a higher level controller, for example the TS2018 Touch Screen controller fitted to the "Brushless Brutalist" loco. This is the preferred control method when using multiple STM3_ESC boards.

us28 3 enables the 'Driver's pot' analogue input. Potential problems with common mode groud imbalance mean this is not reccommended for use with multiple STM3_ESCs.

us28 with codes 4, 5 and 6 are all about Radio Control. For multiple STM_ESC applications a separate RC Rx is used for each STM3_ESC, this avoids potential common mode ground issues. Codes 4 and 5 select which RC input is used to control both motors. Code 6 gives independent control of motors through use of two channels. Please note the STM3_ESC will always respond to commands received from a PC via USB/Serial, and to commands seen on the opto isolated serial input.

STM3_ESC Source Code is published on 'mbed' at https://os.mbed.com/users/JonFreeman/code/Brushless_STM3_ESC_2019_10/

Binary executable for download (August 2020) here.


For Sale - STM3_ESC Controllers

Boards are produced in small batches so contact us for availability and to place orders.

Prices - no VAT, excluding carriage :-