Skip to the content
PCBKitNew board
4 layers43 × 95 mmOe commutator controller, the printed circuit board in 3D

Oe commutator controller

open-ephys/commutators5

Active coaxial commutator for electrophysiology

Size
43 × 95 mm
Copper layers
4
Thickness
1.6 mm
Parts
92
Nets
88
Pads
355
Tracks, vias
752, 391
Pours
17
Routed
Yes
KiCad
KiCad 8.0 (file 20240108)
Created
10 Jan 2020
Updated
24 Sep 2025

Overview

Oe commutator controller is an open-source printed circuit board by open-ephys, from the open-ephys/commutators repository on GitHub. It is a 4-layer board of 43 × 95 mm with 92 parts on 88 nets, routed with 752 tracks and 391 vias.

It is built around the RP2040, TMC2130-LA and W25Q128JVSIQ, with the AP2112K-3.3, PTN04050CAZ and ABM8AIG-12.000MHZ-12-2Z-T3 among its other parts. Its parts include 37 capacitors, 24 resistors, 8 ICs, 5 switches and 3 connectors. It belongs with the RP2040 boards of this library.

Main components

9

README

README.md

[!Important]
This repository has been split into dedicated repositories for each design:

Future commutator designs, issue tracking, etc. will take place in those repositories. This repository is deprecated.

Torque-free commutators for orientation-aware headstages and miniscopes

The wide-spread availability of 6 degree of freedom pose tracking using internal-measurement units (IMUs) allows continuous monitoring of an animal's rotational state in an environment. This obviates the need for tether torque measurements to drive an active commutator since the rotational state of the animal is known in real-time, and the commutator can simply follow along. This permits the use of extremely thin coaxial tethers that cannot function with a standard active commutator because they are too flexible to translate rotational torque.

Zero-torque coaxial commutator.

This commutator functions with headstages and miniscopes that provide provide appropriate rotational tracking information. Currently supported devices are next-generation, serialized headstages and miniscopes such as ONIX headstages, and UCLA Miniscope 4.0, and Open Ephys 3D low-profile SPI headstages. However, this device operations completely independently from the headstage itself, so can be used with any device that provides accurate, drift-free rotational state. It can even be used without an IMU, e.g. using video-based rotation tracking since its remote control interface is agnostic to how rotational measurements are taken.

Features

  • Variants for high bandwidth RF links up to 18 GHz and low-bandwidth SPI cables
  • Optical table & 80/20 rail mountable
  • Remote control using JSON-encoded commands
  • Manual control using capacitive sense buttons
  • Indication LED
    • Can be completely turned off
  • Advanced stepper driver (TMC2130)
    • Voltage-controlled for silent operation
    • Precise motion using step interpolation (256 uSteps/step)
  • USB powered and controlled
    • Internal super-capacitor circuitry prevents loading the USB bus during motion

Usage

Note: A high-quality, within-spec micro USB cable must be used when connecting the commutator to the host computer.

LED

The LED tells you about the commutator state:

  1. Flashing red (Charging): commutator is charging internal super-capacitors. All controls and motor operation are locked. Wait until this process completes to use the device. It can take up to 30 seconds.
  2. Solid red (Disabled): commutator is disabled. Motor is turned off and will not turn or respond to button presses or external commands.
  3. Green (Enabled): commutator is enabled and permits both remote and manual (button) turn control. Buttons take precedence over remote commands.

Buttons

The front panel has four buttons.

  • Enable/Disable: toggle commutator enable/disable.

    • Disabled (LED is red): All motor output will halt instantly, and motor driver is powered down. Pressing directional buttons in the stopped state will not work. All target turns provided via remote calls will be cleared, such that re-enable the motor will not result in the commutator re-engaging an old target position. In this state, pressing the Enable/Disable button, or sending the approriate remote command, will enable the device.
    • Enabled (LED green): When in the enabled state, the LED will be green and the motor can be turned via button presses or RPCs . In this state, pressing the Stop/Go button, or sending the approriate remote command, will instantly disable the device.
  • Directional (2x): Manually control the motor rotation in the direction indicated on each button when the commutator is Enabled. These inputs take precedence over and override ongoing remote motor control. When pressed, all target turns provided via remote control will be cleared, such that releasing them will not result in the commutator re-engaging an old target position. Remote commands sent when a button is being pressed are ignored.

  • LED: pressing the LED will toggled on and off (e.g for cases where it presents an unwanted visual stimulus).

Remote control interface

When manual buttons are not being pressed, the commutator accepts JSON-encoded commands over its serial interface. Here are examples of all commands that can be sent:

