Skip to the content
4 layers100 × 100 mmDAC ADC PWM IO, the printed circuit board in 3D

STM32 microcontroller with lots of periferials such as ADC, differential ADC, Input Capture, PWM, USB, Encoder, DAC, Digital Input, RTC, CAN-bus + Alarm etc.

Size
100 × 100 mm
Copper layers
4
Thickness
1.6 mm
Parts
270
Nets
208
Pads
889
Tracks, vias
2,023, 1,032
Pours
12
Routed
Yes
KiCad
KiCad 6 (file 20211014)
Created
18 Aug 2021
Updated
9 Feb 2024

Overview

DAC ADC PWM IO is an open-source printed circuit board by DanielMartensson, from the DanielMartensson/STM32-PLC repository on GitHub, published under the MIT licence. It is a 4-layer board of 100 × 100 mm with 270 parts on 208 nets, routed with 2,023 tracks and 1,032 vias.

It is built around the TCAN332D, LM2902 and LM2904, with the BZX84C3V6LT1G-TP, BUK9M15-60EX and BC847C-QR among its other parts. Its parts include 124 resistors, 44 diodes, 36 capacitors, 30 fuses and 11 transistors. It belongs with the audio and music and interfaces and adapters boards and the STM32 boards of this library.

Main components

8

README

README.md

STM32 PLC

a

This project is a PCB bord that has the following measurement and control input/output:

  • 12 x ADC at 16-bit resolution for 0-20mA input with programmable gain
  • 5 x Differential ADC at 16-bit for 0-20mA input with programmable gain
  • 3 x DAC at 12-bit with 0-20mA output
  • 8 x PWM for 0-2.2A with N-channel MOSFET
  • 10 x Digital Input
  • 1 x CAN-bus channel
  • 4 x Input Capture for 0 kHz to 10kHz
  • 3 x Encoder for -32768 to 32767 pulses
  • 1 x USB port for connecting with OpenSourceLogger and GoobySoft
  • 1 x SPI with 3 chip select for ILI9341 LCD with touch
  • 1 x ST-Link V2 connection
  • 1 x RTC clock with two alarms A(date) and B(week day) and a battery holder so the RTC remembers the date and time

Protection

  • All ADC, Digital Input, Differential ADC, Input Capture and Encoder are high voltage protected with PTC(fall current 30mA) fuse + 3.6v zener diode.
  • All PWM and DAC are high voltage protected with N-channel MOSFET and PNP-transistor and OP-amp.
  • The CAN-bus channel is high voltage peak protected for 3000V under a short time with a TVS-diode. The CAN-bus transmitter itself can hold against -14V to +14V, but the TVS-diode has a limit around 6V.

Documentation

The documentation for the pin map can be found in the Documentation folder. Also all the article numbers for each component can be found in at the DAC ADC PWM IO.sch file in the PCB folder. Just double click on a PCB symbol and see the Mouser Electronics article number of the electrical component.

Calibration

Yes, it's possible to set the calibration to each input in this project. You need to have the ILI9341 touch LCD with SPI bus. Open the STM32 PLC Pinouts.pdf and see the connection for the LCD. You can also set the PWM frequency and analog input gain for the ADC and Differential ADC at 16-bit.

SAE J1939

The STM32 PLC has internal SAE J1939 protocol. Made from Open-SAE-J1939 repository.

OpenSourceLogger

This is a QT C++ software that you can connect to your STM32 PLC board via the USB and then you can send signals from OpenSourceLogger and recieve signals. OpenSourceLogger is a very easy to use logging and controlling software and it stores data at a SQL server.

GoobySoft

This is a ImGui C++ project that do the same as OpenSourceLogger, but it's much better and have more features. The reason why I moved away from QT C++ to ImGui C++ is because it's much easier to write a GUI application in C++ by using ImGui instead of QT. With QT, you are stuck with object oriented programming. Everything is a class. But for ImGui, you can choose which type of lever you want to code, I prefer C-style C++ code with a small dose of object oriented programming (if needed).

Consider that I will work on GoobySoft instead of OpenSourceLogger.

Program

