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

Reply via email to