A gantry-mounted CAN stepper driver board for 15mm aluminum beams (mostly for PrintersForAnts printers).
This board can be used e.g. for the Micron to have A/B motor controllers directly at the gantry. This reduces the number of wires required to be routed to the gantry.
Additionally, this board can be used for Voron-0 or Tridents as a USB to CAN converter (using the Klipper CAN bridge option) with included A/B motor controllers.
- Upload
GERBER-GBB15.zip
- Select Qty
- PCB Thickness 1.6mm
- LeadFree HASL
- Enable PCB Assembly
- Choose Economic
- Select Assembly Side Bottom Side
- Tooling holes: Added by Customer
- Press Confirm
- Upload
BOM-GBB15.csv
andCPL-GBB15.csv
- Check that all parts are in stock and click NEXT
- Look for odd placement in the preview, select NEXT
You can order these on LCSC
- Solder top components (order: 120R resistor (if required), switches, 4x JST PH 2.0mm, 2x JST XH2.5mm, 2x MicroFit 3.0 2x2, USB connector, Capacitors & attach heatsinks)
- Attach 1.5mm heat gap filler pad to bottom, cut to size if required using a sharp knife
- Poke screw holes into the gap filler pads
- Use M3x8mm screws to attach to bottom of gantry frame (see above)
Note that thermal connection to the 15mm beam is required! Otherwise the Stepper motor controllers might overheat.
-
Plug in USB cable and connect 24V power, the green LED on the bottom side (Rev. B and up) must light up. Hold BOOT pushbutton, while tapping the RESET pushbutton and release all buttons. This is the sequence to set the GBB15 into DFU mode.
IMPORTANT: STMicro decided on the entire STM32G0 series to set the
nBOOT_SEL
option bit and thus disable theBOOT0
pin by default. This means you would have only one shot at uploading a bootloader, while the flash is empty. If you choose to re-program the bootloader (e.g. other CAN speed), you cannot get into the DFU mode anymore. For enabling the "legacy"BOOT0
pin functionality, you have two options.-
You can use STMicro's STM32CubeProgrammer software to disable the
nBOOT_SEL
option bit by following the screenshot here. -
Or if you prefer
dfu-util
, which is included (or easily installed) in major linux distros (e.g. Raspberry Pi OS), you can run theenable_boot.hex
firmware from here. It will clear thenBOOT_SEL
option bit from within the firmware, if it is not yet cleared. Use the following commands to upload the file.objcopy --input-target=ihex --output-target=binary enable_boot0.hex enable_boot0.bin # Convert hex to binary sudo dfu-util -a 0 -d 0483:df11 --dfuse-address 0x08000000:leave -D enable_boot0.bin
After waiting for a second, the
BOOT0
pin is now enabled again and you can continue normally.NOTE: Before continuing, remember to set the GBB15 into DFU mode again using the BOOT/RESET pushbuttons (see above).
-
-
Build CanBoot according the instructions on the CanBoot github page. See this image for CanBoot menuconfig settings to use.
-
Build the Klipper firmware according to the instructions on the Klipper github page. See this image for Klipper menuconfig settings to use.
-
Upload CanBoot to the GBB15 using either STM32CubeProgrammer (if you have it installed) or using
dfu-util
with these commands.sudo dfu-util -a 0 -d 0483:df11 --dfuse-address 0x08000000:leave -D out/canboot.bin
The device is now booted into CanBoot mode and can be accessed using the CanBoot tools.
-
Upload the Klipper firmware to the GBB15 using either CanBoot's
flashtool.py
as described here or Klipper'smake flash
(usesdfu-util
).-
Using
flashtool.py
via CAN. Run these commands from theCanBoot/scripts
directorypython3 flashtool.py -i can0 -q # Check the UUID of the GBB15 board python3 flashtool.py -i can0 -f ~/klipper/out/klipper.bin -u <uuid> # Insert UUID here
-
Using
make flash
via Klipper Makefile. Run this command from theklipper
directory.NOTE: For this, you need to set the GBB15 into DFU mode again using the BOOT/RESET pushbuttons (see above).
make flash FLASH_DEVICE=0483:df11
-
This image shows the pinout of the GBB15 PCB. The CAN connector layout is compatible to the BigTreeTech EBB36 board (among others).
[mcu gantry_mcu]
canbus_interface: can0
canbus_uuid: f7b6d9f26b4a
...
[temperature_sensor chamber]
sensor_type: Generic 3950
sensor_pin: gantry_mcu:PA1 # SMD thermistor on GBB15 PCB
#sensor_pin: gantry_mcu:PA3 # Alternatively, this is STOP1 connector if it is not used otherwise
#sensor_pin: gantry_mcu:PA2 # Alternatively, this is STOP2 connector if it is not used otherwise (for Rev. B and up)
pullup_resistor: 4700
[temperature_sensor Motor_A]
sensor_type: Generic 3950
sensor_pin: gantry_mcu:PB11 # TH_A on GBB15 PCB
pullup_resistor: 4700
[temperature_sensor Motor_B]
sensor_type: Generic 3950
sensor_pin: gantry_mcu:PB12 # TH_B on GBB15 PCB
pullup_resistor: 4700
[temperature_sensor gantry_temp]
sensor_type: temperature_mcu
sensor_mcu: gantry_mcu
min_temp: 0
max_temp: 100
...
[stepper_y]
step_pin: gantry_mcu:PB2
dir_pin: gantry_mcu:PB1
enable_pin: !gantry_mcu:PB13
endstop_pin: gantry_mcu:PA3 # This is the STOP1 connector on GBB15 PCB
#endstop_pin: gantry_mcu:PA2 # Alternatively, this is STOP2 connector (for Rev. B and up, PC13 on Rev. A)
#endstop_pin: gantry_mcu:PB0 # This is the DIAG pin of the TMC driver for sensorless homing
...
[tmc2209 stepper_y]
uart_pin: gantry_mcu:PA4
sense_resistor: 0.110
...
[stepper_x]
step_pin: gantry_mcu:PB7
dir_pin: gantry_mcu:PB8
enable_pin: !gantry_mcu:PB9
endstop_pin: gantry_mcu:PA2 # This is STOP2 connector (for Rev. B and up, PC13 on Rev. A)
#endstop_pin: gantry_mcu:PA3 # Alternatively, this is the STOP1 connector on GBB15 PCB
#endstop_pin: gantry_mcu:PB5 # This is the DIAG pin of the TMC driver for sensorless homing
...
[tmc2209 stepper_x]
uart_pin: gantry_mcu:PB3
sense_resistor: 0.110
...
"Chamber" thermistor in this configuration is a SMD thermistor on the PCB. It reads probably 15-20°C above the actual chamber temperature, when the stepper motors are enabled and running.
- To get better chamber temp readings, you can use TH_A or TH_B to connect a remote thermistor (in case you don't need those for monitoring the motor temperatures).
- Alternatively you can (mis-)use the STOP1 (All revisions) and STOP2 (Rev. B and up) pins for analog readings. Easiest is a through-hole 100K B3950 NTC crimped into a JST PH2.0 and connected to one of the mentioned header pins.