I disagree... If I had high res scales available that could keep up with the slew rates of the axes, I would try to incorporate them into the system.
They could compensate for pitch errors in the screws or worn screws. I still think that any backlash may still cause big problems, but you can oftentimes tighten or replace nuts to get rid of that. Here is one axis (see below) that is used in a closed position loop system: This axis drives a feed roller which feeds a strip into a machine. The feedback device - an encoder, has a knurled wheel on the encoder shaft and the encoder wheel is in contact with the strip. We went to a closed loop system since the strip drive is friction driven and tends to slip a little.. With the encoder and the closed position loop, position control is very good even with high feed rates up to 30 inches per second. This setup uses Mesa hardware...and the Hostmot2 driver. This system uses a 5i20 PCI board a 7i47 board since using a LPT port at these speeds is not possible. I think you could do the same thing using an LPT port interface but you would have to go much slower and use the hal components for Stepgen and the encoder counter, etc but I suspect it would work. Dave (Dave911 on the IRC) >>>>>>>>>>>>>> Section of the INI file <<<<<<<<<<<<<<<< [AXIS_0] # # Step timing is 2.2 us steplen + 3.3 us stepspace # That gives 5.5 us step period = 181 khz KHz step freq # #5.25 in diameter roller x 3.1415 = 16.485 inches of feed per rev #16.485/15:1 gearbox = 1.099 inches of feed per rev # # at 2500 pulses per rev on the motor encoder, turns out to be 1819.83 pulses per inch of travel # # was 25 max vel and 60 accel # #A corrected value is entered below. TYPE = LINEAR MAX_VELOCITY = 30 MAX_ACCELERATION = 80 BACKLASH = 0.000 # scale is pulses ouput from EMC2 per inch of material travel SCALE = 2274 MIN_LIMIT = -9999999.99 MAX_LIMIT = 9999999.99 #old value #FERROR = 0.050 #MIN_FERROR = 0.005 FERROR = 10.00 #HOME = 0.000 #HOME_OFFSET = 0.10 #HOME_SEARCH_VEL = 0.0 #HOME_LATCH_VEL = 0.0 #HOME_USE_INDEX = NO #HOME_IGNORE_LIMITS = YES # these are in nanoseconds DIRSETUP = 3300 DIRHOLD = 3300 STEPLEN = 2200 STEPSPACE = 3300 Here is the hal file section for that axis: # ####################################### # # HAL file for HostMot2 with 3 steppers # # Derived from Ted Hyde's original hm2-servo config # # Based up work and discussion with Seb & Peter & Jeff # GNU license references - insert here. www.linuxcnc.org # # # ######################################## # ################################### # Core EMC/HAL Loads # ################################### # kinematics loadrt trivkins # motion controller, get name and thread periods from ini file loadrt [EMCMOT]EMCMOT servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[TRAJ]AXES # only the 7i43 needs this, but it doesnt hurt the others #loadrt probe_parport # hostmot2 driver loadrt hostmot2 # load low-level driver loadrt [HOSTMOT2](DRIVER) config=[HOSTMOT2](CONFIG) setp hm2_[HOSTMOT2](BOARD).0.watchdog.timeout_ns 10000000 # Load Classic ladder module that runs in real time loadrt classicladder_rt numPhysInputs=32 numPhysOutputs=20 numS32in=10 numS32out=10 numFloatIn=10 numFloatOut=10 # load one "not" hal component loadrt not count=1 addf not.0 servo-thread # load one mux2 hal component loadrt mux2 count=1 addf mux2.0 servo-thread loadrt toggle count=1 addf toggle.0 servo-thread loadrt scale count=1 addf scale.0 servo-thread # ################################################ # THREADS # ################################################ addf hm2_[HOSTMOT2](BOARD).0.read servo-thread addf motion-command-handler servo-thread addf motion-controller servo-thread ### 1 PID added for closed loop control of velocity of motor via step gen loadrt pid num_chan=1 addf pid.0.do-pid-calcs servo-thread alias pin pid.0.Pgain pid.x.Pgain alias pin pid.0.Igain pid.x.Igain alias pin pid.0.Dgain pid.x.Dgain alias pin pid.0.bias pid.x.bias alias pin pid.0.FF0 pid.x.FF0 alias pin pid.0.FF1 pid.x.FF1 alias pin pid.0.FF2 pid.x.FF2 alias pin pid.0.deadband pid.x.deadband alias pin pid.0.maxoutput pid.x.maxoutput alias pin pid.0.enable pid.x.enable alias pin pid.0.command pid.x.command alias pin pid.0.feedback pid.x.feedback alias pin pid.0.output pid.x.output setp pid.x.Pgain 4.0 # was 4.0 setp pid.x.Igain 0.0 setp pid.x.Dgain 0.0 setp pid.x.bias 0.0 setp pid.x.FF0 0.0 setp pid.x.FF1 .9 # was 2.5 setp pid.x.FF2 0.0 # not implemented setp pid.x.deadband 0.0 setp pid.x.maxoutput 3000.0 ### End of PID add addf hm2_[HOSTMOT2](BOARD).0.write servo-thread addf hm2_[HOSTMOT2](BOARD).0.pet_watchdog servo-thread addf classicladder.0.refresh servo-thread # ###################################################### # Axis-of-motion Specific Configs (not the GUI) # ###################################################### # ################ # X [0] Axis # ################ # axis enable chain newsig emcmot.00.enable bit sets emcmot.00.enable FALSE net emcmot.00.enable <= axis.0.amp-enable-out net emcmot.00.enable => hm2_[HOSTMOT2](BOARD).0.stepgen.00.enable # Enable the PID loop here also net emcmot.00.enable => pid.0.enable # Set stepgen to velocity mode newsig vel_mode bit sets vel_mode TRUE net vel_mode => hm2_[HOSTMOT2](BOARD).0.stepgen.00.control-type # position command from EMC to the PID loop cmd net pid_cmd <= axis.0.motor-pos-cmd net pid_cmd => pid.0.command # PID output drive the stepgen net pid_out <= pid.0.output net pid_out => hm2_[HOSTMOT2](BOARD).0.stepgen.00.velocity-cmd setp hm2_5i20.0.encoder.00.counter-mode 0 setp hm2_5i20.0.encoder.00.filter 1 setp hm2_5i20.0.encoder.00.index-invert 0 setp hm2_5i20.0.encoder.00.index-mask 0 setp hm2_5i20.0.encoder.00.index-mask-invert 0 # The encoder is a 4096 counts per rev with quadrature # Wheel circumfrence is 12 was 341 counts per inch but is 30/29.75 short so # 30/29.75 * 341 = 344 setp hm2_5i20.0.encoder.00.scale 345 net pid_feedback <= hm2_5i20.0.encoder.00.position net pid_feedback => pid.0.feedback net pid_feedback => axis.0.motor-pos-fb # timing parameters setp hm2_[HOSTMOT2](BOARD).0.stepgen.00.dirsetup [AXIS_0]DIRSETUP setp hm2_[HOSTMOT2](BOARD).0.stepgen.00.dirhold [AXIS_0]DIRHOLD setp hm2_[HOSTMOT2](BOARD).0.stepgen.00.steplen [AXIS_0]STEPLEN setp hm2_[HOSTMOT2](BOARD).0.stepgen.00.stepspace [AXIS_0]STEPSPACE setp hm2_[HOSTMOT2](BOARD).0.stepgen.00.position-scale [AXIS_0]SCALE setp hm2_[HOSTMOT2](BOARD).0.stepgen.00.maxvel 0 setp hm2_[HOSTMOT2](BOARD).0.stepgen.00.maxaccel 0 setp hm2_[HOSTMOT2](BOARD).0.stepgen.00.step_type 0 _____________________________________________________________________________________ On 8/18/2010 11:38 AM, Kirk Wallace wrote: > On Tue, 2010-08-17 at 18:11 -0400, Don Stanley wrote: > ... snip > >> Did you recognise it is a CNC converted mill that I >> wanted to move to EMC2? >> Thanks again >> Don >> > I still contend that encoder feedback on a stepper system has no proven > advantage, unless you have a very special stepper driver that drives the > stepper as a high pole count brushless DC servo with a very high count > encoder on the motor shaft. Encoders would only be useful for a stepper > machine with hand wheels, while being used as a manual machine with a > DRO. EMC2 can be configured to do it, but I consider it an academic > endeavor, since a plain stepper system would work just as well as is, or > a standard servo would work just as well, only faster. > > I may be wrong, but this is my current understanding. > ------------------------------------------------------------------------------ This SF.net email is sponsored by Make an app they can't live without Enter the BlackBerry Developer Challenge http://p.sf.net/sfu/RIM-dev2dev _______________________________________________ Emc-users mailing list Emc-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/emc-users