The STM32 PLC has a lot of functions you can select by touching the LCD.

  • A:Show measurement and time
  • B:Set analog gain
  • C:Set PWM frequencies
  • D:Set analog input calibration
  • E:Set pulses per encoder revolution
  • F:Set date and time and alarm
  • G:Do a PGN request
  • H:Show ECU addresses
  • I:Commanded address
  • J:Show this ECU DM1 codes
  • K:Show other ECU DM1 codes
  • L:Show this ECU DM2 codes
  • M:Show other ECU DM2 codes
  • N:Show this ECU name
  • O:Show other ECU name
  • P:Show this ECU identifications
  • Q:Show other ECU identifications
  • R:SAE J1939 Auxiliary valve command
  • S:Analog in to PWM
  • T:Analog in to analog out
  • U:About STM32 PLC

How to build this STM32 PLC

  1. Download this repository
  2. Download & Install KiCad
  3. Open the PCB folder and open the .pro file with KiCAD and greate a gerber file of your own choice
  4. Go to your PCB manufacturer and give them the gerber file and let them produce the board for you
  5. Order the eletrical components from Mouser Electronics
  6. Once you have the eletrical components and your PCB board, it's time to solder them.
  7. Once the PCB board is finished, then install STM32CubeIDE
  8. Open the Code project and import the .ioc project file using STM32CubeIDE
  9. Flash the board with the C code by using ST-Link V2 connection
  10. Connect the ILI9431 touch LCD and then you are done!

Software used

  • KiCAD: 6.0.7
  • STM32CubeIDE 1.10.1

Status of the project

It's done. I don't plan to update this project. Everything is working and it will remain that way.

Parts

270
QtyValueFootprintReferences
6110kResistor_SMD:R_0603_1608MetricR11, R100, R101, R102, R103, R104, R105, R106, R107, R108, R109, R110, R111, R112, R113, R114 +45
54160Resistor_SMD:R_0603_1608MetricR10, R14, R15, R16, R17, R18, R19, R20, R21, R22, R23, R24, R25, R26, R27, R28 +38
42BZX84C3V6LT1GDiode_SMD:D_SOT-23_ANKD1, D2, D10, D11, D12, D13, D14, D15, D16, D17, D18, D19, D20, D21, D22, D23 +26
22Max 30mAFuse:Fuse_0603_1608MetricF1, F2, F3, F10, F11, F12, F21, F22, F23, F24, F25, F26, F27, F28, F29, F30 +6
1110nFCapacitor_SMD:C_0603_1608MetricC10, C12, C16, C17, C25, C28, C33, C34, C35, C36, C40
10100nFCapacitor_SMD:C_0603_1608MetricC1, C6, C7, C11, C13, C21, C22, C24, C26, C29
8BUK9M15-60EXPackage_TO_SOT_SMD:LFPAK33Q4, Q5, Q6, Q7, Q8, Q9, Q10, Q11
8Max 2.5AFuse:Fuse_1210_3225MetricF13, F14, F15, F16, F17, F18, F19, F20
71uFCapacitor_SMD:C_0603_1608MetricC4, C5, C9, C14, C18, C19, C27
4MountingHole_PadMountingHole:MountingHole_2.7mm_M2.5_DIN965_PadH1, H5, H6, H7
3220Resistor_SMD:R_0402_1005MetricR54, R78, R79
34.7uFCapacitor_SMD:C_0603_1608MetricC8, C15, C30
3BC847C-QRPackage_TO_SOT_SMD:SOT-23Q1, Q2, Q3
20Resistor_SMD:R_0402_1005MetricR55, R56
210pFCapacitor_SMD:C_0402_1005MetricC2, C3
24.7pFCapacitor_SMD:C_0402_1005MetricC20, C23
260Resistor_SMD:R_0603_1608MetricR53, R83
2Screw_Terminal_01x9TerminalBlock_Phoenix:TerminalBlock_Phoenix_PT-1,5-9-5.0-H_1x09_P5.00mm_HorizontalJ1, J16
11.5kResistor_SMD:R_0603_1608MetricR44
110uFCapacitor_SMD:C_1206_3216MetricC31
12kResistor_SMD:R_0402_1005MetricR1
1AP7343-33W5-7Package_TO_SOT_SMD:SOT-23-5U2
1Battery_CellBattery:BatteryHolder_Keystone_3002_1x2032BT1
1Conn_01x08Connector_PinHeader_2.54mm:PinHeader_1x08_P2.54mm_VerticalJ3
1HSECrystal:Crystal_SMD_3225-4Pin_3.2x2.5mm_HandSolderingY1
1LED_CAN_RX_TXLED_SMD:LED_0603_1608MetricL1
1LED_ERRORLED_SMD:LED_0603_1608MetricL2
1LED_USB_RX_TXLED_SMD:LED_0603_1608MetricL0
1LM2902Package_SO:SOIC-14_3.9x8.7mm_P1.27mmU3
1LM2904Package_SO:SOIC-8_3.9x4.9mm_P1.27mmU5
1LSECrystal:Crystal_SMD_EuroQuartz_EQ161-2Pin_3.2x1.5mm_HandSolderingY2
1PESD5V0L2BT,215Package_TO_SOT_SMD:SOT-23D28
1SK56A-LTPDiode_SMD:D_SMAD44
1ST-Link V2 connetorConnector_PinHeader_2.54mm:PinHeader_1x06_P2.54mm_VerticalSTLINK2
1STM32F373VBTxPackage_QFP:LQFP-100_14x14mm_P0.5mmU4
1SW_PushButton_Switch_SMD:SW_SPST_FSMSMSW1
1Screw_Terminal_01x02TerminalBlock_Phoenix:TerminalBlock_Phoenix_PT-1,5-2-5.0-H_1x02_P5.00mm_HorizontalJ2
1Screw_Terminal_01x10TerminalBlock_Phoenix:TerminalBlock_Phoenix_PT-1,5-10-5.0-H_1x10_P5.00mm_HorizontalJ15
1Screw_Terminal_01x12TerminalBlock_Phoenix:TerminalBlock_Phoenix_PT-1,5-12-5.0-H_1x12_P5.00mm_HorizontalJ8
1Screw_Terminal_01x15TerminalBlock_Phoenix:TerminalBlock_Phoenix_PT-1,5-15-5.0-H_1x15_P5.00mm_HorizontalJ14
1TCAN332Package_SO:SOIC-8_3.9x4.9mm_P1.27mmU6
1USB_BConnector_USB:USB_B_OST_USB-B1HSxx_HorizontalJ9