text
{enable : true}     // Enable commutator (default = false)
{led : false}       // Turn off RGB LED (default = true)
{speed : 250}       // Set turn speed to 250 RPM (default = 50 RPM, valid ∈ (0, 500] RPM)
{turn : 1.1}        // 1.1 turns CW
{turn : -1.1}       // 1.1 turns CCW

// Example multi-command. Any combo can be used.
// In this case:
// 1. Turn LED off
// 1. Set speed to 25 RPM
// 2. Excecute 1.1 turns CC
// Ordering of commands does not matter, it is determined by the firmware
{led: false, speed: 25, turn : -1.1}

The communator state can be read using the {print:} command which will return a JSON object containing version, state, and motor parameters.

Saving settings

All control and speed parameters, whether changed via the remote or manual interface, are saved in non-volatile memory each time they are changed. The device will start in the same state it was last used.

Firmware

The controller firmware is located here. It runs on a Teensy lc. To compile this firmware and program the microcontroller, you need the following dependencies:

The firmware can be uploaded to the device using the Arduino IDE. Note that you will need to add the Teensyduino add-on to to the Arduino IDE to program the Teensy. When installing Teensyduino, you should opt to install all of the bundled libraries as well. This takes care of installing AccelStepper library rather than having to install it manually. ArduinoJSON can be installed through the Arduino IDE's package manager.

Construction

Bill of Materials

The BOM is located here.

Mechanical

The mechanical component of the commutator are as follows:

  1. RF Rotary Joint
  2. 2x reduction gears (3D-printed)
  3. NEMA-11 Stepper Motor
  4. Housing (3D-printed)
  5. Some fasteners

Mechanical designs are located here. STL files for 3D printing are located in the stl subdirectory. Links to purchase each of these components, including 3D-printed parts, can be found on the BOM.

Electronics

The board used to control the commutator consists of the following elements:

  1. Teensy LC for receiving commands and controlling all circuit elements.
  2. TMC2130 stepper driver for driving the motor.
  3. Super-capacitor charge system and step-up regulator for providing high-current capacity drive to the motor driver directly from USB.
  4. RGB indicator LED.
  5. Capacitive touch sensors on the back side of the PCB that serve as buttons for manual commutator control

Board designs and manufacturing files are located here.

Hardware License

This license pertains to documents in the control-board, mechanical, and resources subdirectory.

This work is licensed to Jonathan P. Newman and Jakob Voigts under CC BY-NC-SA 4.0. To view a copy of this license, visit https://creativecommons.org/licenses/by-nc-sa/4.0

The creation of commercial products using the hardware documentation in this repository is not permitted without an explicit, supplementary agreement between the Licensor and the Licensee. Please get in touch if you are interested in commercially distributing this tool.

Software/Firmware License

This license pertains to documents in the source code in the firmware subdirectory.

Copyright Jonathan P. Newman

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Parts

