#voron #v0 #skr-pico #klipper #kalico #gpio #servo #3d-printing
# Overview
Working notes on what IO is actually left on the SKR Pico in [[V0.4351]], and how to drive a 5V servo (for the nozzle brush mod) off a repurposed pin. Also captures the mainboard upgrade research, since the Pico's fan and thermistor limits are the real reason a swap is on the table at all.
Short version: **`gpio29` on the BLTouch/probe header is the pin to use for the servo.** Fans and thermistors are the resources that are genuinely exhausted, not GPIO.
# Design
## Current pin allocation
Pulled from Klipper's `generic-bigtreetech-skr-pico-v1.0.cfg` and cross-checked against the build log in [[V0.4351]].
| Pin | Header | Current use | Status |
|---|---|---|---|
| `gpio17` | FAN1 | Part cooling | In use |
| `gpio18` | FAN2 | Heatbreak / hotend | In use |
| `gpio20` | FAN3 | Nevermore | In use |
| `gpio27` | TH0 | Hotend thermistor | In use |
| `gpio26` | THB | Bed thermistor | In use |
| `gpio25` | Z-STOP | Z microswitch | In use |
| `gpio4` | X-STOP | X DIAG (sensorless, SGTHRS 95) | **Consumed by jumper** |
| `gpio3` | Y-STOP | Y DIAG (sensorless, SGTHRS 100) | **Consumed by jumper** |
| `gpio24` | RGB | Board NeoPixel → UFO Kirigami LEDs | Spoken for |
| `gpio29` | PROBE (control/SET) | — | **Free** |
| `gpio22` | PROBE (sensor) | — | **Free** |
| `gpio16` | FIL-DET | — | **Free** |
| `gpio0` / `gpio1` | RPi UART header | — | **Free** (Kalico runs over USB) |
Sensorless homing gotcha: the X and Y endstop *connectors* are empty, but `gpio3`/`gpio4` are carrying the TMC2209 DIAG signals through the jumper caps. ==Do not reuse gpio3 or gpio4 while sensorless homing is enabled.==
## Why gpio29 is the right pick
- It's the BLTouch control/SET pin — BTT already designed it as a servo-signal output.
- The probe header carries 5V and GND on the same connector, so no scavenging power from elsewhere on the board.
- V0.4351 homes Z on a physical microswitch (`gpio25`), so the entire probe header is dead weight.
- RP2040 maps it to PWM slice 6B, so hardware PWM is available if software PWM turns out to be jittery.
Runners-up, in order: `gpio22` (same header, if the servo ends up elsewhere), `gpio16` (FIL-DET, free as long as no runout sensor), `gpio0`/`gpio1` (RPi UART header — free because Kalico was flashed with USB comms, and that header has 5V + GND too).
# Configuration
## Servo definition
```ini
[servo nozzle_brush]
pin: gpio29
maximum_servo_angle: 180
minimum_pulse_width: 0.0005
maximum_pulse_width: 0.0025
# cycle_time defaults to 0.020 (50 Hz), software PWM
# add `hardware_pwm: True` if the servo jitters or creeps
```
Drive it with:
```gcode
SET_SERVO SERVO=nozzle_brush ANGLE=90
SET_SERVO SERVO=nozzle_brush WIDTH=0 ; de-energize so it isn't buzzing all print
```
Always issue `WIDTH=0` at the end of a brush macro. A servo held under load for an entire print draws current, generates heat, and chatters.
## Power wiring — do not skip this
**Do not power the servo from the probe header's 5V.** A micro servo pulls 700 mA–1 A stalled. The Pico's 5V comes off a small onboard regulator shared with the probe header, RGB, and RPi header — it will brown out the RP2040 mid-print.
- 5V from the 5V rail (LDO GaN PSU)
- Ground tied back to the board so the signal has a return path
- ==~470 µF electrolytic across the servo's 5V/GND, physically close to the servo, to soak up inrush==
- Only the signal wire goes to `gpio29`
## 3.3V logic caveat
RP2040 GPIO swings 3.3V, not 5V. Analog micro servos (SG90, MG90S) latch fine on a 3.3V pulse. Some digital servos are marginal and will jitter or creep. Cheapest fix to try first is `hardware_pwm: True`; if that doesn't settle it, add a level shifter or a 2N7000 + pullup.
## Keep-the-Pico alternative
A BTT toolhead board (EBB36 GEN2, or SB2209 USB to skip the CAN adapter) moves the hotend thermistor, part fan, and heatbreak fan onto the toolhead. That frees TH0 for the chamber probe *and* all three Pico fan headers for bed fan / Nevermore / electronics bay. ~$18–40, no mainboard swap — but needs a V0-specific toolhead mount and is more wiring, not less.
Outside BTT: the Mellow Klipper Expander (~$20) bolts extra fan and thermistor ports onto the Pico directly. Same family of solution as the Picobilical already in this build.
# TODO
- ==Source a 470 µF cap for the servo rail==
- ==Decide servo model (check the Arduino bin per V0.4351 notes) and verify it behaves on a 3.3V signal==
- ==Print [Servo Nozzle Brusher (Voron V0)](https://www.printables.com/model/954607-servo-nozzle-brusher-voron-v0-mmu-remix-brass-brus) and work out where it mounts relative to the Kirigami bed==
- ==Write the brush macro with a trailing `SET_SERVO WIDTH=0`, then hook it into print start==
# References
- [[V0.4351]] — main build note
- [[Formbot Voron V0.2-R1 Kit Reference]]
- [Klipper generic-bigtreetech-skr-pico-v1.0.cfg](https://github.com/Klipper3d/klipper/blob/master/config/generic-bigtreetech-skr-pico-v1.0.cfg) — authoritative pin map
- [BTT SKR Pico V1.0 pinout PDF](https://github.com/bigtreetech/SKR-Pico/blob/master/Hardware/BTT%20SKR%20Pico%20V1.0-PIN.pdf)
- [BTT SKR-Pico BLTouch pinout fix PR](https://github.com/bigtreetech/SKR-Pico/pull/10/files) — where gpio22/gpio29 got confirmed
- [BTT Wiki — SKR Pico](https://global.bttwiki.com/SKR%20Pico.html)
- [Manta E3EZ product page and specs](https://biqu.equipment/products/bigtreetech-manta-e3ez-v1-0-for-ender3-ender3pro-ender5)
- [Klipper generic-bigtreetech-manta-e3ez.cfg](https://github.com/Klipper3d/klipper/blob/master/config/generic-bigtreetech-manta-e3ez.cfg)
- [Voron 0.2 + Manta E3EZ + CB1 config repo](https://github.com/DialupHandshake/Voron0.2_manta_e3ez)
- [Manta E3EZ Voron mount](https://www.printables.com/model/499556-big-tree-tech-manta-e3ez-v10-voron-mount-and-set-u)
- [Voron 0.x BTT Manta DIN rail mount](https://www.printables.com/model/566381-voron-0x-btt-manta-din-rail-mount)
- [BTT Wiki — M5P](https://global.bttwiki.com/M5P.html) · [M4P](https://github.com/bigtreetech/docs/blob/master/docs/M4P.md) · [M8P V2.0](https://global.bttwiki.com/M8P-V2_0.html)
- [Kalico MPC docs](https://docs.kalico.gg/MPC.html#bed-heater) — the reason the chamber thermistor matters