VaCANt2.0

An overengineered PCB to control a vacuum pump and to check if it caught something.

This page is about VaCANt 2.0. Click here for VaCANt 1.0. The changes made in V2.0 are in the changelog section.

Demonstration Video

Note: the video still has to be adapted for V2.0.

Background

Every year, the theme of Eurobot changes, but the required components remain roughly the same: suction cups with vacuum pumps, servo motors, and stepper motors.

Rather than design a large PCB with all the components needed for the current year’s challenge, which will become obsolete for the next competition, we are developing reusable modules that we can combine into any configuration we need. For example, for Eurobot 2026, our robot will have 4 suction cups with four vacuum pumps. All we need to do is combine 4 of our vacuum pump modules and connect them to the robot’s CAN bus.

Introducing VaCANt

Indeed, the first module we developed was a vacuum pump controller. We admit that this module is over-engineered. The simplest goal of turning on and off a vacuum can be achieved with a simple digital signal from our main computer. However, our CAN-powered board offers many more features. Using an addressable bus means we don’t need a separate signal wire for each pump. With its onboard current sensor, our module is able to measure the current drawn by the pump. Since the current goes up when an object attaches itself to the suction cup, we know whether we successfully picked up the game element.

New in VaCANt V2.0, we added connections for 2 servo motors to the PCB. Where you need to turn a suction pump on and off, you normally need to move the suction cup around. As mentioned, our robot for Eurobot 2026 had 4 suction cups on 4 arms actuated by servos. We needed one VaCANt board for each pump, and an additional board to control the servos. With the new version, we could have controlled the pump and servo for each arm together. We added 2 servo connections so we could even support arms with more articulations, like scara arms.

Version 2.0 also introduced a connector for a valve to release the vacuum. To drop something, we turn off the pump, but there’s nowhere for air to get into the system. This means there is still vacuum in the tube and the object can stay stuck to the suction cup for a few seconds while air slowly leaks in. In last year’s competition, we adjusted how tightly our suction cups were screwed on to get enough suction with the pump on but to let enough air in to drop blocks. A lot of teams already figured this problem out and added a solenoid valve to release the vacuum. We’re finally catching up.

The vacuum module is called VaCANt. This name shares its first three letters with “vacuum”, includes “CAN” like the used communication bus, and is a word meaning empty, since this board can detect if no game element was grabbed.

Hardware design

We’re moving our modules to the RP2354 since it has integrated flash, which keeps the boards more compact. The small vacuum pump can be soldered directly to the PCB, simplifying wiring and keeping everything compact. However, we found this annoying when reworking the boards (which for the previous revision were essentially a prototype). This year, we’ll try connecting them with small wires and, if the boards seem stable, we’ll consider soldering them directly.

The TPS274160B 4-channel high-side switch does a lot of heavy lifting on the board. It’s responsible for turning on and off the pump and the valve via digital signals connected to the microcontroller. It can also measure the current drawn on each channel, so we can eliminate the shunt resistor and current-sense amplifier. The servos do not need to have their power switched on and off as they are controlled via PWM, but they are still routed through the switch anyway for current limiting. This way, each of the 4 loads (pump, valve, and 2 servos) has independent current limiting.

The board is powered through a Micro-Fit connector. An e-fuse (TPS2116DRL) protects against reverse polarity, overvoltage, and undervoltage and provides current limiting and soft start. The ISO1044BD is used as the isolated CAN transceiver, and the isolated power rail for this purpose is generated by the UCC33420. Two CLIK-Mate connectors carry the CAN signals, and are duplicated to allow daisy-chaining. An APA102 SPI RGB LED shows the status of the board, indicating states like “ready”, “connection error”, “sucking a game element”, or “sucking air”.

CAN bus

The primary reason we chose the CAN bus is that it’s the protocol our main computer already uses to communicate with our ODrive motor controllers responsible for propelling the robot.

Even without this motivation, CAN would still have been an appealing choice. It’s extremely robust and allows for a large number of nodes to communicate at high speed over a single differential pair. The software and hardware support makes CAN very approachable.

We opted to send our messages using raw CAN messages rather than using an abstraction like CANopen or cansimple, although our protocol works similarly. CAN messages include an 11-bit address. However, the address doesn’t necessarily have to uniquely identify a node. We use the top 6 bits of the address for the node ID and the bottom 5 bits as the command, where the command could be something like turning the pump on or requesting the current reading.

3D Viewer

Project Files

The project files for the PCB can be found at https://gitlab.com/die-dosen-stapler/evergreen/pcbs/vacant. An interactive preview is below.

Interactive Bill of Materials

Changelog

Changes from VaCANt V1.0 to V2.0:

  • Switched to an isolated CAN transceiver (so we hopefully don’t fry our entire robot again).
  • Added connections for 2 servo motors.
  • Added a connector for a valve to release the vacuum so stuff doesn’t get stuck on the suction cup.
  • Switched from an RP2040 to an RP2354.
  • Shrunk the board side.