Shifting or loosing steps in one direction

I am using re-arm from panucatt board (running smoothieware) with Ramps 1.4, on a custom build printer, 400x400x400 mm. I am using CNC microstepper drivers for all 3 axis that can go up to 4.2 amps, and 25600 microsteps. Right now they are set at 3200 microsteps. Nema17 48mm 1.7A 0.9° motors.

The problem I am having is that the print is shifting, and I can’t figure out how to fix it.
Before I had the re-arm board, I was using an Arduino Mega 2560 with Ramps 1.4, and it was printing good, no shifting! I did not make any changes to the hardware. I replaced the Arduino with the re-arm running smoothieware, and then the shifting problem started.

If I print in vase mode, it is printing perfectly straight, but when I print the test cube, it’s shifting on X & Y. It seems to be shifting equally on both axes, and also on every layer equally, and I find that really weird… if it was hardware problem it should shift on one axis, or more on one axis than the other, and also vase mode prints perfectly!

Things I tried:
changed acceleration
changed junction_deviation
changed microseconds_per_step_pulse
increased the amps on the microstep drivers
decreased microsteps
increased microsteps

Nothing fixes the shifting problem :frowning:

Someone please help me!
Thanks in advance

I wanted to post an image of the print, but the site does not let me post any links :frowning:

Config file:

[[code]]
# Robot module configurations : general handling of movement G-codes and slicing into moves
default_feed_rate 4000 # Default rate ( mm/minute ) for G1/G2/G3 moves
default_seek_rate 4000 # Default rate ( mm/minute ) for G0 moves
mm_per_arc_segment 0.5 # Arcs are cut into segments ( lines ), this is the length for these segments. Smaller values mean more resolution, higher values mean faster computation
mm_per_line_segment 1 # Lines can be cut into segments ( not usefull with cartesian coordinates robots ).

  1. Arm solution configuration : Cartesian robot. Translates mm positions into stepper positions

alpha_steps_per_mm 160 # Steps per mm for alpha stepper
beta_steps_per_mm 160 # Steps per mm for beta stepper
gamma_steps_per_mm 400 # Steps per mm for gamma stepper

  1. Planner module configuration : Look-ahead and acceleration configuration

planner_queue_size 32 # DO NOT CHANGE THIS UNLESS YOU KNOW EXACTLY WHAT YOUR ARE DOING
acceleration 1000 # Acceleration in mm/second/second.
z_acceleration 500 # Acceleration for Z only moves in mm/s^2, 0 disables it, disabled by default. DO NOT SET ON A DELTA
acceleration_ticks_per_second 1000 # Number of times per second the speed is updated
junction_deviation 0.005

  1. Stepper module configuration

microseconds_per_step_pulse 5 # Duration of step pulses to stepper drivers, in microseconds
base_stepping_frequency 100000 # Base frequency for stepping

  1. Stepper module pins ( ports, and pin numbers, appending "!" to the number will invert a pin )

alpha_step_pin 2.1 # Pin for alpha stepper step signal
alpha_dir_pin 0.11! # Pin for alpha stepper direction
alpha_en_pin 0.10 # Pin for alpha enable pin 0.10
alpha_current 1.0 # X stepper motor current
x_axis_max_speed 20000 # mm/min
alpha_max_rate 20000.0 # mm/min actuator max speed

beta_step_pin 2.2 # Pin for beta stepper step signal
beta_dir_pin 0.20! # Pin for beta stepper direction
beta_en_pin 0.19 # Pin for beta enable
beta_current 1.0 # Y stepper motor current
y_axis_max_speed 20000 # mm/min
beta_max_rate 20000.0 # mm/min actuator max speed

gamma_step_pin 2.3 # Pin for gamma stepper step signal
gamma_dir_pin 0.22 # Pin for gamma stepper direction
gamma_en_pin 0.21 # Pin for gamma enable
gamma_current 1.0 # Z stepper motor current
z_axis_max_speed 1500 # mm/min
gamma_max_rate 1500.0 # mm/min actuator max speed

  1. Serial communications configuration ( baud rate default to 9600 if undefined )

uart0.baud_rate 250000 # Baud rate for the default hardware serial port
second_usb_serial_enable false # This enables a second usb serial port (to have both pronterface and a terminal connected)
msd_disable true # disable the MSD (USB SDCARD) when set to true

