

Combined
Getting the most out of your hobby servo
- Size
- 36 × 20 mm
- Copper layers
- 2
- Thickness
- 1.6 mm
- Parts
- 24
- Nets
- 53
- Pads
- 145
- Tracks, vias
- 339, 25
- Pours
- 2
- Routed
- Yes
- KiCad
- KiCad 7 (file 20221018)
- Created
- 13 Apr 2021
- Updated
- 1 Apr 2024
Overview
Combined is an open-source printed circuit board by adamb314, from the adamb314/ServoProject repository on GitHub. It is a 2-layer board of 36 × 20 mm with 24 parts on 53 nets, routed with 339 tracks and 25 vias.
It is built around the ATSAMD21G18A-AU, ITR8307 and AP2112K-3.3. Its parts include 6 resistors, 5 ICs, 4 capacitors and 3 diodes. It belongs with the robots and motor control boards and the SAM D and SAM boards of this library.
Main components
3ATSAMD21G18A-AU
TQFP-48-40℃~+85℃ 1.62V~3.6V 10bit 12bit 256KB 32 Bit 32KB 38 48MHz ARM Cortex-M0+ Built-in FLASH 上电复位(POR)、欠压检测(BOR/LVD/LVR/LVI)、看门狗复位、内置通用定时器、硬件CRC、日历功能、触控功能 TQFP-48(7x7) Microcontrollers (MCU/MPU/SOC) ROHSMicrochip TechnologyMicrocontrollers (MCU/MPU/SOC)ITR8307
插件1.2V 20us@100uA,1kΩ 20us@100uA,1kΩ 940nm Phototransistor 插件 Reflective Optical Interrupters ROHSEverlight ElectronicsReflective Optical InterruptersAP2112K-3.3
SOT253.3V 600mA CMOS Low Dropout Linear Regulator with EnableDiodes IncorporatedUncategorised
README
README.mdServoProject
by Adam Bäckström
Getting the most out of your hobby servo

Video demo of project
Additional documentation for the project
Build instructions
Legacy build instructions
Project structure
ArduinoSketch
This folder contains the Arduino project for the Adafruit ItsyBitsy M0 Express boards.
Easiest way to program and configure the servos is through the configurationWizard.py script.
Just run python3 ./ArduinoSketch/configurationWizard.py to get started. The script will ask if it should install any missing dependencies.
PLEASE NOTE! Windows users must use MSYS2 due to the the PyGObject package, see https://pygobject.readthedocs.io/en/latest/getting_started.html. After installing MSYS2 run the script with:
C:\msys64\mingw64\bin\python.exe ArduinoSketch\configurationWizard.pyManually compiling the Arduino sketch
When compiling, the active configuration is selected by modifying the #include "*.h" line in the config/config.h file to include the desired config file. The configSelector.py script can be used to simplify the config selecting process by giving a drop-down list with all configs in the config folder.
The folder also holds a Makefile which can be used to compile and transfer the project. One benefit of using the Makefile is that the configSelector script is always executed prior to compiling. To be able to use the Makefile you must first install arduino-cli.
Arduino sketch dependencies:
- Adafruit DotStar `source:` Arduino Library List
- Eigen `source:` Arduino Library ListArduinoLibrary/ServoProjectController
Arduino library for communicating with the servos.
C++/Library
Holds the C++ library for communicating with the servos.
Dependencies:
- GNU Make >= 4.2.1
- gcc >= 9.3.0
- boost >= 1.71.0C++/Demo
Minimal c++ demo project.
C++/Example6dofRobot
Example 6dof robot project.
To compile run make. This creates the program ./executable with the following options.
Allowed options:
--playPath play the path defined in createPath()
--gui open jogging gui
--output arg data output file
--simulate simulate servosDependencies:
- Eigen >= 3.4.0
- gtkmm-3.0 >= 3.24CadFiles
Holds all .stl and the original Freecad files
PcbDesignes
Holds all KiCad projects for the electronics
Python/Demo
Python demo project.
Python/ServoProjectModules
Holds all python modules for the project.
Communication bus setup for demo projects
ONLY CONNECT THE SERVO TO 3.3V LOGIC!!!!
PLEASE NOTE! The bus controller needs to have a low latency to get fast communication with the servos. Most standard USB to Serial converters buffer the data and only transfers every 10 ms or so. This becomes a problem since the communication protocol will wait for the response from each servo before moving on to the next, adding huge delays.
To get the best communication speed it is recommended to use an "Adafruit ItsyBitsy M0 Express" (or similar ARM based Arduino) as the USB to Serial converter. Just program the Arduino with the usbToSerial.h configuration in the ArduinoSketch to get started. In usbToSerial.h you can also configure any regular servos you want to control together with the ServoProject modified ones.
How to switch to PWM interface version
ONLY CONNECT THE SERVO TO 3.3V LOGIC!!!!
Using the PWM interface is not recommended due to low resolution and high noise, but it is possible by modifying the configuration file. To enable PWM control replace the getCommunicationHandler() function with the version below.
static std::unique_ptr<Communication> getCommunicationHandler()
{
Serial.begin(115200);
auto com = std::make_unique<Communication>(SerialComOptimizer(&Serial));
uint8_t pwmPin = 0; // Rx pin, ONLY CONNECT TO 3.3V LOGIC!!!!
uint8_t controlSpeed = 14;
uint8_t backlashControlSpeed = 2;
float scale = 2.0f; // 2 units per us (4096 units == 360 deg)
float offset = 1024.0f; // move to 1024 units (90 deg) for 1500 us pwm signal
com->addCommunicationNode(
std::make_unique<DCServoCommunicationHandlerWithPwmInterface>(1,
createDCServo<SetupConfigHolder>(controlSpeed, backlashControlSpeed),
pwmPin, scale, offset));
return com;
}License
Open Source License
ServoProject is free software. You can redistribute it and/or modify it under the terms of Creative Commons Attribution 3.0 United States License.
To view a copy of this license, visit http://creativecommons.org/licenses/by/3.0/us/
Parts
24| Qty | Value | Footprint | References |
|---|---|---|---|
| 2 | 10uF | Capacitor_SMD:C_0402_1005Metric | C1, C3 |
| 2 | 120 | Resistor_SMD:R_0402_1005Metric | R1, R2 |
| 2 | 1uF | Capacitor_SMD:C_0402_1005Metric | C4, C5 |
| 2 | 8.2k | Resistor_SMD:R_0402_1005Metric | R3, R5 |
| 2 | Conn_01x05 | Connector_PinHeader_1.00mm:PinHeader_1x05_P1.00mm_Vertical_SMD_Pin1Left | Enc1, Prog1 |
| 2 | D | Diode_SMD:D_SOD-123F | D2, D3 |
| 2 | ITR8307 | OptoDevice:Everlight_ITR8307F43 | U1, U2 |
| 1 | 100k | Resistor_SMD:R_0402_1005Metric | R4 |
| 1 | 2.2k | Resistor_SMD:R_0402_1005Metric | R6 |
| 1 | AP2112K-3.3 | Package_TO_SOT_SMD:SOT-23-5 | U3 |
| 1 | ATSAMD21G18A-A | Package_QFP:TQFP-48_7x7mm_P0.5mm | U4 |
| 1 | Conn_01x04 | Connector_PinHeader_1.00mm:PinHeader_1x04_P1.00mm_Vertical_SMD_Pin1Left | COM1 |
| 1 | LED | LED_SMD:LED_0805_2012Metric | D1 |
| 1 | Motor_DC | Footprints:Motor17mm | M1 |
| 1 | TB6612FNG | Package_SO:SSOP-24_5.3x8.2mm_P0.65mm | U5 |
| 1 | USB_B_Micro | Connector_USB:USB_Micro-B_Amphenol_10118194_Horizontal | USB1 |
The 23 most common of 24 parts.
More from adamb314/ServoProject
4- 2 layers45.3 × 42.7 mm

