GRAYnomad Nature Photography :: The QUUB


NOTE: This is an initial landing page for an upcoming QUUB web site. Both this page and the QUUB itself are a work in progress.

QUUB is an open-source, micro controller system based on a core processor, addressable daughter boards, and remote IO modules. It is a general-purpose embedded microprocessor system, the form factor is based on a main MCU board and multiple stacked IO boards called "stackables". It can therefore accommodate designs from the simplest flashing-LED project to a complex multi-processor robot controller. That said the target audience fo rthe QUUB is more serious applications, it's way overkill for a flashing-LED project.

The QUUB system has the following features.

  • The core processor board is an Raspberry Pi Pico module, this is a dual core 32-bit Cortex M0+ processor running at 133MHz.
  • Small form factor, nominally 100 x 75mm (4 x 3 inches).
  • A unique method of attaching four "sides" (vertical PCBs). These sides make the QUUB design "self enclosing", no need for a box.
  • Up to 16 addressable daughter boards (stackables) can be stacked above or below the core processor.
  • Up to 16 addressable devices on each stackable.
  • Each stackable has a ID EEPROM that defines its IO capabilities for the MCU.
  • Up to 256 vectored interrupts from these stackable modules
  • Two RS485 drivers and onboard address switch allow up to 16 QUUB boards to be connected to the QUUBnet.
  • An optional "mezzanine" expansion module with an 18-way interface, useful for small addons such as an SD card socket.
  • 36+3+7-way "stackplane" using stackable headers.
  • The stackplane has provision for all power signals, I2C, SPI, 2x UART, 2x analogue in, up to 16 digital IO, four user-defined signals, and addressing of daughter boards.
  • All 16 daughter boards can be addressed and can therefore share the same system IO lines.
  • On-board solid state relay to drive an external device such as an alarm or light.
  • On-board piezo buzzer.
  • A PiicoDEV (STEMMA-QT/QWIIC) header.
  • Two front-panel accessible pushbuttons that are used for reset and a user input
  • 7-20 volt polarity-protected VIN.
  • VBAT connector for a litium battery.
  • One switched power signal that can be used by the MCU to shut down peripherals such as a GPS or wireless transmitter.
  • Four mounting holes suitable for an M3 bolt or similar-sized screw.
  • One-digit 7-segment LED display for a heartbeat or error code display.

If you need a system with over 20 analogue inputs, or maybe 30 serial ports, or more than 200 digital IO connections, no problems, QUUB can do that and more.

Stackplane (backplane for the QUUB stack)
The stackplane consists of three headers of 36, 7 and 3 connections. With the vast array of I2C and SPI peripheral IO chips now available it makes sense for larger and more complex applications to have a backplane with just a few signals that communicate with slave devices using one of these popular serial interfaces. However for tinkering or simpler applications the QUUB can be used like any of the other development boards available.

There are four user-defined signals on the stackplane, these signals pass up the entire stack and can be used by any stackable for whatever purposes. One example would be a power supply stackable sitting at the bottom of the stack that needs an ON/OFF switch and a power indicator LED at the top of the stack.

Side panels (sides)
Provision is made to solder small PCBs at right angles to the main PCB. These can be used to enclose the board so a box is not normally required. If all stackables implement these side panels the QUUB stack becomes fully enclosed on the bottom and sides. This leaves the top.

Lids are special stackables that are only used on the top of the stack. They are 3mm larger than the standard stackable size so they cover the stackable sides below them. Lids can be blank and used simply to fully enclose the stack, or they can also have active circuitry, such as an LCD display and some switches to provide a simple user interface to the stack's application.

A base is not normally required as the MCU board has no components on the solder side of the board. However the MCU may not be the lowest stackable and the one that is may have through-hole components. In this case a base board may be required to isolate the electronics from whatever the stack is placed on.

Another reason to have a base board is to accommodate large components, for example a board that has four relays and a 100A shunt, these will not fit on the standard stackable PCB size but can easily be accommodated on a much large board. In this case the stack essentially plugs onto this base board.

And yet anopther might be to accommodate a DIN rail connector for more industrial applications.

One difference between the QUUB and other systems is that you can address the plugged-in modules (stackables), this means that you can for example have up to 16 identical modules and there are no pin-clashing issues. Or you can use modules from different sources and not have to worry about them using the same pins.

The MCU can also sense if there are no, one, or multiple stackalbes at each address. Therefore if two or more stackables are plugged in with the same address the MCU will not try to access that address and will thorw an error.

Operating modes
The QUUB has two pre-defined operating modes, these being modes A and B. Mode A is as per all other similar boards in that all IO is used for general-purpose as defined by the application. Mode B is designed to allow the addressing of stackable boards and an interrupt protocol that allows the stackables to interrupt the program flow of the MCU for faster event handling.

The QUUB stackplane allows all stackable modules to interrupt the host processor so when an event happens you can deal with it very quickly. The interrupt to the MCU is a genuine interrupt, however if there are more than one possible interrupt source the MCU implements a very fast protocol that reads both the stackable's address and any sub address from the stackplane. This protocol allows for up to 256 interrupt vectors on a stack.

Mezzanine expansion
There is provision for an expansion board that sits above the MCU and below the first stackable. This is a virtual stackable and it can also be addressable at the expense of one address on the stackplane. This is designed to be used for small functions that only require a subset of the backplane signals and therefore it is to be used for functions that don't justify a full stackable, such as an SD card socket.

If the mezzanine board is used and it requires addressing it must use one stackable address, the actual address used however is settable at run time by the MCU and therefore only 15 genuine stackables can coexist with the mezzanine board. Of course if any/all of the boards don't require addressing there are no restrictions.

Stackplane signals D0-3 can be dedicated for debugging. This is a system I've used for years that allows the running code to "talk" to a logic analyser in real time with very little intrusion into the real-time running of the program.

A breakout board will be designed to allow access to the SWD and other signals and the main PCB has allowance for a .91" OLED display to be connected. Also the breakout will provide for a Pi debug probe or even another Pico for full in-circuit debugging.

The combination of 7-seg LED (fast but limited), OLED (slow but detailed), debug probe (intrusive but very detailed) and GPIO pins (fast and non intrusive but limited information) should cover all debugging methods.

OLED display
Two 4-way header are provided that matches the pinout of a common .91" I2C OLED display. This allows the easy connection of such a display for debugging with the display poking out from the side clear of any stacked daughter boards or for the use of the OLED as a run rime display.

LED display
There is a single-digit LED display mounted on the PCB. This can be used for error display, general debugging, or to run a marching ants pattern as a heartbeat indicator.

Switched power
A high-side FET switch is provided and controlled by a GPIO pin on the MCU. This can be used to totally remove power from a stackable as a power-saving measure. For example a wireless transmitter or GPS module can be powered down when not in use.

The source of the switched power is solder-jumper selectable and can be 5V, 3V3, VIN, or VBAT.

Power supply
The QUUB can get power from the USB connection, a two-pin header, or one of the stackables via the VIN or VBAT signals. The input range from both the header and VIN is 7-20 volts and for the VBAT input 2-5.5 volts. Further more when powered from the VIN two-pin header the input is polarity agnostic, IE it doesn't matter which way you plug the cable in.

Surface mount
There are no through-hole components on the QUUB PCB, while this does make the board a bit less user friendly for the average hobbyist I have used components as large as possible to help with soldering. On the plus side the use of SMD components does allow the underside of the board to be dead flat and therefore easier to mount. More importantly though it creates a constant pitch between stacked boards and a "lid" board that can be used as a display or just to cap off the stack.

An exception to this is the Raspberry Pi Pico itself. This does allow for socketing when prototyping.

Location of MCU in the stack
The MCU board can be located at any level of the stack, this eases access for some debugging but also allows the placing of, for example, a power supply board at the bottom of the stack. Another reason to have the MCU in a location other that the bottom is when a large IO expansion base board (say with relays, shunts, and/or other large components) is being used.

For most applications the three stackplane headers will be enough to mechanically secure the circuit boards together. However in applications with a lot of movement and/or vibration this will not be enough so the following provisions have been made.

  • There are four mounting holes located on the PCB. These can be used for 16mm male/female standoffs that will mechanically hold the stack together. Typically the lowest board on the stack will use all four holes to mount to the wall or enclosure. All other stackables will only use two of the holes as with the addition of the headers this should be robust enough for most applications.
  • The mezzanine board has two optional broaching nuts set into the main PCB, these can be used to mechanically secure the mezzanine board.


Do you know how to write embedded code, set up tool chains, or design hardware?

Get in touch if you're interested in contributing to this project. I can't pay but can send you a few PCBs when they are ready.