#player.on_boot_gcode_enable false
#player.on_boot_gcode /sd/on_boot.gcode
player.after_suspend_gcode G91_G0E-5_G0Z10_G90_G0X-50Y-50
player.before_resume_gcode G91_G1E1_G90
player.leave_heaters_on_suspend true
player.progress true

  1. Extruder module configuration

extruder.hotend.enable true # Whether to activate the extruder module at all. All configuration is ignored if false
extruder.hotend.steps_per_mm 1634 # Steps per mm for extruder stepper
extruder.hotend.default_feed_rate 500 # Default rate ( mm/minute ) for moves where only the extruder moves
extruder.hotend.acceleration 1500 # Acceleration for the stepper motor mm/sec²
extruder.hotend.max_speed 20 # mm/s

extruder.hotend.step_pin 2.0 # Pin for extruder step signal
extruder.hotend.dir_pin 0.5 # Pin for extruder dir signal
extruder.hotend.en_pin 0.4 # Pin for extruder enable signal

  1. extruder offset

extruder.hotend.x_offset 0 # x offset from origin in mm
extruder.hotend.y_offset 0 # y offset from origin in mm
extruder.hotend.z_offset 0 # z offset from origin in mm

  1. firmware retract settings when using G10/G11, these are the defaults if not defined, must be defined for each extruder if not using the defaults

#extruder.hotend.retract_length 2 # retract length in mm
#extruder.hotend.retract_feedrate 50 # retract feedrate in mm/sec
#extruder.hotend.retract_recover_length 0 # additional length for recover
#extruder.hotend.retract_recover_feedrate 8 # recover feedrate in mm/sec (should be less than retract feedrate)
#extruder.hotend.retract_zlift_length 0 # zlift on retract in mm, 0 disables
#extruder.hotend.retract_zlift_feedrate 6000 # zlift feedrate in mm/min (Note mm/min NOT mm/sec)
delta_current 1.0 # Extruder stepper motor current

  1. Second extruder module configuration

extruder.hotend2.enable false # Whether to activate the extruder module at all. All configuration is ignored if false
extruder.hotend2.steps_per_mm 154 # Steps per mm for extruder stepper
extruder.hotend2.default_feed_rate 600 # Default rate ( mm/minute ) for moves where only the extruder moves
extruder.hotend2.acceleration 500 # Acceleration for the stepper motor, as of 0.6, arbitrary ratio
extruder.hotend2.max_speed 60 # mm/s

extruder.hotend2.step_pin 2.8 # Pin for extruder step signal
extruder.hotend2.dir_pin 2.13 # Pin for extruder dir signal
extruder.hotend2.en_pin 4.29 # Pin for extruder enable signal

extruder.hotend2.x_offset 0 # x offset from origin in mm
extruder.hotend2.y_offset 25.0 # y offset from origin in mm
extruder.hotend2.z_offset 0 # z offset from origin in mm
epsilon_current 1.5 # Second extruder stepper motor current

  1. Safety control is enabled by default and can be overidden here, the values show the defaults

temperature_control.hotend.max_temp 280
temperature_control.hotend.runaway_heating_timeout 300 # How long it can take to heat up, max is 2040 seconds.
temperature_control.hotend.runaway_cooling_timeout 240 # How long it can take to cool down if temp is set lower, max is 2040 seconds
temperature_control.hotend.runaway_range 20 # How far from the set temperature it can wander, max setting is 63°C

  1. Laser module configuration

laser_module_enable false # Whether to activate the laser module at all. All configuration is ignored if false.
#laser_module_pin 2.7 # this pin will be PWMed to control the laser
#laser_module_max_power 0.8 # this is the maximum duty cycle that will be applied to the laser
#laser_module_tickle_power 0.0 # this duty cycle will be used for travel moves to keep the laser active without actually burning

  1. Hotend temperature control configuration

temperature_control.hotend.enable true # Whether to activate this ( "hotend" ) module at all. All configuration is ignored if false.
temperature_control.hotend.thermistor_pin 0.23 # Pin for the thermistor to read
temperature_control.hotend.heater_pin 2.5 # Pin that controls the heater
temperature_control.hotend.thermistor EPCOS100K
#temperature_control.hotend.beta 4066 # or set the beta value

