Skip to content

Pneumatics Won't Fire: A Full Diagnostic Tree

learnfrc.com
learnfrc.comAuthor
Veer Bajaj
Veer BajajMaintainer

You command a piston and nothing moves. Pneumatics failures are almost always systematic; walk this tree top to bottom and do not skip steps.

The power distribution device and the legacy CTRE PCM should be configured so the FRC libraries can find them. As FRC Zero’s troubleshooting guide states emphatically: the PDP and PCM should ALWAYS have the same CAN ID of 0 , because FRC libraries assume this. A wrong CAN ID makes a perfectly wired module invisible. (The REV Pneumatic Hub is addressed separately by its own CAN ID; match what your code expects.)

2. Is the robot actually enabled and the module told to run?

Section titled “2. Is the robot actually enabled and the module told to run?”
  • Confirm the Robot Status Light shows enabled (Teleop/Test), not just connected.

  • The compressor must be enabled. With the modern WPILib API, closed-loop control is already running by default the moment you construct a Solenoid/DoubleSolenoid — most teams never need to touch the Compressor class at all. Only instantiate a Compressor object if you want explicit status/telemetry or to pick a mode yourself with enableDigital(), enableAnalog(), or enableHybrid(); simply constructing the Compressor object does not by itself start closed-loop control.

  • Instantiate solenoids with the right module type:

    // CTRE PCM Solenoid intake = new Solenoid(PneumaticsModuleType.CTREPCM, 1); // REV Pneumatic Hub DoubleSolenoid claw = new DoubleSolenoid( PneumaticsModuleType.REVPH, 0, 1);

Using the wrong PneumaticsModuleType is a silent no-op.

The PCM/PH and VRM are powered from the power distribution device. Check the fuse/breaker feeding the module. A blown fuse = dead module.

  • High side should reach the system max (the legal ceiling is 120 PSI); the regulated low side typically reads ~60 PSI to the cylinders.
  • If low side reads 0, the regulator is backwards or set to zero.
  • If high side reads 0, a manual vent valve is open or the compressor isn’t charging.

A double solenoid driven by two separate, conflicting commands will fire asynchronously or chatter. Drive it with a single set(kForward/kReverse) call and matching tubing lengths/fittings on both ports.

If the compressor runs continuously and pressure won’t hold, you have a leak. Spray a small amount of soapy water on every fitting; bubbles reveal the leak. A stuck pressure switch can also run the compressor forever, check it.

Clear PCM/PH sticky faults in Phoenix Tuner / REV Hardware Client self-test, then verify CAN wiring. Persistent faults after clearing point to a real wiring or firmware problem, update firmware.

Change one thing, retest, then move on. The fastest pneumatics debuggers don’t guess; they walk the tree.

  • The single most common pneumatics bug is a wrong CAN ID, the PDP and legacy CTRE PCM should both be CAN ID 0.
  • Enable the compressor in code (construct a Compressor / enableDigital()) and instantiate solenoids with the correct PneumaticsModuleType (CTREPCM vs REVPH).
  • A continuously running compressor that won’t hold pressure means a leak (soapy-water test) or a stuck pressure switch.

This lesson was adapted from learnfrc.com.