On Sunday 25 June 2017 18:12:14 [email protected] wrote:

> I would like to attempt to get my machine with stepper motors running
> in velocity mode with feedback from the encoders.  Below are the
> relevant parts of my Hal and Ini files for just the X-Axis.  I figured
> I would do one axis at a time.  Currently nothing happens when I try
> to jog the X axis except if I hold it long enough it gives a following
> error.  If I try to home it, it faults with a following error.  I was
> trying to look various parameters on Halscope, triggering off of
> axis.0.f-error but nothing appears for any of the pins I was
> monitoring.   Are there any obvious errors in the config below to
> start with?
>
> -Tom
>
> ======================== HAL ========================
> loadrt trivkins
> loadrt [EMCMOT]EMCMOT servo_period_nsec=[EMCMOT]SERVO_PERIOD
> num_joints=[TRAJ]AXES loadrt hostmot2
> loadrt hm2_7i43  config="firmware=hm2/7i43/SVST2_4_7I47B.BIT
> num_encoders=3 num_pwmgens=0 num_stepgens=4" loadrt pid
> names=pid.x,pid.y,pid.z
>
> addf hm2_7i43.0.read servo-thread
> addf motion-command-handler servo-thread
> addf motion-controller servo-thread
> addf pid.x.do-pid-calcs       servo-thread
> addf pid.y.do-pid-calcs       servo-thread
> addf pid.z.do-pid-calcs       servo-thread
> addf hm2_7i43.0.write         servo-thread
>
>
> #*******************
> #  AXIS X
> #*******************
> # axis enable chain
>
> setp  pid.x.Pgain     [AXIS_0]P
> setp  pid.x.Igain     [AXIS_0]I
> setp  pid.x.Dgain     [AXIS_0]D
> setp  pid.x.bias      [AXIS_0]BIAS
> setp  pid.x.FF0       [AXIS_0]FF0
> setp  pid.x.FF1       [AXIS_0]FF1
> setp  pid.x.FF2       [AXIS_0]FF2
> setp  pid.x.deadband  [AXIS_0]DEADBAND
> setp  pid.x.maxoutput [AXIS_0]MAX_OUTPUT
>
> net x-index-enable <=> pid.x.index-enable
> net x-enable => pid.x.enable
> net x-ouput => pid.x.output
> net x-pos-cmd => pid.x.command
> net x-vel-fb => pid.x.feedback-deriv
> net x-pos-fb => pid.x.feedback
>
> # Step Gen signals/setup
> setp hm2_7i43.0.stepgen.00.dirsetup        [AXIS_0]DIRSETUP
> setp hm2_7i43.0.stepgen.00.dirhold         [AXIS_0]DIRHOLD
> setp hm2_7i43.0.stepgen.00.steplen         [AXIS_0]STEPLEN
> setp hm2_7i43.0.stepgen.00.stepspace       [AXIS_0]STEPSPACE
> setp hm2_7i43.0.stepgen.00.position-scale  [AXIS_0]SCALE
> setp hm2_7i43.0.stepgen.00.maxaccel      [AXIS_0]STEPGEN_MAXACCEL
> setp hm2_7i43.0.stepgen.00.maxvel        [AXIS_0]STEPGEN_MAXVEL
> setp hm2_7i43.0.stepgen.00.step_type  0
> setp hm2_7i43.0.stepgen.00.control-type       1
>
> # --closed loop stepper signals--
> net x-pos-cmd axis.0.motor-pos-cmd
> net x-output => hm2_7i43.0.stepgen.00.velocity-cmd
> net x-enable axis.0.amp-enable-out => hm2_7i43.0.stepgen.00.enable
>
> # ---Encoder feedback signals/setup---
> setp hm2_7i43.0.encoder.00.counter-mode 0
> setp hm2_7i43.0.encoder.00.filter 1
> setp hm2_7i43.0.encoder.00.index-invert 0
> setp hm2_7i43.0.encoder.00.index-mask 0
> setp hm2_7i43.0.encoder.00.index-mask-invert 0
> setp hm2_7i43.0.encoder.00.scale  [AXIS_0]INPUT_SCALE
>
> net x-pos-fb <= hm2_7i43.0.encoder.00.position
> net x-vel-fb <= hm2_7i43.0.encoder.00.velocity
> net x-pos-fb => axis.0.motor-pos-fb
> net x-index-enable axis.0.index-enable <=>
> hm2_7i43.0.encoder.00.index-enable net x-pos-rawcounts <=
> hm2_7i43.0.encoder.00.rawcounts
>
> # ---setup home / limit switch signals---
> net x-home-sw     =>  axis.0.home-sw-in
> net x-neg-limit     =>  axis.0.neg-lim-sw-in
> net x-pos-limit     =>  axis.0.pos-lim-sw-in
>
> ======================== end HAL ========================
>
> ======================== INI ========================
> [EMC]
> MACHINE = EMCO
> DEBUG = 0
>
> [DISPLAY]
> DISPLAY = axis
> EDITOR = gedit
> PYVCP = custom_pyvcp.xml
> POSITION_OFFSET = RELATIVE
> POSITION_FEEDBACK = ACTUAL
> MAX_FEED_OVERRIDE = 2.0
> MAX_SPINDLE_OVERRIDE = 1.5
> MIN_SPINDLE_OVERRIDE = 0.500000
> INTRO_GRAPHIC = linuxcnc.gif
> INTRO_TIME = 2
> PROGRAM_PREFIX = /home/tom/linuxcnc/nc_files
> INCREMENTS = .1in .05in .01in .005in .001in .0005in .0001in
> POSITION_OFFSET = RELATIVE
> POSITION_FEEDBACK = ACTUAL
> DEFAULT_LINEAR_VELOCITY = 0.250000
> MAX_LINEAR_VELOCITY = 1.000000
> MIN_LINEAR_VELOCITY = 0.010000
> DEFAULT_ANGULAR_VELOCITY = 0.250000
> MAX_ANGULAR_VELOCITY = 1.000000
> MIN_ANGULAR_VELOCITY = 0.010000
> GEOMETRY = xyz
>
> [FILTER]
> PROGRAM_EXTENSION = .png,.gif,.jpg Greyscale Depth Image
> PROGRAM_EXTENSION = .py Python Script
> png = image-to-gcode
> gif = image-to-gcode
> jpg = image-to-gcode
> py = python
>
> [TASK]
> TASK = milltask
> CYCLE_TIME = 0.010
>
> [RS274NGC]
> PARAMETER_FILE = emc.var
>
> [EMCMOT]
> EMCMOT = motmod
> COMM_TIMEOUT = 1.0
> COMM_WAIT = 0.010
> #BASE_PERIOD = 50000
> SERVO_PERIOD = 1000000
>
> # [HOSTMOT2]
> # This is for info only - config line is in the .hal file
> # DRIVER0=hm2_7i43
> # BOARD0=7i43
> # CONFIG0="firmware=hm2/7i43/SVST2_4_7I47B.BIT num_encoders=3
> num_pwmgens=0 num_stepgens=4"
>
> [HAL]
> HALUI = halui
> HALFILE = EMCO-CL.hal
> HALFILE = custom.hal
> POSTGUI_HALFILE = custom_postgui.hal
>
> [HALUI]
> MDI_COMMAND = G53 G0 X0 Y0 Z0
> MDI_COMMAND = o<probev2> call
>
> [TRAJ]
> AXES = 3
> COORDINATES = X Y Z
> LINEAR_UNITS = inch
> ANGULAR_UNITS = degree
> CYCLE_TIME = 0.010
> DEFAULT_VELOCITY = 0.5
> MAX_LINEAR_VELOCITY = 2
> DEFAULT_ANGULAR_VELOCITY = 0.25
> MAX_ANGULAR_VELOCITY = 1.0
>
> [EMCIO]
> EMCIO = io
> CYCLE_TIME = 0.100
> TOOL_TABLE = tool.tbl
>
> #********************
> # Axis X
> #********************
> [AXIS_0]
> TYPE = LINEAR
> FERROR = 1
> MIN_FERROR = 1
> MAX_VELOCITY = 2.2
> MAX_ACCELERATION = 20
> # these are in nanoseconds
> DIRSETUP   = 200
> DIRHOLD    = 200

