
Openmv can shield
2468shrm/openmv_can_eth_shield
A PCB shield for the OpenMV camera which provides additional interfaces, including Ethernet and CAN

A carrier board for a Raspberry Pi Pico (W) for use in FRC robotics. Similar to the XRP board.
Pico Robotic Controller is an open-source printed circuit board by 2468shrm, from the 2468shrm/Pico-Robotic-Controller repository on GitHub. It is a 4-layer board of 91 × 110 mm with 103 parts on 171 nets, routed with 1,029 tracks and 188 vias.
It is built around the PCA9685PW, 74HC14 and TXS0104EPW, with the TCA9546AD, PESD1CAN-UX and DMG2305UX-13 among its other parts. Its parts include 24 diodes, 22 capacitors, 18 resistors, 13 ICs and 13 connectors. It belongs with the robots and motor control and computers and single-board computers boards and the RP2040 boards of this library.
A carrier board for a Raspberry Pi Pico (W) for use in FRC robotics. Similar to the XRP board.
This is an experimental device. Not all interfaces have been fully validated for proper function. Use at your own risk.
You may assume that this board is indended to compete with the XRP product from WPI, other developers, and SparkFun. It is not. The XRP board is awesome and I'll likely end up acquiring one (or two) for myself. I have been working on lo w-cost, roboRIO-like carrier boards for FRC for a couple of years.
Why create a carrier board like the roboRIO? To enable a lower-cost prototyping solution. This solution makes it less risky to a costly than using a roboRIO solution. Breaking a roboRIO means costly replacement that is sometimes hard to replace. One goal was to provide as many similar interfaces as possible but cost 25% the budget.
Things I didn't need to do with my use model: support LabVIEW despite being a team who lives and breaths LabVIEW. I did want to support rapid prototyping and so exploring circuitpython was a goal; particularly because of the library support for the STEMMA QT/Qwiic based sensors available from Adafruit.



