Skip to the content
PCBKitNew board
4 layers70 × 43 mmUSMU v10, the printed circuit board in 3D

Credit card-sized, USB-powered 4 quadrant source-measure unit hardware and firmware

Size
70 × 43 mm
Copper layers
4
Thickness
1.6 mm
Parts
137
Nets
108
Pads
495
Tracks, vias
1,010, 219
Pours
15
Routed
Yes
KiCad
KiCad 6 (file 20211014)
Created
20 Dec 2020
Updated
20 Jun 2025

Overview

USMU v10 is an open-source printed circuit board by joeltroughton, from the joeltroughton/uSMU repository on GitHub. It is a 4-layer board of 70 × 43 mm with 137 parts on 108 nets, routed with 1,010 tracks and 219 vias.

It is built around the GS8331-TR, ADS1115IDGS and DAC8571IDGKR, with the TPS65131RGET, H7650-45PR and ME6212C33M5G among its other parts. Its parts include 45 capacitors, 44 resistors, 14 ICs, 6 diodes and 3 connectors. It belongs with the power boards and the STM32 boards of this library.

Main components

9

README

README.md

μSMU

μSMU is a small source-measure unit designed for the very low-cost electrical characterisation of photovoltaic cells.

Get a μSMU

Want to buy a pre-assembled and calibrated μSMU with USB and test leads? Grab one from Tindie or Undalogic.

I sell on Tindie

Background

SMUs are "4-quadrant" devices, meaning they can both source and sink current at both positive and negative voltages. This makes them very useful for semiconductor device characterisation - including LEDs, transistors and solar cells.

In photovoltaic research laboratories, a SMU is typically used to vary the voltage applied to an illuminated solar cell, whilst simultaneously measuring the current. This voltage sweep allows us to plot the solar cell's I-V characteristics, and calculate its light-to-power conversion efficiency.

SMUs are generalised pieces of test equipment, designed to be highly sensitive over vast current & voltage ranges. For example, the workhorse Keithley 2400 has a voltage range between 100 nV and 200 V, and a current range between 1 pA to 10 A. This is likely overkill for most research and education applications concerning solar cells, which tend to operate between 0-5 V and μA to mA. The μSMU doesn't intend to replace precision SMUs, rather to supplement them in cost-sensitive areas where such precision is not required.

The μSMU is a USB-powered SMU with a +/- 5 V voltage range and +/- 50 mA source/sink capability. The PCB is only 70mm x 43mm

Function

The μSMU was originally inspired by Linear Technology's DC2591A evaluation board, which demonstrates an I2C address translator IC to interface up to 8 modules containing several I2C devices with an Arduino-style board. Somewhat consequentially, these boards also contain fantastic SMU circuits!

The voltage applied to the device-under-test (DUT) is supplied by a LT1970 opamp driven by a 16-bit DAC on the non-inverting input and a 2.048V reference on the inverting input. The current flowing through the DUT is measured by amplifying the voltage drop through a high-side 50 Ohm shunt resistor using a precision programmable gain amplifier. Both the DUT voltage and shunt resistor voltage drop are measured using a 16-bit ADC. The whole system is controlled using a STM32F072 microcontroller, which presents a USB virtual communications port for interfacing.

Capabilities

Parameter
Voltage range-5 to +5 V
Voltage measure resolution~0.6 mV
Minimum voltage step size<1 mV
Current limit-50 to +50 mA
Current resolution~10 nA

Free I-V Curve Tracer

A free, browser-based I-V curve tracer for the μSMU is available from Undalogic here

Usage

A simple python package is available to interface with the μSMU and perform basic measurements.

You can install this package directly from PyPI:

bash
pip install usmu_py

Here is a minimal script demonstrating how to initialise the SMU, set a voltage, measure it and the current, and then close the session.

python
from usmu_py.smu import USMU

def main():
    # Open SMU on the specified port (e.g., 'COM3' or '/dev/ttyUSB0')
    smu = USMU(port="COM3", baudrate=9600, command_delay=0.05)
    try:
        # Identify the SMU
        idn = smu.read_idn()
        print("IDN:", idn)

        # Enable output and configure current limit
        smu.enable_output()
        smu.set_current_limit(20.0)  # 20 mA current limit

        # Set voltage and measure
        voltage, current = smu.set_voltage_and_measure(1.0)
        print(f"Set voltage: 1.0 V | Measured Voltage: {voltage:.3f} V, Current: {current:.6f} A")

        # Disable output after testing
        smu.disable_output()
    finally:
        smu.close()