92
QtyValueFootprintReferences
120.1uFCapacitor_SMD:C_0402_1005MetricC2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C13, C19
60.1uFCapacitor_SMD:C_0603_1608MetricC18, C27, C28, C31, C32, C36
54.7uFCapacitor_SMD:C_0805_2012MetricC25, C30, C33, C35, C37
41uFCapacitor_SMD:C_0603_1608MetricC1, C12, C38, C39
44.7kResistor_SMD:R_0603_1608MetricR1, R2, R23, R24
4LOGOLOGOG***, G***, G***, G***
4~oe:Touch_Center_2mmS1, S2, S3, S4
4~MountingHole:MountingHole_2.7mm_M2.5_ISO7380H1, H2, H3, H4
4~TestPoint:TestPoint_Pad_D2.0mmTP1, TP2, TP3, TP4
310kResistor_SMD:R_0603_1608MetricR14, R17, R18
20.11,0.5WResistor_SMD:R_1206_3216MetricR20, R21
2100uFCapacitor_SMD:C_Elec_8x10.2C21, C24
210kResistor_SMD:R_0402_1005MetricR3, R5
222pFCapacitor_SMD:C_0402_1005MetricC14, C15
222uFCapacitor_SMD:C_1206_3216MetricC22, C23
227Resistor_SMD:R_0402_1005MetricR4, R6
25.1kResistor_SMD:R_0402_1005MetricR8, R9
2HV0820-2R7305-RCapacitor_SMD:C_1210_3225MetricC20, C26
10.47uFCapacitor_SMD:C_0805_2012MetricC29
10015910100Connector_PinHeader_2.54mm:PinHeader_2x05_P2.54mm_Vertical_SMDJ1
11.2MResistor_SMD:R_0603_1608MetricR13
11.33kResistor_SMD:R_0603_1608MetricR12
11.5MResistor_SMD:R_0603_1608MetricR10
1160kResistor_SMD:R_0603_1608MetricR11
11719730004oe:MOLEX_1719730004_1x04_P2.54mm_Vert_LockJ3
11KResistor_SMD:R_0402_1005MetricR7
12.2Resistor_SMD:R_0603_1608MetricR19
12.49kResistor_SMD:R_0603_1608MetricR16
122nFCapacitor_SMD:C_0603_1608MetricC34
130kResistor_SMD:R_0603_1608MetricR22
151kResistor_SMD:R_0603_1608MetricR15
1ABM8AIG-12.000MHZ-12-2Z-T3Crystal:Crystal_SMD_Abracon_ABM8AIG-4Pin_3.2x2.5mmY1
1AP2112K-3.3Package_TO_SOT_SMD:SOT-23-5U9
1CAP1296-x-AIAPackage_DFN_QFN:DFN-10-1EP_3x3mm_P0.5mm_EP1.55x2.48mmU4
1IS31FL3193Package_DFN_QFN:DFN-10-1EP_3x3mm_P0.5mm_EP1.65x2.38mmU8
1LTC4425Package_SO:MSOP-12-1EP_3x4mm_P0.65mm_EP1.65x2.85mmU6
1PTN04050CAZoe:TI_R-PDSS_B4_SMDU5
1RP2040Package_DFN_QFN:QFN-56-1EP_7x7mm_P0.4mm_EP3.2x3.2mmU2
1SW_MEC_5Eoe:PANASONIC_EVQP7-JA-01PSW1
1TMC2130-LAPackage_DFN_QFN:QFN-36-1EP_5x6mm_P0.5mm_EP3.6x4.1mmU7
1TSM-102-01-L-SVConnector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical_SMD_Pin1LeftJP1
1USB4110-GF-AConnector_USB:USB_C_Receptacle_GCT_USB4110J2
1W25Q128JVSPackage_SO:SOIC-8_5.23x5.23mm_P1.27mmU1
1XZMDKCBDDG45S-9oe:SUNLED_PLCC4-INV_3.2x2.8x1.9mmD1

Questions

How big is the Oe commutator controller PCB?

It measures 43 × 95 mm and has 4 copper layers, 1.6 mm thick.

What parts does the Oe commutator controller use?

92 parts, built around the RP2040, TMC2130-LA, W25Q128JVSIQ and AP2112K-3.3. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Oe commutator controller KiCad files?

From the open-ephys/commutators repository on GitHub, at the commit this page was made from: the board is pcb/oe-commutator-controller.kicad_pcb and its schematic pcb/cap-charger.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Oe commutator controller design in my own project?

Its repository states no licence, so its author keeps all rights: ask open-ephys before reusing the design.

Similar boards

  • 4 layers43 × 95 mmOe commutator controller, the printed circuit board in 3D

    Oe commutator controller

    open-ephys/commutator-controller

    Open Ephys commutator PCB and firmware

    107 parts2
  • 4 layers33 × 90 mmActive drag system, the printed circuit board in 3D

    Active drag system

    RocketryVT/active-drag-system

    Eigen Library, cmake, and arm-none-eabi-gcc tooling required for successful build.

    100 parts6MIT
  • 4 layers40 × 53.3 mmMUX uSD PCB, the printed circuit board in 3D

    MUX uSD PCB

    DimsRoot/MUX-uSD-PCB

    eMMC or uSD to uSD PCB

    54 parts1
  • 6 layers50 × 43.3 mmPCB PAPI, the printed circuit board in 3D

    PCB PAPI

    mathieupommery/ESE_2526_ROBOTCHATDELAMUERTE

    We first wanted to make a three omniwheeled robot with FOC control on brushless motors.

    152 parts1
  • 4 layers129 × 79.5 mmStimjim, the printed circuit board in 3D

    Stimjim

    open-ephys/stimjim

    A precise intra and extracellular electrical stimulator

    236 parts7
  • 4 layers150 × 120 mmEphys test board, the printed circuit board in 3D

    Ephys test board

    open-ephys/ephys-test-board

    General purpose, automated electrophysiology test board

    567 parts1
  • 4 layers33 × 41.9 mmOE PyBoard, the printed circuit board in 3D

    OE PyBoard

    oeps-tech/OE-PyBoard

    Our MicroPyhton version using USB-C

    57 parts
  • 4 layers80.7 × 78.7 mmOstentus hw, the printed circuit board in 3D

    Ostentus hw

    golioth/ostentus-hw

    A PCB front panel for Golioth's Aludel hardware platform

    77 parts17CERN-OHL-P-2.0