BIGTREETECH Rodent CNC Control Board – FluidNC Compatible, Supports PWM & RS485 Control Modes.
Early versions of the configuration file shown below had
r_sense_ohms: 0.022
instead of the correct value0.075
. That was due to incorrect information in the Rodent schematic in the Rodent github repo, and in the example config file in that repo. The effect of having the wrong value is to reduce the current by a factor of 3.4, so if you asked for 2 amps of run current, you would actually get about 0.6 amps. The motors would have much less torque than expected. If you use a BTT Rodent, please check your config file to make sure that you haver_sense_ohms: 0.075
for all motors.
This wiki page is a work in progress. Please be patient and consider donating to FluidNC. We are not currently sponsored by BTT or Rat Rig and do not have a controller. This is just a collection of thing we have learned about the controller as we help users. This is not "official" information. Use at your own risk.
JST-XH 2.5mm (3 and 4 position)
This uses a USB C connector and a CH340K USB/Serial chip.
You can power the ESP32 via USB alone if you install the jumper next to the USB connector. Do not apply main power when this jumper is installed.
If you have trouble with the USB on MacOS see this issue.
There appear to be errors in the schematic and config files regarding the current sense resistors (r_sense_ohms:). Everything says to use 0.022, but it appears that the controller actually has 0.075 ohm sense resistors. The value is used by FluidNC to set the current. This can explain why people are complaining about low motor power. Setting 3 amps would only get you 0.88 amps if you use the wrong value.
The motor drivers a TMC2160 and can be configured up to 3A. Define them as TMC2160 or TMC5160 (compatible). You can define the driver for use with any axis or as a second motor for any axis, like XYZA, XYYZ, etc. The spi_index
value in the config file indicates which driver you are configuring. They are numbered 1 through 4, from left to right. FluidNC needs to know that there are 4 motor drivers in the daisy chain. If you are using less than 4, one of the drivers you need to use is number 4.
The motors are labeled X, Y, Z and E. They can actually be used for any axis or motor number in FluidNC as long as you use the I/O associated with each motor.
Each switch has 3 pins. The switch voltage (SW_VCC), ground and the signal. The switch activates when the signal is connected to ground.
The voltage (5v, 12v and V-Motor) for the switch is selectable via the V-Lim Jumper.
The switches all have pullups so they are high in the open state. They do not need :PU
in the config file.
The switch input circuits use optos. You connect pin 1 to pin 2 to to supply the ground for the opto. The + side of the opto is supplied from the SW_VCC voltage through a 1k resistor. I assume the opto LED is fine with both 5v and 12v SW_VCC. Use 5V when in doubt. Ww do not recommend using VBB with voltages above 24V.
Use them like this in your config file gpio.34:low
Schematic snippet
Untested: There are jumpers to tie the diag pins to the limit switch inputs. See the back of the controller for the location.
The voltage (5v, 12v and V-Motor) for the probe is selectable via the V-Probe Jumper.
The voltage (12VDC-36VDC) for the MOSFETs (5A) is supplied via V-MOS connector.
Uses 10k series resistors on each gpio.
3V - 10V adjustable via potentiometer.
See back of controller for A and B pins. See this page for more info on RS485
There is an Rx LED to help with diagnostics.
The controller has TMC2160 drivers. FluidNC does not support these by name yet. FluidNC does support TMC5160, which is functionally compatible with TMC2160, so you should specify tmc5160 in the config file. The difference between TMC2160 and TMC5160 is that TMC5160 has a built-in motion controller function that FluidNC does not and cannot use. As far as FluidNC is concerned, the chips behave identically.
Default config file
board: BTT Rodent V1.0
name: BTT CNC
meta: (10.11.2024) by BTT
kinematics:
Cartesian:
# stepping:
# engine: RMT
# idle_ms: 250
# dir_delay_us: 1
# pulse_us: 2
# disable_delay_us: 0
stepping:
engine: I2S_STREAM
idle_ms: 255
pulse_us: 4
dir_delay_us: 1
disable_delay_us: 0
axes:
shared_stepper_disable_pin: NO_PIN
x:
steps_per_mm: 800.000
max_rate_mm_per_min: 5000.000
acceleration_mm_per_sec2: 100.000
max_travel_mm: 300.000
soft_limits: false
homing:
cycle: 1
positive_direction: false
mpos_mm: 150.000
feed_mm_per_min: 100.000
seek_mm_per_min: 200.000
settle_ms: 500
seek_scaler: 1.100
feed_scaler: 1.100
motor0:
limit_neg_pin: NO_PIN
limit_pos_pin: gpio.35
limit_all_pin: NO_PIN
hard_limits: false
pulloff_mm: 1.000
tmc_5160:
step_pin: I2SO.2
direction_pin: I2SO.1
disable_pin: I2SO.0
cs_pin: gpio.5
spi_index: 1
r_sense_ohms: 0.075
run_amps: 0.5
hold_amps: 0.5
microsteps: 8
toff_disable: 0
toff_stealthchop: 5
use_enable: false
run_mode: CoolStep
homing_mode: CoolStep
stallguard: 16
stallguard_debug: false
toff_coolstep: 3
tpfd: 4
y:
steps_per_mm: 800.000
max_rate_mm_per_min: 5000.000
acceleration_mm_per_sec2: 100.000
max_travel_mm: 300.000
soft_limits: false
homing:
cycle: 1
positive_direction: true
mpos_mm: 150.000
feed_mm_per_min: 100.000
seek_mm_per_min: 200.000
settle_ms: 500
seek_scaler: 1.100
feed_scaler: 1.100
motor0:
limit_neg_pin: NO_PIN
limit_pos_pin: gpio.34
limit_all_pin: NO_PIN
hard_limits: false
pulloff_mm: 1.000
tmc_5160:
step_pin: I2SO.5
direction_pin: I2SO.4
disable_pin: I2SO.7
cs_pin: NO_PIN
spi_index: 2
r_sense_ohms: 0.075
run_amps: 0.5
hold_amps: 0.5
microsteps: 8
toff_disable: 0
toff_stealthchop: 5
use_enable: false
run_mode: CoolStep
homing_mode: CoolStep
stallguard: 16
stallguard_debug: false
toff_coolstep: 3
tpfd: 4
z:
steps_per_mm: 800.000
max_rate_mm_per_min: 5000.000
acceleration_mm_per_sec2: 100.000
max_travel_mm: 300.000
soft_limits: false
homing:
cycle: 1
positive_direction: true
mpos_mm: 150.000
feed_mm_per_min: 100.000
seek_mm_per_min: 800.000
settle_ms: 500
seek_scaler: 1.100
feed_scaler: 1.100
motor0:
limit_neg_pin: NO_PIN
limit_pos_pin: gpio.33:pu
limit_all_pin: NO_PIN
hard_limits: false
pulloff_mm: 1.000
tmc_5160:
step_pin: I2SO.10
direction_pin: I2SO.9
disable_pin: I2SO.8
cs_pin: NO_PIN
spi_index: 3
r_sense_ohms: 0.075
run_amps: 0.500
hold_amps: 0.500
microsteps: 8
toff_disable: 0
toff_stealthchop: 5
use_enable: false
run_mode: CoolStep
homing_mode: CoolStep
stallguard: 16
stallguard_debug: false
toff_coolstep: 3
tpfd: 4
a:
# E0
steps_per_mm: 157.750
max_rate_mm_per_min: 18000.000
acceleration_mm_per_sec2: 1500.000
max_travel_mm: 325.000
soft_limits: true
homing:
cycle: 1
positive_direction: true
mpos_mm: 150.000
feed_mm_per_min: 100.000
seek_mm_per_min: 800.000
settle_ms: 500
seek_scaler: 1.100
feed_scaler: 1.100
motor0:
limit_neg_pin: NO_PIN
limit_pos_pin: gpio.32:pu
limit_all_pin: NO_PIN
hard_limits: false
pulloff_mm: 1.000
tmc_5160:
step_pin: I2SO.13
direction_pin: I2SO.12
disable_pin: I2SO.15
cs_pin: NO_PIN
spi_index: 4
r_sense_ohms: 0.075
run_amps: 0.5
hold_amps: 0.5
microsteps: 16
toff_disable: 0
toff_stealthchop: 5
use_enable: false
run_mode: CoolStep
homing_mode: CoolStep
stallguard: 16
stallguard_debug: false
toff_coolstep: 3
tpfd: 4
i2so:
bck_pin: gpio.22
data_pin: gpio.21
ws_pin: gpio.17
spi:
miso_pin: gpio.19
mosi_pin: gpio.23
sck_pin: gpio.18
sdcard:
cs_pin: gpio.0
card_detect_pin: NO_PIN
frequency_hz: 8000000
# I2SO.3
# coolant:
# flood_pin: gpio.2:high
# mist_pin: gpio.3:low
# gpio.4 # HB MOS
# probe:
# pin: gpio.5:low:pu
# toolsetter_pin: gpio.14:low
# Begin Huanyang
uart1:
txd_pin: gpio.15
rxd_pin: gpio.16
rts_pin: gpio.14
baud: 9600
mode: 8N1
Huanyang:
uart_num: 1
modbus_id: 1
tool_num: 0
speed_map: 0=0% 0=25% 6000=25% 24000=100%
off_on_alarm: false
# PWM:
# pwm_hz: 5000
# output_pin: gpio.13
# enable_pin: gpio.25
# direction_pin: gpio.15
# disable_with_s0: false
# s0_with_disable: false
# spinup_ms: 0
# spindown_ms: 0
# tool_num: 0
# speed_map: 0=0% 10000=100%
# off_on_alarm: false
i2c0:
sda_pin: gpio.27
scl_pin: gpio.26
oled:
i2c_num: 0
i2c_address: 60
width: 128
height: 64
radio_delay_ms: 1000
status_outputs:
report_interval_ms: 500
idle_pin: I2SO.11:low
run_pin: I2SO.14:low
alarm_pin: I2SO.3:low
# hold_pin: gpio.16
There are 3 LEDs next along the edge near the MOSFETs
They are all active low. Note: Colors are wrong on schematic
status_outputs:
report_interval_ms: 500
idle_pin: I2SO.11:low
run_pin: I2SO.14:low
alarm_pin: I2SO.3:low