The carrier board has the following interfaces and features.
The XRP board has some significant philospohical and design choices and features.
The PRC does not include any motor controllers on the board. However, it does provide a 2x5 pin connector and a dedicated PWM generator (I2C bus 0, address 0x41). The intent is to provide a board with 4 12V, 3.3 A motor controllers using a separate/dedicated battery input. Providing the capability to drive four H-Bridges allows for demonstration chassis (skid steer or Meccanum). This allows replaceable solutions as well as future upgrades for higher current. Moreover, the PWM / Servo connections allow for use of a conventional FRC PWM-controlled motor controller.
The PRC provides four STEMMA QT / Qwiic connectors in lieu of a specific set of sensors (IMU). This allows out use of different sensors dependent on the application.
The PRC also has CAN and Ethernet connectivity in addition to the WiFi and BlueTooth provided by the Pice W board.
Differences between the roboRIO, XPR, and PRC boards.
| Interface / Feature | RoboRIO | XRP | SHRH's Board |
|---|---|---|---|
| Processing | Zinq | RPi Pico W | RPi Pico W |
| Ethernet | 1 Gb | — | Via 10/100 Mb FeatherWing |
| WiFi | Via OpenMesh | Y | Y |
| USB Host | Y | — | — |
| CAN | Y | — | Via Picobell CAN board |
| Relay | Y | — | — |
| Digital I/O | 10 + MXP | — | 8 |
| ADC | 4 | — | 2 |
| I2C | 2 | — | — |
| STEMMA QT / Qwiic | — | 4 | 4 |
| SPI | 2 | — | — |
| RS-232 | 1 | — | — |
| Gyro | Y | 6 DOF IMU (LSM6DSO) | — |
| Status LEDs | Y | Pico W LED | Y (NEOPIXEL) + Pico W LED |
| NEOPIXEL String | 2 via PWM outputs | — | Y |
| Low-Current Motor Control | — | 4 | 4 on sidecar board |
| Per H-Bridge Max Current | — | 1.5 A | 3.3 A |
| I/Os Per Motor Interface | — | 2 (equivalent of STEMMA per motor) | — |
| Reset Button | Y | Y | Y |
| Power In | 12 V | 5-11 V | 12 V |
| Power Conntector | Sauro | Barrel | Wago 250-202 |
Differences between the XRP and PRC pin usage and functions.
| Pin | Pico W Alternatives | XRP Interface | XRP Function | PRC Board |
|---|---|---|---|---|
| GPIO 0 | U0 TX / SDA0 / MISO0 | Motor 3 | Encoder A | DIO 0 |
| GPIO 1 | U0 RX / SCL0 / CS0 | Encoder B | DIO 1 | |
| GPIO 2 | SDA1 / SCK0 | Phase | PWM Gen SDA | |
| GPIO 3 | SCL1 / MOSI0 | Enable | PWM Gen SCL | |
| GPIO 4 | U1 TX / SDA0 / MISO0 | Left Motor | Encoder A | I2C Switch SDA |
| GPIO 5 | U1 RX / SCL0 / CS0 | Encoder B | I2C Switch SCL | |
| GPIO 6 | SDA1 / SCK0 | Phase | DIO 2 | |
| GPIO 7 | SCL1 / MOSI0 | Enable | DIO 3 | |
| GPIO 8 | U1 TX / SDA0 / MISO1 | Motor 4 | Encoder A | DIO 4 |
| GPIO 9 | U1 RX / SCL0 / CS1 | Encoder B | DIO 5 | |
| GPIO 10 | SDA1 / SCK1 | Phase | DIO 6 | |
| GPIO 11 | SCL1 / MOSI1 | Enable | DIO 7 | |
| GPIO 12 | U0 TX / SDA0 / MISO1 | Right Motor | Encoder A | PWM Gen Enable |
| GPIO 13 | U0 RX / SCL0 / CS1 | Encoder B | Reset Switch | |
| GPIO 14 | SDA1 / SCK1 | Phase | not connected | |
| GPIO 15 | SCL1 / MOSI1 | Enable | SPI CS (Ethernet) | |
| GPIO 16 | U0 TX / SDA0 / MISO0 | Servo 1 | Signal | SPI MISO |
| GPIO 17 | U0 RX / SCL0 / CS0 | Servo 2 | Signal | NEOPIXEL (board) |
| GPIO 18 | SDA1 / SCK0 | IMU / Qwiic | SDA | SPI SCK |
| GPIO 19 | SCL1 / MOSI0 | SCL | SPI MOSI | |
| GPIO 20 | SDA0 | Range | Trigger | SPI CS (CAN) |
| GPIO 21 | SCL0 | Echo | SPI INT (CAN) | |
| GPIO 22 | User button / extra | NEOPIXEL (String) | ||
| GPIO 26 | SDA1 / ADC0 | Line Follower | Left | ADC 0 |
| GPIO 27 | SCL1 / ADC1 | Right | ADC 1 | |
| GPIO 28 | VIN_meas / extra | not connected |
The following describes the PRC board components, features, and
When exploring the board's detail and function, it may be helpful to refer to the board's schematic (Link).
The power system has the following components:
The PRC is intended to serve as a low-cost roboRIO. To that end it includes computation and communication at the heart of the system.
The PRC includes a socket to install a Raspberry Pi Pico W board. This is in component designator U2.
The PRC includes a socket to install an Adafruit Picowbell board (link). This board uses a Microchip MCP2515 SPI to CAN device. This is an optional device; the PRC can opeate with CAN, Ethernet, Both, or none.
The CAN and Ethernet boards share the same SPI MOSI, MISO, and SCK signals, but have independent chips selects (and in the case of CAN a separate interrupt signal).
The PRC includes a socket to install an Adafruit Ethernet Featherwing (link).This is an optional device; the PRC can opeate with CAN, Ethernet, Both, or none.
The CAN and Ethernet boards share the same SPI MOSI, MISO, and SCK signals, but have independent chips selects.
There are multiple digital and analog sensor connection methods used with the PRC board. These include a number of I2C interfaces that use the Qwiic/STEMMA QT format, analog inputs, and digital I/Os.
There are four (4) Qwiic/STEMMA QT connectors. These connectors (X1-X4) connect to the Pico W I2C bus 1 via an TCA9546 4-port I2C switch/mux (I2C bus 1 address 0x70).
The Qwiic/STEMMA QT connector provide the two I2C signals (each connector coming from one dedicated output of the I2C mux/switch), 3.3V, and GND. This format connector assumes the attached device provides the SDA/SCL pull ups and any local level shifting to the sensor. It also assumes the board provides 3.3V conversion to the sensor used. Each Qwiic/STEMMA QT connection may chain multiple sensors provided their I2C addresses do not collide and the signal integrity of the I2C signals is maintained.
The Qwiic/STEMMA QT to mux/switch channel is provided in the following table.
| Channel | Interface | Function / # |
|---|---|---|
| 0 | X1 | SDA0 |
| 1 | SCL0 | |
| 2 | X2 | SDA1 |
| 3 | SCL1 | |
| 4 | X3 | SDA3 |
| 5 | SCL3 | |
| 6 | X4 | SDA2 |
| 7 | SCL2 |
There are two (2) analog input pins that connect to the Pico W ADC0 and ADC1 pins. The board buffers the input signals between pin and Pico W ADC inputs with a unity gain opamp. This is done to provide the highest accuracy while allowing the use of sensors with larger output impedances.
The ADCs use a 3x2 pin header, and uses the same pin layout as the roboRIO's AIN connections; signal, power, and ground. Ground is closest to the board edge and power in the middle. The power pin voltage is 3.3V since the Pico W ADC range is 0 to 3.3 V.
There are eight (8) DIOs arranged in two groups of four, DIO0-3 and DIO4-7. Each group has an independent level shifter (TXS0104E). The level shifter includes 10 kΩ pull ups. Since the Pico W has 3.3V (only) I/Os, the VCCA of both level shifters use 3.3 V. However the VCCB of the external side of each level shifter is set by an external jumper (J5 for DIO0-3 and J9 for DIO4-7) and can be set to either 3.3 V or 5 V.
Each DIO group uses a 3x4 pin header, and uses the same pin layout as the roboRIO's DIO connections; signal, power, and ground. Ground is closest to the board edge and power in the middle. The power pin voltage is the same voltage pdovided to the VCCB of the level shifter.
There are two main interfaces for controlling motors and servos.
The PWM/Servo interface uses the first 8 channels of a PCA9685 PWM generator (I2C bus 0, I2C address 0x40).
If using the PWM/Servo interface for servo control, connect the J12 connector (supplying SERVO_VDD) to an external power supply. This is not needed if the PWM/Servo interface is being used to connect to external motor controllers from REV, CTRE, etc.
| Channel | Interface | Function / # |
|---|---|---|
| 0 | PWM Block | PWM 0 |
| 1 | PWM 1 | |
| 2 | PWM 2 | |
| 3 | PWM 3 | |
| 4 | PWM 4 | |
| 5 | PWM 5 | |
| 6 | PWM 6 | |
| 7 | PWM 7 | |
| 8-15 | Unused | |
The motor control interface uses the first 8 channels of a dedicated PCA9685 PWM generator (I2C bus 0, I2C address 0x41).
These connect to the motor controller board and drive four (4) instances of a TI DRV8870 3.5 A motor controller. This board is intended to be used in FTC-class robots or for classroom and learning (not competition) use.
The DRV8870 has 2 signal inputs per IC (IN1, IN2). The motor controller operates as follows:
| IN1 | IN2 | OUT 1 | OUT 2 | Motor Action |
|---|---|---|---|---|
| 0 | 0 | High-Z | High-Z | Coast Current direction remains and flows through reverse body diodes of H-bridge. |
| 0 | 1 | GND | VDD | Reverse Current flows from OUT 2 to OUT 1. |
| 1 | 0 | VDD | GND | Forward Current flows from OUT 1 to OUT 2. |
| 1 | 1 | GND | GND | Brake Current recirculates between low-side H-bridge. |
Note: When pulse width modulating the IN1 & IN2 to provide speed control of the attached motors, it is important to realize that operating in coast or brake modes is important to consider.
In coast mode, the motor coasts when both IN1 and IN2 are 0. This matches the normal signal polarity of a PWM signal (high represents active).
| Mode | Direction | IN1 | IN2 |
|---|---|---|---|
| Coast | Forward | PWM'd | 0 |
| Reverse | 0 | PWM'd |
The PWM will drive the motor fur the duration of the high time of the duty cycle and coast through the low time.
In brake mode, the motor breaks when both IN1 and IN2 are 1. This is opposite the normal signal polarity of a PWM signal, so the signal generation needs to be inverted and the low-time needs to represent the desired fraction of the output. Also, the PWM'd input signal must be swapped so that the correct direction is maintained.
| Mode | Direction | IN1 | IN2 |
|---|---|---|---|
| Coast | Forward | 1 | inverse PWM'd |
| Reverse | Inverse PWM'd | 1 |
Also note this is a not the PWM encoding used for servo controls. The PWM modulation applied to IN1 and IN2 is full duty cycle of the signal's period (not the first 2 ms of 20 ms signal).
I2C bus 0, address 0x41
| Channel | Interface | Function / # |
|---|---|---|
| 0 | M0 | IN1 |
| 1 | IN2 | |
| 2 | M1 | IN1 |
| 3 | IN2 | |
| 4 | M2 | IN1 |
| 5 | IN2 | |
| 6 | M3 | IN1 |
| 7 | IN2 | |
| 8-15 | Unused | |
The PRC provides simple interfaces for visual status.
A single NEOPIXEL device is mounted on the board. This is intended to provide visual status while developing code or tuning algodrithms and mechanisms.
A 3-position 250-series WAGo connector is provided to connect a NEOPIXEL strip to the board. This is intended to provide visual status for distant observation. The most common use case being robot to driver status across the FRC field.
The PRC PCB uses four layers primarily to keep power distribution as clean as possible. The layers are used as described in the following table. Each layer label includes a link to the layer's image.
| Layer | Use |
|---|---|
| F.Cu | +3V3 fill (main +3.3V plane) |
| Signal routing | |
| Component placement (SMT) | |
| In1.Cu | +BATT fill (main battery plane) |
| Signal routing | |
| In2.Cu | +5V fill (main +5V plane) |
| VIOA and VIOB (DIO power) | |
| Signal routing (across CPU, CAN, Eth modules) | |
| B.Cu | Ground fill (main ground plane) |
| +5V fill (small fills and 5V traces) |
| Qty | Value | Footprint | References |
|---|---|---|---|
| 16 | 0.1u | Capacitor_SMD:C_1206_3216Metric | C3, C5, C6, C7, C8, C9, C10, C11, C13, C14, C15, C16, C17, C20, C21, C22 |
| 13 | PESD1CAN-UX | Appreciate:PESD1CANUX | D2, D4, D5, D6, D7, D8, D9, D10, D11, D12, D13, D14, D15 |
| 9 | 5K1 | Resistor_SMD:R_1206_3216Metric | R1, R2, R3, R4, R5, R6, R7, R9, R18 |
| 8 | 13 | Resistor_SMD:R_0603_1608Metric | R10, R11, R12, R13, R14, R15, R16, R17 |
| 8 | LED | LED_SMD:LED_0603_1608Metric | D17, D18, D19, D20, D21, D22, D23, D24 |
| 4 | 10u | Capacitor_SMD:C_1206_3216Metric | C1, C4, C18, C19 |
| 4 | MountingHole_Pad | MountingHole:MountingHole_2.2mm_M2_Pad | H1, H2, H3, H4 |
| 4 | STEMMA_I2C_QT | Connector_JST:JST_SH_BM04B-SRSS-TB_1x04-1MP_P1.00mm_Vertical | X1, X2, X3, X4 |
| 4 | conn_04_03 | Appreciate:conn_04x03 | J2, J4, J7, J8 |
| 3 | 250-202 | Appreciate:250202 | J1, J11, J12 |
| 3 | LOGO | LOGO | G***, G***, G*** |
| 2 | 470u | Appreciate:CAPAE830X1050N | C2, C12 |
| 2 | 74HC14 | Package_SO:TSSOP-14_4.4x5mm_P0.65mm | U11, U12 |
| 2 | APX321WG-7 | Appreciate:SOT95P285X145-5N | U9, U10 |
| 2 | Conn_01x03 | Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical | J5, J9 |
| 2 | PCA9685PW | Package_SO:TSSOP-28_4.4x9.7mm_P0.65mm | U4, U13 |
| 2 | TXS0104EPW | Package_SO:TSSOP-14_4.4x5mm_P0.65mm | U7, U8 |
| 1 | 100 | Resistor_SMD:R_1206_3216Metric | R8 |
| 1 | 250-203 | Appreciate:250-203_1 | J3 |
| 1 | Conn_01x02 | Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical | J6 |
| 1 | Conn_02x03_Odd_Even | Connector_PinHeader_2.54mm:PinHeader_2x03_P2.54mm_Vertical | J10 |
| 1 | Conn_02x05_Odd_Even | Connector_PinHeader_2.54mm:PinHeader_2x05_P2.54mm_Vertical | J13 |
| 1 | DMG2305UX-13 | Appreciate:SOT96P240X120-3N | Q1 |
| 1 | Ethernet_FeatherWing | Appreciate:Feather_M4_CAN_Express | U6 |
| 1 | KSC623JLFG | Appreciate:KSC623JLFG | S1 |
| 1 | LED | LED_SMD:LED_1206_3216Metric | D16 |
| 1 | RPi_Pico_W | Appreciate:RPi Pico W | U2 |
| 1 | RPi_Picobell_CAN_Bus | Appreciate:RPi Pico W | U3 |
| 1 | TCA9546 | Package_SO:TSSOP-16_4.4x5mm_P0.65mm | U5 |
| 1 | UPR20e3 | Appreciate:DO-216 | D1 |
| 1 | WS2812B | LED_SMD:LED_WS2812B_PLCC4_5.0x5.0mm_P3.2mm | D3 |
| 1 | Weewooday-820 | Appreciate:Weewooday-820 | U1 |
It measures 91 × 110 mm and has 4 copper layers, 4.69 mm thick.
103 parts, built around the PCA9685PW, 74HC14, TXS0104EPW and TCA9546AD. 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.
From the 2468shrm/Pico-Robotic-Controller repository on GitHub, at the commit this page was made from: the board is Pico Robotic Controller.kicad_pcb and its schematic Pico Robotic Controller.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Its repository states no licence, so its author keeps all rights: ask 2468shrm before reusing the design.

2468shrm/openmv_can_eth_shield
A PCB shield for the OpenMV camera which provides additional interfaces, including Ethernet and CAN

2468shrm/openmv_can_i2c_shield
A PCB which is a shield for the OpenMV camera for CAN & I2C connection

gianluca-rainis/Z80DevBoard
An advanced development board for the Z80 microprocessor, powered by an RP2040.

2468shrm/M4_CAN_Feather_Carrier_v6
Sixth version of the M4 Feather CAN Express carrier board. Hopefully, "the last".

alvarop/ostur
This is a work in progress for a cheese cave controller system. The goal is to be able to control a mini fridge to get the right conditions for cheesemaking.

andrew-bolin/flexible_audio_hub
My ears and speakers will last a lifetime (I hope), but home theatre audio standards do not. My old stereo amplifier works fine, why can't I get an HDMI upgrade module that gives it CEC (control via TV remote).

BarbourSmith/Maslow-Mini-Control-Board
A third KiCad project that puts both existing boards on one PCB:
