STMBL v4 Servo Drives
Overview
Open source servo drives made by Rene Hopf. The name STMBL comes from "STM32" and "BrushLess".
Software
The servo drive can be configured and debugged using it's Micro USB connector, which provides a USB CDC (UART/serial) interface. You can using any terminal emulator such as PuTTY, minicom, etc. However, to easily configure the non-volatile settings and plot real-time oscilloscope data, there is dedicated software:
https://github.com/STMBL/QtServoterm
Wiring
There are three RJ45 jacks, one intended for control signals going to the drive, and two for feedback from the servo. In most cases only the first of the two feedback ports will be used, but in some cases there are multiple types of feedback, such as an ABZ encoder along with UVW hall sensors.
Control
RJ45 Pin | RJ45 Color | Step/Dir | Mesa SS |
---|---|---|---|
1 | orange-stripe | STEP+ | RX- |
2 | orange | STEP- | RX+ |
3 | green-stripe | DIR+ | TX- |
4 | blue | FAULT- | GND |
5 | blue-stripe | FAULT+ | GND |
6 | green | DIR- | TX+ |
7 | brown-stripe | EN+ | VCC |
8 | brown | EN- | VCC |
NOTE: the STMBL drives do not actually use the VCC/GND connections, they just end up driving differential transceivers (with non-differential signals). The STMBL expects to have a common logic ground with the Mesa card.
Mesa Smart Serial RJ45 Pinout:
RJ45 Pin | Function | Direction |
---|---|---|
1 | TX- | Mesa → STMBL |
2 | TX+ | Mesa → STMBL |
3 | RX- | Mesa ← STMBL |
4 | GND | Mesa → STMBL |
5 | GND | Mesa → STMBL |
6 | RX+ | Mesa ← STMBL |
7 | +5V | Mesa → STMBL |
8 | +5V | Mesa → STMBL |
Mesa Smart Serial Terminal Block Pinout:
TB Pin | RJ45 Color | Function | Direction |
---|---|---|---|
1 | blue | GND | Mesa → STMBL |
2 | blue-stripe | GND | Mesa → STMBL |
3 | green | RX+ | Mesa ← STMBL |
4 | green-stripe | RX- | Mesa ← STMBL |
5 | orange | TX+ | Mesa → STMBL |
6 | orange-stripe | TX- | Mesa → STMBL |
7 | brown-stripe | +5V | Mesa → STMBL |
8 | brown | +5V | Mesa → STMBL |
Feedback
RJ45 Pin | RJ45 Color | Resolver | 1Vpp | UVW | Quad. | RS-485 | RS-422 | UART | USART | UART HD | USART HD | SPI | SPI HD |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | orange-stripe | Sin+ | Sin+ | U+ | A+ | A | RX+ | RX+ | MISO+ | CS+ | |||
2 | orange | Sin- | Sin- | U- | A- | B | RX- | RX- | MISO- | CS- | |||
3 | green-stripe | Cos+ | Cos+ | V+ | B+ | CLK+ | CLK+ | CLK+ | CLK+ | ||||
4 | blue | Ref- | W- | Z- | B | Z | TX- | TX- | TX/RX- | TX/RX- | MOSI- | MOSI- | |
5 | blue-stripe | Ref+ | W+ | Z+ | A | Y | TX+ | TX+ | TX/RX+ | TX/RX+ | MOSI+ | MOSI+ | |
6 | green | Cos- | Cos- | V- | B- | CLK- | CLK- | CLK- | CLK- | ||||
7 | brown-stripe | AIN | VCC | VCC | VCC | VCC | VCC | VCC | VCC | VCC | VCC | VCC | VCC |
8 | brown | GND | GND | GND | GND | GND | GND | GND | GND | GND | GND | GND | GND |
Motor Output Power
Pin | 3-phase | 2-phase | DC |
---|---|---|---|
1 | U | A+ | + |
2 | V | A-/B- | |
3 | W | B+ | - |
NOTE: the pins are numbered left-to-right when the STMBL is oriented with the USB port on the top.
NOTE: no motor ground is provided on the pluggable connector, instead a ring terminal must be run separately to a ground lug.
TODO: provide timing diagrams to show relative phase lead
Sample Configurations
Measure Resistance/Inductance
Configuration:
link rl
Manually run:
rl0.en = 1
After it finishes (the graph will settle down and the noises will stop), the measured resistance and inductance can be printed by printing the state of the following pins using the console:
rl0.r rl0.ld
Commutation Test
Configuration:
link pid link pmsm # whichever type of feedback is being used link enc_fb0 link misc # motor winding characteristics conf0.r = 3.256717 conf0.l = 0.025102 # motor current/torque rating conf0.max_force = 14.8 conf0.max_ac_cur = 5 # inertia, which is dependent on the mass (technically moment of inertia) being spun conf0.j = 0.00005 # how many electrical "revolutions" per mechanical revolution conf0.polecount = 1 # for basic quadrature encoders conf0.mot_fb_res = 5000 # if index isn't available, disable looking for it #enc_fb0.en_index = 0 # correct the feedback polarity/offset conf0.mot_fb_rev = 0 conf0.mot_fb_offset = 0.0 # correct the (open loop) output direction (clockwise/counter-clockwise) conf0.out_rev = 0
Run manually:
link com_test
If the motor is turning in a very choppy manner, then the test current might be too low. Change hv0.d_cmd
from the default value of 1.0 to something higher:
hv0.d_cmd = 2.0
If absolute angle is available (index pulse enabled and seen, or if using an absolute encoder), then you can keep correcting the feedback offset (the units are radians):
conf0.mot_fb_offset = 0.2
You may need to zoom in to do fine adjustments. This is done by decreasing the period (increasing the frequency) of term0.send_step
:
term0.send_step = 20
Jog Test
link pid link pmsm # whichever type of feedback is being used link enc_fb0 link misc # this is the important part link jog_cmd # ... # (same configuration used after tuning with com_test) # ... # configure the max speed and acceleration stp0.max_vel = 20 stp0.max_acc = 1000 # allow turning further in the same direction stp0.min_pos = -1000 stp0.max_pos = 1000
You may have to play with the conf0.j
parameter, be careful as having it too high can easily cause oscillations. Be ready to disable the motor!
conf0.j = 0.0001
You can also increase the motor's top speed:
stp0.max_vel = 200
And later see how much the acceleration can be pushed:
stp0.max_acc = 40000
Replacement Parts
Terminal Blocks
STMBL Name | Part Name | DigiKey Part # |
---|---|---|
P2 "PTC", P3 "Logic Power", P15 "Alt. CMD" | Phoenix Contact 1840366 | 277-2417-ND |
P5 "Outputs", P9 "Inputs" | Phoenix Contact 1840421 | 277-5715-ND |
P6 "Motor DC Input" | Phoenix Contact 1911965 | 277-9026-ND |
P8 "Motor 3-phase Output" | Phoenix Contact 1911978 | 277-11013-ND |
Alternate replacement connector information:
Name | Connector | PCB Header |
---|---|---|
Motor DC Power Input | Phoenix Contact 1757019 (12A) Phoenix Contact 1911965 (16A) Amphenol Anytek TJ0251530000G (12A) Würth Elektronik 691351500002 (12A) |
Phoenix Contact 1757242 (12A) Phoenix Contact 1923869 (16A) |
Motor DC Power Output | Phoenix Contact 1757022 (12A) Phoenix Contact 1911978 (16A) Amphenol Anytek TJ0351530000G (12A) |
Phoenix Contact 1757255 (12A) Phoenix Contact 1923872 (16A) |
Logic Power Alt. Cmd. Thermistor |
Phoenix Contact 1840366 Amphenol Anytek TJ0211530000G |
Phoenix Contact 1844210 |
Inputs Outputs |
Phoenix Contact 1840405 |
Phoenix Contact 1844252 |
Fan
Sunon Fans ME45101V1-000U-A99
- Sunon ME45101V1-000U-A99 | DigiKey
- Sunon ME45101V1-000U-A99 | Mouser
- Sunon ME45101V1-000U-A99 | Sunon USA
- ME45101V1-0000-A99 Product File Download
- Sunon ME45101V1-0000-A99 Specification ("(D04072500G-02)-0.pdf", D04072500G-02, 12.01.2017)
- Sunon ME45101V1-0000-A99 STEP File ("Doc-0045137-4-0.stp", A201021110G-2, 2020-07-31, 109063)
- Sunon ME45101V1-000U-A99 Specification ("(D04077400G-00)-3.pdf", D04077400G-00, 11.01.2013) (broken link from USA site via Wayback Machine)
- Sunon ME45101V1-000U-A99 Specification ("(D04077400G-00)-3.pdf", D04077400G-00, 11.01.2013) (direct link to above file)
Fasteners used with fan:
- sheet metal case to fan snap rivet: Essentra Components SR-4060B | DigiKey
Heatsink
STMBL originally used the Alutronic PR138/94-M3 heatsink:
- V PR138 - 94-M3: Special heat sink, 94x46x33mm, 3.2K - W, M3 at reichelt elektronik
- stmbl/heatsink.pdf at master · rene-dev/stmbl (shows drill/tap hole pattern for mounting HV board to heatsink)
A compatible replacement is a Fischer Elektronik SK 68 94 SA (M3 channels are shifted in by 0.2mm):
- Fischer SK 68 94 SA | Arrow
- Fischer SK 68 94 SA | Fischerelektronik (PDF, DXF, IGES, and STEP files available)
- Fischer SK 68 94 SA Datasheet Page
Fasteners used:
- DIN clip plate to heatsink: M3-0.5x6mm stainless steel narrow cheese head slotted screws
- HV board to heatsink: M3-0.5x16mm stainless steel pan head phillips screws
- HV board to heatsink: 2mm thick M3 black nylon washers (6mm OD)
- sheet metal case to heatsink: #4-24x1/4" stainless steel pan head phillips drive "Type AB" sheet metal screws (TODO: determine better fitting screw?)
Standoffs/spacers:
- 1pcs 8mm tall, 7mm OD, 3.6mm ID black nylon unthreaded standoffs (unmodified)
- 2pcs above standoff, modified to have a 2.5mm - 2.63mm tall flange, with the rest of the cylinder cut away to have a 2.6mm deep sagitta
Case
1mm thick aluminum
- stmbl/sheet_metal_case_io_08.dxf at master · rene-dev/stmbl
- sheet_metal_case_io_08.dxf (download friendly link)
- sheet_metal_case_io_08.dxf (wants to view in browser)
Online Resources
https://github.com/rene-dev/stmbl
https://github.com/rene-dev/stmbl/wiki/Pinouts
https://github.com/rene-dev/stmbl/blob/master/docs/src/Getting%20Started.adoc