Similar boards

  • 4 layers129 × 104.6 mmPC-1100X, the printed circuit board in 3D

    PC-1100X

    zscircuits/zs1100a

    All files hardware and software related to the zs1100a

    528 parts76
  • 2 layers130 × 100 mmAudiovisualiser, the printed circuit board in 3D

    Audiovisualiser

    alimleahat/analog-audio-visualizer-pcb

    Three-band analog audio visualizer built in KiCad for ELEC2101, with PCB files, assembly photos, and bench measurements.

    69 parts
  • 2 layers254 × 55.9 mmDelSol Mixer, the printed circuit board in 3D

    DelSol Mixer

    dzavalishin/hardware

    Misc smart house hardware

    124 parts3
  • 2 layers160 × 100 mmPower SMPS, the printed circuit board in 3D

    Power SMPS

    Synthron/ModLab

    Modular Electronics Workstation

    117 parts3
  • 4 layers144.7 × 95.9 mmCell Monitoring Unit (CMU), the printed circuit board in 3D

    Cell Monitoring Unit (CMU)

    VikingMotorsports/Battery-Management-System-Capstone-2026

    The BMS Capstones deliverables

    186 parts1
  • 4 layers61.9 × 84.4 mmFastStepper, the printed circuit board in 3D

    FastStepper

    harp-tech/device.faststepper

    A fast moving stepper motor controller device, with acceleration, jerk control, and end stop support

    141 parts

Questions

How big is the DAC ADC PWM IO PCB?

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

What parts does the DAC ADC PWM IO use?

270 parts, built around the TCAN332D, LM2902, LM2904 and BZX84C3V6LT1G-TP. 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 DAC ADC PWM IO KiCad files?

From the DanielMartensson/STM32-PLC repository on GitHub, at the commit this page was made from: the board is PCB/DAC ADC PWM IO.kicad_pcb and its schematic PCB/CAN.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the DAC ADC PWM IO design in my own project?

Its repository publishes it under the MIT licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).