Hi Dave, Kirk, Chris, Sam
A serious thanks for your input.
I'm going to outline my thinking below and would be grateful for
your feedback, pro or con.

Years ago I converted a new JET Mill (Bridgeport knee knock off)
to CNC. The Ball Screw I used (Rockford) was not the stiffest
thing on the planet. Although they were a reputable company,
I am getting a lot of backlash (apparently flexing the Y arm) during
static moves and who knows under load.
Also with my current Step Generator and CNC Software
supplier I am having to buy a needed new feature upgrade too often.

I am hoping EMC2 and linear encoder strips (.0002"XY and .0005"Z)
resolution will make all the above problems go away.
The Mill is equipped as follows:
-  Stepper Motors are 4000 inch pound torque direct coupled to the
    ball screws and knee lift shaft.
-  Stepper resolution X Y is .00002" and Z is .00001" per step. That's
      better than the brush less DC servo motors I used recently.
-  The micro stepper motor drivers use 80 Volt DC motor power which
     kicks the typically slow stepper motors fast enough for milling.
-  The spindle VFD is analog 0-5 volts. I plan to a filter a PWM or PDM
      pin for that.
-   The tool change is manual with a tool length sensor to correct the
     Z offset. I plan to use the Probe sensor input and a G Code
     subroutine to do the offset change in EMC2.

    Thanks again;   I am looking forward to your input.
        Don

PS. Please forgive sending your long email back but I'm getting a
      Lightening storm, got to go!



On Wed, Aug 18, 2010 at 12:31 PM, Dave <e...@dc9.tzo.com> wrote:

> 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
>
------------------------------------------------------------------------------
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

Reply via email to