The Cartesian arm solution is the most common type of machine configuration used in 3D printers and CNC machines.
In a Cartesian machine, each actuator (motor and linear rail) directly corresponds to an axis in Cartesian space:
This is the simplest arm solution, as there is a direct 1:1 relationship between the motors and the movement in space - no mathematical conversion is needed.
Cartesian is the default and most straightforward arm solution for several reasons:
To configure your machine to use the Cartesian arm solution, add this to your configuration file:
V1 Configuration:
arm_solution cartesian
V2 Configuration:
[motion control]
arm_solution = cartesian
This is the default setting in Smoothieware, so if you don’t specify an arm solution, Cartesian will be used automatically.
Here’s a typical Cartesian configuration:
V1 Configuration:
# Cartesian arm solution (can be omitted as it's the default)
arm_solution cartesian
# Alpha (X axis)
alpha_step_pin 2.0
alpha_dir_pin 0.5
alpha_en_pin 0.4
alpha_steps_per_mm 80
alpha_max_rate 12000
# Beta (Y axis)
beta_step_pin 2.1
beta_dir_pin 0.11
beta_en_pin 0.10
beta_steps_per_mm 80
beta_max_rate 12000
# Gamma (Z axis)
gamma_step_pin 2.2
gamma_dir_pin 0.20
gamma_en_pin 0.19
gamma_steps_per_mm 400
gamma_max_rate 300
V2 Configuration:
[motion control]
arm_solution = cartesian
[alpha]
step_pin = 2.0
dir_pin = 0.5
en_pin = 0.4
steps_per_mm = 80
max_rate = 12000
[beta]
step_pin = 2.1
dir_pin = 0.11
en_pin = 0.10
steps_per_mm = 80
max_rate = 12000
[gamma]
step_pin = 2.2
dir_pin = 0.20
en_pin = 0.19
steps_per_mm = 400
max_rate = 300
Cartesian configurations are used in:
| Feature | Cartesian | Linear Delta | CoreXY | SCARA |
|---|---|---|---|---|
| Setup complexity | Low | Medium | Medium | High |
| Calibration difficulty | Easy | Medium | Medium | Hard |
| Build volume shape | Rectangular | Cylindrical | Rectangular | Semicircular |
| Speed potential | Medium | High | High | High |
| Z-axis speed | Low | High | Low | Medium |
| Moving mass | High | Low | Medium | Low |
| Mechanical precision needed | Medium | High | High | Very high |
Solution: Invert the direction pin for that axis by adding or removing ‘!’ from the dir_pin configuration:
# Change this:
alpha_dir_pin 0.5
# To this:
alpha_dir_pin 0.5!
Solution: Calibrate your steps_per_mm for each axis. Measure actual movement and adjust:
new_steps_per_mm = current_steps_per_mm × (commanded_distance / actual_distance)
Solution: This is a mechanical issue. Check that your frame is square using a carpenter’s square or by measuring diagonals.