temperature_control.hotend.set_m_code 104 #
temperature_control.hotend.set_and_wait_m_code 109 #
temperature_control.hotend.designator T #

#E3D Lite
temperature_control.hotend.p_factor 45.7 #
temperature_control.hotend.i_factor 3.927 #
temperature_control.hotend.d_factor 133 #

#temperature_control.hotend.max_pwm 64 # max pwm, 64 is a good value if driving a 12v resistor with 24v.

  1. Hotend2 temperature control configuration

temperature_control.hotend2.enable false # Whether to activate this ( "hotend" ) module at all. All configuration is ignored if false.

temperature_control.hotend2.thermistor_pin 0.25 # Pin for the thermistor to read
temperature_control.hotend2.heater_pin 2.4 # Pin that controls the heater
temperature_control.hotend2.thermistor EPCOS100K
##temperature_control.hotend2.beta 4066 # or set the beta value
temperature_control.hotend2.set_m_code 104 #
temperature_control.hotend2.set_and_wait_m_code 109 #
temperature_control.hotend2.designator T1 #

  1. PID

temperature_control.hotend2.p_factor 57 # permanently set the PID values after an auto pid
temperature_control.hotend2.i_factor 0.097 #
temperature_control.hotend2.d_factor 4.55 #
temperature_control.hotend2.max_pwm 178 # max pwm, 64 is a good value if driving a 12v resistor with 24v.

temperature_control.bed.enable true #
temperature_control.bed.thermistor_pin 0.24 #
temperature_control.bed.heater_pin 2.7 #
#temperature_control.bed.thermistor EPCOS100K
temperature_control.bed.beta 3950 # or set the beta value

temperature_control.bed.set_m_code 140 #
temperature_control.bed.set_and_wait_m_code 190 #
temperature_control.bed.designator B #

#temperature_control.bed.max_pwm 128 # max pwm, 64 is a good value if driving a 12v resistor with 24v.

#PID BED L
temperature_control.bed.p_factor 174.5 # permanently set the PID values after an auto pid
temperature_control.bed.i_factor 15.076 #
temperature_control.bed.d_factor 505 #

  1. Switch module for fan control

switch.fan.enable true #
switch.fan.input_on_command M106 #
switch.fan.input_off_command M107 #
switch.fan.output_pin 2.4 #

switch.misc.enable false #
switch.misc.input_on_command M42 #
switch.misc.input_off_command M43 #
switch.misc.output_pin 2.4 #

  1. Switch module for spindle control

#switch.spindle.enable false #

  1. Endstops

endstops_enable true # the endstop module is enabled by default and can be disabled here
#corexy_homing false # set to true if homing on a hbit or corexy
alpha_min_endstop 1.24^ # add a ! to invert if endstop is NO connected to ground
#alpha_max_endstop 1.24^ #
alpha_homing_direction home_to_min # or set to home_to_max and set alpha_max
alpha_min -10 # this gets loaded after homing when home_to_min is set
alpha_max 390 # this gets loaded after homing when home_to_max is set
beta_min_endstop 1.26^ #
#beta_max_endstop 1.26^ #
beta_homing_direction home_to_min #
beta_min -10 #
beta_max 390 #
gamma_min_endstop 1.29^ #
#gamma_max_endstop 1.29^ #
gamma_homing_direction home_to_min #
gamma_min 0 #
gamma_max 400 #Obsolete
max_z 400

  1. optional enable limit switches, actions will stop if any enabled limit switch is triggered

#alpha_limit_enable false # set to true to enable X min and max limit switches
#beta_limit_enable false # set to true to enable Y min and max limit switches
#gamma_limit_enable false # set to true to enable Z min and max limit switches

#probe endstop
#probe_pin 1.29 # optional pin for probe

alpha_fast_homing_rate_mm_s 90 # feedrates in mm/second
beta_fast_homing_rate_mm_s 90 # "
gamma_fast_homing_rate_mm_s 16 # "

alpha_slow_homing_rate_mm_s 50 # "
beta_slow_homing_rate_mm_s 50 # "
gamma_slow_homing_rate_mm_s 5 # "

alpha_homing_retract_mm 5 # distance in mm
beta_homing_retract_mm 5 # "
gamma_homing_retract_mm 6 # "

endstop_debounce_count 100 # uncomment if you get noise on your endstops, default is 100

  1. optional Z probe

