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 <[email protected]> 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
> [email protected]
> 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
[email protected]
https://lists.sourceforge.net/lists/listinfo/emc-users