LinuxCNC 2.7.7, hostmot2, Mesa 5i25 + 7i77, resolver to quadrature converter integrated into servo drive, 8192 counts per revolution.
I finished integration and one day operator said that Z position was lost after last machine restart. I checked Z homing process and got different final Z positions at different tries, especially after PC and 7i77 5V re-powering. Then I observed that looking for an index sometimes does not actually stop at the index, but at the next one - after one full turn. Would it be noise or inverted signal problem it would interpret noises as index pulse and would stop faster, not further, but this does not happen. I played a lot with HOME_LATCH_VEL, making it much smaller, changing its direction, but could not get reliable results. I checked position of home switch in relation to index position and moved the flag of home switch, got around 1200 counts difference between them, but nothing helped. And now, as I can recall, homing to index with Mesa boards gave me problems here and there often. Final workaround was to disable this feature and rely on imprecise home switches only :( in INI file: ===================== [HM2] DRIVER = hm2_pci FPGA = hm2_5i25.0. ENC = hm2_5i25.0.encoder. PWM = hm2_5i25.0.pwmgen.0 DI = hm2_5i25.0.7i77.0.0.input- DO = hm2_5i25.0.7i77.0.0.output- AO = hm2_5i25.0.7i77.0.1. AI = hm2_5i25.0.7i77.0.0.analogin CONFIG=" num_encoders=6 sserial_port_0=2XXX " # Axis Z [AXIS_2] TYPE = LINEAR FERROR = 1 MIN_FERROR = 0.2 MAX_VELOCITY = 325 MAX_ACCELERATION = 1800 ... (PID values) BIAS = 0 DEADBAND = 0.0004 MAX_OUTPUT = 10 INPUT_SCALE = -1259.84251969 OUTPUT_SCALE = -10 OUTPUT_MIN_LIMIT = -10 OUTPUT_MAX_LIMIT = 10 MIN_LIMIT = -512 MAX_LIMIT = 0 HOME = -1 # The position that the joint will go to upon completion of the homing sequence HOME_OFFSET = -8 # The axis position of the home switch or index pulse, in machine units. HOME_SEARCH_VEL = 60 HOME_LATCH_VEL = -10 HOME_FINAL_VEL = 100 HOME_USE_INDEX = YES HOME_IGNORE_LIMITS = NO HOME_SEQUENCE = 0 in main HAL file: ===================== loadrt trivkins loadrt [EMCMOT]EMCMOT servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[TRAJ](AXES) num_dio=7 loadrt threads name1=slow-thread period1=[EMCMOT]SLOW_PERIOD loadrt pid names=pid-x,pid-y,pid-z,pid-spin,pid-orient ... loadrt debounce cfg=10 ... loadrt hostmot2 loadrt [HM2](DRIVER) config=[HM2](CONFIG) setp [HM2](FPGA)watchdog.timeout_ns 5000000 ... # --- Z encoder setup --- setp [HM2](ENC)02.filter 1 setp [HM2](ENC)02.scale [AXIS_2]INPUT_SCALE net z-pos-fb [HM2](ENC)02.position => pid-z.feedback axis.2.motor-pos-fb net z-vel-fb [HM2](ENC)02.velocity => pid-z.feedback-deriv net z-index-enable axis.2.index-enable <=> [HM2](ENC)02.index-enable ... net z-index-enable => pid-z.index-enable ... # Home and limit switches ... net z-home-noisy [HM2](DI)09 => debounce.0.2.in net z-home debounce.0.2.out => axis.2.home-sw-in ... net z-limit-noisy [HM2](DI)10-not => debounce.0.5.in ... # THREADS addf [HM2](FPGA)read servo-thread addf debounce.0 servo-thread ... addf motion-command-handler servo-thread addf motion-controller servo-thread ... addf pid-z.do-pid-calcs servo-thread ... addf [HM2](FPGA)write servo-thread ... addf scale-s-vel slow-thread ... in postgui.hal: ===================== ... net enc-quad-error-en [HM2](ENC)00.quad-error-enable [HM2](ENC)01.quad-error-enable [HM2](ENC)02.quad-error-enable [HM2](ENC)05.quad-error-enable ... # I put this line at the very end, because I noticed more occasional quadrature errors otherwise: sets enc-quad-error-en 1 lock ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, SlashDot.org! http://sdm.link/slashdot _______________________________________________ Emc-users mailing list Emc-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/emc-users