H-Bot and CoreXY are two types of motion systems that use a crossed-belt configuration to move the print head or cutting tool in the X and Y directions.
Both systems use two motors to control X and Y movement, with each motor contributing to motion in both axes. This design reduces the moving mass and allows for faster, more precise movements compared to traditional Cartesian systems.
In an H-Bot or CoreXY system:
The key difference from Cartesian is that moving in the X direction requires both X/Y motors to move, and moving in the Y direction also requires both motors to move (but in different combinations).
For CoreXY and HBot:
This means:
corexy and hbot select the same implementation.
CoreXY and H-Bot offer several advantages:
To configure your HBot or CoreXY machine, set the arm_solution parameter in your configuration file to either corexy or hbot:
arm_solution corexy
or
arm_solution hbot
[general]
arm_solution = corexy
or
[general]
arm_solution = hbot
Both options use the same implementation in Smoothieware. Choose the name that matches your mechanical belt configuration.
# CoreXY arm solution
arm_solution corexy
# Alpha motor (X/Y motor 1)
alpha_step_pin 2.0
alpha_dir_pin 0.5
alpha_en_pin 0.4
alpha_steps_per_mm 80
alpha_max_rate 24000 # mm/min - can be very high!
# Beta motor (X/Y motor 2)
beta_step_pin 2.1
beta_dir_pin 0.11
beta_en_pin 0.10
beta_steps_per_mm 80
beta_max_rate 24000 # mm/min - can be very high!
# Gamma motor (Z motor - independent)
gamma_step_pin 2.2
gamma_dir_pin 0.20
gamma_en_pin 0.19
gamma_steps_per_mm 400
gamma_max_rate 300
# CoreXY homing (optional but recommended)
corexy_homing true
[general]
arm_solution = corexy
corexy_homing = true
[actuator]
alpha.step_pin = PG0
alpha.dir_pin = PG1
alpha.en_pin = PJ2
alpha.steps_per_mm = 80
alpha.max_rate = 24000
alpha.microsteps = 32
alpha.driver = tmc2660
beta.step_pin = PG2
beta.dir_pin = PG3
beta.en_pin = PJ3
beta.steps_per_mm = 80
beta.max_rate = 24000
beta.microsteps = 32
beta.driver = tmc2660
gamma.step_pin = PG4
gamma.dir_pin = PG5
gamma.en_pin = PJ4
gamma.steps_per_mm = 400
gamma.max_rate = 300
gamma.microsteps = 32
gamma.driver = tmc2660
It is recommended to set the alpha_max_rate and beta_max_rate to the highest speed your steppers can achieve.
These settings refer to the actuator speed (the physical X and Y stepper motors), which on a CoreXY system can run nearly twice as fast as the requested Cartesian speed when moving in certain diagonal directions.
For example:
alpha_max_rate and beta_max_rate to at least 24000mm/minIf you are using endstops for homing, enable CoreXY homing mode:
corexy_homing true
This tells Smoothieware to handle the motor coordination properly during homing operations. Without this setting, homing behavior may be unpredictable.
Movement in the X or Y direction always involves both alpha and beta motors, which can make configuring a CoreXY solution confusing.
If you find that movement is incorrect after wiring and configuring your printer, the following solutions may help:
| Problem | Possible Solution |
|---|---|
| My axes are swapped | Invert the signal of one motor by adding or removing ‘!’ from its dir_pin |
| One of my axes goes in the wrong direction | Swap the alpha and beta motor cables, or swap the pin assignments in config |
| Both axes are mirrored | Invert both alpha and beta dir_pins by adding or removing ‘!’ |
| Diagonal movements are wrong | Check belt routing - ensure it matches CoreXY or H-Bot topology |
| Feature | CoreXY/H-Bot | Cartesian | Linear Delta |
|---|---|---|---|
| Setup complexity | Medium | Low | High |
| XY speed potential | Very high | Medium | Very high |
| Z speed potential | Low | Low | High |
| Moving mass | Low | High | Very low |
| Calibration difficulty | Medium | Easy | Hard |
| Build volume shape | Rectangular | Rectangular | Cylindrical |
| Mechanical precision needed | Medium | Medium | High |
Well-known CoreXY designs include:
Solution: One motor may be wired backwards. Check that both motors are energized and swap one motor’s cable polarity if needed.
Solution: The motor directions are likely incorrect. Try inverting one motor’s dir_pin with ‘!’.
Solution: Your alpha_max_rate and beta_max_rate may be too low. Increase them to at least 2× your desired Cartesian speed.
Solution: This usually indicates the motor speeds are too high for diagonal movements. Either:
alpha_max_rate and beta_max_rateFor developers or those interested in the implementation details: