SLS printer motor control

Hello everbody,

I am building a selective laser sintering printer (SLS).
And looking to use Repetier as firmware.

The printer has 7 motors, a laser and a preheated bed:

2 stepper motors on Core XY to move the laser head
1 Z-stepper motor 
1 A-stepper motor to drive the spreading carriage
1 B-stepper motor to drive a roller on the spreading carriage
1 C-stepper motor connected to a transport screw in a tube to transport the powder above  the bed
1 servo motor to open the transport tube and deposit the powder on the bed
1 40W Co2 laser with his own controllor
Preheated bed  with his own Arduino, heaters, probes and pid control.

The process order I want to use is.

Powder depositing
Motor Z -Rotate the Z axis  down(lowering the powder bed)
Motor C - rotate x amount of steps (filling the transport tube)
Servo -  rotate +x degrees (open the transport tube)
Motor C - Rotate -x amount of steps (pushing the powder out )
Servo - rotate +x degrees(close the tube)
Motor B - rotate at a  certain speed x steps/s (backward rotating the roller)
Motor A -  Rotate x amount of steps forward (moving the backward rotating roller over the bed)
Motor B - stop rotating
Motor Z - Rotate the Z-axis up (raising the powder bed)
Motor B - Rotate at a certain speed y steps/s (forward rotating the roller to (same rotation direction lower speed))
Motor A - Rotate -x amount of steps backward (moving the forward rotating roller back over the bed to compact the powder)
Motor B - stop rotating

Check the temperature, if correct start sintering else wait to heat up.

Sintering
Motor X and Y - move the laser head over the bed 
Laser- Putting the laser on and controlling the power trough a PWM signal and sintering the object.

Repeat powder depositing 

Temperature check.
The temperature is controlled by a separate Arduino and sends the temperature to the main Arduino.

Using the X,Y,Z axis won't be a problem i guess. 
But for the laser I am not sure to use the PWM of Extruder 0 or the another signal
and what to use for the other motors I am not sure. I saw it is possible to control extra motors trough num_motor_drives, but then the speeds are fixed. Or is it possible to change them trough G codes ?

It would be nice to hear if my idea is possible with Repetier or wich changes or custom code i have to make to make it work

Already thank you for your time!

Kind regards,

Qongon