zprobe.enable true # set to true to enable a zprobe
zprobe.probe_pin 1.29^ # pin probe is attached to if NC remove the !
zprobe.slow_feedrate 5 # mm/sec probe feed rate
zprobe.fast_feedrate 200 # move feedrate mm/sec
#zprobe.debounce_count 100 # set if noisy
zprobe.probe_height 5 # how much above bed to start probe

  1. Bltouch

switch.servo.enable true
switch.servo.input_on_command M280 S3.0
switch.servo.input_off_command M281 S7.0
switch.servo.output_pin 1.20
switch.servo.output_type hwpwm
switch.servo.pwm_period_ms 20

switch.servo1.enable true # Enable servo1
switch.servo1.output_pin 1.20 # SER1 pin
switch.servo1.output_type hwpwm # PWM output
switch.servo1.startup_value 0 # Start with servo disabled
switch.servo1.max_pwm 100 # Max PWM
switch.servo1.pwm_period_ms 20 # PWM period
switch.servo1.input_on_command M280 S3.0 # G code to set PWM period. M280 S4 is full one direction, S7 would be midway, S10 is the other extreme.
switch.servo1.input_off_command M280 S7.0 # G code to set PWM period
switch.servo1.fail_safe_set_to 0

leveling-strategy.rectangular-grid.enable true # The strategy must be enabled in the config, as well as the zprobe module.
leveling-strategy.rectangular-grid.x_size 390 # size of bed in the X axis
leveling-strategy.rectangular-grid.y_size 390 # sizef of bed in the Y axis
leveling-strategy.rectangular-grid.size 3 # The size of the grid, for example, 7 causes a 7x7 grid with 49 points. Must be an odd number.
leveling-strategy.rectangular-grid.only_by_two_corners true
leveling-strategy.rectangular-grid.do_home false

#Probe offset E3D
leveling-strategy.rectangular-grid.probe_offsets 0, 25, 0 # Optional probe offsets from the nozzle or tool head
leveling-strategy.rectangular-grid.save false # If the saved grid is to be loaded on boot then this must be set to true
leveling-strategy.rectangular-grid.initial_height 5 # Optionally an initial_height can be set that tell the intial probe
# where to stop the fast decent before it probes, this should be
# around 5-10mm above the bed

  1. Pause button

pause_button_enable true #

panel.enable true # set to true to enable the panel code

  1. Example viki2 config for Re-ARM with IDC cable

panel.lcd viki2 # set type of panel
panel.spi_channel 0 # set spi channel to use P0_18,P0_15 MOSI,SCLK
panel.spi_cs_pin 0.16 # set spi chip select
panel.encoder_a_pin 3.25!^ # encoder pin
panel.encoder_b_pin 3.26!^ # encoder pin
panel.click_button_pin 2.11!^ # click button
panel.a0_pin 2.6 # st7565 needs an a0
panel.contrast 8 # override contrast setting (default is 9)
panel.encoder_resolution 4 # override number of clicks to move 1 item (default is 4)
#panel.button_pause_pin 1.22^ # kill/pause set one of these for the auxilliary button on viki2
#panel.back_button_pin 1.22!^ # back button recommended to use this on EXP1
panel.buzz_pin 1.30 # pin for buzzer on EXP2
panel.red_led_pin 0.26 # pin for red led on viki2 on EXP1
panel.blue_led_pin 1.21 # pin for blue led on viki2 on EXP1
panel.external_sd true # set to true if there is an extrernal sdcard on the panel
panel.external_sd.spi_channel 0 # set spi channel the sdcard is on
panel.external_sd.spi_cs_pin 1.23 # set spi chip select for the sdcard
panel.external_sd.sdcd_pin 1.31!^ # sd detect signal (set to nc if no sdcard detect)
panel.menu_offset 1 # some panels will need 1 here

panel.alpha_jog_feedrate 6000 # x jogging feedrate in mm/min
panel.beta_jog_feedrate 6000 # y jogging feedrate in mm/min
panel.gamma_jog_feedrate 200 # z jogging feedrate in mm/min

panel.hotend_temperature 220 # temp to set hotend when preheat is selected
panel.T1_temperature 220 # temp to set hotend when preheat is selected
panel.bed_temperature 60 # temp to set bed when preheat is selected

