Nitehawk-SB by LDO is a toolboard specifically designed for the Voron Stealthburner toolhead. It is a toolhead PCB featuring RP2040 MCU, TMC2209 stepper drive, ADXL345 accelerometer all integrated into one board. The form factor of Nitehawk is based on HartK’s two piece stealthburner toolhead PCB but with some minor changes.
Nitehawk uses USB communication with the RPI rather than CAN. So the software and hardware setup is far simpler and familiar to most people who have setup Klipper printers before
The Nitehawk system consists of three PCBs and the Umbilical Cable. A simplified wiring diagram is shown below:
Nitehawk-SB works with a standard Stealthburner toolhead, and is compatible with both Clockwork 2 and Galileo 2. However there are a few additional custom printed parts. The printed parts are available in the Nitehawk github repo https://github.com/MotorDynamicsLab/Nitehawk-SB
A Klipper Configuation can be found in the Nitehawk-SB github repo here. Remember to comment out tachometer_pin
and tachometer_ppr
configurations if you do not plan to use a tachometer enabled fan.
Provided in the github repo is an optional tacho_macros.cfg
file which contains the macro PREFLIGHT_CHECK
. This macro very briefly turns on the part fan and checks the tachometer signal to see if the fan is spinning properly. To use the macro, [include tacho_macros.cfg]
in printer.cfg
and call PREFLIGHT_CHECK
at the beginning of the PRINT_START
macro
Device/Port | PCB Label | Connector Type | RP2040 Pin | Description |
X/Y Endstop | Endstop | JST-XH 4P | gpio13/12 (X/Y) | Connects to the X and Y dndstop. X endstop is gpio13 and Y endstop is gpio12. |
Hotend Heater | HE0 | Screw Terminal / E0506 | gpio9 | Connects to the hotend heater. |
Hotend Thermistor | TH0 | JST-XH 2P | gpio29 | Connects to the hotend thermistor. Uses a 2.2kΩ pull up resistor. |
Part Cooling Fan | PCF (Fan adapter PCB) | JST-PH 3P | gpio6/17 (fan/tacho) | Connects to part cooling fan (via the fan adapter PCB). The fan control pin is gpio6 and the tachometer sensor pin is gpio17. |
Hotend Fan | HEF (Fan adapter PCB) | JST-PH 3P | gpio5/16 (fan/tacho) | Connects to hotend fan (via the fan adapter PCB). The fan control pin is gpio5 and the tachometer sensor pin is gpio16. |
Chamber Thermistor | CT | JST-PH 2P | gpio28 | Chamber Thermistor port. Connects to an external thermistor. Uses a 4.7kΩ pull up resistor. |
Probe | PROBE | JST-XH 3P | gpio10 | Probe for bed leveling and/or Z sensing. 24V power only. |
Motor | MOTOR | JST-XH 4P | gpio23/24/25/0/1 (step/dir/ena/uart/tx) | A stepper motor port for the extruder. Driven by a TMC2209 chip. The current sense resistor is 100 mΩ. Enable is active low |
Neopixel | LED (Fan adapter PCB) | JST-PH 3P | gpio7 | Connects to neopixel LEDs (via the fan adapter PCB). |
Activity LED | ACT | N/A | gpio8 | A small software controlled onboard LED. Active low. |
Accelerometer | N/A | N/A | gpio21/18/20/19 (cs/clk/mosi/miso) | ADXL345 accelerometer for input shaping. Controlled via software SPI. |
The table below briefly describes the purpose of each port located on the toolhead PCB.
PCB Label | Name | Connector | Description |
HEF+/A1/HEF- | Hotend Fan* | JST-PH-3P | Fan port for cooling the hotend heatsink. 24V/5V selectable, defaults to 24V. |
PCF+/A2/PCF- | Part Cooling Fan* | JST-PH-3P | Port for part cooling fan. 24V/5V selectable, defaults to 24V. |
5V/GND/LED | Neopixel | JST-PH-3P | For connecting to the neopixel chain on the stealthburner. |
Toolhead Cable | 2x8 F-Header | Plugs into the male header on the main toolhead PCB |
*The hotend fan and part fan can be independently changed to 5V in two steps:
*If the rated current of your stepper motor is 1A, we recommend setting it below 0.7A. If you need more than 0.7A, please add extra heat dissipation for your board.
Parameter | Symbol | Minimum | Typical | Maximum | Unit | Comments |
Power Supply Input | Vin | 20 | 24 | 28 | V | power input for the toolboard |
5V Current | Irpi | 5 | A | current output for the 5V buck converter | ||
Fan Current(HEF, PCF) | Ifan | TBD | A | current rating for each fan port (HEF and PCF). | ||
Hotend Current | Ihe | TBD | A | limited by max. continuous current of mosfet |
The firmware for Nitehawk consists of two components: Katapult and Klipper. Katapult is a bootloader designed specifically for Klipper, it ensures that the software on the RP2040 MCU boots up smoothly and allows for easy updating of the Klipper firmware. You can learn more about Katapult here. Klipper is the main firmware that runs on the RP2040 MCU, you can learn more here.
Your Nitehawk will come shipped with both Katapult and Klipper installed. Ideally, you will only ever need to occasionally update the Klipper firmware and never have to touch Katapult. If the Katapult bootloader was erased or is not present for any reason, you can check this section for instructions on how to reupload Katapult.
No special setup is required for installing either Klipper or Katapult. Nitehawk simply needs to be hooked up as it operates normally in your 3D printer, with the toolboard connected to your Klipper host device (e.g. Raspberry Pi) via the USB adapter board. You also need access to the two buttons (RESET and BOOT0) on the toolboard, this is normally done by moving the toolhead to the front and opening the toolhead cover. Also note the four LEDs below the buttons - the leftmost LED is the ACT indicator light, which will be important later. Reference the photo below to find the buttons and LEDs.
The following instructions are for compiling and upload new Klipper firmware to your Nitehawk toolboard. You need to perform these steps if you want to update your klipper firmware to the newest version or if you are doing a fresh install and just uploaded Katapult (see the previous sections). Before compiling the firmware, you will need to have Klipper already installed on your host device (e.g. Raspberry Pi).
ssh
command in their command line terminal. Run the following commands to open the firmware configuration interface:cd ~/klipper
make menuconfig
16KiB bootloader
offset. Otherwise you will erase the Katapult bootloader!Q
to quit and confirm with Y
es when prompted to save. And run the following to generate the firmware file:make clean
make
~/klipper/out
. You are now ready to upload this firmware to the Nitehawk toolboard. The recommended method is uploading via the make flash
command.ls /dev/serial/by-id
to find the USB ID of your Nitehawk toolboard. The USB ID should have a format similar to this: usb-Klipper_rp2040_1234567890000000-if00
.python
, pip
, and the pyserial
python module if it is not present. You may receive an error: externally managed environment
when running the last command. This simply means pyserial
has already been installed and you may move on to the next step.sudo apt install python3 python3-pip
pip install pyserial
cd ~/klipper
sudo service klipper stop
make flash FLASH_DEVICE=/dev/serial/by-id/<your USB ID>
sudo service klipper start
In this section we will use an alternative method to upload klipper firmware using the Katapult bootloader. If your toolboad is missing the Katapult bootloader for any reason, you should follow the next section to install it first.
test -e ~/katapult && (cd ~/katapult && git pull) || (cd ~ && git clone https://github.com/Arksine/katapult) ; cd ~
virtualenv -p python3 ~/katapult-env
~/katapult-env/bin/pip3 install pyserial
~/katapult-env/
and installs the module pyserial
which is required to run the upload script.ls /dev/serial/by-id/
. You should see something like usb-katapult_rp2040_A1234567898D1234-if00
- note that the address contains the word katapult
. If not, this means either your Nitehawk did not have Katapult installed or you did not enter the Katapult bootloader properly. Copy the address down for the next step, do not exit the bootloader yet.Flash Success
at the end.~/katapult-env/bin/python3 ~/katapult/scripts/flashtool.py -d /dev/serial/by-id/usb-katapult_rp2040_A1234567898D1234-if00
ls /dev/serial/by-id/
. you should see a Klipper USB serial address in the form of usb-Klipper_rp2040_E1234567A12D9835-if00
.In this section we will compile and upload the Katapult Bootloader. Note that your Nitehawk toolboard normally ships with Katapult pre-installed and you only need to perform the following operations if Katapult was inadvertently overwritten or lost.
test -e ~/katapult && (cd ~/katapult && git pull) || (cd ~ && git clone https://github.com/Arksine/katapult) ; cd ~
cd ~/katapult
make menuconfig
Q
to quit and confirm with Y
es when prompted to save. next run the following command to compile and generate the Katapult binary files:make clean
make
katapult.uf2
will now be created in the location ~/katapult/out/
. Our next job is to upload this file into the RP2040 MCU on the Nitehawk toolboard.ls /dev/sda*
to confirm. You should see something like /dev/sda/ dev/sda1
. If you get something like ls: cannot access '/dev/sda*': No such file or directory
this means either Nitehawk didn't enter boot mode or there is a problem with the physical connection between the Raspberry Pi and Nitehawk.sudo mkdir -p /mnt/pico
sudo mount /dev/sda1 /mnt/pico
sudo cp ~/katapult/out/katapult.uf2 /mnt/pico
sudo sync
sudo umount /mnt/pico
ls /dev/serial/by-id
. You should see something like: usb-katapult_rp2040_A1234567898D1234-if00
which is USB serial address of Nitehawk running Katapult. A few small details to note here:Q. I have an LDO V2.4/Trident Kit, the fan adapter PCB provided looks identical to the one in the kit are they interchangeable?
A. Yes! The fan adapter PCB is 100% the same as the one in the current LDO kits.
Q. Can I use the provided cable in a drag chain or umbilical setup?
A. Yes! The included toolhead cable is drag chain rated but also easily set up for umbilical use.
Q. I see that there is a 4pin XY endstop connector, what is that for?
A. Since there is no longer any breakout PCB, the XY endstop can instead be routed a short distance through the X drag chain and into the toolboard. Of course, you can also opt to route directly back to the mainboard or just use sensorless homing.
Q. What is the ACT LED for?
A. That’s just a controllable LED, you can find it in the klipper config we provide. It doesn’t do anything else otherwise.