if __name__ == "__main__":
    main()

Errata

Version 10 (release 1.0)

  • The board layout is missing grounding on the MCU for some reason. Make sure to place a couple of vias in the MCU's exposed pad to ensure proper grounding. Sorry!

Changelog

Version 10 (release 1.0)

  • Voltage DAC changed from a 12-bit Microchip MCP4725 to a 16-bit TI DAC8571
    • Can now achieve sub-mV voltage steps
  • Current sense amplifier changed from an Analog LT1991 to a TI PGA281
    • PGA281's gain can be programmed using 5 GPIOs ranging from 0.125 to 176. This allows low currents to be gained more than high currents, improving current resolution.
  • Current shunt resistor increased from 10 to 50 Ohms.
    • The programmable current sense amplifier (PGA) means we can use a high value shunt resistor and decrease the gain when measuring high currents.
    • Voltage drop across a 10 Ohm shunt is sensed by the power amp (U10) to impart programmable current limiting. Measuring this across the main 50 Ohm shunt would limit the current output to ~10 mA due to limitations in the LT1970
    • The increase in current shunt value along with the new PGA means we can now sense currents on the order of ~10 nA
  • Buffer amplifier changed from a quad Maxim MAX44252 to 4x Gainsill GS8331
    • Less expensive and lower VOS
  • Electrostatic discharge protection added to USB port (U5)
  • Isolated DC-DC converter replaced with bipolar switching regulator TI TPS65131 supplying ±9.7V
    • Extra headroom for power amplifier to push higher currents through 50 Ohm current shunt
  • 4.5V LDO added for DAC and ADC
  • USB-C port replaced with lower cost 2.0-pinned version

License

Hardware

CERN Open Hardware License Version 2 - Permissive (CERN-OHL-P-2.0).

Software

GNU General Public Licence v3.0.

Documentation:

Creative Commons License
This work is licensed under a Creative Commons Attribution 4.0 International License.

Parts

137
QtyValueFootprintReferences
2310kResistor_SMD:R_0603_1608MetricR1, R2, R10, R11, R12, R13, R15, R17, R18, R19, R20, R21, R22, R24, R26, R27 +7
191uFCapacitor_SMD:C_0603_1608MetricC1, C10, C11, C13, C15, C17, C18, C19, C20, C22, C23, C24, C33, C35, C37, C38 +3
71kResistor_SMD:R_0603_1608MetricR3, R4, R5, R7, R23, R25, R28
610nFCapacitor_SMD:C_0603_1608MetricC3, C14, C25, C40, C41, C43
6LOGOLOGOG***, G***, G***, G***, G***, G***
50.1uFCapacitor_SMD:C_0603_1608MetricC2, C7, C16, C28, C36
5100Resistor_SMD:R_0603_1608MetricR37, R38, R42, R43, R44
510uFCapacitor_SMD:C_0805_2012MetricC4, C6, C12, C27, C30
4MountingHoleMountingHole:MountingHole_3.2mm_M3_Pad_ViaH1, H2, H3, H4
4SolderJumper_2_OpenJumper:SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mmJP1, JP2, JP3, JP4
347kResistor_SMD:R_0603_1608MetricR33, R34, R35
3GS8331Package_TO_SOT_SMD:SOT-23-5U2, U7, U9
21nFCapacitor_SMD:C_0603_1608MetricC42, C44
222uFCapacitor_SMD:C_0805_2012MetricC26, C32
22pFCapacitor_SMD:C_0603_1608MetricC31, C34
2330kResistor_SMD:R_0603_1608MetricR14, R36
24.7uHInductor_SMD:L_Taiyo-Yuden_MD-3030L1, L2
25.1kResistor_SMD:R_0603_1608MetricR6, R16
2B5819WDiode_SMD:D_SOD-123D5, D6
2DNPCapacitor_SMD:C_0805_2012MetricC39, C45
2LED_SmalluSMU-simple_v1:E6C0606RGBC3UDAD3, D4
2TestPointTestPoint:TestPoint_Pad_D1.0mmTP4, TP5
1+10VTestPoint:TestPoint_Pad_D1.0mm+1
1-10VTestPoint:TestPoint_Pad_D1.0mm-1
110Resistor_SMD:R_0603_1608MetricR41
1200nFCapacitor_SMD:C_0603_1608MetricC29
1200pFCapacitor_SMD:C_0603_1608MetricC21
12V048 BufTestPoint:TestPoint_Pad_D1.0mmTP1
14V096TestPoint:TestPoint_Pad_D1.0mmTP3
150Resistor_SMD:R_0603_1608MetricR40
1ADS1115IDGSPackage_SO:TSSOP-10_3x3mm_P0.5mmU1
1AO3401APackage_TO_SOT_SMD:SOT-23Q1
1Amp OutTestPoint:TestPoint_Pad_D1.0mmAmpOut1
1DAC OutTestPoint:TestPoint_Pad_D1.0mmTP2
1DAC8571IDGKRPackage_SO:VSSOP-8_3.0x3.0mm_P0.65mmU11
1DUTConnector_Coaxial:BNC_Amphenol_B6252HB-NPP3G-50_HorizontalJ3
1H7650-45PRPackage_TO_SOT_SMD:SOT-89-3U13
1LEDuSMU-simple_v1:E6C0606RGBC3UDAD2
1LT1970uSMU-simple_v1:Linear_FE_TSSOP20U10
1MCP1501T-40E_CHYPackage_TO_SOT_SMD:SOT-23-6U8
1ME6212C33M5GPackage_TO_SOT_SMD:SOT-23-5U6
1PGA281Package_SO:TSSOP-16_4.4x5mm_P0.65mmU14
1STM32F072C8UxPackage_DFN_QFN:QFN-48-1EP_7x7mm_P0.5mm_EP5.6x5.6mmU3
1SWDConnector_PinHeader_1.27mm:PinHeader_2x05_P1.27mm_Vertical_SMDJ1
1Status LEDuSMU-simple_v1:E6C0606RGBC3UDAD1
1TPS65131RGETPackage_DFN_QFN:VQFN-24-1EP_4x4mm_P0.5mm_EP2.45x2.45mm_ThermalViasU12
1TS321Package_TO_SOT_SMD:SOT-23-5U4
1USBLC6-2SC6Package_TO_SOT_SMD:SOT-23-6U5
1USB_C_Receptacle_USB2.0uSMU-simple_v1:TYPE-C-31-M-12J2

