Skip to main content

Open source 24-channel USB high-voltage driver

When it comes to automation and control systems, there's often a need for multiple digitally controlled output terminals with high-voltage handling capabilities. Many existing modules are bulky, expensive, or require numerous additional components to function. To address this gap, I've developed a fully open-source, USB-controlled 24-channel high-voltage driver. This device provides precise, flexible control in a compact and user-friendly package. The project is open hardware, released under the CERN-OHL-W license, ensuring transparency from hardware schematics to firmware code. The driver module communicates via USB using a simple virtual COM port, eliminating the need for special drivers and complex setups.

Prototype version of the module.

At the core of the system are three TPIC6B595 shift registers, each supplying eight open-drain outputs that can handle up to 50V and sink currents of up to 150mA per channel. These registers are daisy-chained to achieve a total of 24 outputs. The outputs are designed for low-side switching and include integrated clamping diodes, making them suitable for driving inductive loads such as relays and solenoids. Data is clocked into the registers through serial input from a microcontroller, allowing for fast and reliable state updates across all channels with just a few lines of code.

The logic and communication for this module are managed by the STC15W204S microcontroller, a cost-effective yet powerful 8051-based MCU with enhanced UART performance and an integrated oscillator. This chip is paired with a CH340N USB-to-UART bridge, which presents the device as a standard virtual COM port to the host PC. Upon connection, the microcontroller listens for a set of AT-style commands sent over the serial connection. These commands are straightforward and user-friendly, for example, "ON=65280" activates the middle 8 outputs, "CLR" turns off all channels, and "VER" retrieves the firmware version. Additionally, there is a command to save the current output state to the built-in EEPROM, enabling the system to restore its output to a known state after power cycles. This interface design is perfect for scripting, automation, or integration with software tools such as Python, LabVIEW, or custom control GUIs.

The PCB is designed using KiCad and features a 2-layer layout measuring 75.25mm × 33.75mm. It includes 2.54mm pitch headers for output connections and is equipped with a USB Type-C connector. Power can be supplied through either USB or an external regulated 5V source, which can be selected via onboard jumper settings. The layout ensures clean signal routing and minimizes crosstalk or interference, even when switching high-voltage loads. Careful decoupling and protection components provide robustness for real-world applications.

The PCB for this module was fabricated by PCBWay, who generously sponsored this project. PCBWay offers high-quality PCB manufacturing and assembling services. Also, they offer CNC and 3D printing services. The PCB of this module is available to order from PCBWay. Check out the PCBWay website for its manufacturing capabilities and pricing.

Top view of the assembled PCB.

The firmware for the STC15W204S is written in C using SDCC. It is easy to expand the command set, introduce new communication modes, or add timed control logic as needed. The current implementation allows full 24-bit output control using a base 10 numerical mask, making it both scriptable and human-readable. Thanks to the preloaded bootloader of the STC15W204S, firmware updates can be performed through the same serial interface. Details about this process are covered in the project documentation. Like the hardware, the firmware is released under the MIT License and is available in the project repository.

The system has been tested with a variety of 12V and 24V inductive and resistive loads, including relay banks, solenoids, and LED arrays. Since the outputs are open-drain, external voltages up to 50V can be safely switched on each channel making it ideal for a range of industrial, laboratory, or artistic applications. Output timing is reliable, with clean edge transitions observed during scope testing, and no signal integrity issues even during full 24-channel toggling. It is recommended to use individual heatsinks for the driver ICs when driving high-current inductive loads with this module. While the printed circuit board has heat transfer traces, the addition of individual heatsinks can increase the durability of the module.

Heat distribution of the module after driving eight 24V automotive-grade relays for 8 continuous hours.

Potential use cases for this module include automated test benches, home automation systems, signal routing for instrumentation, nixie tube multiplexing, and other high-voltage control tasks. The command-based protocol makes it easy to script operations or integrate this module into a larger system.

For those who wish to explore the schematics, command protocol, design rationale, and usage examples in greater depth, I have published comprehensive documentation and resources in the project wiki. This includes detailed assembly instructions, firmware flashing guidance, and tips on customizing the firmware for enhanced functionality.

All source files - including schematics, PCB layout, firmware code, and the bill of materials - are freely available at https://github.com/dilshan/24ch-usb-high-voltage-driver.

Comments

Popular posts from this blog

CD2003 - yet another simple FM radio receiver

In the last few days, we are looking for some simple FM radio receiver to integrate into one of our ongoing projects. For that, we try several FM radio receiver ICs including TDA7000, CD2003/TA2003/TA8164, CXA1019, and KA22429. Out of all those chips we select CD2003 (or TA2003/TA8164) based receiver for our project because of its simplicity and outstanding performance. Except to CD2003, Sony CXA1019 also perform well but we drop it because of its higher component count. We design our receiver based on Toshiba TA2003 datasheet and later we try TA8164 and CD2003 with the same circuit. Either CD2003 or TA8164 can directly replace TA2003 IC, and as per our observations, TA8164 gives excellent results out of those 3 chips. A prototype version of CD2003 FM radio receiver The PCB design and schematic which we used in our prototype project are available to download at google drive (including pin-outs of crystal filters and inductors ). Except for CD2003 IC, this receiver consist...

Arduino superheterodyne receiver

In this project, we extend the shortwave superheterodyne receiver we developed a few years ago . Like the previous design, this receiver operates on the traditional superheterodyne principle.  In this upgrade, we enhanced the local oscillator with Si5351 clock generator module and Arduino control circuit. Compared to the old design, this new receiver uses an improved version of an intermediate frequency amplifier with 3 I.F transformers. In this new design, we divide this receiver into several blocks, which include, mixer with a detector, a local oscillator, and an I.F amplifier. The I.F amplifier builds into one PCB. The filter stage, mixer, and detector stages place in another PCB. Prototype version of 455kHz I.F amplifier. In this prototype build, the Si5351 clock generator drives using an Arduino Uno board. With the given sketch, the user can tune and switch the shortwave meter bands using a rotary encoder. The supplied sketch support clock generation from 5205kHz (tuner f...

Calculator for audio output transformers

Audio output transformers are heavily used in a vacuum tube and some (older) transistor base audio power amplifiers, but these days output transformer are quite hard to find and expensive item. For homebrew projects, the best option is to construct those transformers by ourselves and this script helps to calculate winding parameters for those transformers. This " AF output transformer calculator " script is written using Python and it works with most of the commonly available Python interpreters . The script is available to download at google drive under the terms of GNU General Public License version 3.0 . Homebrewed 25k: 4 output transformer Once supplied the input parameters this script provides a winding ratio, the number of turns required for primary and secondary winding and required copper wire gauges for both primary and secondary windings, etc. We construct several AF output transformers based on results of this script, which including transformers for M...