Skip to the content
PCBKitNew board
2 layers140 × 90 mmRib, the printed circuit board in 3D

The Illinois Tech Robotics RIB is a custom PCB used to control our robots of all sizes.

Size
140 × 90 mm
Copper layers
2
Thickness
1.65 mm
Parts
96
Nets
155
Pads
607
Tracks, vias
2,396, 2,580
Pours
7
Routed
Yes
KiCad
KiCad 7 (file 20221018)
Created
14 Feb 2023
Updated
28 Sep 2023

Overview

Rib is an open-source printed circuit board by illinoistechrobotics, from the illinoistechrobotics/rib repository on GitHub. It is a 2-layer board of 140 × 90 mm with 96 parts on 155 nets, routed with 2,396 tracks and 2,580 vias.

It is built around the 74HCT244D, PCF8574T and MAX6959AAEE+, with the MCP3008-I/P, DC56-11EWA and LM3940IT-3.3 among its other parts. Its parts include 21 resistors, 19 connectors, 10 ICs, 10 diodes and 8 capacitors. It belongs with the robots and motor control boards and the RP2040 boards of this library.

Main components

11

README

README.md

Illinois Tech Robotics - Robot Interface Board (RIB)

This is a PCB design based around the existing Goliath protoboards, but adapted to work with a Raspberry Pi Pico (W), but is also usable with other robot designs using solder bridge jumpers to support various configurations.

Features

Output

The majority of the circuitry allows connecting 2 OSMC's (Open Source Motor Controller) v3.22 over RJ45. They are wired with pin 2 through 9, as CAT6 only has 8 conductors and pin 1 and 10 are the same as 2 and 9 respectively, in this case we don't need the increased current offered by the extra pins.

The 10 connections for the OSMCs are just PWM or digital outputs using MCT9001 Optocouplers, by default set up for 12V (Or whatever is supplied to VIN), but with a jumper it can be set to 5V or 3.3V logic to interface with a variety of motor controllers.

There is a MAX6959 36-channel LED driver chip, that independently controls the 2-digit 7-segment display, the status LEDs of the ethernet ports, and the 3 RGB LEDs present.

Input

2 rotary quadrature encoders can be connected with RJ45, intended to be used with the Pico's PIO. The RJ45 connections for the encoders have breakouts for Z inputs (for absolute positioning) or 2 more encoders with relative positioning only. These inputs are not connected to the Pico by default due to the limited number of GPIO pins.

There is a MCP3008 ADC which is used for battery voltage & current monitoring.

I/O

There are 2 PCF8574 I/O expanders which are mostly ununsed, allowing for the connection of low bandwith devices (e.g. enable pins, end stops / limit switches, basic on/off logic) as their speed is limited by the I2C bus. That said, the interrupt pins are broken out and can be optionally used for a decent connection for a rotary encoder.

The first I/O expander is connected to 2 N-channel MOSFETs that are connected to the board's input voltage for VIN @ 2A (total) controllable high-power output.

There are 3 extra GPIO pins exposed, which can be used for connecting e.g. the extra encoder pins, the I/O expander interrupts, or I2C communication to other RIB(s) in order to create a megaRIB for connecting more than 2 OSMCs.

Finally, there is a place for a Digi xBee to sit and communicate with the robot over 2.4Ghz / 900 MHz radio.

POWER

Additionally, the PCB pulls power in from the OSMCs over the RJ45 connections or the top left terminal block. The RIB can take in from 8 to 60V of power, or you can provide 5V via headers directly. If it's necessary, the RIB can be powered by a 2S Lithium battery, the power supply can still function at around 7V in.

The onboard 5V switching power supply can provide ~1.8A and the 3v3 regulator, which pulls from the 5V line, can use up to the same 1.8A limit. The 3v3 regulator exists to provide extra power to the xBee and 3v3 logic without having to put strain on the Pico.

The power inputs on the OSMC RJ45's can also be changed to output power and will match the logic voltage 5V/3.3V.

Programming

The Pi Pico W can be programming with Arduino-Pico, the Pico C++ SDK, Micro/CircuitPython, or Embassy Rust framework. Code examples below are written based on the Arduino-Pico framework. Note: we discovered a bug in Arduino-Pico's setXX functions affecting the RIB that is only fixed in v3.6.0 or higher.

Things to know for programming the hardware on the RIB:

The xBee is connected to UART0 / Serial1 on the Pico via pins 16 & 17 for TX & RX respectively.

text
Serial1.setRX(17);
Serial1.setTX(16);

The I2C bus for the LED driver and I/O expanders is connected to I2C1 / Wire, pins 20 & 21 for SDA and SCL respectively.

text
Wire.setSDA(20);
Wire.setSCL(21);

The LED driver has address 0x38. There is no library for the MAX6959 available online, we wrote one in rib-test-code. Look for lines like Wire.beginTransmission(0x38) and functions like set_digit() for example.

The I/O expanders have addresses 0x20 for the top one (connected to MOSFETs) and 0x21 for the bottom one.

The library xreef/PCF8574 has the ability to set pins as well, so the code you would use is

text
PCF8574 ioex1(0x20, 20, 21);
PCF8574 ioex2(0x21, 20, 21);

Parts