Comments

  • Do NOT use V1 firmware for this. It has no pwm support for laser and abc motor support is not really good.

    What you want is V2 firmware which is modular and easy to extend. It already supports 7 axis out of the box also for better hardware (e.g. STM32F4 boards like RUMBA32). Has speed dependent PWM with gamma correction for laser if connected to hardware pwm output.

    What you need to add is some logic or a extra gcode for powder depositioning. But with the concept it is possible to easily add own functions to firmware. You can also add extra checks to prevent special error cases. You need some c++ skills to understand the module system and to be able to add the extra code, but it should not be much code you require. Mainly calling high level functions to execute your operations or something for refilling, maintaining, ...
  • Thank you for your response. 

    Could an Arduino Due work ? Because all stepper divers we use are external so we only have to send, en,dir and step signals. 
  • Due is supported by V2 also you might need a own board definition with your pin numbers. Not all pins are PWM capable and some are bound to a timer, so check our documentation which pin can be used for pwm since that is critical. Also check what your maximum stepper frequency is - with 8 motors it takes more time then for normal printers so limit is probably 50000-100000 Hz for steppers.
  • I having a problem with the stepper frequency.

    At 100000 HZ only one motor of the corexy moves.
    This problem I also had with the V1 version but then i had to use stepper_high_delay 2
    so I put the frequency to 50000HZ and now both motor move but for x+/- and Y+/- they move only the axis in one direction and much less mm.

    The signal the motors requires are
    (1) t1: ENA must be ahead of DIR by at least 5μ s. Usually, ENA+ and ENA- are NC
    (not connected).
    (2) t2: DIR must be ahead of PUL active edge by 6μ s to ensure correct direction;
    (3) t3: Pulse width not less than 2.5μ s;
    (4) t4: Low level width not less than 2.5μ s.

    and my config file is:

    /*
        This file is part of Repetier-Firmware.

        Repetier-Firmware is free software: you can redistribute it and/or modify
        it under the terms of the GNU General Public License as published by
        the Free Software Foundation, either version 3 of the License, or
        (at your option) any later version.

        Repetier-Firmware is distributed in the hope that it will be useful,
        but WITHOUT ANY WARRANTY; without even the implied warranty of
        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        GNU General Public License for more details.

        You should have received a copy of the GNU General Public License
        along with Repetier-Firmware.  If not, see <http://www.gnu.org/licenses/>.

    */

    #pragma once

    /**************** READ FIRST ************************

       This configuration file was created with the configuration tool. For that
       reason, it does not contain the same informations as the original Configuration.h file.
       It misses the comments and unused parts. Open this file file in the config tool
       to see and change the data. You can also upload it to newer/older versions. The system
       will silently add new options, so compilation continues to work.

       This file is optimized for version 1.0.0dev

       If you are in doubt which named functions use which pins on your board, please check the
       pins.h for the used name->pin assignments and your board documentation to verify it is
       as you expect.

    */

    // The following variables are required early to decide on the right modules.
    #define NUM_TOOLS 1
    #define NUM_EXTRUDER 0
    #define NUM_SERVOS 1                  // Number of serves available
    #define MOTHERBOARD MOTHERBOARD_USER_DEFINED_DUE // user defined motherboard
    #define EEPROM_MODE 3
    #define RFSERIAL Serial
    //#define EXTERNALSERIAL  use Arduino serial library instead of build in. Requires more RAM, has only 63 byte input buffer.
    // Uncomment the following line if you are using Arduino compatible firmware made for Arduino version earlier than 1.0
    // If it is incompatible you will get compiler errors about write functions not being compatible!
    //#define COMPAT_PRE1
    #define BLUETOOTH_SERIAL 101
    #define BLUETOOTH_BAUD 115200
    #define WAITING_IDENTIFIER "wait"
    #define JSON_OUTPUT 1
    #define FEATURE_WATCHDOG 0
    #define FEATURE_RETRACTION 1
    #define NUM_AXES 7 // X,Y,Z and E for extruder A,B,C would be 5,6,7
    // #define STEPPER_FREQUENCY 153000     // Maximum stepper frequency.
    #define STEPPER_FREQUENCY 50000     // Maximum stepper frequency.
    #define PREPARE_FREQUENCY 500       // Update frequency for new blocks. Must be higher than PREPARE_FREQUENCY.
    #define BLOCK_FREQUENCY 250          // Number of blocks with constant stepper rate per second.
    #define VELOCITY_PROFILE 2           // 0 = linear, 1 = cubic, 2 = quintic velocity shape
    #define Z_SPEED 10                   // Z positioning speed
    #define XY_SPEED 150                 // XY positioning speed for normal operations
    #define A_SPEED 150                 // XY positioning speed for normal operations
    #define B_SPEED 150                 // XY positioning speed for normal operations
    #define C_SPEED 150                 // XY positioning speed for normal operations
    #define E_SPEED 2                    // Extrusion speed
    #define G0_FEEDRATE 0                // Speed for G0 moves. Independent from set F value! Set 0 to use F value.
    #define MAX_ROOM_TEMPERATURE 400      // No heating below this temperature!
    #define TEMPERATURE_CONTROL_RANGE 20 // Start with controlling if temperature is +/- this value to target temperature
    #define HOST_RESCUE 1                // Enable host rescue help system
    //#define DEBUG_RESCUE                 // Uncomment to add power loss entry in debug menu while printing
    #define POWERLOSS_LEVEL 2       // How much time do we have on powerloss, 0 = no move, 1 = short just raise Z, 2 = long full park move
    #define POWERLOSS_UP 5          // How much to move up if mode 1 is active
    #define Z_PROBE_TYPE 2          // 0 = no z probe, 1 = default z probe, 2 = Nozzle as probe
    #define Z_PROBE_BORDER 2        // Safety border to ensure position is allowed
    #define Z_PROBE_TEMPERATURE 170 // Temperature for type 2

    #define Z_PROBE_PAUSE_HEATERS 0         // Pause all heaters when probing to reduce EMI artifacts
    #define Z_PROBE_PAUSE_BED_REHEAT_TEMP 5 // Stop and reheat the bed if we leave the target temp by this much.


    // 0 = Cartesian, 1 = CoreXYZ, 2 = delta, 3 = Dual X-Axis
    #define PRINTER_TYPE 1
    // steps to include as babysteps per 1/BLOCK_FREQUENCY seconds. Must be lower than STEPPER_FREQUENCY/BLOCK_FREQUENCY and be low enough to not lose steps.
    #define BABYSTEPS_PER_BLOCK \
        { 10, 10, 10 }
    // If all axis end stops are hardware based we can skip the time consuming tests each step
    #define NO_SOFTWARE_AXIS_ENDSTOPS
    // Normally only a delta has motor end stops required. Normally you trigger using axis endstops.
    #define NO_MOTOR_ENDSTOPS

    #define FEATURE_CONTROLLER CONTROLLER_SPARKLCD //  CONTROLLER_FELIX_DUE
    // Use more memory to speedup display updates
    #define DISPLAY_FULL_BUFFER 1
    // Direction 1 or -1
    // #define ENCODER_DIRECTION -1
    // Encoder speed 0 = fastest, 1 or 2 = slowest - set so 1 click is one menu move
    // Default is 2 if not set by controller. Use only to fix wrong setting
    #define ENCODER_SPEED 1

    // Dynamically increase the speed at which we step through the menus/change values.
    // Set ENCODER_MAX_REPEAT_STEPS to 1 to disable this. EEPROM/Runtime configurable. (Set to 0 to compile out entirely for extra RAM)
    #define ENCODER_MAX_REPEAT_STEPS 5            // Max. extra steps we can gain.
    #define ENCODER_MAX_REPEAT_TIME_MS 40         // Max. time we have before our extra steps reset.
    #define ENCODER_MIN_REPEAT_TIME_MS 15         // At this repeat rate we accumulate to the max step speed.
    #define ENCODER_APPLY_REPEAT_STEPS_IN_MENUS 1 // Set to 0 to only affect changing config values.

    // Default materials in temperature menus. First value is extruder temp, then bed and chamber temperature. 0 = do not show.
    #define DEFAULT_MATERIALS \
        DEFAULT_MATERIAL(Com::tMatPLA, 215, 60, 0) \
        DEFAULT_MATERIAL(Com::tMatPET, 230, 55, 0) \
        DEFAULT_MATERIAL(Com::tMatASA, 260, 105, 0) \
        DEFAULT_MATERIAL(Com::tMatPC, 275, 110, 0) \
        DEFAULT_MATERIAL(Com::tMatABS, 255, 100, 0) \
        DEFAULT_MATERIAL(Com::tMatHIPS, 220, 100, 0) \
        DEFAULT_MATERIAL(Com::tMatPP, 254, 100, 0) \
        DEFAULT_MATERIAL(Com::tMatFLEX, 240, 50, 0)

    /* Ratios for core xyz. First index denotes motor and second axis.
    For each motor you can set the ratio of x,y,z position that adds
    to the position. 0 = no contribution. */
    // X motor = x + y
    #define COREXYZ_X_X 1
    #define COREXYZ_X_Y 1
    #define COREXYZ_X_Z 0
    // Y motor = x - y
    #define COREXYZ_Y_X 1
    #define COREXYZ_Y_Y -1
    #define COREXYZ_Y_Z 0
    // Z motor = z
    #define COREXYZ_Z_X 0
    #define COREXYZ_Z_Y 0
    #define COREXYZ_Z_Z 1

    // Special geometry definition if printer type is delta
    /*  =========== Parameter essential for delta calibration ===================

                C, Y-Axis
                |                        |___| Carriage horizontal offset
                |                        |   \------------------------------------------
                |_________ X-axis        |    \                                        |
               / \                       |     \  DELTA_DIAGONAL (length)    Each move this Rod Height
              /   \                             \                                 is calculated
             /     \                             \    Carriage is at printer center!   |
             A      B                             \_____/--------------------------------
                                                  |--| End effector horizontal offset (recommend set it to 0)
                                             |----| DELTA_HORIZONTAL_RADIUS (Horizontal rod pivot to pivot measure)

        Column angles are measured from X-axis counterclockwise
        "Standard" positions: alpha_A = 210, alpha_B = 330, alpha_C = 90
    */
    #define DELTA_DIAGONAL 350.0f
    #define DELTA_HORIZONTAL_RADIUS 210.0f
    #define DELTA_PRINT_RADIUS 200.0f
    #define DELTA_ANGLE_A 210.0f
    #define DELTA_ANGLE_B 330.0f
    #define DELTA_ANGLE_C 90.0f
    #define DELTA_CORRECTION_A 0.0f
    #define DELTA_CORRECTION_B 0.0f
    #define DELTA_CORRECTION_C 0.0f
    #define DELTA_RADIUS_CORRECTION_A 0.0f
    #define DELTA_RADIUS_CORRECTION_B 0.0f
    #define DELTA_RADIUS_CORRECTION_C 0.0f
    #define DELTA_HOME_OFFSET_A 0.0f
    #define DELTA_HOME_OFFSET_B 0.0f
    #define DELTA_HOME_OFFSET_C 0.0f

    #define DISABLE_X 0
    #define DISABLE_Y 0
    #define DISABLE_Z 0

    #define FEATURE_AXISCOMP 1
    #define AXISCOMP_TANXY 0
    #define AXISCOMP_TANYZ 0
    #define AXISCOMP_TANXZ 0

    // Next 7 lines are required to make the following work, do not change!
    #include "boards/pins.h"
    #undef IO_TARGET
    #define IO_TARGET 4
    #undef CONFIG_EXTERN
    #define CONFIG_EXTERN extern
    #include "drivers/drivers.h"
    #include "io/redefine.h"

    // Define ZProbe by referencing an endstop defined
    CONFIG_VARIABLE_EQ(EndstopDriver, *ZProbe, &endstopZMin)

    // Define a common humidity sensor for M105 reporting if we have one
    // CONFIG_VARIABLE_EQ(Sensors, *HumiditySensor, HUMIDITY_SENSOR_ADDRESS)

    /** Axes are homed in order of priority (0..10) if homing direction is not 0. */
    #define X_HOME_PRIORITY 0
    #define Y_HOME_PRIORITY 1
    #define Z_HOME_PRIORITY 2
    #define A_HOME_PRIORITY 2
    #define B_HOME_PRIORITY -1
    #define C_HOME_PRIORITY -1
    // All fans in this list list become controllable with M106/M107
    // by selecteing the fan number with P0..P<NUM_FANS-1>
    #define NUM_FANS 1
    #define FAN_LIST \
        { &Fan1PWM }

    #define NUM_HEATED_BEDS 1
    #define HEATED_BED_LIST \
        { &HeatedBed1 }

    #define NUM_HEATED_CHAMBERS 0
    #define HEATED_CHAMBER_LIST \
        { }

    #define SERVO_LIST \
        { &Servo1 }
    #define TOOLS \
        { &Laser3 }

    // Heaters enumerate all heaters, so we can loop over them
    // or call commands on a specific heater number.
    // Suggested order: extruder heaters, heated beds, heated chambers, additional heaters
    #define NUM_HEATERS 3
    #define HEATERS \
        { &HeaterExtruder1, &HeaterExtruder2, &HeatedBed1 }

    // Array to call motor related commands like microstepping/current if supported.
    // Id's start at 0 and depend on position in this array.
    #define NUM_MOTORS 6
    #define MOTORS \
        { &XMotor, &YMotor, &ZMotor, &AMotor, &BMotor, &CMotor }
    #define MOTOR_NAMES \
        { PSTR("X"), PSTR("Y"), PSTR("Z"), PSTR("A"), PSTR("B"), PSTR("C") }

    // Some common settings for Trinamic driver settings
    /**
     Chopper timing is an array with
     {toff, hend, hstrt}
     See TMC datasheets for more details. There are some predefined values to get you started:
     CHOPPER_TIMING_DEFAULT_12V = { 3, -1, 1 }
     CHOPPER_TIMING_DEFAULT_19V = { 4, 1, 1 }
     CHOPPER_TIMING_DEFAULT_24V = { 4, 2, 1 }
     CHOPPER_TIMING_DEFAULT_36V = { 5, 2, 4 }
     CHOPPER_TIMING_PRUSAMK3_24V = { 3, -2, 6 }

    */
    #define TMC_CHOPPER_TIMING CHOPPER_TIMING_DEFAULT_12V
    // true = interpolate to 256 microsteps for smoother motion
    #define TMC_INTERPOLATE true
    // Current used when motor stands still
    #define TMC_HOLD_MULTIPLIER 0.5
    // Reduce current on over temperature warnings by x milli ampere, 0 = disable
    #define TMC_CURRENT_STEP_DOWN 50
    // Define which data should be stored to eeprom
    #define STORE_MOTOR_MICROSTEPPING 1
    #define STORE_MOTOR_CURRENT 1
    #define STORE_MOTOR_HYBRID_TRESHOLD 1
    #define STORE_MOTOR_STEALTH 1
    #define STORE_MOTOR_STALL_SENSITIVITY 1

    #define X_HOME_DIR 1
    #define Y_HOME_DIR 1
    #define Z_HOME_DIR -1
    #define A_HOME_DIR -1
    #define B_HOME_DIR 0
    #define C_HOME_DIR 0
    #define X_MAX_LENGTH 150
    #define Y_MAX_LENGTH 150
    #define Z_MAX_LENGTH 150
    #define A_MAX_LENGTH 150
    #define B_MAX_LENGTH 150
    #define C_MAX_LENGTH 150
    #define X_MIN_POS 0
    #define Y_MIN_POS 0
    #define Z_MIN_POS 0
    #define A_MIN_POS 0
    #define B_MIN_POS 0
    #define C_MIN_POS 0
    #define BED_X_MIN X_MIN_POS
    #define BED_X_MAX (X_MIN_POS + X_MAX_LENGTH)
    #define BED_Y_MIN Y_MIN_POS
    #define BED_Y_MAX (Y_MIN_POS + Y_MAX_LENGTH)

    // Park position used when pausing from firmware side
    #if PRINTER_TYPE == 2
    #define PARK_POSITION_X (0)
    #define PARK_POSITION_Y (70)
    #define PARK_POSITION_X (X_MIN_POS)
    #define PARK_POSITION_Y (Y_MIN_POS + Y_MAX_LENGTH)
    #define PARK_POSITION_Z_RAISE 10

    #define MAX_ACCELERATION_UNITS_PER_SQ_SECOND_X 16000
    #define MAX_ACCELERATION_UNITS_PER_SQ_SECOND_Y 16000
    #define MAX_ACCELERATION_UNITS_PER_SQ_SECOND_Z 100
    #define MAX_ACCELERATION_UNITS_PER_SQ_SECOND_A 16000
    #define MAX_ACCELERATION_UNITS_PER_SQ_SECOND_B 16000
    #define MAX_ACCELERATION_UNITS_PER_SQ_SECOND_C 100
    #define MAX_TRAVEL_ACCELERATION_UNITS_PER_SQ_SECOND_X 16000
    #define MAX_TRAVEL_ACCELERATION_UNITS_PER_SQ_SECOND_Y 16000
    #define MAX_TRAVEL_ACCELERATION_UNITS_PER_SQ_SECOND_Z 100
    #define MAX_TRAVEL_ACCELERATION_UNITS_PER_SQ_SECOND_A 16000
    #define MAX_TRAVEL_ACCELERATION_UNITS_PER_SQ_SECOND_B 16000
    #define MAX_TRAVEL_ACCELERATION_UNITS_PER_SQ_SECOND_C 100
    #define XAXIS_STEPS_PER_MM 1600
    #define YAXIS_STEPS_PER_MM 1600
    #define ZAXIS_STEPS_PER_MM 2015.11
    #define AAXIS_STEPS_PER_MM 1600
    #define BAXIS_STEPS_PER_MM 1600
    #define CAXIS_STEPS_PER_MM 1600

    // ################## EDIT THESE SETTINGS MANUALLY ################
    // ################ END MANUAL SETTINGS ##########################

    #undef Y_MIN_PIN
    #define Y_MIN_PIN -1
    #undef X_MAX_PIN
    #define X_MAX_PIN -1
    #undef Y_MAX_PIN
    #define Y_MAX_PIN ORIG_Y_MIN_PIN
    #undef Z_MAX_PIN
    #define Z_MAX_PIN -1

    #define KILL_IF_SENSOR_DEFECT 0
    #define RETRACT_ON_PAUSE 2
    #define PAUSE_START_COMMANDS ""
    #define PAUSE_END_COMMANDS ""

    #define AUTORETRACT_ENABLED 0
    #define RETRACTION_LENGTH 3
    #define RETRACTION_LONG_LENGTH 13
    #define RETRACTION_SPEED 40
    #define RETRACTION_Z_LIFT 0
    #define RETRACTION_UNDO_EXTRA_LENGTH 0
    #define RETRACTION_UNDO_EXTRA_LONG_LENGTH 0
    #define RETRACTION_UNDO_SPEED 25
    #define FILAMENTCHANGE_X_POS 5
    #define FILAMENTCHANGE_Y_POS 5
    #define FILAMENTCHANGE_Z_ADD 2
    #define FILAMENTCHANGE_REHOME 1
    #define FILAMENTCHANGE_SHORTRETRACT 2.5
    #define FILAMENTCHANGE_LONGRETRACT 50
    #define JAM_METHOD 1
    #define JAM_ACTION 1

    #define RETRACT_DURING_HEATUP true
    #define PID_CONTROL_RANGE 20
    #define EXTRUDE_MAXLENGTH 160

    // ############# Heated bed configuration ########################

    #define SKIP_M190_IF_WITHIN 5
    #define MIN_EXTRUDER_TEMP 150
    #define MILLISECONDS_PREHEAT_TIME 30000

    // ################ Endstop configuration #####################

    #define DOOR_PIN -1
    #define DOOR_PULLUP 1
    #define DOOR_INVERTING 1
    #define ENDSTOP_X_BACK_MOVE 3
    #define ENDSTOP_Y_BACK_MOVE 3
    #define ENDSTOP_Z_BACK_MOVE 1
    #define ENDSTOP_A_BACK_MOVE 3
    #define ENDSTOP_B_BACK_MOVE 3
    #define ENDSTOP_C_BACK_MOVE 3
    #define ENDSTOP_X_RETEST_REDUCTION_FACTOR 2
    #define ENDSTOP_Y_RETEST_REDUCTION_FACTOR 2
    #define ENDSTOP_Z_RETEST_REDUCTION_FACTOR 2
    #define ENDSTOP_A_RETEST_REDUCTION_FACTOR 2
    #define ENDSTOP_B_RETEST_REDUCTION_FACTOR 2
    #define ENDSTOP_C_RETEST_REDUCTION_FACTOR 2
    #define ENDSTOP_X_BACK_ON_HOME 0.5
    #define ENDSTOP_Y_BACK_ON_HOME 0.5
    #define ENDSTOP_Z_BACK_ON_HOME 0
    #define ENDSTOP_A_BACK_ON_HOME 0
    #define ENDSTOP_B_BACK_ON_HOME 0
    #define ENDSTOP_C_BACK_ON_HOME 0
    #define ALWAYS_CHECK_ENDSTOPS 1
    #define MOVE_X_WHEN_HOMED 0
    #define MOVE_Y_WHEN_HOMED 0
    #define MOVE_Z_WHEN_HOMED 0

    // ################# XYZ movements ###################

    #define PREVENT_Z_DISABLE_ON_STEPPER_TIMEOUT 1

    // ##########################################################################################
    // ##                           Movement settings                                          ##
    // ##########################################################################################

    #define FEATURE_BABYSTEPPING 1
    #define BABYSTEP_MULTIPLICATOR 64

    // Delta settings
    #define DELTA_HOME_ON_POWER 0

    #define STEPPER_INACTIVE_TIME 360L
    #define MAX_INACTIVE_TIME 1200L
    #define MAX_FEEDRATE_X 2500
    #define MAX_FEEDRATE_Y 2500
    #define MAX_FEEDRATE_Z 20
    #define HOMING_FEEDRATE_X 80
    #define HOMING_FEEDRATE_Y 80
    #define HOMING_FEEDRATE_Z 10
    #define MAX_FEEDRATE_A 2500
    #define MAX_FEEDRATE_B 2500
    #define MAX_FEEDRATE_C 20
    #define HOMING_FEEDRATE_A 80
    #define HOMING_FEEDRATE_B 80
    #define HOMING_FEEDRATE_C 10
    // Raise z before homing (1)
    #define ZHOME_PRE_RAISE 1
    // How much mm should z raise before homing
    #define ZHOME_PRE_RAISE_DISTANCE 2
    #define ZHOME_MIN_TEMPERATURE 0
    #define ZHOME_HEAT_ALL 0
    // Height in mm after homing.
    #define ZHOME_HEIGHT 10
    // Home Z at a fixed xy position (1)
    #define FIXED_Z_HOME_POSITION 1
    #define ZHOME_X_POS 140
    #define ZHOME_Y_POS 45
    // Raise extruders before switching tools. Used to prevent touching objects while switching.
    #define RAISE_Z_ON_TOOLCHANGE 2

    #define ENABLE_BACKLASH_COMPENSATION 0
    #define X_BACKLASH 0
    #define Y_BACKLASH 0
    #define Z_BACKLASH 0
    #define MAX_JERK 50
    #define MAX_AJERK 50
    #define MAX_BJERK 50
    #define MAX_CJERK 50
    #define MAX_ZJERK 0.3
    #define PRINTLINE_CACHE_SIZE 32
    #define MOVE_CACHE_LOW 10
    #define EXTRUDER_SWITCH_XY_SPEED 100
    #define FEATURE_DITTO_PRINTING 0

    // ################# Misc. settings ##################

    #define BAUDRATE 115200
    #define ENABLE_POWER_ON_STARTUP 1
    #define POWER_INVERTING 0
    #define KILL_METHOD 1
    #define ACK_WITH_LINENUMBER 1
    #define KEEP_ALIVE_INTERVAL 2000
    #define ECHO_ON_EXECUTE 1
    #undef PS_ON_PIN
    #define PS_ON_PIN -1

    // #################### Z-Probing #####################

    #define Z_PROBE_COATING 0
    #define Z_PROBE_Z_OFFSET_MODE 1
    #define UI_BED_COATING 1
    #define EXTRUDER_IS_Z_PROBE 1
    #define Z_PROBE_DISABLE_HEATERS 1
    #define Z_PROBE_BED_DISTANCE 3
    #define Z_PROBE_X_OFFSET 0
    #define Z_PROBE_Y_OFFSET 0
    #define Z_PROBE_SPEED 2
    #define Z_PROBE_SWITCHING_DISTANCE 1
    // How often should we test a position 1 .. x. Averages result over all tests.
    #define Z_PROBE_REPETITIONS 1
    // 0 = use average, 1 = use middle value after ordering z
    #define Z_PROBE_USE_MEDIAN 1
    // Nozzle distance to bed when z probe triggers
    #define Z_PROBE_HEIGHT -0.15
    // Delay in ms before we go down again. For BLTouch so signal can disable
    #define Z_PROBE_DELAY 0
    #define Z_PROBE_START_SCRIPT ""
    #define Z_PROBE_FINISHED_SCRIPT ""
    #define Z_PROBE_RUN_AFTER_EVERY_PROBE ""
    #define Z_PROBE_REQUIRES_HEATING 1
    #define Z_PROBE_MIN_TEMPERATURE 150
    #define Z_PROBE_PAUSE_HEATERS 0         // Pause all heaters when probing to reduce EMI artifacts
    #define Z_PROBE_PAUSE_BED_REHEAT_TEMP 5 // Stop and reheat the bed if we leave the target temp by this much.

    // How to correct rotated beds
    // 0 = Software side by rotating coordinates
    // 1 = Move bed physically using 2 motors
    #define LEVELING_CORRECTOR 0
    // Bed fixture coordinates for motor leveling
    #define LC_P1_X 55
    #define LC_P1_Y 130
    #define LC_P2_X 137
    #define LC_P2_Y 45
    #define LC_P3_X 137
    #define LC_P3_Y 210
    #define LC_P2_MOTOR AL1Motor
    #define LC_P3_MOTOR AL2Motor
    #define LC_STEPS_PER_MM 3382
    #define LC_Z_SPEED 0.2
    // > 0 will move bed down and wait for removal (heater removed) and will pause another LC_WAIT_BED_REMOVE seconds
    #define LC_WAIT_BED_REMOVE 2
    // Uncomment to limit correction per autoleveling iteration. Value is the max. correction in mm
    // #define LIMIT_MOTORIZED_CORRECTION 0.5

    // Leveling method
    // 0 = none, 3 = 3 points, 1 = grid, 2 = 4 point symmetric
    #define LEVELING_METHOD 2
    #define L_P1_X 60
    #define L_P1_Y 130
    #define L_P2_X 137
    #define L_P2_Y 45
    #define L_P3_X 137
    #define L_P3_Y 210
    #define MAX_GRID_SIZE 5                   // Maximum grid size allocation in memory, imported grid can be smaller
    #define ENABLE_BUMP_CORRECTION 1          // CPU intensive, so only activate if required
    #define BUMP_CORRECTION_START_DEGRADE 0.5 // Until this height we correct 100%
    #define BUMP_CORRECTION_END_HEIGHT 2      // From this height on we do no correction
    #define BUMP_LIMIT_TO 0                   // Maximum allowed correction up/down, <= 0 off.

    #ifndef SDSUPPORT // Some boards have sd support on board. These define the values already in pins.h
    #define SDSUPPORT 1
    #undef SDCARDDETECT
    #define SDCARDDETECT ORIG_SDCARDDETECT
    #define SDCARDDETECTINVERTED 0
    #define SD_EXTENDED_DIR 1 /** Show extended directory including file length. Don't use this with Pronterface! */
    #define SD_RUN_ON_STOP ""
    #define SD_STOP_HEATER_AND_MOTORS_ON_STOP 1
    #define ARC_SUPPORT 0
    #define FEATURE_MEMORY_POSITION 1
    #define FEATURE_CHECKSUM_FORCED 0
    #define UI_PRINTER_NAME "Testsetup"
    #define UI_PRINTER_COMPANY "Repetier"
    #define UI_PAGES_DURATION 4000
    #define UI_SPEEDDEPENDENT_POSITIONING 0
    #define UI_DISABLE_AUTO_PAGESWITCH 1
    #define UI_AUTORETURN_TO_MENU_AFTER 30000
    #define FEATURE_UI_KEYS 0
    #define UI_ENCODER_SPEED 2
    #define UI_REVERSE_ENCODER 0
    #define UI_KEY_BOUNCETIME 10
    #define UI_KEY_FIRST_REPEAT 500
    #define UI_KEY_REDUCE_REPEAT 50
    #define UI_KEY_MIN_REPEAT 50
    #define CASE_LIGHTS_PIN 25
    #define CASE_LIGHT_DEFAULT_ON 1
    #define UI_START_SCREEN_DELAY 2000

    //#define CUSTOM_EVENTS

  • Signals are changed in stepper interrupt. At start it disables step signals, set dir. So at 100KHz you have step high time 1000000/100000 = 10us. But it 100Khz speed it enables directly after it. So if you need also 2.5us low time limit is 50KHz.
    as https://docfirmwarev2.repetier.com/config/motors says, 
    #define SLOW_DIRECTION_CHANGE 1 // Set 1 when driver need some settle time when direction changes

    will change dir and wait till next interrupt to execute next step if you need settle time for direction. SO I would set
    #define STEPPER_FREQUENCY 100000     // Maximum stepper frequency.
    with slow direction change. That should give required delays up to 50 khz.

    Steps per mm might be off by factor 1.414 or 2.0 compared with V1 due to how V1 is implementing corexy.

  • I found the problem of the less steps, the feed rate in Repetier host was to high.
    now i have an other problem, when using manual control my x motor rotates only in one  direction. The dir pin stays high for + and - x and in Cartesian and Corexy mode but turns low when moving y in Cartesian mode. 
     Made my own pin file see below:
    Also added the config files:

    Checkt all motors and drivers and the are working fing with a arduino mega and simple script.
    drivers are TB6600 
    and ISHV57 intergraded motor and drive
    problem occurs at both

    /*
        This file is part of Repetier-Firmware.

        Repetier-Firmware is free software: you can redistribute it and/or modify
        it under the terms of the GNU General Public License as published by
        the Free Software Foundation, either version 3 of the License, or
        (at your option) any later version.

        Repetier-Firmware is distributed in the hope that it will be useful,
        but WITHOUT ANY WARRANTY; without even the implied warranty of
        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        GNU General Public License for more details.

        You should have received a copy of the GNU General Public License
        along with Repetier-Firmware.  If not, see <http://www.gnu.org/licenses/>.

    */

    // RADDS Board
    #if MOTHERBOARD == MOTHERBOARD_USER_DEFINED_DUE
    #ifndef __SAM3X8E__
    #error Oops!  Make sure you have 'Arduino Due' selected from the 'Tools -> Boards' menu.

    #define KNOWN_BOARD
    #define CPU_ARCH ARCH_ARM
    /*****************************************************************
    * Arduino Due Pin Assignments
    ******************************************************************/
    #define ORIG_X_ENABLE_PIN 38
    #define ORIG_X_DIR_PIN 39
    #define ORIG_X_STEP_PIN 40
    #define ORIG_X_MIN_PIN -1
    #define ORIG_X_MAX_PIN 15

    #define ORIG_Y_ENABLE_PIN 32
    #define ORIG_Y_DIR_PIN 33
    #define ORIG_Y_STEP_PIN 34
    #define ORIG_Y_MIN_PIN -1
    #define ORIG_Y_MAX_PIN 16

    #define ORIG_Z_ENABLE_PIN 35
    #define ORIG_Z_DIR_PIN 36
    #define ORIG_Z_STEP_PIN 37
    #define ORIG_Z_MIN_PIN 16
    #define ORIG_Z_MAX_PIN -1


    // Note that on the Due pin A0 on the board is channel 2 on the ARM chip
    #define HEATER_0_PIN 13
    // Due analog pin #54
    #define TEMP_0_PIN 7
    #define HEATER_1_PIN 7
    #define TEMP_1_PIN 3
    // Due analog pin #58
    #define HEATER_2_PIN 12
    // Due analog pin #55
    #define TEMP_2_PIN 6
    #define HEATER_3_PIN 11
    // Due analog pin #56
    #define TEMP_3_PIN 5
    // Due analog pin #57
    #define TEMP_4_PIN 4

    // Due analog pin #59 = A5 -> AD 2
    #define THERMOCOUPLE_0_PIN 2
    // There are no more analog pins freely available.
    // You can use direction and enable pin from extruder 0 socket as they are also
    // analog pins. Then you need to move the stepper driver to a different socket.

    // Direction pin of extruder 0
    #define THERMOCOUPLE_1_PIN 1
    // Step pin of extruder 0
    #define THERMOCOUPLE_2_PIN 0
    // Enable pin of extruder 0
    #define THERMOCOUPLE_3_PIN 10

    #define ORIG_E0_STEP_PIN 61
    #define ORIG_E0_DIR_PIN 60
    #define ORIG_E0_ENABLE_PIN 62

    #define ORIG_A_ENABLE_PIN 22
    #define ORIG_A_DIR_PIN 23
    #define ORIG_A_STEP_PIN 24
    #define ORIG_A_MIN_PIN -1
    #define ORIG_A_MAX_PIN 17

    #define ORIG_B_ENABLE_PIN 26
    #define ORIG_B_DIR_PIN 27
    #define ORIG_B_STEP_PIN 28
    #define ORIG_B_MIN_PIN -1
    #define ORIG_B_MAX_PIN -1

    #define ORIG_C_ENABLE_PIN 29
    #define ORIG_C_DIR_PIN 30
    #define ORIG_C_STEP_PIN 31
    #define ORIG_C_MIN_PIN -1
    #define ORIG_C_MAX_PIN -1

    // Extra driver on extension port
    // Might require pin 25 high for some drivers!
    // 66 -> not connected
    // 25 -> not connected
    // To set microstepping on startup set START_GCODE to e.g.
    // "M42 P67 S255\nM42 P68 S255\nM42 P69 S255"

    #ifndef SDSUPPORT
    #define SDSUPPORT 1
    #define SDPOWER -1
    // 4,10,52 if using HW SPI.
    #define SDSS 4
    #define ORIG_SDCARDDETECT 14
    #define SDCARDDETECTINVERTED 0
    #define LED_PIN -1
    #define ORIG_FAN_PIN 9
    #define ORIG_FAN2_PIN 8
    #define ORIG_PS_ON_PIN -1
    #define KILL_PIN -1
    #define SUICIDE_PIN -1 //PIN that has to be turned on right after start, to keep power flowing.

    // 20 or 70
    #define SDA_PIN 20
    // 21 or 71
    #define SCL_PIN 21

    #define SERVO1 5
    #define SERVO2 6
    #define SERVO3 18

    #define BEEPER_PIN -1

    // Controller related default pins

    #ifndef CUSTOM_CONTROLLER_PINS
    #if FEATURE_CONTROLLER == CONTROLLER_SPARKLCD

    #define UI_DISPLAY_RS_PIN -1
    #define UI_DISPLAY_RW_PIN -1
    #define UI_DISPLAY_ENABLE_PIN -1
    #define UI_DISPLAY_D4_PIN -1
    #define UI_DISPLAY_D5_PIN -1
    #define UI_ENCODER_A -1
    #define UI_ENCODER_B -1
    #define UI_ENCODER_CLICK -1
    #define UI_RESET_PIN -1
    #define UI_BACK_PIN -1

    #elif FEATURE_CONTROLLER == CONTROLLER_SPARKLCD_ADAPTER || FEATURE_CONTROLLER == CONTROLLER_ORCABOTXXLPRO2

    #define UI_DISPLAY_RS_PIN 44
    #define UI_DISPLAY_RW_PIN -1
    #define UI_DISPLAY_ENABLE_PIN 45
    #define UI_DISPLAY_D4_PIN 46
    #define UI_DISPLAY_D5_PIN -1
    #define UI_ENCODER_A 50
    #define UI_ENCODER_B 52
    #define UI_ENCODER_CLICK 48
    #define UI_RESET_PIN -1
    #define UI_BACK_PIN -1


    // This is for official display port usage

    #undef BEEPER_PIN
    #define BEEPER_PIN 41
    #define UI_DISPLAY_RS_PIN 42
    #define UI_DISPLAY_RW_PIN -1
    #define UI_DISPLAY_ENABLE_PIN 43
    #define UI_DISPLAY_D0_PIN 44
    #define UI_DISPLAY_D1_PIN 45
    #define UI_DISPLAY_D2_PIN 46
    #define UI_DISPLAY_D3_PIN 47
    #define UI_DISPLAY_D4_PIN 44
    #define UI_DISPLAY_D5_PIN 45
    #define UI_DISPLAY_D6_PIN 46
    #define UI_DISPLAY_D7_PIN 47
    #define UI_ENCODER_A 50
    #define UI_ENCODER_B 52
    #define UI_ENCODER_CLICK 48
    #define UI_RESET_PIN -1
    #define UI_BACK_PIN 71


    // Servo pins: 5,6 und 39

    #define E0_PINS ORIG_E0_STEP_PIN, ORIG_E0_DIR_PIN, ORIG_E0_ENABLE_PIN,
    #define A_PINS ORIG_A_STEP_PIN, ORIG_A_DIR_PIN, ORIG_A_ENABLE_PIN,
    #define B_PINS ORIG_B_STEP_PIN, ORIG_B_DIR_PIN, ORIG_B_ENABLE_PIN,
    #define C_PINS ORIG_C_STEP_PIN, ORIG_C_DIR_PIN, ORIG_C_ENABLE_PIN,
    #define E4_PINS ORIG_E4_STEP_PIN, ORIG_E4_DIR_PIN, ORIG_E4_ENABLE_PIN,
    #define E5_PINS ORIG_E5_STEP_PIN, ORIG_E5_DIR_PIN, ORIG_E5_ENABLE_PIN,

    #define TWI_CLOCK_FREQ 400000
    // see eeprom device data sheet for the following values these are for 24xx256
    #define EEPROM_SERIAL_ADDR 0x50  // 7 bit i2c address (without R/W bit)
    #define EEPROM_PAGE_SIZE 64      // page write buffer size
    #define EEPROM_PAGE_WRITE_TIME 7 // page write time in milliseconds (docs say 5ms but that is too short)
    #ifndef EEPROM_AVAILABLE         // User can override eeprom usage
    #define EEPROM_AVAILABLE EEPROM_I2C

    #ifndef MAX_WIRE_INTERFACES
    #define MAX_WIRE_INTERFACES 1


    CONFIGFILE
    /*
        This file is part of Repetier-Firmware.

        Repetier-Firmware is free software: you can redistribute it and/or modify
        it under the terms of the GNU General Public License as published by
        the Free Software Foundation, either version 3 of the License, or
        (at your option) any later version.

        Repetier-Firmware is distributed in the hope that it will be useful,
        but WITHOUT ANY WARRANTY; without even the implied warranty of
        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        GNU General Public License for more details.

        You should have received a copy of the GNU General Public License
        along with Repetier-Firmware.  If not, see <http://www.gnu.org/licenses/>.

    */

    #pragma once

    /**************** READ FIRST ************************

       This configuration file was created with the configuration tool. For that
       reason, it does not contain the same informations as the original Configuration.h file.
       It misses the comments and unused parts. Open this file file in the config tool
       to see and change the data. You can also upload it to newer/older versions. The system
       will silently add new options, so compilation continues to work.

       This file is optimized for version 1.0.0dev

       If you are in doubt which named functions use which pins on your board, please check the
       pins.h for the used name->pin assignments and your board documentation to verify it is
       as you expect.

    */

    // The following variables are required early to decide on the right modules.
    #define NUM_TOOLS 1
    #define NUM_EXTRUDER 0
    #define NUM_SERVOS 1                  // Number of serves available
    #define MOTHERBOARD MOTHERBOARD_USER_DEFINED_DUE // user defined motherboard
    #define EEPROM_MODE 3
    #define RFSERIAL Serial
    //#define EXTERNALSERIAL  use Arduino serial library instead of build in. Requires more RAM, has only 63 byte input buffer.
    // Uncomment the following line if you are using Arduino compatible firmware made for Arduino version earlier than 1.0
    // If it is incompatible you will get compiler errors about write functions not being compatible!
    //#define COMPAT_PRE1
    #define BLUETOOTH_SERIAL 101
    #define BLUETOOTH_BAUD 115200
    #define WAITING_IDENTIFIER "wait"
    #define JSON_OUTPUT 1
    #define FEATURE_WATCHDOG 0
    #define FEATURE_RETRACTION 1
    #define NUM_AXES 7 // X,Y,Z and E for extruder A,B,C would be 5,6,7
    // #define STEPPER_FREQUENCY 153000     // Maximum stepper frequency.
    #define STEPPER_FREQUENCY 50000     // Maximum stepper frequency.
    #define PREPARE_FREQUENCY 500       // Update frequency for new blocks. Must be higher than PREPARE_FREQUENCY.
    #define BLOCK_FREQUENCY 250          // Number of blocks with constant stepper rate per second.
    #define VELOCITY_PROFILE 2           // 0 = linear, 1 = cubic, 2 = quintic velocity shape
    #define SLOW_DIRECTION_CHANGE 1     // Set 1 when driver need some settle time when direction changes   
    #define Z_SPEED 10                   // Z positioning speed
    #define XY_SPEED 150                 // XY positioning speed for normal operations
    #define A_SPEED 150                 // XY positioning speed for normal operations
    #define B_SPEED 150                 // XY positioning speed for normal operations
    #define C_SPEED 150                 // XY positioning speed for normal operations
    #define E_SPEED 2                    // Extrusion speed
    #define G0_FEEDRATE 0                // Speed for G0 moves. Independent from set F value! Set 0 to use F value.
    #define MAX_ROOM_TEMPERATURE 400      // No heating below this temperature!
    #define TEMPERATURE_CONTROL_RANGE 20 // Start with controlling if temperature is +/- this value to target temperature
    #define HOST_RESCUE 1                // Enable host rescue help system
    //#define DEBUG_RESCUE                 // Uncomment to add power loss entry in debug menu while printing
    #define POWERLOSS_LEVEL 2       // How much time do we have on powerloss, 0 = no move, 1 = short just raise Z, 2 = long full park move
    #define POWERLOSS_UP 5          // How much to move up if mode 1 is active
    #define Z_PROBE_TYPE 0          // 0 = no z probe, 1 = default z probe, 2 = Nozzle as probe
    #define Z_PROBE_BORDER 2        // Safety border to ensure position is allowed
    #define Z_PROBE_TEMPERATURE 170 // Temperature for type 2

    #define Z_PROBE_PAUSE_HEATERS 0         // Pause all heaters when probing to reduce EMI artifacts
    #define Z_PROBE_PAUSE_BED_REHEAT_TEMP 5 // Stop and reheat the bed if we leave the target temp by this much.


    // 0 = Cartesian, 1 = CoreXYZ, 2 = delta, 3 = Dual X-Axis
    #define PRINTER_TYPE 1
    // steps to include as babysteps per 1/BLOCK_FREQUENCY seconds. Must be lower than STEPPER_FREQUENCY/BLOCK_FREQUENCY and be low enough to not lose steps.
    #define BABYSTEPS_PER_BLOCK \
        { 10, 10, 10 }
    // If all axis end stops are hardware based we can skip the time consuming tests each step
    #define NO_SOFTWARE_AXIS_ENDSTOPS
    // Normally only a delta has motor end stops required. Normally you trigger using axis endstops.
    #define NO_MOTOR_ENDSTOPS

    #define FEATURE_CONTROLLER CONTROLLER_SPARKLCD //  CONTROLLER_FELIX_DUE
    // Use more memory to speedup display updates
    #define DISPLAY_FULL_BUFFER 1
    // Direction 1 or -1
    // #define ENCODER_DIRECTION -1
    // Encoder speed 0 = fastest, 1 or 2 = slowest - set so 1 click is one menu move
    // Default is 2 if not set by controller. Use only to fix wrong setting
    #define ENCODER_SPEED 1

    // Dynamically increase the speed at which we step through the menus/change values.
    // Set ENCODER_MAX_REPEAT_STEPS to 1 to disable this. EEPROM/Runtime configurable. (Set to 0 to compile out entirely for extra RAM)
    #define ENCODER_MAX_REPEAT_STEPS 5            // Max. extra steps we can gain.
    #define ENCODER_MAX_REPEAT_TIME_MS 40         // Max. time we have before our extra steps reset.
    #define ENCODER_MIN_REPEAT_TIME_MS 15         // At this repeat rate we accumulate to the max step speed.
    #define ENCODER_APPLY_REPEAT_STEPS_IN_MENUS 1 // Set to 0 to only affect changing config values.

    // Default materials in temperature menus. First value is extruder temp, then bed and chamber temperature. 0 = do not show.
    #define DEFAULT_MATERIALS \
        DEFAULT_MATERIAL(Com::tMatPLA, 215, 60, 0) \
        DEFAULT_MATERIAL(Com::tMatPET, 230, 55, 0) \
        DEFAULT_MATERIAL(Com::tMatASA, 260, 105, 0) \
        DEFAULT_MATERIAL(Com::tMatPC, 275, 110, 0) \
        DEFAULT_MATERIAL(Com::tMatABS, 255, 100, 0) \
        DEFAULT_MATERIAL(Com::tMatHIPS, 220, 100, 0) \
        DEFAULT_MATERIAL(Com::tMatPP, 254, 100, 0) \
        DEFAULT_MATERIAL(Com::tMatFLEX, 240, 50, 0)

    /* Ratios for core xyz. First index denotes motor and second axis.
    For each motor you can set the ratio of x,y,z position that adds
    to the position. 0 = no contribution. */
    // X motor = x + y
    #define COREXYZ_X_X 1
    #define COREXYZ_X_Y 1
    #define COREXYZ_X_Z 0
    // Y motor = x - y
    #define COREXYZ_Y_X 1
    #define COREXYZ_Y_Y -1
    #define COREXYZ_Y_Z 0
    // Z motor = z
    #define COREXYZ_Z_X 0
    #define COREXYZ_Z_Y 0
    #define COREXYZ_Z_Z 1

    // Special geometry definition if printer type is delta
    /*  =========== Parameter essential for delta calibration ===================

                C, Y-Axis
                |                        |___| Carriage horizontal offset
                |                        |   \------------------------------------------
                |_________ X-axis        |    \                                        |
               / \                       |     \  DELTA_DIAGONAL (length)    Each move this Rod Height
              /   \                             \                                 is calculated
             /     \                             \    Carriage is at printer center!   |
             A      B                             \_____/--------------------------------
                                                  |--| End effector horizontal offset (recommend set it to 0)
                                             |----| DELTA_HORIZONTAL_RADIUS (Horizontal rod pivot to pivot measure)

        Column angles are measured from X-axis counterclockwise
        "Standard" positions: alpha_A = 210, alpha_B = 330, alpha_C = 90
    */
    #define DELTA_DIAGONAL 350.0f
    #define DELTA_HORIZONTAL_RADIUS 210.0f
    #define DELTA_PRINT_RADIUS 200.0f
    #define DELTA_ANGLE_A 210.0f
    #define DELTA_ANGLE_B 330.0f
    #define DELTA_ANGLE_C 90.0f
    #define DELTA_CORRECTION_A 0.0f
    #define DELTA_CORRECTION_B 0.0f
    #define DELTA_CORRECTION_C 0.0f
    #define DELTA_RADIUS_CORRECTION_A 0.0f
    #define DELTA_RADIUS_CORRECTION_B 0.0f
    #define DELTA_RADIUS_CORRECTION_C 0.0f
    #define DELTA_HOME_OFFSET_A 0.0f
    #define DELTA_HOME_OFFSET_B 0.0f
    #define DELTA_HOME_OFFSET_C 0.0f

    #define DISABLE_X 0
    #define DISABLE_Y 0
    #define DISABLE_Z 0

    #define FEATURE_AXISCOMP 1
    #define AXISCOMP_TANXY 0
    #define AXISCOMP_TANYZ 0
    #define AXISCOMP_TANXZ 0

    // Next 7 lines are required to make the following work, do not change!
    #include "boards/pins.h"
    #undef IO_TARGET
    #define IO_TARGET 4
    #undef CONFIG_EXTERN
    #define CONFIG_EXTERN extern
    #include "drivers/drivers.h"
    #include "io/redefine.h"

    // Define ZProbe by referencing an endstop defined
    CONFIG_VARIABLE_EQ(EndstopDriver, *ZProbe, &endstopZMin)

    // Define a common humidity sensor for M105 reporting if we have one
    // CONFIG_VARIABLE_EQ(Sensors, *HumiditySensor, HUMIDITY_SENSOR_ADDRESS)

    /** Axes are homed in order of priority (0..10) if homing direction is not 0. */
    #define X_HOME_PRIORITY 0
    #define Y_HOME_PRIORITY 1
    #define Z_HOME_PRIORITY 2
    #define A_HOME_PRIORITY 2
    #define B_HOME_PRIORITY -1
    #define C_HOME_PRIORITY -1
    // All fans in this list list become controllable with M106/M107
    // by selecteing the fan number with P0..P<NUM_FANS-1>
    #define NUM_FANS 1
    #define FAN_LIST \
        { &Fan1PWM }

    #define NUM_HEATED_BEDS 1
    #define HEATED_BED_LIST \
        { &HeatedBed1 }

    #define NUM_HEATED_CHAMBERS 0
    #define HEATED_CHAMBER_LIST \
        { }

    #define SERVO_LIST \
        { &Servo1 }
    #define TOOLS \
        { &Laser3 }

    // Heaters enumerate all heaters, so we can loop over them
    // or call commands on a specific heater number.
    // Suggested order: extruder heaters, heated beds, heated chambers, additional heaters
    #define NUM_HEATERS 3
    #define HEATERS \
        { &HeaterExtruder1, &HeaterExtruder2, &HeatedBed1 }

    // Array to call motor related commands like microstepping/current if supported.
    // Id's start at 0 and depend on position in this array.
    #define NUM_MOTORS 6
    #define MOTORS \
        { &XMotor, &YMotor, &ZMotor, &AMotor, &BMotor, &CMotor }
    #define MOTOR_NAMES \
        { PSTR("X"), PSTR("Y"), PSTR("Z"), PSTR("A"), PSTR("B"), PSTR("C") }

    // Some common settings for Trinamic driver settings
    /**
     Chopper timing is an array with
     {toff, hend, hstrt}
     See TMC datasheets for more details. There are some predefined values to get you started:
     CHOPPER_TIMING_DEFAULT_12V = { 3, -1, 1 }
     CHOPPER_TIMING_DEFAULT_19V = { 4, 1, 1 }
     CHOPPER_TIMING_DEFAULT_24V = { 4, 2, 1 }
     CHOPPER_TIMING_DEFAULT_36V = { 5, 2, 4 }
     CHOPPER_TIMING_PRUSAMK3_24V = { 3, -2, 6 }

    */
    #define TMC_CHOPPER_TIMING CHOPPER_TIMING_DEFAULT_12V
    // true = interpolate to 256 microsteps for smoother motion
    #define TMC_INTERPOLATE true
    // Current used when motor stands still
    #define TMC_HOLD_MULTIPLIER 0.5
    // Reduce current on over temperature warnings by x milli ampere, 0 = disable
    #define TMC_CURRENT_STEP_DOWN 50
    // Define which data should be stored to eeprom
    #define STORE_MOTOR_MICROSTEPPING 1
    #define STORE_MOTOR_CURRENT 1
    #define STORE_MOTOR_HYBRID_TRESHOLD 1
    #define STORE_MOTOR_STEALTH 1
    #define STORE_MOTOR_STALL_SENSITIVITY 1

    #define X_HOME_DIR 1
    #define Y_HOME_DIR 1
    #define Z_HOME_DIR -1
    #define A_HOME_DIR -1
    #define B_HOME_DIR 0
    #define C_HOME_DIR 0
    #define X_MAX_LENGTH 150
    #define Y_MAX_LENGTH 150
    #define Z_MAX_LENGTH 150
    #define A_MAX_LENGTH 150
    #define B_MAX_LENGTH 150
    #define C_MAX_LENGTH 150
    #define X_MIN_POS 0
    #define Y_MIN_POS 0
    #define Z_MIN_POS 0
    #define A_MIN_POS 0
    #define B_MIN_POS 0
    #define C_MIN_POS 0
    #define BED_X_MIN X_MIN_POS
    #define BED_X_MAX (X_MIN_POS + X_MAX_LENGTH)
    #define BED_Y_MIN Y_MIN_POS
    #define BED_Y_MAX (Y_MIN_POS + Y_MAX_LENGTH)

    // Park position used when pausing from firmware side
    #if PRINTER_TYPE == 2
    #define PARK_POSITION_X (0)
    #define PARK_POSITION_Y (70)
    #define PARK_POSITION_X (X_MIN_POS)
    #define PARK_POSITION_Y (Y_MIN_POS + Y_MAX_LENGTH)
    #define PARK_POSITION_Z_RAISE 10

    #define MAX_ACCELERATION_UNITS_PER_SQ_SECOND_X 1600
    #define MAX_ACCELERATION_UNITS_PER_SQ_SECOND_Y 1600
    #define MAX_ACCELERATION_UNITS_PER_SQ_SECOND_Z 100
    #define MAX_ACCELERATION_UNITS_PER_SQ_SECOND_A 1600
    #define MAX_ACCELERATION_UNITS_PER_SQ_SECOND_B 1600
    #define MAX_ACCELERATION_UNITS_PER_SQ_SECOND_C 100
    #define MAX_TRAVEL_ACCELERATION_UNITS_PER_SQ_SECOND_X 1600
    #define MAX_TRAVEL_ACCELERATION_UNITS_PER_SQ_SECOND_Y 1600
    #define MAX_TRAVEL_ACCELERATION_UNITS_PER_SQ_SECOND_Z 100
    #define MAX_TRAVEL_ACCELERATION_UNITS_PER_SQ_SECOND_A 1600
    #define MAX_TRAVEL_ACCELERATION_UNITS_PER_SQ_SECOND_B 1600
    #define MAX_TRAVEL_ACCELERATION_UNITS_PER_SQ_SECOND_C 100
    #define XAXIS_STEPS_PER_MM 1600
    #define YAXIS_STEPS_PER_MM 1600
    #define ZAXIS_STEPS_PER_MM 2015.11
    #define AAXIS_STEPS_PER_MM 1600
    #define BAXIS_STEPS_PER_MM 1600
    #define CAXIS_STEPS_PER_MM 1600

    // ################## EDIT THESE SETTINGS MANUALLY ################
    // ################ END MANUAL SETTINGS ##########################

    #undef Y_MIN_PIN
    #define Y_MIN_PIN -1
    #undef X_MAX_PIN
    #define X_MAX_PIN -1
    #undef Y_MAX_PIN
    #define Y_MAX_PIN ORIG_Y_MIN_PIN
    #undef Z_MAX_PIN
    #define Z_MAX_PIN -1

    #define KILL_IF_SENSOR_DEFECT 0
    #define RETRACT_ON_PAUSE 2
    #define PAUSE_START_COMMANDS ""
    #define PAUSE_END_COMMANDS ""

    #define AUTORETRACT_ENABLED 0
    #define RETRACTION_LENGTH 3
    #define RETRACTION_LONG_LENGTH 13
    #define RETRACTION_SPEED 40
    #define RETRACTION_Z_LIFT 0
    #define RETRACTION_UNDO_EXTRA_LENGTH 0
    #define RETRACTION_UNDO_EXTRA_LONG_LENGTH 0
    #define RETRACTION_UNDO_SPEED 25
    #define FILAMENTCHANGE_X_POS 5
    #define FILAMENTCHANGE_Y_POS 5
    #define FILAMENTCHANGE_Z_ADD 2
    #define FILAMENTCHANGE_REHOME 1
    #define FILAMENTCHANGE_SHORTRETRACT 2.5
    #define FILAMENTCHANGE_LONGRETRACT 50
    #define JAM_METHOD 1
    #define JAM_ACTION 1

    #define RETRACT_DURING_HEATUP true
    #define PID_CONTROL_RANGE 20
    #define EXTRUDE_MAXLENGTH 160

    // ############# Heated bed configuration ########################

    #define SKIP_M190_IF_WITHIN 5
    #define MIN_EXTRUDER_TEMP 150
    #define MILLISECONDS_PREHEAT_TIME 30000

    // ################ Endstop configuration #####################

    #define DOOR_PIN -1
    #define DOOR_PULLUP 1
    #define DOOR_INVERTING 1
    #define ENDSTOP_X_BACK_MOVE 3
    #define ENDSTOP_Y_BACK_MOVE 3
    #define ENDSTOP_Z_BACK_MOVE 1
    #define ENDSTOP_A_BACK_MOVE 3
    #define ENDSTOP_B_BACK_MOVE 3
    #define ENDSTOP_C_BACK_MOVE 3
    #define ENDSTOP_X_RETEST_REDUCTION_FACTOR 2
    #define ENDSTOP_Y_RETEST_REDUCTION_FACTOR 2
    #define ENDSTOP_Z_RETEST_REDUCTION_FACTOR 2
    #define ENDSTOP_A_RETEST_REDUCTION_FACTOR 2
    #define ENDSTOP_B_RETEST_REDUCTION_FACTOR 2
    #define ENDSTOP_C_RETEST_REDUCTION_FACTOR 2
    #define ENDSTOP_X_BACK_ON_HOME 0.5
    #define ENDSTOP_Y_BACK_ON_HOME 0.5
    #define ENDSTOP_Z_BACK_ON_HOME 0
    #define ENDSTOP_A_BACK_ON_HOME 0
    #define ENDSTOP_B_BACK_ON_HOME 0
    #define ENDSTOP_C_BACK_ON_HOME 0
    #define ALWAYS_CHECK_ENDSTOPS 1
    #define MOVE_X_WHEN_HOMED 0
    #define MOVE_Y_WHEN_HOMED 0
    #define MOVE_Z_WHEN_HOMED 0

    // ################# XYZ movements ###################

    #define PREVENT_Z_DISABLE_ON_STEPPER_TIMEOUT 1

    // ##########################################################################################
    // ##                           Movement settings                                          ##
    // ##########################################################################################

    #define FEATURE_BABYSTEPPING 1
    #define BABYSTEP_MULTIPLICATOR 64

    // Delta settings
    #define DELTA_HOME_ON_POWER 0

    #define STEPPER_INACTIVE_TIME 360L
    #define MAX_INACTIVE_TIME 1200L
    #define MAX_FEEDRATE_X 250
    #define MAX_FEEDRATE_Y 250
    #define MAX_FEEDRATE_Z 20
    #define HOMING_FEEDRATE_X 80
    #define HOMING_FEEDRATE_Y 80
    #define HOMING_FEEDRATE_Z 10
    #define MAX_FEEDRATE_A 250
    #define MAX_FEEDRATE_B 250
    #define MAX_FEEDRATE_C 20
    #define HOMING_FEEDRATE_A 80
    #define HOMING_FEEDRATE_B 80
    #define HOMING_FEEDRATE_C 10
    // Raise z before homing (1)
    #define ZHOME_PRE_RAISE 1
    // How much mm should z raise before homing
    #define ZHOME_PRE_RAISE_DISTANCE 2
    #define ZHOME_MIN_TEMPERATURE 0
    #define ZHOME_HEAT_ALL 0
    // Height in mm after homing.
    #define ZHOME_HEIGHT 10
    // Home Z at a fixed xy position (1)
    #define FIXED_Z_HOME_POSITION 1
    #define ZHOME_X_POS 140
    #define ZHOME_Y_POS 45
    // Raise extruders before switching tools. Used to prevent touching objects while switching.
    #define RAISE_Z_ON_TOOLCHANGE 2

    #define ENABLE_BACKLASH_COMPENSATION 0
    #define X_BACKLASH 0
    #define Y_BACKLASH 0
    #define Z_BACKLASH 0
    #define MAX_JERK 5
    #define MAX_AJERK 5
    #define MAX_BJERK 5
    #define MAX_CJERK 5
    #define MAX_ZJERK 0.3
    #define PRINTLINE_CACHE_SIZE 32
    #define MOVE_CACHE_LOW 10
    #define EXTRUDER_SWITCH_XY_SPEED 100
    #define FEATURE_DITTO_PRINTING 0

    // ################# Misc. settings ##################

    #define BAUDRATE 115200
    #define ENABLE_POWER_ON_STARTUP 1
    #define POWER_INVERTING 0
    #define KILL_METHOD 1
    #define ACK_WITH_LINENUMBER 1
    #define KEEP_ALIVE_INTERVAL 2000
    #define ECHO_ON_EXECUTE 1
    #undef PS_ON_PIN
    #define PS_ON_PIN -1

    // #################### Z-Probing #####################

    #define Z_PROBE_COATING 0
    #define Z_PROBE_Z_OFFSET_MODE 1
    #define UI_BED_COATING 1
    #define EXTRUDER_IS_Z_PROBE 1
    #define Z_PROBE_DISABLE_HEATERS 1
    #define Z_PROBE_BED_DISTANCE 3
    #define Z_PROBE_X_OFFSET 0
    #define Z_PROBE_Y_OFFSET 0
    #define Z_PROBE_SPEED 2
    #define Z_PROBE_SWITCHING_DISTANCE 1
    // How often should we test a position 1 .. x. Averages result over all tests.
    #define Z_PROBE_REPETITIONS 1
    // 0 = use average, 1 = use middle value after ordering z
    #define Z_PROBE_USE_MEDIAN 1
    // Nozzle distance to bed when z probe triggers
    #define Z_PROBE_HEIGHT -0.15
    // Delay in ms before we go down again. For BLTouch so signal can disable
    #define Z_PROBE_DELAY 0
    #define Z_PROBE_START_SCRIPT ""
    #define Z_PROBE_FINISHED_SCRIPT ""
    #define Z_PROBE_RUN_AFTER_EVERY_PROBE ""
    #define Z_PROBE_REQUIRES_HEATING 1
    #define Z_PROBE_MIN_TEMPERATURE 150
    #define Z_PROBE_PAUSE_HEATERS 0         // Pause all heaters when probing to reduce EMI artifacts
    #define Z_PROBE_PAUSE_BED_REHEAT_TEMP 5 // Stop and reheat the bed if we leave the target temp by this much.

    // How to correct rotated beds
    // 0 = Software side by rotating coordinates
    // 1 = Move bed physically using 2 motors
    #define LEVELING_CORRECTOR 0
    // Bed fixture coordinates for motor leveling
    #define LC_P1_X 55
    #define LC_P1_Y 130
    #define LC_P2_X 137
    #define LC_P2_Y 45
    #define LC_P3_X 137
    #define LC_P3_Y 210
    #define LC_P2_MOTOR AL1Motor
    #define LC_P3_MOTOR AL2Motor
    #define LC_STEPS_PER_MM 3382
    #define LC_Z_SPEED 0.2
    // > 0 will move bed down and wait for removal (heater removed) and will pause another LC_WAIT_BED_REMOVE seconds
    #define LC_WAIT_BED_REMOVE 2
    // Uncomment to limit correction per autoleveling iteration. Value is the max. correction in mm
    // #define LIMIT_MOTORIZED_CORRECTION 0.5

    // Leveling method
    // 0 = none, 3 = 3 points, 1 = grid, 2 = 4 point symmetric
    #define LEVELING_METHOD 2
    #define L_P1_X 60
    #define L_P1_Y 130
    #define L_P2_X 137
    #define L_P2_Y 45
    #define L_P3_X 137
    #define L_P3_Y 210
    #define MAX_GRID_SIZE 5                   // Maximum grid size allocation in memory, imported grid can be smaller
    #define ENABLE_BUMP_CORRECTION 1          // CPU intensive, so only activate if required
    #define BUMP_CORRECTION_START_DEGRADE 0.5 // Until this height we correct 100%
    #define BUMP_CORRECTION_END_HEIGHT 2      // From this height on we do no correction
    #define BUMP_LIMIT_TO 0                   // Maximum allowed correction up/down, <= 0 off.

    #ifndef SDSUPPORT // Some boards have sd support on board. These define the values already in pins.h
    #define SDSUPPORT 1
    #undef SDCARDDETECT
    #define SDCARDDETECT ORIG_SDCARDDETECT
    #define SDCARDDETECTINVERTED 0
    #define SD_EXTENDED_DIR 1 /** Show extended directory including file length. Don't use this with Pronterface! */
    #define SD_RUN_ON_STOP ""
    #define SD_STOP_HEATER_AND_MOTORS_ON_STOP 1
    #define ARC_SUPPORT 0
    #define FEATURE_MEMORY_POSITION 1
    #define FEATURE_CHECKSUM_FORCED 0
    #define UI_PRINTER_NAME "Testsetup"
    #define UI_PRINTER_COMPANY "Repetier"
    #define UI_PAGES_DURATION 4000
    #define UI_SPEEDDEPENDENT_POSITIONING 0
    #define UI_DISABLE_AUTO_PAGESWITCH 1
    #define UI_AUTORETURN_TO_MENU_AFTER 30000
    #define FEATURE_UI_KEYS 0
    #define UI_ENCODER_SPEED 2
    #define UI_REVERSE_ENCODER 0
    #define UI_KEY_BOUNCETIME 10
    #define UI_KEY_FIRST_REPEAT 500
    #define UI_KEY_REDUCE_REPEAT 50
    #define UI_KEY_MIN_REPEAT 50
    #define CASE_LIGHTS_PIN 25
    #define CASE_LIGHT_DEFAULT_ON 1
    #define UI_START_SCREEN_DELAY 2000

    //#define CUSTOM_EVENTS


  • CONFIG_IO
    /*

    This file defines io solutions used. This is the lowest level and is the base
    for all higher level functions using io operations. At several places we need
    subsets of these list of operations. To make configuration easy and easy to 
    understand, we use a technique called "x macros". This requires that only
    predefined macro names for IO are used here. Do NOT add anything else here
    or compilation/functionality will break.

    Rules:
    1. Each definition will create a class that is named like the first parameter.
    This class is later used as input to templates building higher functions. By
    convention the names should start with IO followed by something that helps you
    identify the function. 
    2. Do not use a semicolon at the end. Macro definition gets different meanings
    and will add the semicolon if required.

    */

    /* Define motor pins here. Each motor needs a setp, dir and enable pin. */

    ENDSTOP_NONE(endstopNone)
    // For use when no output is wanted, but possible
    IO_OUTPUT_FAKE(fakeOut)

    // X Motor

    IO_OUTPUT(IOX1Step, ORIG_X_STEP_PIN)
    IO_OUTPUT_INVERTED(IOX1Dir, ORIG_X_DIR_PIN)
    IO_OUTPUT_INVERTED(IOX1Enable, ORIG_X_ENABLE_PIN)

    // Y Motor

    IO_OUTPUT(IOY1Step, ORIG_Y_STEP_PIN)
    IO_OUTPUT_INVERTED(IOY1Dir, ORIG_Y_DIR_PIN)
    IO_OUTPUT_INVERTED(IOY1Enable, ORIG_Y_ENABLE_PIN)

    // Z Motor

    IO_OUTPUT(IOZ1Step, ORIG_Z_STEP_PIN)
    IO_OUTPUT(IOZ1Dir, ORIG_Z_DIR_PIN)
    IO_OUTPUT_INVERTED(IOZ1Enable, ORIG_Z_ENABLE_PIN)

    // A Motor

    IO_OUTPUT(IOA1Step, ORIG_A_STEP_PIN)
    IO_OUTPUT(IOA1Dir, ORIG_A_DIR_PIN)
    IO_OUTPUT(IOA1Enable, ORIG_A_ENABLE_PIN)

    // B Motor

    IO_OUTPUT(IOB1Step, ORIG_B_STEP_PIN)
    IO_OUTPUT(IOB1Dir, ORIG_B_DIR_PIN)
    IO_OUTPUT(IOB1Enable, ORIG_B_ENABLE_PIN)

    // C Motor

    IO_OUTPUT(IOC1Step, ORIG_C_STEP_PIN)
    IO_OUTPUT(IOC1Dir, ORIG_C_DIR_PIN)
    IO_OUTPUT(IOC1Enable, ORIG_C_ENABLE_PIN)

    // E0 Motor

    IO_OUTPUT(IOE1Step, ORIG_E0_STEP_PIN)
    IO_OUTPUT_INVERTED(IOE1Dir, ORIG_E0_DIR_PIN)
    IO_OUTPUT_INVERTED(IOE1Enable, ORIG_E0_ENABLE_PIN)



    // Autolevel Motor 1

    IO_OUTPUT(IOAL1Step, 51)
    IO_OUTPUT(IOAL1Dir, 53)
    IO_OUTPUT_INVERTED(IOAL1Enable, 49)

    // Autolevel Motor 1

    IO_OUTPUT(IOAL2Step, 39)
    IO_OUTPUT(IOAL2Dir, 13)
    IO_OUTPUT_INVERTED(IOAL2Enable, 40)

    // Servo output

    IO_OUTPUT(Servo1Pin, 5)

    // Define your endstops inputs

    IO_INPUT(IOEndstopXMax, ORIG_X_MAX_PIN)
    // IO_INPUT_INVERTED(IOEndstopXMin, ORIG_X_MIN_PIN)
    IO_INPUT(IOEndstopYMax, ORIG_Y_MAX_PIN)
    IO_INPUT_PULLUP(IOEndstopZMin, ORIG_Z_MIN_PIN)
    IO_INPUT(IOEndstopAMax, ORIG_A_MAX_PIN)
    IO_INPUT(IOJam1, 35)
    IO_INPUT(IOJam2, 33)

    // Controller input pins

    #if defined(UI_ENCODER_CLICK) && UI_ENCODER_CLICK >= 0
    IO_INPUT_INVERTED_PULLUP(ControllerClick, UI_ENCODER_CLICK)
    IO_INPUT_DUMMY(ControllerClick, false)
    #if defined(UI_ENCODER_A) && UI_ENCODER_A >= 0
    IO_INPUT_INVERTED_PULLUP(ControllerEncA, UI_ENCODER_A)
    IO_INPUT_DUMMY(ControllerEncA, false)
    #if defined(UI_ENCODER_B) && UI_ENCODER_B >= 0
    IO_INPUT_INVERTED_PULLUP(ControllerEncB, UI_ENCODER_B)
    IO_INPUT_DUMMY(ControllerEncB, false)
    #if defined(UI_BACK_PIN) && UI_BACK_PIN >= 0
    IO_INPUT_PULLUP(ControllerBack, UI_BACK_PIN)
    IO_INPUT_DUMMY(ControllerBack, false)
    #if defined(UI_RESET_PIN) && UI_RESET_PIN >= 0
    IO_INPUT_PULLUP(ControllerReset, UI_RESET_PIN)
    IO_INPUT_DUMMY(ControllerReset, false)

    // Define our endstops solutions
    // You need to define all min and max endstops for all
    // axes except E even if you have none!

    ENDSTOP_NONE(endstopXMin)
    ENDSTOP_SWITCH_HW(endstopXMax, IOEndstopXMax, X_AXIS, false)
    ENDSTOP_NONE(endstopYMin)
    ENDSTOP_SWITCH_HW(endstopYMax, IOEndstopYMax, Y_AXIS, true)
    ENDSTOP_SWITCH_HW(endstopZMin, IOEndstopZMin, Z_AXIS, false)
    ENDSTOP_NONE(endstopZMax)
    ENDSTOP_NONE(endstopAMin)
    ENDSTOP_SWITCH_HW(endstopAMax, IOEndstopAMax, A_AXIS, false)
    ENDSTOP_NONE(endstopBMin)
    ENDSTOP_NONE(endstopBMax)
    ENDSTOP_NONE(endstopCMin)
    ENDSTOP_NONE(endstopCMax)


    // Define fans

    IO_OUTPUT(IOFan1, ORIG_FAN_PIN)
    IO_PWM_SOFTWARE(Fan1NoKSPWM, IOFan1, 0)
    // IO_PWM_HARDWARE(Fan1PWM, 37,5000)
    // IO_PDM_SOFTWARE(Fan1NoKSPWM, IOFan1) // alternative to PWM signals
    IO_PWM_KICKSTART(Fan1PWM, Fan1NoKSPWM, 20, 85)
    // For debugging - reports new values and then calls real pwm
    // IO_PWM_REPORT(Fan1Report, Fan1PWM)
    // Define temperature sensors

    // Typically they require an analog input (12 bit) so define
    // them first.

    IO_ANALOG_INPUT(IOAnalogBed1, TEMP_1_PIN, 5)
    IO_ANALOG_INPUT(IOAnalogExt1, TEMP_0_PIN, 5)
    IO_ANALOG_INPUT(IOAnalogExt2, TEMP_2_PIN, 5)

    // Need a conversion table for epcos NTC
    IO_TEMP_TABLE_NTC(TempTableEpcos, Epcos_B57560G0107F000)

    // Now create the temperature inputs

    IO_TEMPERATURE_TABLE(TempBed1, IOAnalogBed1, TempTableEpcos)
    IO_TEMPERATURE_TABLE(TempExt1, IOAnalogExt1, TempTableEpcos)
    IO_TEMPERATURE_TABLE(TempExt2, IOAnalogExt2, TempTableEpcos)

    // Use PWM outputs to heat. If using hardware PWM make sure
    // that the selected pin can be used as hardware pwm otherwise
    // select a software pwm model whcih works on all pins.

    #if MOTHERBOARD == 405
    IO_PWM_HARDWARE(PWMExtruder1, HEATER_0_PIN, 1000)
    IO_PWM_HARDWARE(PWMExtruder2, HEATER_2_PIN, 1000)
    IO_PWM_HARDWARE(PWMBed1, HEATER_1_PIN, 1000)
    IO_OUTPUT(IOExtr1, HEATER_0_PIN)
    IO_OUTPUT(IOExtr2, HEATER_2_PIN)
    IO_OUTPUT(IOBed1, HEATER_1_PIN)
    IO_PWM_SOFTWARE(PWMExtruder1, IOExtr1, 1)
    IO_PWM_SOFTWARE(PWMExtruder2, IOExtr2, 1)
    IO_PWM_SOFTWARE(PWMBed1, IOBed1, 1)
    // IO_OUTPUT(IOCooler1, FAN2_PIN)
    // IO_PWM_SOFTWARE(PWMCoolerExt1, FAN2_PIN, 0)

    // Define all stepper motors used
    STEPPER_SIMPLE(XMotor, IOX1Step, IOX1Dir, IOX1Enable, endstopNone, endstopNone)
    STEPPER_SIMPLE(YMotor, IOY1Step, IOY1Dir, IOY1Enable, endstopNone, endstopNone)
    STEPPER_SIMPLE(ZMotor, IOZ1Step, IOZ1Dir, IOZ1Enable, endstopNone, endstopNone)
    STEPPER_SIMPLE(AMotor, IOA1Step, IOA1Dir, IOA1Enable, endstopNone, endstopNone)
    STEPPER_SIMPLE(BMotor, IOB1Step, IOB1Dir, IOB1Enable, endstopNone, endstopNone)
    STEPPER_SIMPLE(CMotor, IOC1Step, IOC1Dir, IOC1Enable, endstopNone, endstopNone)
    STEPPER_SIMPLE(E1MotorBase, IOE1Step, IOE1Dir, IOE1Enable, endstopNone, endstopNone)
    STEPPER_OBSERVEABLE(E1Motor, E1MotorBase)
    STEPPER_SIMPLE(AL1Motor, IOAL1Step, IOAL1Dir, IOAL1Enable, endstopNone, endstopNone)
    STEPPER_SIMPLE(AL2Motor, IOAL2Step, IOAL2Dir, IOAL2Enable, endstopNone, endstopNone)

    // Servos
    SERVO_ANALOG(Servo1, 0, Servo1Pin, 500, 2500, 1050)

    // Heat manages are used for every component that needs to
    // control temperature. Higher level classes take these as input
    // and simple heater like a heated bed use it directly.

    HEAT_MANAGER_PID(HeatedBed1, 'B', 0, TempBed1, PWMBed1, 120, 255, 1000, 5, 30000, 12.0, 33.0, 290.0, 80, 255, true)
    HEAT_MANAGER_PID(HeaterExtruder1, 'E', 0, TempExt1, PWMExtruder1, 260, 255, 1000, 10, 20000, 20.0, 0.6, 65.0, 40, 220, false)
    HEAT_MANAGER_PID(HeaterExtruder2, 'E', 1, TempExt2, PWMExtruder2, 260, 255, 1000, 10, 20000, 20.0, 0.6, 65.0, 40, 220, false)

    // HEAT_MANAGER_DYN_DEAD_TIME(HeaterExtruder1, 'E', 0, TempExt1, PWMExtruder1, 260, 255, 100, 10, 20000, 150, 7, 7, 200, 7, 7, false)
    // HEAT_MANAGER_DYN_DEAD_TIME(HeaterExtruder2, 'E', 1, TempExt2, PWMExtruder2, 260, 255, 100, 10, 20000, 150, 7, 7, 200, 7, 7, false)



    // Misc mixed sensors
    // IO_INPUT_PULLUP(IODHT, DHT_INOUT_PIN)
    // SENSOR_DHT_22(DHTSensor, IODHT)
    #undef HUMIDITY_SENSOR_ADDRESS
    #define HUMIDITY_SENSOR_ADDRESS nullptr


    // Coolers are stand alone functions that allow it to control
    // a fan with external sensors. Many extruders require a cooling
    // fan pointer to the extruder to prevent heat rising up.
    // These can be controlled by the cooler. Since it is
    // independent you just tell what part needs cooling.
    // Other use cases are board cooling and heated chambers.

    // Define tools. They get inserted into a tool array in configuration.h
    // Typical tools are:
    // TOOL_EXTRUDER(name, offx, offy, offz, heater, stepper, resolution, yank, maxSpeed, acceleration, advance, startScript, endScript)

    TOOL_EXTRUDER(ToolExtruder1, 0, 0, 0, HeaterExtruder1, /*AL1Motor */ E1Motor, 1.75, 147.0, 5, 30, 5000, 40, "M117 Extruder 1", "", &Fan1PWM)
    TOOL_LASER(Laser3, 0, 0, 0, Fan1NoKSPWM, fakeOut, fakeOut, 3000, 1, 100, 150.0, 1.5, "", "")
    TOOL_CNC(CNC4, 0, 0, 0, Fan1NoKSPWM, fakeOut, fakeOut, fakeOut, 7000, 3000, "", "")

    // Use a signal that changes while extruder moves
    JAM_DETECTOR_HW(JamExtruder1, E1Motor, IOJam1, ToolExtruder1, 220, 10, 500)


    // Use a signal that is high, when filament is loaded
    //FILAMENT_DETECTOR(FilamentDetector1, IOJam1, ToolExtruder1)
    //FILAMENT_DETECTOR(FilamentDetector2, IOJam2, ToolExtruder2)

  • You should not overwrite radds pins. Set board to MOTHERBOARD_USER_DEFINED_DUE and you can put your definition in extra/userpins.h

    so you can on updates just copy your file and all is good.

    When y move changes x dir pin you likely have the x dir pin as one of
    #define ORIG_Y_ENABLE_PIN 32
    #define ORIG_Y_DIR_PIN 33
    #define ORIG_Y_STEP_PIN 34

    since these get used/changed on pure y move. Did you compare number with your test program? Also make sure no other function is using pin 39 (x dir) - that might overwrite what you do in stepper driver.
  • edited June 2021
    It works when using the MOTHERBOARD_RADDS

    and then using the pins defined in the RADDS file.
    But when I copy the code to userpins and set the board to MOTHERBOARD_USER_DEFINED_DUE  I am getting this error:

    In file included from src\boards/pins.h:80:0,
                     from src\Configuration.h:176,
                     from src\Repetier.h:309,
                     from src\Configuration.cpp:29:
    src\boards/due/pins.h:153:10: fatal error: ../extra/userpins.h: No such file or directory
     #include "../extra/userpins.h"

    Another problem I am facing is that when I want to home the axis in the Repetier host it doesn't move and just set the X value to the home value. Tried IO_INPUT, IO_INPUT_INVERTED and IO_INPUT_PULLUP.

    And every time I connect the printer via Repetier host V2.2 i am getting a I2C communication error and have to reset with m999. I only have connected 3 axis and 2 end stops. And the program often crashes /is not responding 
  • As you see from compile error, userpins.h must be in extra sub folder or it does not get found.

    ENDSTOP_NONE(endstopXMin)
    ENDSTOP_SWITCH_HW(endstopXMax, IOEndstopXMax, X_AXIS, false)

    is more likely the problem. You say no x min and for xmax you say it is a min end stop (false at the end), see
    https://docfirmwarev2.repetier.com/config/endstops#push_signal

    I2C ist most likely from trying to read eeprom. Due has no eeprom, but radds has a extra eeprom chip thatis configured here:

    #define EEPROM_SERIAL_ADDR 0x50  // 7 bit i2c address (without R/W bit)
    #define EEPROM_PAGE_SIZE 64      // page write buffer size
    #define EEPROM_PAGE_WRITE_TIME 7 // page write time in milliseconds (docs say 5ms but that is too short)
    #ifndef EEPROM_AVAILABLE         // User can override eeprom usage
    #define EEPROM_AVAILABLE EEPROM_I2C

    does your board have an eeprom chip at that address? Otherwise set
    #define EEPROM_AVAILABLE EEPROM_SDCARD or EEPROM_NONE
    then it does not try to reach a non existent eeprom.
  • I changed it from false to true. but it still doesn't work

    // Define your endstops inputs

    IO_INPUT_PULLUP(IOEndstopXMax, ORIG_X_MAX_PIN)
    IO_INPUT_PULLUP(IOEndstopYMax, ORIG_Y_MAX_PIN)
    IO_INPUT_PULLUP(IOEndstopZMin, ORIG_Z_MIN_PIN)

    // Define our endstops solutions
    // You need to define all min and max endstops for all
    // axes except E even if you have none!
    ENDSTOP_NONE(endstopXMin)
    ENDSTOP_SWITCH_HW(endstopXMax, IOEndstopXMax, X_AXIS, true)
    ENDSTOP_NONE(endstopYMin)
    ENDSTOP_SWITCH_HW(endstopYMax, IOEndstopYMax, Y_AXIS, true)
    ENDSTOP_SWITCH_HW(endstopZMin, IOEndstopZMin, Z_AXIS, false)
    ENDSTOP_NONE(endstopZMax)

    The Y axis is moving and homing.
    The X axis does not move at all. 

    When I use
     IO_INPUT_PULLUP(IOEndstopXMin, ORIG_X_MAX_PIN)
    ENDSTOP_SWITCH_HW(endstopXMin, IOEndstopXMin, X_AXIS, false)

    Then the X-axis is moving away from the end stop this is logical because the end stop is at the end of the axis

    what is the solution for this ?
  • Activate end stop debug
    M111 S70
    and check if it correctly triggers when being pushed.
    Also check M119 to show end stops correctly.

    Move direction is defined by homing direction. 1 -> max, -1 -> min

    If end stops are reported triggered the move stops immediately.
  • Got all motors working and now using G codes after every layer to move them.
    But for the B motor I want to put it on with  a certain speed when the carriage is moving.
    What is the best way to do this? 

    It is needed to perform this step:

    Powder depositing
    Motor Z -Rotate the Z axis  down(lowering the powder bed)
    Motor C - rotate x amount of steps (filling the transport tube)
    Servo -  rotate +x degrees (open the transport tube)
    Motor C - Rotate -x amount of steps (pushing the powder out )
    Servo - rotate +x degrees(close the tube)
    Motor B - rotate at a  certain speed x steps/s (backward rotating the roller)
    Motor A -  Rotate x amount of steps forward (moving the backward rotating roller over the bed)
    Motor B - stop rotating
    Motor Z - Rotate the Z-axis up (raising the powder bed)
    Motor B - Rotate at a certain speed y steps/s (forward rotating the roller to (same rotation direction lower speed))
    Motor A - Rotate -x amount of steps backward (moving the forward rotating roller back over the bed to compact the powder)
    Motor B - stop rotating
  • There is no function to move a motor independent of any moves. You need to couple move a and b in one. If that is physically making no sense since it is as you say a roller (does it always roll same direction) you need a extra function that just handles the roller. Like handle enable with a digital pin via M42, set direction same way and use a pwm output for step pin to have always a constant speed according to set pwm frequency. But there is no ramping to speed in that case. That would only be possible with a extra module that creates this and controlls it, e.g. a pwm that can be changed to a new pwm in time x.
  • Motor A and B moves together, but then I have to play with the distances to rotate them at the correct speed. But this is a bit cumbersome because we want to use different speeds for spreading an compacting.
    I tried to use m42 to set a pwm frequency for pins 53,44 and 6, but they only turn on or off tried it with a led to see intensity difference.
    I tried m42 p53 s30. 

    What is the correct way to set a pwm output ? Or how do i configurate it as a pwm output.
  • For due pwm pins are limited so question is if pin 53 has pwm support. Will check when i back. Also if pwm for M42 is implemented. Main problem is pwm is not speed. You need pwm 128 but you need to set frequency which is quite sure not in M42 at the moment.
Sign In or Register to comment.