Close



Page 1 of 2 12 LastLast
Results 1 to 10 of 17

Hybrid View

  1. #1
    Technician
    Join Date
    Nov 2014
    Posts
    61

    ABL Z height problem

    Im trying to get ABL working on my rambo board. I read through a few rambo ABL threads and followed the zennmaster guides. My servo does not respond to any commands in pronterface. I think the culprit is either in my pins.h or with the servo im using. Its a high torque metal gear micro servo so it probably pulls more current than normal. When I move an axis the servo has some terrible chatter. Any help would be appreciated.
    Last edited by Schnupp; 03-10-2015 at 01:38 PM.

  2. #2
    http://3dprintboard.com/showthread.p...ht=servo+rambo

    that should have everything you need, there are a few points that need to be updated but should be easy to figure out... if that doesnt get you going you'll have to be more specific on where you are plugged in what your pin out for the servo is, where you are plugging your servo in, what your rambo_pins.h is set to, etc.

    I should be able to get it working, i figured it out the first time on mine after all :-)

    if its chattering there should be enough power to run it otherwise it wouldnt chatter... because that's signal noise, get the servo wire away from the motors and other wires where possible to eliminate as much interference as possible.

    have to finish up at work but i'll be here to help more.

  3. #3
    Super Moderator Roxy's Avatar
    Join Date
    Apr 2014
    Location
    Lone Star State
    Posts
    2,182
    Quote Originally Posted by sniffle View Post
    if its chattering there should be enough power to run it otherwise it wouldnt chatter... because that's signal noise, get the servo wire away from the motors and other wires where possible to eliminate as much interference as possible.
    My (cheap!) servo chatters when you park it at certain positions. What I did was adjust my rotational angles such that it did not chatter at either end. This may not be the issue because it is happening when he moves an axis. I would try using the M280 command to position the servo at different spots and see if it chatters at all of them. I suspect that if you move 1 or 2 or 3 degrees off of where you currently have it positioned it may quit chattering. It is certainly worth a try. But if the chatter is being caused by taking too much current from the +5 supply, you better fix that! I would suggest putting a volt meter (or better an oscilloscope!) on it and seeing if you have a solid supply voltage.

  4. #4
    Technician
    Join Date
    Nov 2014
    Posts
    61
    Thats one of the threads ive read through. Helped out a ton! I have my servo plugged into MX3 so that means pin 24 should be entered into my pins_RAMBO. like so:
    #define LARGE_FLASH true


    #ifdef NUM_SERVOS
    #define SERVO0_PIN 24
    #if NUM_SERVOS > 1
    #define SERVO1_PIN -1
    #endif
    #if NUM_SERVOS > 2
    #define SERVO2_PIN -1
    #endif
    #if NUM_SERVOS > 3
    #define SERVO2_PIN -1
    #endif
    #endif


    // Servo support
    #ifdef NUM_SERVOS
    #define SERVO0_PIN 22 //motor header MX1
    #if NUM_SERVOS > 1
    #define SERVO1_PIN 23 //Motor header MX2
    #if NUM_SERVOS > 2
    #define SERVO2_PIN 24 //Motor header MX3
    #if NUM_SERVOS > 3
    #define SERVO2_PIN 5 //pwm header pin 5
    #endif
    #endif
    #endif
    #endif

    So I got it kinda working in pronterface. I was typing M280 P0 S150 which was not working. Changing it to M280 P2 S150 made the servo move accordingly. However the M401 and M402 commands do not work and a G28 fails to move the servo when homing.

    EDIT: You are correct Roxy. When my servo was at a different angle I experienced zero chattering when the axis moved.

  5. #5
    ok, so you have it plugged into MX-3, I managed to get the servo if define block into the code base, so you no longer have to paste that code into the pin file,

    instead you just edit pin0 to be the mx pin you want, because if both code blocks are in there as you have posted above, it is setting servo0 to the pin you want and then resetting the servo pin back to what is in the code.

    If you go into the pins.h file this is all you should need to define the servo properly.

    Code:
    // Servo support
    #ifdef NUM_SERVOS
    #define SERVO0_PIN 24 //motor header MX3
    #if NUM_SERVOS > 1
    #define SERVO1_PIN 23 //Motor header MX2
    #if NUM_SERVOS > 2
    #define SERVO2_PIN 22 //Motor header MX1
    #if NUM_SERVOS > 3
    #define SERVO2_PIN 5 //pwm header pin 5
    #endif
    #endif
    #endif
    #endif
    


    you can copy/paste that and replace both of the servo pin references so that it is the only pin reference and it will be the correct servo pin for pin0, i already changed it for you.

  6. #6
    Technician
    Join Date
    Nov 2014
    Posts
    61
    Ok that makes sense now. I was wondering why those codes looked so similar... That worked out that issue, but now when I run the ABL routine it probes points only across the X axis. My Y axis doesnt move at all. Heres my ABL code:

    #define ENABLE_AUTO_BED_LEVELING // Delete the comment to enable (remove // at the start of the line)
    #define Z_PROBE_REPEATABILITY_TEST // If not commented out, Z-Probe Repeatability test will be included if Auto Bed Leveling is Enabled.


    #ifdef ENABLE_AUTO_BED_LEVELING


    // There are 2 different ways to pick the X and Y locations to probe:


    // - "grid" mode
    // Probe every point in a rectangular grid
    // You must specify the rectangle, and the density of sample points
    // This mode is preferred because there are more measurements.
    // It used to be called ACCURATE_BED_LEVELING but "grid" is more descriptive


    // - "3-point" mode
    // Probe 3 arbitrary points on the bed (that aren't colinear)
    // You must specify the X & Y coordinates of all 3 points


    #define AUTO_BED_LEVELING_GRID
    // with AUTO_BED_LEVELING_GRID, the bed is sampled in a
    // AUTO_BED_LEVELING_GRID_POINTSxAUTO_BED_LEVELING_GR ID_POINTS grid
    // and least squares solution is calculated
    // Note: this feature occupies 10'206 byte
    #ifdef AUTO_BED_LEVELING_GRID


    // set the rectangle in which to probe
    #define LEFT_PROBE_BED_POSITION 50
    #define RIGHT_PROBE_BED_POSITION 150
    #define BACK_PROBE_BED_POSITION 150
    #define FRONT_PROBE_BED_POSITION 50


    // set the number of grid points per dimension
    // I wouldn't see a reason to go above 3 (=9 probing points on the bed)
    #define AUTO_BED_LEVELING_GRID_POINTS 3




    #else // not AUTO_BED_LEVELING_GRID
    // with no grid, just probe 3 arbitrary points. A simple cross-product
    // is used to esimate the plane of the print bed


    #define ABL_PROBE_PT_1_X 15
    #define ABL_PROBE_PT_1_Y 180
    #define ABL_PROBE_PT_2_X 15
    #define ABL_PROBE_PT_2_Y 20
    #define ABL_PROBE_PT_3_X 170
    #define ABL_PROBE_PT_3_Y 20


    #endif // AUTO_BED_LEVELING_GRID




    // these are the offsets to the probe relative to the extruder tip (Hotend - Probe)
    // X and Y offsets must be integers
    #define X_PROBE_OFFSET_FROM_EXTRUDER 30 // -left +right
    #define Y_PROBE_OFFSET_FROM_EXTRUDER -2 // -front +behind
    #define Z_PROBE_OFFSET_FROM_EXTRUDER -4.34 // -below (always!)


    #define Z_RAISE_BEFORE_HOMING 4 // (in mm) Raise Z before homing (G28) for Probe Clearance.
    // Be sure you have this distance over your Z_MAX_POS in case


    #define XY_TRAVEL_SPEED 4000 // X and Y axis travel speed between probes, in mm/min


    #define Z_RAISE_BEFORE_PROBING 15 //How much the extruder will be raised before traveling to the first probing point.
    #define Z_RAISE_BETWEEN_PROBINGS 5 //How much the extruder will be raised when traveling from between next probing points


    //#define Z_PROBE_SLED // turn on if you have a z-probe mounted on a sled like those designed by Charles Bell
    //#define SLED_DOCKING_OFFSET 5 // the extra distance the X axis must travel to pickup the sled. 0 should be fine but you can push it further if you'd like.


    //If defined, the Probe servo will be turned on only during movement and then turned off to avoid jerk
    //The value is the delay to turn the servo off after powered on - depends on the servo speed; 300ms is good value, but you can try lower it.
    // You MUST HAVE the SERVO_ENDSTOPS defined to use here a value higher than zero otherwise your code will not compile.


    #define PROBE_SERVO_DEACTIVATION_DELAY 300




    //If you have enabled the Bed Auto Leveling and are using the same Z Probe for Z Homing,
    //it is highly recommended you let this Z_SAFE_HOMING enabled!!!


    #define Z_SAFE_HOMING // This feature is meant to avoid Z homing with probe outside the bed area.
    // When defined, it will:
    // - Allow Z homing only after X and Y homing AND stepper drivers still enabled
    // - If stepper drivers timeout, it will need X and Y homing again before Z homing
    // - Position the probe in a defined XY point before Z Homing when homing all axis (G28)
    // - Block Z homing only when the probe is outside bed area.


    #ifdef Z_SAFE_HOMING


    #define Z_SAFE_HOMING_X_POINT (X_MAX_LENGTH/2) // X point for Z homing when homing all axis (G28)
    #define Z_SAFE_HOMING_Y_POINT (Y_MAX_LENGTH/2) // Y point for Z homing when homing all axis (G28)


    #endif


    #ifdef AUTO_BED_LEVELING_GRID // Check if Probe_Offset * Grid Points is greater than Probing Range
    #if X_PROBE_OFFSET_FROM_EXTRUDER < 0
    #if (-(X_PROBE_OFFSET_FROM_EXTRUDER * (AUTO_BED_LEVELING_GRID_POINTS-1)) >= (RIGHT_PROBE_BED_POSITION - LEFT_PROBE_BED_POSITION))
    #error "The X axis probing range is not enough to fit all the points defined in AUTO_BED_LEVELING_GRID_POINTS"
    #endif
    #else
    #if ((X_PROBE_OFFSET_FROM_EXTRUDER * (AUTO_BED_LEVELING_GRID_POINTS-1)) >= (RIGHT_PROBE_BED_POSITION - LEFT_PROBE_BED_POSITION))
    #error "The X axis probing range is not enough to fit all the points defined in AUTO_BED_LEVELING_GRID_POINTS"
    #endif
    #endif
    #if Y_PROBE_OFFSET_FROM_EXTRUDER < 0
    #if (-(Y_PROBE_OFFSET_FROM_EXTRUDER * (AUTO_BED_LEVELING_GRID_POINTS-1)) >= (BACK_PROBE_BED_POSITION - FRONT_PROBE_BED_POSITION))
    #error "The Y axis probing range is not enough to fit all the points defined in AUTO_BED_LEVELING_GRID_POINTS"
    #endif
    #else
    #if ((Y_PROBE_OFFSET_FROM_EXTRUDER * (AUTO_BED_LEVELING_GRID_POINTS-1)) >= (BACK_PROBE_BED_POSITION - FRONT_PROBE_BED_POSITION))
    #error "The Y axis probing range is not enough to fit all the points defined in AUTO_BED_LEVELING_GRID_POINTS"
    #endif
    #endif



    #endif

    #endif // ENABLE_AUTO_BED_LEVELING




    // The position of the homing switches
    //#define MANUAL_HOME_POSITIONS // If defined, MANUAL_*_HOME_POS below will be used
    //#define BED_CENTER_AT_0_0 // If defined, the center of the bed is at (X=0, Y=0)


    //Manual homing switch locations:
    // For deltabots this means top and center of the Cartesian print volume.
    #define MANUAL_X_HOME_POS 0
    #define MANUAL_Y_HOME_POS 0
    #define MANUAL_Z_HOME_POS 0
    //#define MANUAL_Z_HOME_POS 402 // For delta: Distance between nozzle and print surface after homing.


    //// MOVEMENT SETTINGS
    #define NUM_AXIS 4 // The axis order in all axis related arrays is X, Y, Z, E
    #define HOMING_FEEDRATE {50*60, 50*60, 50, 0} // set the homing speeds (mm/min)


    // default settings


    #define DEFAULT_AXIS_STEPS_PER_UNIT {80,80,4000,841} // default steps per unit for Ultimaker
    #define DEFAULT_MAX_FEEDRATE {250, 250, 2, 22} // (mm/sec)
    #define DEFAULT_MAX_ACCELERATION {1000,1000,5,1000} // X, Y, Z, E maximum start speed for accelerated moves. E default values are good for Skeinforge 40+, for older versions raise them a lot.


    #define DEFAULT_ACCELERATION 500 // X, Y, Z and E max acceleration in mm/s^2 for printing moves
    #define DEFAULT_RETRACT_ACCELERATION 500 // X, Y, Z and E max acceleration in mm/s^2 for retracts


    // Offset of the extruders (uncomment if using more than one and relying on firmware to position when changing).
    // The offset has to be X=0, Y=0 for the extruder 0 hotend (default extruder).
    // For the other hotends it is their distance from the extruder 0 hotend.
    // #define EXTRUDER_OFFSET_X {0.0, 20.00} // (in mm) for each extruder, offset of the hotend on the X axis
    // #define EXTRUDER_OFFSET_Y {0.0, 5.00} // (in mm) for each extruder, offset of the hotend on the Y axis


    // The speed change that does not require acceleration (i.e. the software might assume it can be done instantaneously)
    #define DEFAULT_XYJERK 20.0 // (mm/sec)
    #define DEFAULT_ZJERK 0.4 // (mm/sec)
    #define DEFAULT_EJERK 5.0 // (mm/sec)

  7. #7
    i'm not sure honestly, I'll have to look at it closer when i get home or tomorrow... end of the day at work... bbl maybe

  8. #8
    Technician
    Join Date
    Nov 2014
    Posts
    61
    Ok I did some digging through the internet and someone mentioned un-commenting #define DISABLE_MAX_ENDSTOPS and its now probing a rectangle like it should. But now when I try to print the Z axis doesnt move down so my nozzle is way too far from the print bed. I tried adding a G29 after my G28 in slic3r and it didnt work either.
    Last edited by Schnupp; 03-08-2015 at 10:13 PM.

  9. #9
    Also make sure to disable software min endstops

  10. #10
    Technician
    Join Date
    Nov 2014
    Posts
    61
    Yup I have that set to false

Page 1 of 2 12 LastLast

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •