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 RJ45 Color Function Direction Notes
1 orange-stripe TX- Mesa → STMBL idle = high
2 orange TX+ Mesa → STMBL idle = low
3 green-stripe RX- Mesa ← STMBL idle = high
4 blue GND Mesa → STMBL
5 blue-stripe GND Mesa → STMBL
6 green RX+ Mesa ← STMBL idle = low
7 brown-stripe +5V Mesa → STMBL
8 brown +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
Amphenol Anytek E20611300000G (orange!)
Phoenix Contact 1844252

Fan

Sunon Fans ME45101V1-000U-A99

Fasteners used with fan:

Heatsink

STMBL originally used the Alutronic PR138/94-M3 heatsink:

A compatible replacement is a Fischer Elektronik SK 68 94 SA (M3 channels are shifted in by 0.2mm):

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

DIN Clip

The bottom of the heatsink has a DIN rail clip. The hole size/type isn't so important, as it will be riveted. Here are compatible ones:

Weidmüller 0687900000 | DigiKey

Weidmüller 687900000 | DigiKey

Weidmüller 0636900000 | DigiKey

Weidmüller 1724580000 | DigiKey (clearance hole)

Weidmüller 0636800000 | DigiKey (M5 threads)

Altech D35CLIP-M4 | DigiKey (M4 threads)

Bud Industries DNC-4796 | DigiKey (M4 threads)

By riveting the clip to the following laser cut aluminum adapter, it is kept from rotating, and can be mounted to the threaded channels on the bottom of the heatsink with four screws:

  • clip.dxf (download friendly link) (server error?)
  • clip.dxf (wants to view in browser)

Case

1mm thick aluminum

Online Resources

https://github.com/rene-dev/stmbl

https://github.com/STMBL/

https://github.com/rene-dev/stmbl/wiki/Pinouts

https://github.com/rene-dev/stmbl/blob/master/docs/src/Getting%20Started.adoc

https://github.com/rene-dev/stmbl/wiki/motor-parameters