96
QtyValueFootprintReferences
14470Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R21, R22, R25, R26
7MCT9001Package_DIP:DIP-8_W7.62mm_SocketOC1, OC2, OC3, OC4, OC5, OC6, OC7
6MountingHole_PadMountingHole:MountingHole_4.3mm_M4_Pad_ViaH1, H2, H3, H4, H5, H6
510kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR37, R38, R39, R40, R41
5Conn_01x02_MaleConnector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJ14, J15, J17, J18, J19
5SB260Diode_THT_AKL:D_DO-15_P10.16mm_HorizontalD1, D2, D3, D6, D7
4RJ45_LEDConnector_RJ:RJ45_Amphenol_RJHSE538XJ1, J2, J3, J4
310uFCapacitor_THT:C_Rect_L7.0mm_W4.5mm_P5.00mmC5, C6, C7
31uFCapacitor_THT:C_Rect_L7.0mm_W4.5mm_P5.00mmC1, C2, C3
32k_Network05Resistor_THT:R_Array_SIP6RN2, RN3, RN4
3Conn_01x04_MaleConnector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_VerticalJ7, J9, J10
3LED_RKBGLED_THT:LED_D5.0mm-4_RGB_Staggered_PinsD8, D9, D10
3Screw_Terminal_01x02TerminalBlock_Phoenix:TerminalBlock_Phoenix_MKDS-1,5-2_1x02_P5.00mm_HorizontalJ11, J12, J13
22kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR42, R43
274HCT244Package_DIP:DIP-20_W7.62mm_SocketU3, U4
2Conn_01x08_MaleConnector_PinHeader_2.54mm:PinHeader_1x08_P2.54mm_VerticalJ5, J6
2PCF8574Package_DIP:DIP-16_W7.62mm_SocketU6, U7
2SB230Diode_THT_AKL:D_DO-15_P10.16mm_HorizontalD4, D5
2STP2N80K5Package_TO_SOT_THT_AKL:TO-220-3_Vertical_GDSQ1, Q2
2SolderJumper_2_OpenJumper:SolderJumper-2_P1.3mm_Open_Pad1.0x1.5mmJP3, JP4
1120uHInductor_THT_AKL:L_Radial_D12.5mm_P7.00mm_Fastron_09HCPL1
11N5339BDiode_THT_AKL:D_5W_CASE-017AA_P12.70mm_Horizontal_ZenerDZ1
122uFCapacitor_THT:CP_Radial_D5.0mm_P2.50mmC4
133uFCapacitor_THT:CP_Radial_D5.0mm_P2.50mmC8
1Conn_01x03_MaleConnector_PinSocket_2.54mm:PinSocket_1x03_P2.54mm_VerticalSW2
1Conn_01x05_MaleConnector_PinHeader_2.54mm:PinHeader_1x05_P2.54mm_VerticalJ8
1Conn_01x06_MaleConnector_PinHeader_2.54mm:PinHeader_1x06_P2.54mm_VerticalJ16
1DC56-11EWADisplay_7Segment:DA56-11SURKWAU9
1LM2592HVT-5.0/NOPBLM2592HVT:LM2592HVT-5.0&slash_NOPBU2
1LM3940IT-3.3Package_TO_SOT_THT:TO-220-3_VerticalU10
1MAX6959AAEE+Package_DIP:DIP-16_W7.62mm_SocketU8
1MCP3008Package_DIP:DIP-16_W7.62mm_SocketU5
1PicoMCU_RaspberryPi_and_Boards:RPi_Pico_SMD_THU1
1R_Network08Resistor_THT:R_Array_SIP9RN1
1SW_Push4.5mm_button:SW_Tactile_PUSH_4.5mm_H3.8mm_TS_C016SW1
1SolderJumper_3_Bridged12Jumper:SolderJumper-3_P1.3mm_Open_Pad1.0x1.5mmJP1
1SolderJumper_3_OpenJumper:SolderJumper-3_P1.3mm_Open_Pad1.0x1.5mmJP2
1XBEERF_and_other_modules:XBEE_PRO_PTHXB1

Questions

How big is the Rib PCB?

It measures 140 × 90 mm and has 2 copper layers, 1.65 mm thick.

What parts does the Rib use?

96 parts, built around the 74HCT244D, PCF8574T, MAX6959AAEE+ and MCP3008-I/P. 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 Rib KiCad files?

From the illinoistechrobotics/rib repository on GitHub, at the commit this page was made from: the board is rib.kicad_pcb and its schematic rib.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Rib design in my own project?

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

Similar boards

  • 2 layers264.8 × 118.6 mmNixieTubePCB, the printed circuit board in 3D

    NixieTubePCB

    maximumniche/NixieTubePCB

    46 parts
  • 2 layers70.5 × 40.1 mmKicad flyback, the printed circuit board in 3D

    Kicad flyback

    nguyenthanhluan171205-tech/flyback-converter-10w

    Design, simulation, PCB layout, and experimental validation of a 10W Flyback converter (80-220VAC to 12VDC, 90% efficiency).

    63 parts
  • 2 layers100 × 100 mmLinearPS, the printed circuit board in 3D

    LinearPS

    profdc9/LinearPS

    Linear constant constant/current constant voltage power supply PCB

    102 parts14
  • 2 layers139.7 × 127 mmSa400 led monitor, the printed circuit board in 3D

    Sa400 led monitor

    xtracool/trs80-m1-drive-monitor

    TRS-80 Model 1 floppy drive monitor.

    47 partsMIT
  • 2 layers60 × 57 mmProjet Réveil électronique, the printed circuit board in 3D

    Projet Réveil électronique

    Hultoncity2330/Circuits_Project1_Electronic_Alarm

    Projet de conception d’un réveil électronique réalisé sous KiCad. Le dépôt contient le schéma électronique, le PCB routé, les fichiers du projet KiCad ainsi que plusieurs vues du circuit final.

    26 parts
  • 2 layers136.8 × 87 mmJcap, the printed circuit board in 3D

    Jcap

    cspang1/jcap

    JAMMA Custom Arcade Project

    66 parts15MIT