panel.hotend_temperature_abs 245 # temp to set hotend when preheat is selected
panel.bed_temperature_abs 90 # temp to set bed when preheat is selected

panel.hotend_temperature_petg 220 # temp to set hotend when preheat is selected
panel.bed_temperature_petg 80 # temp to set bed when preheat is selected

  1. RE-ARM specific settings do not change

currentcontrol_module_enable false #
digipot_max_current 2.4 # max current
digipot_factor 106.0 # factor for converting current to digipot value
leds_disable true # disable using leds after config loaded

  1. network settings

network.enable false # enable the ethernet network services
network.webserver.enable true # enable the webserver
network.telnet.enable true # enable the telnet server
network.plan9.enable true # enable the plan9 network filesystem
network.ip_address auto # the IP address
#network.ip_mask 255.255.255.0 # the ip mask
#network.ip_gateway 192.168.3.1 # the gateway address

return_error_on_unhandled_gcode false #

switch.psu.enable false # turn atx on/off
switch.psu.input_on_command M81 # set PSU_OFF => M81
switch.psu.input_off_command M80 # set PSU ON => M80
switch.psu.output_pin 2.12o # open drain, inverted
switch.psu.output_type digital # on/off only
#switch.psu.fail_safe_set_to 1 # so the ATX turns off on a system crash
switch.psu.ignore_on_halt false # so the ATX does not turn off on a HALT condition (like limit trigger)

#Runout
switch.suspend.enable false # Enable this module
switch.suspend.input_pin 1.17!^ # Pin where filament out button is connected
#switch.suspend.output_on_command suspend # Suspend command
switch.suspend.output_on_command G91|G1_Z0.6_F12000|G90|G1_X0_Y0|G91|G1_Z-0.6|G90|M25 # Suspend command

switch.resume.enable false # Enable this module
switch.resume.input_pin 1.14^ # Pin where resume button is connected
#switch.resume.output_on_command resume # Resume command
switch.resume.output_on_command M24 # Resume command
[[/code]]

Imported from wikidot

Maybe try inverting the step pins for each driver ?

I tried your suggestion. I inverted the step pin in config, and then I inverted 2 wires of the stepper motor (to make it spin in the same direction), and it did not make any difference. It’s shifting in the same direction.

As I said before, when doing vase mode, it does not shift, so it’s not a hardware problem. Before I had the re-arm (with the Arduino) it was not shifting

Here is a pic: https :// postimg.org / image / kmfoyxnyb/
remove the spaces, the site does not allow me to post links :frowning:

Hey.

Vase mode is many times less demanding in terms of forces compared to normal printing, so this very well might be a physical problem ( that you don’t see in vase mode because it’s much softer on the machine ).

When you say you inverted the step pin, why did you swap wires around ? How is that related to inverting step pins ? It shouldn’t be needed. What did you do exactly ?

As a side note : I’ve been helping people with machines for 5 years. 90% of the time, the answer to " skips steps" is “my pulley isn’t fastened well enough”. Even when the conversation starts with “I checked everything 10 times, everything is perfect mechanically”, it very often ends anyway with “oh sorry I just tightened it and now it works”. You might very well be in the other 10%, but checking multiple times is probably a good idea.

Cheers.

Actually I just realised that it is not loosing steps, it is actually ADDING steps, because it is moving in the X and Y direction on the positive side (away from zero). For every layer it is adding a few steps, so the angle is constant.
When I set the steps per mm to very low (3200 pulse per rev), for example, then the angle is very big, then I set it to 6400 the angle is about half (hard to measure), when I set it to 12800 is even less. Now it is set to max steps per rev that the motor driver can do, at 25600 pulse per rev, and it looks like it’s printing straight, but I am sure that if I 3D print something very tall, the shifting angle will be visible.

So, I am now SURE that it is not the hardware that has the problem, it is either the RE-ARM board or the software / smoothieware.
The problem with this is that the speed of the printer is greatly reduced, it is moving at max speed at about 110 mm/sec (or 6600 mm/min). So I can 3D print at 80mm/s, and it’s printing good, but when jumping from one position to another it is not moving fast enough and it makes tons of “strings” because of oozing between jumps.

I join the question. Same problem.
A sharp shift (or loosing steps) in X and Y direction appears at the value junction_deviation 0.35
Things I tried:
All as above plus
new motors
new external drivers
a lot of firmware versions