Questions

How big is the USMU v10 PCB?

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

What parts does the USMU v10 use?

137 parts, built around the GS8331-TR, ADS1115IDGS, DAC8571IDGKR and TPS65131RGET. 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 USMU v10 KiCad files?

From the joeltroughton/uSMU repository on GitHub, at the commit this page was made from: the board is Hardware/Version 10r1/uSMU_v10.kicad_pcb and its schematic Hardware/Version 10/uSMU_v10.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the USMU v10 design in my own project?

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

Similar boards

  • 4 layers210 × 100 mm02 Power Board, the printed circuit board in 3D

    02 Power Board

    ad4363/LuX-ray-PCBs

    A repository containing KiCad schematic and pcb files for a wireless radiation detector testing interface

    115 parts1
  • 4 layers100 × 100 mmBreakout board v1, the printed circuit board in 3D

    Breakout board v1

    asinghani/mpw1-bringup

    Attempts at recovering SKY130 MPW-ONE chips (December 2020 // March 2022)

    88 parts3
  • 4 layers64.2 × 66.2 mmRP2040, the printed circuit board in 3D

    RP2040

    gamaPhy/Freedom

    Design files of our hall effect sensor analog keypads

    94 parts3CERN-OHL-S-2.0
  • 2 layers100 × 62 mmServo, the printed circuit board in 3D

    Servo

    SparkyBobo/animatronics

    An animatronic framework for CircuitPython.

    90 partsMIT
  • 2 layers66.9 × 110 mmKitchen clock, the printed circuit board in 3D

    Kitchen clock

    chof747/kitchen-clock

    This project is building a kitchen glock with the following functions:

    74 parts
  • 4 layers29 × 45 mmESP32CAM Shield, the printed circuit board in 3D

    ESP32CAM Shield

    vonmartins/ESP32CAM_Shield

    Shield for ESP32-CAM: Li-ion Battery, Battery charger, Microphone and USB

    47 parts
  • 2 layers50 × 66 mmBluePhil, the printed circuit board in 3D

    BluePhil

    pms67/BluePhil

    STM32-based development board with various sensors.

    106 parts53MIT
  • 4 layers282.8 × 122.9 mmSTM32AudioEffects, the printed circuit board in 3D

    STM32AudioEffects

    aidan-bin/ou-audio-effects-unit

    Audio effects unit designed for STM32

    97 parts8