Controller#
Controller with modular design
The controller is capable of managing up to four syringe pumps. The interface consists of a color display (240x135 pixels), three buttons, and a rotatable knob that can also be pressed as a button. Remote commands are received through a UART serial connection.
Connector modules
Through-hole pads on the backside of the controller provide access to the power and communication connections. Connector modules can be created and attached to the controller to add particular interfaces. This modular approach allows the controller to be compatible with a variety of systems.
On the left, the controller with a pyControl module attached. On the right, the controller with a USB module attached.
Fancy motor driver
Precise control of the stepper motor's rotation is essential for accurately dispensing liquid from the syringe pump. This typically involves control software running on a computer that communicates with a microcontroller to determine:
- When to start rotating
- Which direction to rotate
- How far to rotate
- How fast to rotate
Traditionally, the microcontroller is responsible for calculating the number and timing of partial rotations (steps) based on the target position and acceleration/velocity curves. It sends precisely timed step and direction signals to a stepper motor driver IC, which then supplies current to the motor coils in a specific sequence, creating a rotating magnetic field that moves the motor shaft incrementally1.
There are algorithms and some great software libraries (AccelStepper, TeensyStep, TMCStepper, TMC2209, FastAcelStepper, stepper_pio) that assist with this timing and signal generation, but depending on the microcontroller chosen, compatibility and performance can be limited.
This controller utilizes are a really neat motor driver that takes care of all of the timing and step generation itself. The microcontroller simply sets acceleration and velocity parameters, provides a target position, and the driver executes the motion profile. This drastically simplifies the microcontroller’s firmware and frees up processing for other tasks.
Controller#
Circuit Board#
Ordering PCBs
Order the PCB and stencil from OSH Park or Aisler, or manually upload the gerber files to your preferred PCB manufacturer.
Order from OSH Park Order from Aisler
Controller PCB render
Bill of Materials#
Quantity | Reference | Description | Value/MPN |
---|---|---|---|
4 | C4, C5, C9, C10 | 1206 capacitor | 22µF |
2 | C13, C14 | 0603 capacitor | 4.7µF |
2 | C11, C12 | 0603 capacitor | 0.47µF |
8 | C1-C3, C6-C8, C15, C16 | 0603 capacitor | 0.1µF |
2 | C17, C18 | 0603 capacitor | 0.022µF |
2 | DRA1, DRA2 | DIN rail adapter | 1201578 |
4 | H1-H4 | 10 mm standoff | 24886 |
1 | J1 | 14-pin right angle female header | PPTC141LGBN-RC |
1 | J2 | 14-pin right angle male header | PH1RB-14-UA |
1 | J6 | 10-pin female header | PPPC101LFBN-RC |
1 | J7 | 16-pin female header | PPTC161LFBN-RC |
8 | R12-R19 | 0603 resistor | 4.7KΩ |
2 | R1, R2 | 0603 resistor | 2.2Ω |
8 | R3-R10 | 1206 resistor | 0.270Ω |
1 | SW1 | Rotary encoder with button | PEC11R-4220F-S0024 |
2 | U1, U2 | Motor driver | TMC5041 |
Additional Components#
Adafruit ESP32-S3 Reverse TFT Feather
An Adafruit ESP32-S3 Reverse TFT Feather is used to display the user interface and communicate with the stepper driver. It can respond to commands from control software for automated/remote control, or signals from the physical buttons and knobs for manual control.
Quantity | Description | Part Number | Supplier |
---|---|---|---|
1 | ESP32-S3 Reverse TFT Feather | 5691 | Digi-Key |
1 | Encoder Knob2 | OEDNI-63-4-7 | Digi-Key |
4 | M3 x 8 mm flat head screw | 92010A118 | McMaster-Carr |
3D Printed Case#
A 3D printed case provides a protective housing for the controller. There is a single piece version that is simpler to print, and a two piece version with raised buttons that can be printed in a contrasting color.
On the left, 2-piece multicolor design with raised buttons. On the right, an easier to print 1-piece design.
Print settings
For best results it is recommended to print the case with a 0.08 mm layer height on a smooth surface.
USB Module#
Circuit Board#
Order from OSH Park Order from Aisler
USB Module PCB render
Bill of Materials#
Quantity | Reference | Description | Value/MPN |
---|---|---|---|
1 | C1 | 0805 capacitor | 10µF |
1 | C2 | 0805 capacitor | 100nF |
1 | D1 | LED | Green |
1 | D2 | LED | Red |
1 | J2 | USB Type C connector | USB4105-GF-A |
1 | J4 | DC Barrel Jack | PJ-037A |
4 | R1,R2,R6,R7 | 0805 resistor | 5.1KΩ |
1 | R3 | 0805 resistor | 1KΩ |
1 | R4 | 0805 resistor | 22KΩ |
1 | R5 | 0805 resistor | 47KΩ |
1 | U2 | TVS diode | USBLC6-2SC6 |
1 | U3 | USB to UART bridge | CP2102N-A02-GQFN24R |
pyControl Module#
Circuit Board#
Order from OSH Park Order from Aisler
pyControl module PCB render
Bill of Materials#
Quantity | Reference | Description | Value/MPN |
---|---|---|---|
2 | J1,J3 | 6-pin male header | 0022285064 |
1 | J2 | Vertical RJ45 | PJ012-8P8C1 |
-
See this video for a great explanation of how hybrid stepper motors work. ↩
-
At $10, this knob is may be excessive, but at the same time, can you really put a price on the experience of a nicely knurled metal knob? Much less expensive alternatives that fit the encoder's 6mm diameter shaft do exist though. ↩