What motor drivers are you using?  That 200 ns may be too fast for the 
input opto-isolators and the micro-controllers that run the drivers to 
respond to a direction change. Start at 2500 and work down. When it 
miss-fires, add 300 and call it good for that driver.

> STEPLEN    = 2000
> STEPSPACE  = 1200

You might be able to shorten these times, how far might be dependent on 
the card to driver wireup. You should feed 5 volts to all the drivers + 
inputs, hook the drivers - terminal to the breakout board terminal and 
set the active time of the pulse to be a logic zero as most breakout 
boards have lots more power in the pulldown than in the pullup, and it 
can make quite a difference in how fast you can spin the motors.

> STEPGEN_MAXACCEL = 40

Ditto here, try 5 to 10.

> STEPGEN_MAXVEL = 2.75
> #
> P = 1
> I = 0
> D = 0
> FF0 = 0
> FF1 = 1.0
> FF2 = 0
> BIAS = 0
> DEADBAND = 0.001
> MAX_OUTPUT = 8
> #
> INPUT_SCALE = -208076.8
> SCALE = -50800
> MIN_LIMIT = -0.001
> MAX_LIMIT = 7.8
> # homing
> # move here after home switch found:
> HOME = 4.0
> # home switch is located here:
> HOME_OFFSET = 7.8
> # initial search velocity in/sec
> HOME_SEARCH_VEL = 0.75
> # 2nd pass search velocity
> HOME_LATCH_VEL = 0.1
> # speed to HOME
> HOME_FINAL_VEL = 0.5
> # yes use index
> HOME_USE_INDEX = NO
> HOME_IGNORE_LIMITS = NO
> HOME_IS_SHARED = NO
> # do this after Z is homed
> HOME_SEQUENCE = 2
> # should unhome if estop or power off? no
> VOLATILE_HOME = 0
> ======================== end INIL ========================

I HTH.

Cheers, Gene Heskett
-- 
"There are four boxes to be used in defense of liberty:
 soap, ballot, jury, and ammo. Please use in that order."
-Ed Howdershelt (Author)
Genes Web page <http://geneslinuxbox.net:6309/gene>

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Emc-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/emc-users

Reply via email to