- 2 layers8.4 × 3.6 mm

- 2 layers8.1 × 11 mm

- 2 layers9 × 3.6 mm

Similar boards
- 4 layers117 × 107 mm

Mainboard dual battery
shurik179/yozh
Small robot based on Pololu's Zumo chassis but programmable in CircuitPython
121 parts8MIT - 2 layers76.2 × 112 mm

IOBoard ATSAMD21
jelkinsjames/chameleon-PCB
This repo has all the PCB designs for the UW Engine 2023 Chameleon digital synth project.
67 parts3GPL-3.0 - 2 layers84.1 × 97.1 mm

- 4 layers70 × 85 mm

- 2 layers52 × 34 mm

- 2 layers35.6 × 17.8 mm

Adafruit adafruit itsybitsy m0 pcb adafruit itsybitsy m0
oomlout/oomlout_oomp_project_bot_v_2
28 parts - 2 layers31.4 × 16.3 mm

Prototipo1
erufes/Seguidor2021-H
Projeto de hardware do robô da equipe de Seguidor de Linha do projeto Equipe de Robótica da UFES (ERUS) para o robô de 2020 e 2021, com objetivo de construir um robô para competir pelas primeiras posições na IronCup…
20 parts2GPL-3.0 - 2 layers78 × 66 mm

LineSensor
RoboticsBrno/RB0001-LineSensor
Line sensor with 8 sensors for measuring the reflectance of the surface with integrated I2C A/D converter.
36 parts1MIT
Questions
How big is the Combined PCB?
It measures 36 × 20 mm and has 2 copper layers, 1.6 mm thick.
What parts does the Combined use?
24 parts, built around the ATSAMD21G18A-AU, ITR8307 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 Combined KiCad files?
From the adamb314/ServoProject repository on GitHub, at the commit this page was made from: the board is PcbDesignes/combined/combined.kicad_pcb and its schematic PcbDesignes/combined/combined.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Can I use the Combined design in my own project?
Its repository states no licence, so its author keeps all rights: ask adamb314 before reusing the design.
