Hmmm - backlash isn't going to get any better using scales - and the 
machine setup is impossible at best..  backlash is bad bad bad..

as far as your stepper....  .00002 and .00001?  Direct coupled?    That 
must be taking into account the micro stepping?  You cannot depend on 
micro stepping for accurate positioning.   About all you can really 
count on is full step (and maybe half steps if you are lucky).

sam

On 8/18/2010 2:15 PM, Don Stanley wrote:
> 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
>

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

Reply via email to