Import LinuxCNC source tree
This commit is contained in:
3
configs/by_interface/pico/README
Normal file
3
configs/by_interface/pico/README
Normal file
@@ -0,0 +1,3 @@
|
||||
Pico Systems
|
||||
|
||||
www.pico-systems.com
|
||||
1
configs/by_interface/pico/USC_encod/README
Normal file
1
configs/by_interface/pico/USC_encod/README
Normal file
@@ -0,0 +1 @@
|
||||
A configuration for the Universal Stepper card from Pico systems. This configuration includes motion connections and an IO set for handling estop within HAL. ini file parameters INPUT_SCALE are for the encoder counts/user unit, OUTPUT_SCALE is the scaling for the drive steps per user unit (which can be different).
|
||||
244
configs/by_interface/pico/USC_encod/univstep.ini
Normal file
244
configs/by_interface/pico/USC_encod/univstep.ini
Normal file
@@ -0,0 +1,244 @@
|
||||
# ini file for Universal Stepper Controller with encoders
|
||||
# General section -------------------------------------------------------------
|
||||
|
||||
[EMC]
|
||||
# Version of this INI file
|
||||
VERSION = 1.1
|
||||
# Name of machine, for use with display, etc.
|
||||
MACHINE = UNIVSTEP_Encoder
|
||||
# Debug level, 0 means no messages. See src/emc/nml_int/emcglb.h for others
|
||||
DEBUG = 0
|
||||
# DEBUG = 0x00000007
|
||||
# DEBUG = 0x7FFFFFFF
|
||||
# Sections for display options ------------------------------------------------
|
||||
|
||||
[DISPLAY]
|
||||
# Name of display program, e.g., axis
|
||||
DISPLAY = axis
|
||||
# DISPLAY = tklinuxcnc
|
||||
# Cycle time, in seconds, that display will sleep between polls
|
||||
CYCLE_TIME = 0.100
|
||||
# Path to help file
|
||||
HELP_FILE = tklinuxcnc.txt
|
||||
# Initial display setting for position, RELATIVE or MACHINE
|
||||
POSITION_OFFSET = RELATIVE
|
||||
# Initial display setting for position, COMMANDED or ACTUAL
|
||||
POSITION_FEEDBACK = ACTUAL
|
||||
# Highest value that will be allowed for feed override, 1.0 = 100%
|
||||
MAX_FEED_OVERRIDE = 1.2
|
||||
# Prefix to be used
|
||||
PROGRAM_PREFIX = ../../nc_files/
|
||||
# Introductory graphic
|
||||
INTRO_GRAPHIC = linuxcnc.gif
|
||||
INTRO_TIME = 2
|
||||
# Enable popup balloon help
|
||||
BALLOON_HELP = 1
|
||||
# Task controller section -----------------------------------------------------
|
||||
|
||||
[FILTER]
|
||||
#No Content
|
||||
|
||||
[RS274NGC]
|
||||
# File containing interpreter variables
|
||||
PARAMETER_FILE = univstep.var
|
||||
# Motion control section ------------------------------------------------------
|
||||
|
||||
[EMCMOT]
|
||||
EMCMOT = motmod
|
||||
# Timeout for comm to emcmot, in seconds
|
||||
COMM_TIMEOUT = 1.0
|
||||
# Servo task period, in nanoseconds
|
||||
SERVO_PERIOD = 1000000
|
||||
# Hardware Abstraction Layer section --------------------------------------------------
|
||||
|
||||
[TASK]
|
||||
# Name of task controller program, e.g., milltask
|
||||
TASK = milltask
|
||||
# Cycle time, in seconds, that task controller will sleep between polls
|
||||
CYCLE_TIME = 0.010
|
||||
# Part program interpreter section --------------------------------------------
|
||||
|
||||
[HAL]
|
||||
# The run script first uses halcmd to execute any HALFILE
|
||||
# files, and then to execute any individual HALCMD commands.
|
||||
#
|
||||
# list of hal config files to run through halcmd
|
||||
# files are executed in the order in which they appear
|
||||
HALFILE = univstep_load.hal
|
||||
HALFILE = univstep_servo.hal
|
||||
HALFILE = univstep_motion.hal
|
||||
HALFILE = univstep_io.hal
|
||||
# list of halcmd commands to execute
|
||||
# commands are executed in the order in which they appear
|
||||
#HALCMD = save neta
|
||||
# Trajectory planner section --------------------------------------------------
|
||||
|
||||
[HALUI]
|
||||
#No Content
|
||||
|
||||
[TRAJ]
|
||||
# COORDINATES = X Y Z R P W
|
||||
COORDINATES = X Y Z A
|
||||
HOME = 0 0 0 0
|
||||
LINEAR_UNITS = inch
|
||||
ANGULAR_UNITS = degree
|
||||
DEFAULT_LINEAR_VELOCITY = 0.0167
|
||||
MAX_LINEAR_VELOCITY = 1.20
|
||||
DEFAULT_LINEAR_ACCELERATION = 15.0
|
||||
MAX_LINEAR_ACCELERATION = 20.0
|
||||
# Axes sections ---------------------------------------------------------------
|
||||
# First axis
|
||||
|
||||
[EMCIO]
|
||||
# tool table file
|
||||
TOOL_TABLE = univstep.tbl
|
||||
|
||||
[KINS]
|
||||
KINEMATICS = trivkins
|
||||
JOINTS = 4
|
||||
|
||||
[AXIS_X]
|
||||
MIN_LIMIT = -10.0
|
||||
MAX_LIMIT = 30.0
|
||||
MAX_VELOCITY = 1.20
|
||||
MAX_ACCELERATION = 20.0
|
||||
|
||||
[JOINT_0]
|
||||
TYPE = LINEAR
|
||||
HOME = 0.000
|
||||
MAX_VELOCITY = 1.20
|
||||
MAX_ACCELERATION = 20.0
|
||||
PID_MAX_VEL = 1.25
|
||||
BACKLASH = 0.000
|
||||
# INPUT_SCALE sets the resolution of the encoder in user units
|
||||
# for instance a 500 line encoder directly connected to a 5 TPI leadscrew
|
||||
# would give 500 * 4 (for quadrature) * 5 = 10000
|
||||
INPUT_SCALE = 10000
|
||||
# OUTPUT_SCALE sets the resolution of the step generator
|
||||
# for a Gecko320 with no pulse multiplier, it should be the same magnitude
|
||||
# as INPUT_SCALE, but the arithmetic sign might need to be opposite
|
||||
# if it runs away.
|
||||
# if you have an encoder on a stepper motor, then this should be calculated
|
||||
# by number of (micro)steps/rev X the leadscrew pitch, and may not match the
|
||||
# INPUT_SCALE.
|
||||
OUTPUT_SCALE = 10000.0
|
||||
MIN_LIMIT = -10.0
|
||||
MAX_LIMIT = 30.0
|
||||
FERROR = 0.0100
|
||||
MIN_FERROR = 0.1
|
||||
HOME_OFFSET = 0.0
|
||||
HOME_SEARCH_VEL = 0.0
|
||||
HOME_LATCH_VEL = 0.0
|
||||
HOME_USE_INDEX = NO
|
||||
HOME_IGNORE_LIMITS = NO
|
||||
DEADBAND = 0.000126
|
||||
P = 150
|
||||
I = 100
|
||||
D = 0.1
|
||||
BIAS = 0.0
|
||||
FF0 = 0
|
||||
FF1 = 1
|
||||
FF2 = 0.0
|
||||
# Second axis
|
||||
|
||||
[AXIS_Y]
|
||||
MIN_LIMIT = -10.0
|
||||
MAX_LIMIT = 30.0
|
||||
MAX_VELOCITY = 1.20
|
||||
MAX_ACCELERATION = 20.0
|
||||
|
||||
[JOINT_1]
|
||||
TYPE = LINEAR
|
||||
HOME = 0.000
|
||||
MAX_VELOCITY = 1.20
|
||||
MAX_ACCELERATION = 20.0
|
||||
PID_MAX_VEL = 1.25
|
||||
BACKLASH = 0.000
|
||||
INPUT_SCALE = 4000
|
||||
OUTPUT_SCALE = 4000.0
|
||||
MIN_LIMIT = -10.0
|
||||
MAX_LIMIT = 30.0
|
||||
FERROR = 0.010
|
||||
MIN_FERROR = 0.001
|
||||
HOME_OFFSET = 0.0
|
||||
HOME_SEARCH_VEL = 0.0
|
||||
HOME_LATCH_VEL = 0.0
|
||||
HOME_USE_INDEX = NO
|
||||
HOME_IGNORE_LIMITS = NO
|
||||
DEADBAND = 0.000126
|
||||
P = 150
|
||||
I = 100
|
||||
D = 0.1
|
||||
BIAS = 0.0
|
||||
FF0 = 0
|
||||
FF1 = 1
|
||||
FF2 = 0.0
|
||||
# Third axis
|
||||
|
||||
[AXIS_Z]
|
||||
MIN_LIMIT = -10.0
|
||||
MAX_LIMIT = 30.0
|
||||
MAX_VELOCITY = 1.20
|
||||
MAX_ACCELERATION = 20.0
|
||||
|
||||
[JOINT_2]
|
||||
TYPE = LINEAR
|
||||
HOME = 0.0
|
||||
MAX_VELOCITY = 1.20
|
||||
MAX_ACCELERATION = 20.0
|
||||
PID_MAX_VEL = 1.25
|
||||
BACKLASH = 0.000
|
||||
INPUT_SCALE = 4000
|
||||
OUTPUT_SCALE = 4000.0
|
||||
MIN_LIMIT = -10.0
|
||||
MAX_LIMIT = 30.0
|
||||
FERROR = 0.010
|
||||
MIN_FERROR = 0.001
|
||||
HOME_OFFSET = 0.0
|
||||
HOME_SEARCH_VEL = 0.0
|
||||
HOME_LATCH_VEL = 0.0
|
||||
HOME_USE_INDEX = NO
|
||||
HOME_IGNORE_LIMITS = NO
|
||||
DEADBAND = 0.000126
|
||||
P = 150
|
||||
I = 100
|
||||
D = 0.1
|
||||
BIAS = 0.0
|
||||
FF0 = 0
|
||||
FF1 = 1
|
||||
FF2 = 0.0
|
||||
# Fourth axis
|
||||
|
||||
[AXIS_A]
|
||||
MIN_LIMIT = -3600.0
|
||||
MAX_LIMIT = 3600.0
|
||||
MAX_VELOCITY = 65
|
||||
MAX_ACCELERATION = 20.0
|
||||
|
||||
[JOINT_3]
|
||||
TYPE = ANGULAR
|
||||
HOME = 0.0
|
||||
MAX_VELOCITY = 65
|
||||
MAX_ACCELERATION = 20.0
|
||||
PID_MAX_VEL = 66
|
||||
BACKLASH = 0.000
|
||||
INPUT_SCALE = 11.11111111
|
||||
OUTPUT_SCALE = 11.1111111
|
||||
MIN_LIMIT = -3600.0
|
||||
MAX_LIMIT = 3600.0
|
||||
FERROR = 0.1
|
||||
MIN_FERROR = 0.2
|
||||
HOME_OFFSET = 0.0
|
||||
HOME_SEARCH_VEL = 0.0
|
||||
HOME_LATCH_VEL = 0.0
|
||||
HOME_USE_INDEX = NO
|
||||
HOME_IGNORE_LIMITS = NO
|
||||
DEADBAND = 0.046
|
||||
P = 150
|
||||
I = 100
|
||||
D = 0.1
|
||||
BIAS = 0.0
|
||||
FF0 = 0
|
||||
FF1 = 1
|
||||
FF2 = 0.0
|
||||
# section for main IO controller parameters -----------------------------------
|
||||
4
configs/by_interface/pico/USC_encod/univstep.tbl
Normal file
4
configs/by_interface/pico/USC_encod/univstep.tbl
Normal file
@@ -0,0 +1,4 @@
|
||||
T1 P1 D0.125000 Z+0.511000 ;1/8 end mill
|
||||
T2 P2 D0.062500 Z+0.100000 ;1/16 end mill
|
||||
T3 P3 D0.201000 Z+1.273000 ;#7 tap drill
|
||||
T99999 P99999 Z+0.100000 ;big tool number
|
||||
82
configs/by_interface/pico/USC_encod/univstep_io.hal
Normal file
82
configs/by_interface/pico/USC_encod/univstep_io.hal
Normal file
@@ -0,0 +1,82 @@
|
||||
# HAL config file for Pico Systems USC board
|
||||
#
|
||||
# Connect motion controller I/Os
|
||||
#
|
||||
|
||||
# connect limit/home switch outputs to motion controller
|
||||
net Xminlim <= ppmc.0.din.01.in
|
||||
net Xminlim => joint.0.neg-lim-sw-in
|
||||
net Xmaxlim <= ppmc.0.din.02.in
|
||||
net Xmaxlim => joint.0.pos-lim-sw-in
|
||||
net Xhome <= ppmc.0.din.00.in
|
||||
net Xhome => joint.0.home-sw-in
|
||||
|
||||
net Yminlim <= ppmc.0.din.05.in
|
||||
net Yminlim => joint.1.neg-lim-sw-in
|
||||
net Ymaxlim <= ppmc.0.din.06.in
|
||||
net Ymaxlim => joint.1.pos-lim-sw-in
|
||||
net Yhome <= ppmc.0.din.04.in
|
||||
net Yhome => joint.1.home-sw-in
|
||||
|
||||
net Zminlim <= ppmc.0.din.09.in
|
||||
net Zminlim => joint.2.neg-lim-sw-in
|
||||
net Zmaxlim <= ppmc.0.din.10.in
|
||||
net Zmaxlim => joint.2.pos-lim-sw-in
|
||||
net Zhome <= ppmc.0.din.08.in
|
||||
net Zhome => joint.2.home-sw-in
|
||||
|
||||
net Aminlim <= ppmc.0.din.12.in
|
||||
net Aminlim => joint.3.neg-lim-sw-in
|
||||
net Amaxlim <= ppmc.0.din.13.in
|
||||
net Amaxlim => joint.3.pos-lim-sw-in
|
||||
net Ahome <= ppmc.0.din.11.in
|
||||
net Ahome => joint.3.home-sw-in
|
||||
|
||||
|
||||
# connect index pulses to motion controller
|
||||
# uncomment these lines only if you have a Rev 2 USC board
|
||||
#newsig Xindex bit
|
||||
#newsig Yindex bit
|
||||
#newsig Zindex bit
|
||||
#linksp Xindex <= ppmc.0.encoder.00.index-enable
|
||||
#linksp Xindex => joint.0.index-enable
|
||||
#linksp Yindex <= ppmc.0.encoder.01.index-enable
|
||||
#linksp Yindex => joint.1.index-enable
|
||||
#linksp Zindex <= ppmc.0.encoder.02.index-enable
|
||||
#linksp Zindex => joint.2.index-enable
|
||||
|
||||
#
|
||||
# Connect I/O controller I/Os
|
||||
#
|
||||
|
||||
# connect e-stop write/sense to I/O controller
|
||||
# and univstep's fault with estop's output, so estop FF is reset, but
|
||||
# prevent continued estop signal from univstep from holding FF cleared
|
||||
net ppmcEstop ppmc.0.din.15.in-not
|
||||
net ppmcEstop and2.0.in0
|
||||
net EstopOkIn estop-latch.0.fault-in
|
||||
net EstopOkIn and2.0.out
|
||||
net EstopOkOut <= ppmc.0.dout.07.out
|
||||
net EstopOkOut iocontrol.0.emc-enable-in
|
||||
net EstopOkOut estop-latch.0.ok-out
|
||||
net EstopOkOut and2.0.in1
|
||||
net emc-estop-out iocontrol.0.user-enable-out
|
||||
net emc-estop-out estop-latch.0.ok-in
|
||||
net emc-estop-reset iocontrol.0.user-request-enable
|
||||
net emc-estop-reset estop-latch.0.reset
|
||||
|
||||
# connect spindle fwd/rev to I/O controller
|
||||
net SpindleFwd <= ppmc.0.dout.00.out
|
||||
net SpindleFwd => spindle.0.forward
|
||||
net SpindleRev <= ppmc.0.dout.01.out
|
||||
net SpindleRev => spindle.0.reverse
|
||||
|
||||
# connect spindle brake to I/O controller
|
||||
net SpindleBrakeOn <= ppmc.0.dout.02.out
|
||||
net SpindleBrakeOn => spindle.0.brake
|
||||
|
||||
# connect mist/flood coolant to I/O controller
|
||||
net MistOn <= ppmc.0.dout.03.out
|
||||
net MistOn => iocontrol.0.coolant-mist
|
||||
net FloodOn <= ppmc.0.dout.04.out
|
||||
net FloodOn => iocontrol.0.coolant-flood
|
||||
41
configs/by_interface/pico/USC_encod/univstep_load.hal
Normal file
41
configs/by_interface/pico/USC_encod/univstep_load.hal
Normal file
@@ -0,0 +1,41 @@
|
||||
# sample file pulls all load commands into a single file
|
||||
# when emc2 starts it loads iocontrol
|
||||
|
||||
# kinematics
|
||||
loadrt [KINS]KINEMATICS
|
||||
# motion controller, get name and thread periods from ini file
|
||||
loadrt [EMCMOT]EMCMOT servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[KINS]JOINTS
|
||||
|
||||
# next load the PID module, for four PID loops
|
||||
loadrt pid num_chan=4
|
||||
|
||||
# install driver
|
||||
# if the stepper controller is not connected to the standard parallel port
|
||||
# at address 0x378 add port_addr="0x1234" after a space to the following line
|
||||
# on LinuxCNC versions 2.7.9 and above, a parameter allows you to change the
|
||||
# way the EPP port is controlled. For PCIe cards using the NetMos 990x
|
||||
# chips, append epp_dir=1 to the end of the following line
|
||||
|
||||
loadrt hal_ppmc
|
||||
|
||||
# make some signals for the scope for tuning.
|
||||
loadrt ddt count=4
|
||||
# add components for E-stop logic
|
||||
loadrt estop_latch count=1
|
||||
loadrt and2 count=1
|
||||
|
||||
# set up the realtime thread
|
||||
# read inputs first
|
||||
addf ppmc.0.read servo-thread
|
||||
# then run the motion controller
|
||||
addf motion-command-handler servo-thread
|
||||
addf and2.0 servo-thread
|
||||
addf estop-latch.0 servo-thread
|
||||
addf motion-controller servo-thread
|
||||
# then the PID loops
|
||||
addf pid.0.do-pid-calcs servo-thread
|
||||
addf pid.1.do-pid-calcs servo-thread
|
||||
addf pid.2.do-pid-calcs servo-thread
|
||||
addf pid.3.do-pid-calcs servo-thread
|
||||
# write outputs last
|
||||
addf ppmc.0.write servo-thread
|
||||
47
configs/by_interface/pico/USC_encod/univstep_motion.hal
Normal file
47
configs/by_interface/pico/USC_encod/univstep_motion.hal
Normal file
@@ -0,0 +1,47 @@
|
||||
# HAL config file for Pico Systems USC board with encoders
|
||||
|
||||
# set sane pulse timing - these are basically Gecko numbers
|
||||
# both pulse width and space are set to 3.5 uS, to prevent
|
||||
# problems if the outputs are inverted externally
|
||||
setp ppmc.0.stepgen.00-03.pulse-width-ns 3500
|
||||
setp ppmc.0.stepgen.00-03.pulse-space-min-ns 3500
|
||||
# setup time is set to 1 uS
|
||||
setp ppmc.0.stepgen.00-03.setup-time-ns 1000
|
||||
|
||||
# connect position feedback signals to encoders
|
||||
net Xpos-fb <= ppmc.0.encoder.00.position
|
||||
net Ypos-fb <= ppmc.0.encoder.01.position
|
||||
net Zpos-fb <= ppmc.0.encoder.02.position
|
||||
net Apos-fb <= ppmc.0.encoder.03.position
|
||||
|
||||
# get feedback scaling from ini file
|
||||
setp ppmc.0.encoder.00.scale [JOINT_0]INPUT_SCALE
|
||||
setp ppmc.0.encoder.01.scale [JOINT_1]INPUT_SCALE
|
||||
setp ppmc.0.encoder.02.scale [JOINT_2]INPUT_SCALE
|
||||
setp ppmc.0.encoder.03.scale [JOINT_3]INPUT_SCALE
|
||||
|
||||
# connect PID output signals to step generators
|
||||
net Xoutput => ppmc.0.stepgen.00.velocity
|
||||
net Youtput => ppmc.0.stepgen.01.velocity
|
||||
net Zoutput => ppmc.0.stepgen.02.velocity
|
||||
net Aoutput => ppmc.0.stepgen.03.velocity
|
||||
|
||||
# connect axis enables to step generators
|
||||
net Xenable => ppmc.0.stepgen.00.enable
|
||||
net Yenable => ppmc.0.stepgen.01.enable
|
||||
net Zenable => ppmc.0.stepgen.02.enable
|
||||
net Aenable => ppmc.0.stepgen.03.enable
|
||||
|
||||
# set output scaling from ini file
|
||||
# input and output scales should (normally) be the same for a USC
|
||||
setp ppmc.0.stepgen.00.scale [JOINT_0]OUTPUT_SCALE
|
||||
setp ppmc.0.stepgen.01.scale [JOINT_1]OUTPUT_SCALE
|
||||
setp ppmc.0.stepgen.02.scale [JOINT_2]OUTPUT_SCALE
|
||||
setp ppmc.0.stepgen.03.scale [JOINT_3]OUTPUT_SCALE
|
||||
|
||||
# add a couple of tuning test links
|
||||
# if these are useful will want to add them to the other axes as well
|
||||
# or make these setup with the tuning script
|
||||
net Xoutput ddt.0.in
|
||||
net Xpos-fb ddt.1.in
|
||||
|
||||
95
configs/by_interface/pico/USC_encod/univstep_servo.hal
Normal file
95
configs/by_interface/pico/USC_encod/univstep_servo.hal
Normal file
@@ -0,0 +1,95 @@
|
||||
# HAL config file for servos -- expanded from core_servo.hal
|
||||
# for a full four axis setup
|
||||
|
||||
# create four position feedback signals
|
||||
|
||||
# connect position feedback to PID loop
|
||||
net Xpos-fb => pid.0.feedback
|
||||
net Ypos-fb => pid.1.feedback
|
||||
net Zpos-fb => pid.2.feedback
|
||||
net Apos-fb => pid.3.feedback
|
||||
|
||||
# connect position feedback to motion module
|
||||
net Xpos-fb => joint.0.motor-pos-fb
|
||||
net Ypos-fb => joint.1.motor-pos-fb
|
||||
net Zpos-fb => joint.2.motor-pos-fb
|
||||
net Apos-fb => joint.3.motor-pos-fb
|
||||
|
||||
# create PID to DAC output signals
|
||||
|
||||
# connect output signals to output of PID loops
|
||||
net Xoutput <= pid.0.output
|
||||
net Youtput <= pid.1.output
|
||||
net Zoutput <= pid.2.output
|
||||
net Aoutput <= pid.3.output
|
||||
|
||||
# set PID loop output limits to +/-1.00
|
||||
setp pid.0.maxoutput [JOINT_0]PID_MAX_VEL
|
||||
setp pid.1.maxoutput [JOINT_1]PID_MAX_VEL
|
||||
setp pid.2.maxoutput [JOINT_2]PID_MAX_VEL
|
||||
setp pid.3.maxoutput [JOINT_3]PID_MAX_VEL
|
||||
|
||||
# set PID loop gains
|
||||
setp pid.0.Pgain [JOINT_0]P
|
||||
setp pid.0.Igain [JOINT_0]I
|
||||
setp pid.0.Dgain [JOINT_0]D
|
||||
setp pid.0.bias [JOINT_0]BIAS
|
||||
setp pid.0.FF0 [JOINT_0]FF0
|
||||
setp pid.0.FF1 [JOINT_0]FF1
|
||||
setp pid.0.FF2 [JOINT_0]FF2
|
||||
setp pid.0.deadband [JOINT_0]DEADBAND
|
||||
|
||||
setp pid.1.Pgain [JOINT_1]P
|
||||
setp pid.1.Igain [JOINT_1]I
|
||||
setp pid.1.Dgain [JOINT_1]D
|
||||
setp pid.1.bias [JOINT_1]BIAS
|
||||
setp pid.1.FF0 [JOINT_1]FF0
|
||||
setp pid.1.FF1 [JOINT_1]FF1
|
||||
setp pid.1.FF2 [JOINT_1]FF2
|
||||
setp pid.1.deadband [JOINT_1]DEADBAND
|
||||
|
||||
setp pid.2.Pgain [JOINT_2]P
|
||||
setp pid.2.Igain [JOINT_2]I
|
||||
setp pid.2.Dgain [JOINT_2]D
|
||||
setp pid.2.bias [JOINT_2]BIAS
|
||||
setp pid.2.FF0 [JOINT_2]FF0
|
||||
setp pid.2.FF1 [JOINT_2]FF1
|
||||
setp pid.2.FF2 [JOINT_2]FF2
|
||||
setp pid.2.deadband [JOINT_2]DEADBAND
|
||||
|
||||
setp pid.3.Pgain [JOINT_3]P
|
||||
setp pid.3.Igain [JOINT_3]I
|
||||
setp pid.3.Dgain [JOINT_3]D
|
||||
setp pid.3.bias [JOINT_3]BIAS
|
||||
setp pid.3.FF0 [JOINT_3]FF0
|
||||
setp pid.3.FF1 [JOINT_3]FF1
|
||||
setp pid.3.FF2 [JOINT_3]FF2
|
||||
setp pid.3.deadband [JOINT_3]DEADBAND
|
||||
|
||||
# create four position command signals
|
||||
|
||||
# connect position commands to motion controller
|
||||
net Xpos-cmd <= joint.0.motor-pos-cmd
|
||||
net Ypos-cmd <= joint.1.motor-pos-cmd
|
||||
net Zpos-cmd <= joint.2.motor-pos-cmd
|
||||
net Apos-cmd <= joint.3.motor-pos-cmd
|
||||
|
||||
# connect position commands to PID input
|
||||
net Xpos-cmd => pid.0.command
|
||||
net Ypos-cmd => pid.1.command
|
||||
net Zpos-cmd => pid.2.command
|
||||
net Apos-cmd => pid.3.command
|
||||
|
||||
# create bit signals to enable/disable the PID loops
|
||||
|
||||
# connect the signals to the motion controller
|
||||
net Xenable <= joint.0.amp-enable-out
|
||||
net Yenable <= joint.1.amp-enable-out
|
||||
net Zenable <= joint.2.amp-enable-out
|
||||
net Aenable <= joint.3.amp-enable-out
|
||||
|
||||
# connect the signals to the PID blocks
|
||||
net Xenable => pid.0.enable
|
||||
net Yenable => pid.1.enable
|
||||
net Zenable => pid.2.enable
|
||||
net Aenable => pid.3.enable
|
||||
1
configs/by_interface/pico/ppmc/README
Normal file
1
configs/by_interface/pico/ppmc/README
Normal file
@@ -0,0 +1 @@
|
||||
A configuration for the PPMC board set from Pico systems. This configuration includes motion connections and an IO set for handling estop within HAL. The IO configuration in ppmc_io.hal DOES include signal connections for some bridgeportio like signal handling.
|
||||
260
configs/by_interface/pico/ppmc/ppmc.ini
Normal file
260
configs/by_interface/pico/ppmc/ppmc.ini
Normal file
@@ -0,0 +1,260 @@
|
||||
# EMC controller parameters for generic controller. Make these what you need
|
||||
# for your system.
|
||||
# General note: Comments can either be preceded with a # or ; - either is
|
||||
# acceptable, although # is in keeping with most linux config files.
|
||||
# General section -------------------------------------------------------------
|
||||
|
||||
[EMC]
|
||||
# Version of this INI file
|
||||
VERSION = 1.1
|
||||
# Name of machine, for use with display, etc.
|
||||
MACHINE = LinuxCNC-PPMC
|
||||
# Debug level, 0 means no messages. See src/emc/nml_int/emcglb.h for others
|
||||
DEBUG = 0
|
||||
# DEBUG = 0x00000007
|
||||
# DEBUG = 0x7FFFFFFF
|
||||
# Sections for display options ------------------------------------------------
|
||||
|
||||
[DISPLAY]
|
||||
# Name of display program, e.g., axis
|
||||
DISPLAY = axis
|
||||
# DISPLAY = tklinuxcnc
|
||||
# Cycle time, in seconds, that display will sleep between polls
|
||||
CYCLE_TIME = 0.100
|
||||
# Path to help file
|
||||
HELP_FILE = tklinuxcnc.txt
|
||||
# Initial display setting for position, RELATIVE or MACHINE
|
||||
POSITION_OFFSET = RELATIVE
|
||||
# Initial display setting for position, COMMANDED or ACTUAL
|
||||
POSITION_FEEDBACK = ACTUAL
|
||||
# Highest value that will be allowed for feed override, 1.0 = 100%
|
||||
MAX_FEED_OVERRIDE = 1.2
|
||||
# Prefix to be used
|
||||
PROGRAM_PREFIX = ../../nc_files/
|
||||
# Introductory graphic
|
||||
INTRO_GRAPHIC = linuxcnc.gif
|
||||
INTRO_TIME = 2
|
||||
# Enable popup balloon help
|
||||
BALLOON_HELP = 1
|
||||
# Task controller section -----------------------------------------------------
|
||||
|
||||
[FILTER]
|
||||
#No Content
|
||||
|
||||
[RS274NGC]
|
||||
# File containing interpreter variables
|
||||
PARAMETER_FILE = ppmc.var
|
||||
# Motion control section ------------------------------------------------------
|
||||
|
||||
[EMCMOT]
|
||||
EMCMOT = motmod
|
||||
# Timeout for comm to emcmot, in seconds
|
||||
COMM_TIMEOUT = 1.0
|
||||
# Servo task period, in nanoseconds
|
||||
SERVO_PERIOD = 1000000
|
||||
# Hardware Abstraction Layer section --------------------------------------------------
|
||||
|
||||
[TASK]
|
||||
# Name of task controller program, e.g., milltask
|
||||
TASK = milltask
|
||||
# Cycle time, in seconds, that task controller will sleep between polls
|
||||
CYCLE_TIME = 0.010
|
||||
# Part program interpreter section --------------------------------------------
|
||||
|
||||
[HAL]
|
||||
# The run script first uses halcmd to execute any HALFILE
|
||||
# files, and then to execute any individual HALCMD commands.
|
||||
#
|
||||
# list of hal config files to run through halcmd
|
||||
# files are executed in the order in which they appear
|
||||
HALFILE = ppmc_load.hal
|
||||
HALFILE = ppmc_servo.hal
|
||||
HALFILE = ppmc_motion.hal
|
||||
HALFILE = ppmc_io.hal
|
||||
# list of halcmd commands to execute
|
||||
# commands are executed in the order in which they appear
|
||||
#HALCMD = save neta
|
||||
# Trajectory planner section --------------------------------------------------
|
||||
|
||||
[HALUI]
|
||||
#No Content
|
||||
|
||||
[TRAJ]
|
||||
# COORDINATES = X Y Z R P W
|
||||
COORDINATES = X Y Z A
|
||||
HOME = 0 0 0 0
|
||||
LINEAR_UNITS = inch
|
||||
ANGULAR_UNITS = degree
|
||||
DEFAULT_LINEAR_VELOCITY = 0.15
|
||||
MAX_LINEAR_VELOCITY = 1.20
|
||||
DEFAULT_LINEAR_ACCELERATION = 1.5
|
||||
MAX_LINEAR_ACCELERATION = 1.5
|
||||
# Axes sections ---------------------------------------------------------------
|
||||
# Scaling: The OUTPUT_SCALE should be the speed
|
||||
# in UNITS/second (inches/sec or mm/sec) that would be
|
||||
# reached if the PWM duty cycle was 100%. It depends on
|
||||
# the power supply voltage, motor RPM/Volt factor, and
|
||||
# gearing/screw pitch. For example:
|
||||
#
|
||||
# Power supply voltage 50V
|
||||
# Motor RPM/V 1000RPM/24V
|
||||
# Gearing: 2 motor revs per 1 screw rev
|
||||
# Screw pitch: 0.2" per turn
|
||||
#
|
||||
# Max motor speed = 50V * 1000RPM/24V = 2083 RPM
|
||||
# Max screw speed = 2083RPM * 1(screw)/2(motor) = 1041RPM
|
||||
# Max table speed = 1041RPM * 0.2"/turn = 208 in/min
|
||||
# Max table speed = 208 in/min / 60 seconds = 3.47 inches/sec
|
||||
#
|
||||
# Since max speed is reached at 100% duty cycle, OUTPUT_SCALE
|
||||
# should be 3.47
|
||||
# First axis
|
||||
|
||||
[EMCIO]
|
||||
# tool table file
|
||||
TOOL_TABLE = ppmc.tbl
|
||||
# section for external NML server parameters ----------------------------------
|
||||
|
||||
[KINS]
|
||||
KINEMATICS = trivkins
|
||||
JOINTS = 4
|
||||
|
||||
[AXIS_X]
|
||||
MIN_LIMIT = -10.0
|
||||
MAX_LIMIT = 10.0
|
||||
MAX_VELOCITY = 1.20
|
||||
MAX_ACCELERATION = 1.25
|
||||
|
||||
[JOINT_0]
|
||||
TYPE = LINEAR
|
||||
HOME = 0.000
|
||||
MAX_VELOCITY = 1.20
|
||||
MAX_ACCELERATION = 1.25
|
||||
PID_MAX_VEL = 1.2
|
||||
BACKLASH = 0.000
|
||||
INPUT_SCALE = -128000.0
|
||||
OUTPUT_SCALE = -1.0
|
||||
MIN_LIMIT = -10.0
|
||||
MAX_LIMIT = 10.0
|
||||
FERROR = 0.001
|
||||
MIN_FERROR = 0.005
|
||||
HOME_OFFSET = 0.0
|
||||
HOME_SEARCH_VEL = 0.0
|
||||
HOME_LATCH_VEL = 0.0
|
||||
HOME_USE_INDEX = NO
|
||||
HOME_IGNORE_LIMITS = NO
|
||||
DEADBAND = 1e-06
|
||||
P = 800.0
|
||||
I = 25.0
|
||||
D = 20.0
|
||||
BIAS = 0.0
|
||||
FF0 = 0.0
|
||||
FF1 = 1.0
|
||||
FF2 = 0.0
|
||||
# Second axis
|
||||
|
||||
[AXIS_Y]
|
||||
MIN_LIMIT = -10.0
|
||||
MAX_LIMIT = 10.0
|
||||
MAX_VELOCITY = 1.20
|
||||
MAX_ACCELERATION = 1.25
|
||||
|
||||
[JOINT_1]
|
||||
TYPE = LINEAR
|
||||
HOME = 0.000
|
||||
MAX_VELOCITY = 1.20
|
||||
MAX_ACCELERATION = 1.25
|
||||
PID_MAX_VEL = 1.2
|
||||
BACKLASH = 0.000
|
||||
INPUT_SCALE = -128000.0
|
||||
OUTPUT_SCALE = -1.0
|
||||
MIN_LIMIT = -10.0
|
||||
MAX_LIMIT = 10.0
|
||||
FERROR = 0.001
|
||||
MIN_FERROR = 0.005
|
||||
HOME_OFFSET = 0.0
|
||||
HOME_SEARCH_VEL = 0.0
|
||||
HOME_LATCH_VEL = 0.0
|
||||
HOME_USE_INDEX = NO
|
||||
HOME_IGNORE_LIMITS = NO
|
||||
DEADBAND = 1e-06
|
||||
P = 800.0
|
||||
I = 25.0
|
||||
D = 10.0
|
||||
BIAS = 0.0
|
||||
FF0 = 0.0
|
||||
FF1 = 1.0
|
||||
FF2 = 0.0
|
||||
# Third axis
|
||||
|
||||
[AXIS_Z]
|
||||
MIN_LIMIT = -10.0
|
||||
MAX_LIMIT = 10.0
|
||||
MAX_VELOCITY = 1.20
|
||||
MAX_ACCELERATION = 1.25
|
||||
|
||||
[JOINT_2]
|
||||
TYPE = LINEAR
|
||||
HOME = 0.0
|
||||
MAX_VELOCITY = 1.20
|
||||
MAX_ACCELERATION = 1.25
|
||||
PID_MAX_VEL = 1.2
|
||||
BACKLASH = 0.000
|
||||
INPUT_SCALE = 128000.0
|
||||
OUTPUT_SCALE = 1.0
|
||||
MIN_LIMIT = -10.0
|
||||
MAX_LIMIT = 10.0
|
||||
FERROR = 0.001
|
||||
MIN_FERROR = 0.005
|
||||
HOME_OFFSET = 0.0
|
||||
HOME_SEARCH_VEL = 0.0
|
||||
HOME_LATCH_VEL = 0.0
|
||||
HOME_USE_INDEX = NO
|
||||
HOME_IGNORE_LIMITS = NO
|
||||
DEADBAND = 8e-05
|
||||
P = 800.0
|
||||
I = 25.0
|
||||
D = 10.0
|
||||
BIAS = 0.0
|
||||
FF0 = 0.0
|
||||
FF1 = 1.0
|
||||
FF2 = 0.0
|
||||
# Fourth axis
|
||||
|
||||
[AXIS_A]
|
||||
MIN_LIMIT = -3600.0
|
||||
MAX_LIMIT = 3600.0
|
||||
MAX_VELOCITY = 65
|
||||
MAX_ACCELERATION = 20.0
|
||||
|
||||
[JOINT_3]
|
||||
TYPE = ANGULAR
|
||||
HOME = 0.0
|
||||
MAX_VELOCITY = 65
|
||||
MAX_ACCELERATION = 20.0
|
||||
PID_MAX_VEL = 66.0
|
||||
BACKLASH = 0.000
|
||||
INPUT_SCALE = 1111.111
|
||||
OUTPUT_SCALE = 5.0
|
||||
MIN_LIMIT = -3600.0
|
||||
MAX_LIMIT = 3600.0
|
||||
FERROR = 1.010
|
||||
MIN_FERROR = 1.001
|
||||
HOME_OFFSET = 0.0
|
||||
HOME_SEARCH_VEL = 0.0
|
||||
HOME_LATCH_VEL = 0.0
|
||||
HOME_USE_INDEX = NO
|
||||
HOME_IGNORE_LIMITS = NO
|
||||
DEADBAND = 0.046
|
||||
P = 150.0
|
||||
I = 100.0
|
||||
D = 0.1
|
||||
BIAS = 0.0
|
||||
FF0 = 0.0
|
||||
FF1 = 1.0
|
||||
FF2 = 1.0
|
||||
# section for main IO controller parameters -----------------------------------
|
||||
|
||||
[EMCSERVER]
|
||||
# Uncomment the following line if you need to run a remote GUI.
|
||||
# EMCSERVER = emcsvr
|
||||
4
configs/by_interface/pico/ppmc/ppmc.tbl
Normal file
4
configs/by_interface/pico/ppmc/ppmc.tbl
Normal file
@@ -0,0 +1,4 @@
|
||||
T1 P1 D0.125000 Z+0.511000 ;1/8 end mill
|
||||
T2 P2 D0.062500 Z+0.100000 ;1/16 end mill
|
||||
T3 P3 D0.201000 Z+1.273000 ;#7 tap drill
|
||||
T99999 P99999 Z+0.100000 ;big tool number
|
||||
88
configs/by_interface/pico/ppmc/ppmc_io.hal
Normal file
88
configs/by_interface/pico/ppmc/ppmc_io.hal
Normal file
@@ -0,0 +1,88 @@
|
||||
# HAL config file for Pico Systems USC board
|
||||
#
|
||||
# Connect motion controller I/Os
|
||||
#
|
||||
|
||||
# connect limit/home switch outputs to motion controller
|
||||
net Xminlim <= ppmc.0.din.01.in
|
||||
net Xminlim => joint.0.neg-lim-sw-in
|
||||
net Xmaxlim <= ppmc.0.din.02.in
|
||||
net Xmaxlim => joint.0.pos-lim-sw-in
|
||||
net Xhome <= ppmc.0.din.00.in
|
||||
net Xhome => joint.0.home-sw-in
|
||||
|
||||
net Yminlim <= ppmc.0.din.05.in
|
||||
net Yminlim => joint.1.neg-lim-sw-in
|
||||
net Ymaxlim <= ppmc.0.din.06.in
|
||||
net Ymaxlim => joint.1.pos-lim-sw-in
|
||||
net Yhome <= ppmc.0.din.04.in
|
||||
net Yhome => joint.1.home-sw-in
|
||||
|
||||
net Zminlim <= ppmc.0.din.09.in
|
||||
net Zminlim => joint.2.neg-lim-sw-in
|
||||
net Zmaxlim <= ppmc.0.din.10.in
|
||||
net Zmaxlim => joint.2.pos-lim-sw-in
|
||||
net Zhome <= ppmc.0.din.08.in
|
||||
net Zhome => joint.2.home-sw-in
|
||||
|
||||
net Aminlim <= ppmc.0.din.12.in
|
||||
net Aminlim => joint.3.neg-lim-sw-in
|
||||
net Amaxlim <= ppmc.0.din.13.in
|
||||
net Amaxlim => joint.3.pos-lim-sw-in
|
||||
net Ahome <= ppmc.0.din.11.in
|
||||
net Ahome => joint.3.home-sw-in
|
||||
|
||||
|
||||
# connect index pulses to motion controller
|
||||
# uncomment if you have encoder index signals
|
||||
#linksp Xindex <= ppmc.0.encoder.00.index-enable
|
||||
#linksp Xindex => joint.0.index-enable
|
||||
#linksp Yindex <= ppmc.0.encoder.01.index-enable
|
||||
#linksp Yindex => joint.1.index-enable
|
||||
#linksp Zindex <= ppmc.0.encoder.02.index-enable
|
||||
#linksp Zindex => joint.2.index-enable
|
||||
|
||||
#
|
||||
# Connect I/O controller I/Os
|
||||
#
|
||||
|
||||
# connect e-stop write/sense to I/O controller
|
||||
# and ppmc's fault with estop's output, so estop FF is reset, but
|
||||
# prevent continued estop signal from ppmc from holding FF cleared
|
||||
net ppmcEstop ppmc.0.din.estop.in
|
||||
net ppmcEstop and2.0.in0
|
||||
net EstopOkIn estop-latch.0.fault-in
|
||||
net EstopOkIn and2.0.out
|
||||
net EstopOkOut ppmc.0.dout.07.out
|
||||
net EstopOkOut ppmc.0.dout.Estop.out
|
||||
net EstopOkOut iocontrol.0.emc-enable-in
|
||||
net EstopOkOut estop-latch.0.ok-out
|
||||
net EstopOkOut and2.0.in1
|
||||
net emc-estop-out iocontrol.0.user-enable-out
|
||||
net emc-estop-out estop-latch.0.ok-in
|
||||
net emc-estop-reset iocontrol.0.user-request-enable
|
||||
net emc-estop-reset estop-latch.0.reset
|
||||
|
||||
#newsig EstopSense bit
|
||||
#newsig EstopWrite bit
|
||||
#linksp EstopSense <= ppmc.0.din.estop.in-not
|
||||
#linksp EstopSense => iocontrol.0.emc-enable-in
|
||||
#linksp EstopWrite <= ppmc.0.dout.07.out
|
||||
#linksp EstopWrite => iocontrol.0.user-enable-out
|
||||
#estop may need to be inverted
|
||||
|
||||
# connect spindle fwd/rev to I/O controller
|
||||
net SpindleFwd <= ppmc.0.dout.00.out
|
||||
net SpindleFwd => spindle.0.forward
|
||||
net SpindleRev <= ppmc.0.dout.01.out
|
||||
net SpindleRev => spindle.0.reverse
|
||||
|
||||
# connect spindle brake to I/O controller
|
||||
net SpindleBrakeOn <= ppmc.0.dout.02.out
|
||||
net SpindleBrakeOn => spindle.0.brake
|
||||
|
||||
# connect mist/flood coolant to I/O controller
|
||||
net MistOn <= ppmc.0.dout.03.out
|
||||
net MistOn => iocontrol.0.coolant-mist
|
||||
net FloodOn <= ppmc.0.dout.04.out
|
||||
net FloodOn => iocontrol.0.coolant-flood
|
||||
39
configs/by_interface/pico/ppmc/ppmc_load.hal
Normal file
39
configs/by_interface/pico/ppmc/ppmc_load.hal
Normal file
@@ -0,0 +1,39 @@
|
||||
# sample file pulls all load commands into a single file
|
||||
|
||||
# kinematics
|
||||
loadrt [KINS]KINEMATICS
|
||||
|
||||
#motion controller, get name and thread periods from ini file
|
||||
loadrt [EMCMOT]EMCMOT servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[KINS]JOINTS
|
||||
|
||||
# next load the PID module, for four PID loops
|
||||
loadrt pid num_chan=4
|
||||
|
||||
# install Universal PWM Controller driver
|
||||
# if the parallel port the PPMC is connected to is not the standard 0x378, add
|
||||
# port_addr="0x1234" to the end of the following line, separated by a space
|
||||
# on LinuxCNC versions 2.7.9 and above, a parameter allows you to change the
|
||||
# way the EPP port is controlled. For PCIe cards using the NetMos 990x
|
||||
# chips, append epp_dir=1 to the end of the following line
|
||||
loadrt hal_ppmc
|
||||
|
||||
# make some signals for the scope for tuning.
|
||||
loadrt ddt count=4
|
||||
loadrt estop_latch count=1
|
||||
loadrt and2 count=1
|
||||
|
||||
# set up the realtime thread
|
||||
# read inputs first
|
||||
addf ppmc.0.read servo-thread
|
||||
# then run the motion controller
|
||||
addf motion-command-handler servo-thread
|
||||
addf and2.0 servo-thread
|
||||
addf estop-latch.0 servo-thread
|
||||
addf motion-controller servo-thread
|
||||
# then the PID loops
|
||||
addf pid.0.do-pid-calcs servo-thread
|
||||
addf pid.1.do-pid-calcs servo-thread
|
||||
addf pid.2.do-pid-calcs servo-thread
|
||||
addf pid.3.do-pid-calcs servo-thread
|
||||
# write outputs last
|
||||
addf ppmc.0.write servo-thread
|
||||
32
configs/by_interface/pico/ppmc/ppmc_motion.hal
Normal file
32
configs/by_interface/pico/ppmc/ppmc_motion.hal
Normal file
@@ -0,0 +1,32 @@
|
||||
# HAL config file for Pico Systems UPC board
|
||||
#
|
||||
|
||||
# connect position feedback signals to encoders
|
||||
net Xpos-fb <= ppmc.0.encoder.00.position
|
||||
net Ypos-fb <= ppmc.0.encoder.01.position
|
||||
net Zpos-fb <= ppmc.0.encoder.02.position
|
||||
net Apos-fb <= ppmc.0.encoder.03.position
|
||||
|
||||
# get feedback scaling from ini file
|
||||
setp ppmc.0.encoder.00.scale [JOINT_0]INPUT_SCALE
|
||||
setp ppmc.0.encoder.01.scale [JOINT_1]INPUT_SCALE
|
||||
setp ppmc.0.encoder.02.scale [JOINT_2]INPUT_SCALE
|
||||
setp ppmc.0.encoder.03.scale [JOINT_3]INPUT_SCALE
|
||||
|
||||
# connect PID output signals to step generators
|
||||
net Xoutput => ppmc.0.DAC.00.value
|
||||
net Youtput => ppmc.0.DAC.01.value
|
||||
net Zoutput => ppmc.0.DAC.02.value
|
||||
net Aoutput => ppmc.0.DAC.03.value
|
||||
|
||||
# set output scaling from ini file
|
||||
setp ppmc.0.DAC.00.scale [JOINT_0]OUTPUT_SCALE
|
||||
setp ppmc.0.DAC.01.scale [JOINT_1]OUTPUT_SCALE
|
||||
setp ppmc.0.DAC.02.scale [JOINT_2]OUTPUT_SCALE
|
||||
setp ppmc.0.DAC.03.scale [JOINT_3]OUTPUT_SCALE
|
||||
|
||||
# add a couple of tuning test links
|
||||
# if these are useful will want to add them to the other axes as well
|
||||
# or make these setup with the tuning script
|
||||
net Xoutput ddt.0.in
|
||||
net Xpos-fb ddt.1.in
|
||||
95
configs/by_interface/pico/ppmc/ppmc_servo.hal
Normal file
95
configs/by_interface/pico/ppmc/ppmc_servo.hal
Normal file
@@ -0,0 +1,95 @@
|
||||
# HAL config file for servos -- expanded from core_servo.hal
|
||||
# for a full four axis setup
|
||||
|
||||
# create four position feedback signals
|
||||
|
||||
# connect position feedback to PID loop
|
||||
net Xpos-fb => pid.0.feedback
|
||||
net Ypos-fb => pid.1.feedback
|
||||
net Zpos-fb => pid.2.feedback
|
||||
net Apos-fb => pid.3.feedback
|
||||
|
||||
# connect position feedback to motion module
|
||||
net Xpos-fb => joint.0.motor-pos-fb
|
||||
net Ypos-fb => joint.1.motor-pos-fb
|
||||
net Zpos-fb => joint.2.motor-pos-fb
|
||||
net Apos-fb => joint.3.motor-pos-fb
|
||||
|
||||
# create PID to DAC output signals
|
||||
|
||||
# connect output signals to output of PID loops
|
||||
net Xoutput <= pid.0.output
|
||||
net Youtput <= pid.1.output
|
||||
net Zoutput <= pid.2.output
|
||||
net Aoutput <= pid.3.output
|
||||
|
||||
# set PID loop output limits to +/-1.00
|
||||
setp pid.0.maxoutput [JOINT_0]PID_MAX_VEL
|
||||
setp pid.1.maxoutput [JOINT_1]PID_MAX_VEL
|
||||
setp pid.2.maxoutput [JOINT_2]PID_MAX_VEL
|
||||
setp pid.3.maxoutput [JOINT_3]PID_MAX_VEL
|
||||
|
||||
# set PID loop gains
|
||||
setp pid.0.Pgain [JOINT_0]P
|
||||
setp pid.0.Igain [JOINT_0]I
|
||||
setp pid.0.Dgain [JOINT_0]D
|
||||
setp pid.0.bias [JOINT_0]BIAS
|
||||
setp pid.0.FF0 [JOINT_0]FF0
|
||||
setp pid.0.FF1 [JOINT_0]FF1
|
||||
setp pid.0.FF2 [JOINT_0]FF2
|
||||
setp pid.0.deadband [JOINT_0]DEADBAND
|
||||
|
||||
setp pid.1.Pgain [JOINT_1]P
|
||||
setp pid.1.Igain [JOINT_1]I
|
||||
setp pid.1.Dgain [JOINT_1]D
|
||||
setp pid.1.bias [JOINT_1]BIAS
|
||||
setp pid.1.FF0 [JOINT_1]FF0
|
||||
setp pid.1.FF1 [JOINT_1]FF1
|
||||
setp pid.1.FF2 [JOINT_1]FF2
|
||||
setp pid.1.deadband [JOINT_1]DEADBAND
|
||||
|
||||
setp pid.2.Pgain [JOINT_2]P
|
||||
setp pid.2.Igain [JOINT_2]I
|
||||
setp pid.2.Dgain [JOINT_2]D
|
||||
setp pid.2.bias [JOINT_2]BIAS
|
||||
setp pid.2.FF0 [JOINT_2]FF0
|
||||
setp pid.2.FF1 [JOINT_2]FF1
|
||||
setp pid.2.FF2 [JOINT_2]FF2
|
||||
setp pid.2.deadband [JOINT_2]DEADBAND
|
||||
|
||||
setp pid.3.Pgain [JOINT_3]P
|
||||
setp pid.3.Igain [JOINT_3]I
|
||||
setp pid.3.Dgain [JOINT_3]D
|
||||
setp pid.3.bias [JOINT_3]BIAS
|
||||
setp pid.3.FF0 [JOINT_3]FF0
|
||||
setp pid.3.FF1 [JOINT_3]FF1
|
||||
setp pid.3.FF2 [JOINT_3]FF2
|
||||
setp pid.3.deadband [JOINT_3]DEADBAND
|
||||
|
||||
# create four position command signals
|
||||
|
||||
# connect position commands to motion controller
|
||||
net Xpos-cmd <= joint.0.motor-pos-cmd
|
||||
net Ypos-cmd <= joint.1.motor-pos-cmd
|
||||
net Zpos-cmd <= joint.2.motor-pos-cmd
|
||||
net Apos-cmd <= joint.3.motor-pos-cmd
|
||||
|
||||
# connect position commands to PID input
|
||||
net Xpos-cmd => pid.0.command
|
||||
net Ypos-cmd => pid.1.command
|
||||
net Zpos-cmd => pid.2.command
|
||||
net Apos-cmd => pid.3.command
|
||||
|
||||
# create bit signals to enable/disable the PID loops
|
||||
|
||||
# connect the signals to the motion controller
|
||||
net Xenable <= joint.0.amp-enable-out
|
||||
net Yenable <= joint.1.amp-enable-out
|
||||
net Zenable <= joint.2.amp-enable-out
|
||||
net Aenable <= joint.3.amp-enable-out
|
||||
|
||||
# connect the signals to the PID blocks
|
||||
net Xenable => pid.0.enable
|
||||
net Yenable => pid.1.enable
|
||||
net Zenable => pid.2.enable
|
||||
net Aenable => pid.3.enable
|
||||
8
configs/by_interface/pico/ppmc_vel/README
Normal file
8
configs/by_interface/pico/ppmc_vel/README
Normal file
@@ -0,0 +1,8 @@
|
||||
A configuration for the PPMC board set from Pico
|
||||
systems. This configuration includes motion connections
|
||||
and an IO set for handling estop within HAL. The IO
|
||||
configuration in ppmc_io.hal DOES include signal
|
||||
connections for some bridgeportio like signal handling.
|
||||
This configs set includes the option for encoder
|
||||
velocity estimation via timestamping, and tells how to
|
||||
change the encoder digital filter frequency.
|
||||
260
configs/by_interface/pico/ppmc_vel/ppmc.ini
Normal file
260
configs/by_interface/pico/ppmc_vel/ppmc.ini
Normal file
@@ -0,0 +1,260 @@
|
||||
# EMC controller parameters for generic controller. Make these what you need
|
||||
# for your system.
|
||||
# General note: Comments can either be preceded with a # or ; - either is
|
||||
# acceptable, although # is in keeping with most linux config files.
|
||||
# General section -------------------------------------------------------------
|
||||
|
||||
[EMC]
|
||||
# Version of this INI file
|
||||
VERSION = 1.1
|
||||
# Name of machine, for use with display, etc.
|
||||
MACHINE = LinuxCNC-PPMC
|
||||
# Debug level, 0 means no messages. See src/emc/nml_int/emcglb.h for others
|
||||
DEBUG = 0
|
||||
# DEBUG = 0x00000007
|
||||
# DEBUG = 0x7FFFFFFF
|
||||
# Sections for display options ------------------------------------------------
|
||||
|
||||
[DISPLAY]
|
||||
# Name of display program, e.g., axis
|
||||
DISPLAY = axis
|
||||
# DISPLAY = tklinuxcnc
|
||||
# Cycle time, in seconds, that display will sleep between polls
|
||||
CYCLE_TIME = 0.100
|
||||
# Path to help file
|
||||
HELP_FILE = tklinuxcnc.txt
|
||||
# Initial display setting for position, RELATIVE or MACHINE
|
||||
POSITION_OFFSET = RELATIVE
|
||||
# Initial display setting for position, COMMANDED or ACTUAL
|
||||
POSITION_FEEDBACK = ACTUAL
|
||||
# Highest value that will be allowed for feed override, 1.0 = 100%
|
||||
MAX_FEED_OVERRIDE = 1.2
|
||||
# Prefix to be used
|
||||
PROGRAM_PREFIX = ../../nc_files/
|
||||
# Introductory graphic
|
||||
INTRO_GRAPHIC = linuxcnc.gif
|
||||
INTRO_TIME = 2
|
||||
# Enable popup balloon help
|
||||
BALLOON_HELP = 1
|
||||
# Task controller section -----------------------------------------------------
|
||||
|
||||
[FILTER]
|
||||
#No Content
|
||||
|
||||
[RS274NGC]
|
||||
# File containing interpreter variables
|
||||
PARAMETER_FILE = ppmc.var
|
||||
# Motion control section ------------------------------------------------------
|
||||
|
||||
[EMCMOT]
|
||||
EMCMOT = motmod
|
||||
# Timeout for comm to emcmot, in seconds
|
||||
COMM_TIMEOUT = 1.0
|
||||
# Servo task period, in nanoseconds
|
||||
SERVO_PERIOD = 1000000
|
||||
# Hardware Abstraction Layer section --------------------------------------------------
|
||||
|
||||
[TASK]
|
||||
# Name of task controller program, e.g., milltask
|
||||
TASK = milltask
|
||||
# Cycle time, in seconds, that task controller will sleep between polls
|
||||
CYCLE_TIME = 0.010
|
||||
# Part program interpreter section --------------------------------------------
|
||||
|
||||
[HAL]
|
||||
# The run script first uses halcmd to execute any HALFILE
|
||||
# files, and then to execute any individual HALCMD commands.
|
||||
#
|
||||
# list of hal config files to run through halcmd
|
||||
# files are executed in the order in which they appear
|
||||
HALFILE = ppmc_load.hal
|
||||
HALFILE = ppmc_servo.hal
|
||||
HALFILE = ppmc_motion.hal
|
||||
HALFILE = ppmc_io.hal
|
||||
# list of halcmd commands to execute
|
||||
# commands are executed in the order in which they appear
|
||||
#HALCMD = save neta
|
||||
# Trajectory planner section --------------------------------------------------
|
||||
|
||||
[HALUI]
|
||||
#No Content
|
||||
|
||||
[TRAJ]
|
||||
# COORDINATES = X Y Z R P W
|
||||
COORDINATES = X Y Z A
|
||||
HOME = 0 0 0 0
|
||||
LINEAR_UNITS = inch
|
||||
ANGULAR_UNITS = degree
|
||||
DEFAULT_LINEAR_VELOCITY = 0.15
|
||||
MAX_LINEAR_VELOCITY = 1.20
|
||||
DEFAULT_LINEAR_ACCELERATION = 1.5
|
||||
MAX_LINEAR_ACCELERATION = 1.5
|
||||
# Axes sections ---------------------------------------------------------------
|
||||
# Scaling: The OUTPUT_SCALE should be the speed
|
||||
# in UNITS/second (inches/sec or mm/sec) that would be
|
||||
# reached if the PWM duty cycle was 100%. It depends on
|
||||
# the power supply voltage, motor RPM/Volt factor, and
|
||||
# gearing/screw pitch. For example:
|
||||
#
|
||||
# Power supply voltage 50V
|
||||
# Motor RPM/V 1000RPM/24V
|
||||
# Gearing: 2 motor revs per 1 screw rev
|
||||
# Screw pitch: 0.2" per turn
|
||||
#
|
||||
# Max motor speed = 50V * 1000RPM/24V = 2083 RPM
|
||||
# Max screw speed = 2083RPM * 1(screw)/2(motor) = 1041RPM
|
||||
# Max table speed = 1041RPM * 0.2"/turn = 208 in/min
|
||||
# Max table speed = 208 in/min / 60 seconds = 3.47 inches/sec
|
||||
#
|
||||
# Since max speed is reached at 100% duty cycle, OUTPUT_SCALE
|
||||
# should be 3.47
|
||||
# First axis
|
||||
|
||||
[EMCIO]
|
||||
# tool table file
|
||||
TOOL_TABLE = ppmc.tbl
|
||||
# section for external NML server parameters ----------------------------------
|
||||
|
||||
[KINS]
|
||||
KINEMATICS = trivkins
|
||||
JOINTS = 4
|
||||
|
||||
[AXIS_X]
|
||||
MIN_LIMIT = -10.0
|
||||
MAX_LIMIT = 10.0
|
||||
MAX_VELOCITY = 1.20
|
||||
MAX_ACCELERATION = 1.25
|
||||
|
||||
[JOINT_0]
|
||||
TYPE = LINEAR
|
||||
HOME = 0.000
|
||||
MAX_VELOCITY = 1.20
|
||||
MAX_ACCELERATION = 1.25
|
||||
PID_MAX_VEL = 1.2
|
||||
BACKLASH = 0.000
|
||||
INPUT_SCALE = -128000.0
|
||||
OUTPUT_SCALE = -1.0
|
||||
MIN_LIMIT = -10.0
|
||||
MAX_LIMIT = 10.0
|
||||
FERROR = 0.001
|
||||
MIN_FERROR = 0.005
|
||||
HOME_OFFSET = 0.0
|
||||
HOME_SEARCH_VEL = 0.0
|
||||
HOME_LATCH_VEL = 0.0
|
||||
HOME_USE_INDEX = NO
|
||||
HOME_IGNORE_LIMITS = NO
|
||||
DEADBAND = 1e-06
|
||||
P = 800.0
|
||||
I = 25.0
|
||||
D = 20.0
|
||||
BIAS = 0.0
|
||||
FF0 = 0.0
|
||||
FF1 = 1.0
|
||||
FF2 = 0.0
|
||||
# Second axis
|
||||
|
||||
[AXIS_Y]
|
||||
MIN_LIMIT = -10.0
|
||||
MAX_LIMIT = 10.0
|
||||
MAX_VELOCITY = 1.20
|
||||
MAX_ACCELERATION = 1.25
|
||||
|
||||
[JOINT_1]
|
||||
TYPE = LINEAR
|
||||
HOME = 0.000
|
||||
MAX_VELOCITY = 1.20
|
||||
MAX_ACCELERATION = 1.25
|
||||
PID_MAX_VEL = 1.2
|
||||
BACKLASH = 0.000
|
||||
INPUT_SCALE = -128000.0
|
||||
OUTPUT_SCALE = -1.0
|
||||
MIN_LIMIT = -10.0
|
||||
MAX_LIMIT = 10.0
|
||||
FERROR = 0.001
|
||||
MIN_FERROR = 0.005
|
||||
HOME_OFFSET = 0.0
|
||||
HOME_SEARCH_VEL = 0.0
|
||||
HOME_LATCH_VEL = 0.0
|
||||
HOME_USE_INDEX = NO
|
||||
HOME_IGNORE_LIMITS = NO
|
||||
DEADBAND = 1e-06
|
||||
P = 800.0
|
||||
I = 25.0
|
||||
D = 10.0
|
||||
BIAS = 0.0
|
||||
FF0 = 0.0
|
||||
FF1 = 1.0
|
||||
FF2 = 0.0
|
||||
# Third axis
|
||||
|
||||
[AXIS_Z]
|
||||
MIN_LIMIT = -10.0
|
||||
MAX_LIMIT = 10.0
|
||||
MAX_VELOCITY = 1.20
|
||||
MAX_ACCELERATION = 1.25
|
||||
|
||||
[JOINT_2]
|
||||
TYPE = LINEAR
|
||||
HOME = 0.0
|
||||
MAX_VELOCITY = 1.20
|
||||
MAX_ACCELERATION = 1.25
|
||||
PID_MAX_VEL = 1.2
|
||||
BACKLASH = 0.000
|
||||
INPUT_SCALE = 128000.0
|
||||
OUTPUT_SCALE = 1.0
|
||||
MIN_LIMIT = -10.0
|
||||
MAX_LIMIT = 10.0
|
||||
FERROR = 0.001
|
||||
MIN_FERROR = 0.005
|
||||
HOME_OFFSET = 0.0
|
||||
HOME_SEARCH_VEL = 0.0
|
||||
HOME_LATCH_VEL = 0.0
|
||||
HOME_USE_INDEX = NO
|
||||
HOME_IGNORE_LIMITS = NO
|
||||
DEADBAND = 8e-05
|
||||
P = 800.0
|
||||
I = 25.0
|
||||
D = 10.0
|
||||
BIAS = 0.0
|
||||
FF0 = 0.0
|
||||
FF1 = 1.0
|
||||
FF2 = 0.0
|
||||
# Fourth axis
|
||||
|
||||
[AXIS_A]
|
||||
MIN_LIMIT = -3600.0
|
||||
MAX_LIMIT = 3600.0
|
||||
MAX_VELOCITY = 65
|
||||
MAX_ACCELERATION = 20.0
|
||||
|
||||
[JOINT_3]
|
||||
TYPE = ANGULAR
|
||||
HOME = 0.0
|
||||
MAX_VELOCITY = 65
|
||||
MAX_ACCELERATION = 20.0
|
||||
PID_MAX_VEL = 66.0
|
||||
BACKLASH = 0.000
|
||||
INPUT_SCALE = 1111.111
|
||||
OUTPUT_SCALE = 5.0
|
||||
MIN_LIMIT = -3600.0
|
||||
MAX_LIMIT = 3600.0
|
||||
FERROR = 1.010
|
||||
MIN_FERROR = 1.001
|
||||
HOME_OFFSET = 0.0
|
||||
HOME_SEARCH_VEL = 0.0
|
||||
HOME_LATCH_VEL = 0.0
|
||||
HOME_USE_INDEX = NO
|
||||
HOME_IGNORE_LIMITS = NO
|
||||
DEADBAND = 0.046
|
||||
P = 150.0
|
||||
I = 100.0
|
||||
D = 0.1
|
||||
BIAS = 0.0
|
||||
FF0 = 0.0
|
||||
FF1 = 1.0
|
||||
FF2 = 1.0
|
||||
# section for main IO controller parameters -----------------------------------
|
||||
|
||||
[EMCSERVER]
|
||||
# Uncomment the following line if you need to run a remote GUI.
|
||||
# EMCSERVER = emcsvr
|
||||
4
configs/by_interface/pico/ppmc_vel/ppmc.tbl
Normal file
4
configs/by_interface/pico/ppmc_vel/ppmc.tbl
Normal file
@@ -0,0 +1,4 @@
|
||||
T1 P1 D0.125000 Z+0.511000 ;1/8 end mill
|
||||
T2 P2 D0.062500 Z+0.100000 ;1/16 end mill
|
||||
T3 P3 D0.201000 Z+1.273000 ;#7 tap drill
|
||||
T99999 P99999 Z+0.100000 ;big tool number
|
||||
78
configs/by_interface/pico/ppmc_vel/ppmc_io.hal
Normal file
78
configs/by_interface/pico/ppmc_vel/ppmc_io.hal
Normal file
@@ -0,0 +1,78 @@
|
||||
# HAL config file for Pico Systems USC board
|
||||
#
|
||||
# Connect motion controller I/Os
|
||||
#
|
||||
|
||||
# connect limit/home switch outputs to motion controller
|
||||
net Xminlim <= ppmc.0.din.01.in
|
||||
net Xminlim => joint.0.neg-lim-sw-in
|
||||
net Xmaxlim <= ppmc.0.din.02.in
|
||||
net Xmaxlim => joint.0.pos-lim-sw-in
|
||||
net Xhome <= ppmc.0.din.00.in
|
||||
net Xhome => joint.0.home-sw-in
|
||||
|
||||
net Yminlim <= ppmc.0.din.05.in
|
||||
net Yminlim => joint.1.neg-lim-sw-in
|
||||
net Ymaxlim <= ppmc.0.din.06.in
|
||||
net Ymaxlim => joint.1.pos-lim-sw-in
|
||||
net Yhome <= ppmc.0.din.04.in
|
||||
net Yhome => joint.1.home-sw-in
|
||||
|
||||
net Zminlim <= ppmc.0.din.09.in
|
||||
net Zminlim => joint.2.neg-lim-sw-in
|
||||
net Zmaxlim <= ppmc.0.din.10.in
|
||||
net Zmaxlim => joint.2.pos-lim-sw-in
|
||||
net Zhome <= ppmc.0.din.08.in
|
||||
net Zhome => joint.2.home-sw-in
|
||||
|
||||
net Aminlim <= ppmc.0.din.12.in
|
||||
net Aminlim => joint.3.neg-lim-sw-in
|
||||
net Amaxlim <= ppmc.0.din.13.in
|
||||
net Amaxlim => joint.3.pos-lim-sw-in
|
||||
net Ahome <= ppmc.0.din.11.in
|
||||
net Ahome => joint.3.home-sw-in
|
||||
|
||||
|
||||
# connect index pulses to motion controller
|
||||
# uncomment if you have encoder index signals
|
||||
#net Xindex <= ppmc.0.encoder.00.index-enable => joint.0.index-enable
|
||||
#net Yindex <= ppmc.0.encoder.01.index-enable => joint.1.index-enable
|
||||
#net Zindex <= ppmc.0.encoder.02.index-enable => joint.2.index-enable
|
||||
#net Aindex <= ppmc.0.encoder.03.index-enable => joint.3.index-enable
|
||||
|
||||
#
|
||||
# Connect I/O controller I/Os
|
||||
#
|
||||
|
||||
# connect e-stop write/sense to I/O controller
|
||||
# and ppmc's fault with estop's output, so estop FF is reset, but
|
||||
# prevent continued estop signal from ppmc from holding FF cleared
|
||||
net ppmcEstop ppmc.0.din.estop.in
|
||||
net ppmcEstop and2.0.in0
|
||||
net EstopOkIn estop-latch.0.fault-in
|
||||
net EstopOkIn and2.0.out
|
||||
net EstopOkOut ppmc.0.dout.07.out
|
||||
net EstopOkOut ppmc.0.dout.Estop.out
|
||||
net EstopOkOut iocontrol.0.emc-enable-in
|
||||
net EstopOkOut estop-latch.0.ok-out
|
||||
net EstopOkOut and2.0.in1
|
||||
net emc-estop-out iocontrol.0.user-enable-out
|
||||
net emc-estop-out estop-latch.0.ok-in
|
||||
net emc-estop-reset iocontrol.0.user-request-enable
|
||||
net emc-estop-reset estop-latch.0.reset
|
||||
|
||||
# connect spindle fwd/rev to I/O controller
|
||||
net SpindleFwd <= ppmc.0.dout.00.out
|
||||
net SpindleFwd => spindle.0.forward
|
||||
net SpindleRev <= ppmc.0.dout.01.out
|
||||
net SpindleRev => spindle.0.reverse
|
||||
|
||||
# connect spindle brake to I/O controller
|
||||
net SpindleBrakeOn <= ppmc.0.dout.02.out
|
||||
net SpindleBrakeOn => spindle.0.brake
|
||||
|
||||
# connect mist/flood coolant to I/O controller
|
||||
net MistOn <= ppmc.0.dout.03.out
|
||||
net MistOn => iocontrol.0.coolant-mist
|
||||
net FloodOn <= ppmc.0.dout.04.out
|
||||
net FloodOn => iocontrol.0.coolant-flood
|
||||
54
configs/by_interface/pico/ppmc_vel/ppmc_load.hal
Normal file
54
configs/by_interface/pico/ppmc_vel/ppmc_load.hal
Normal file
@@ -0,0 +1,54 @@
|
||||
# sample file pulls all load commands into a single file
|
||||
# when emc2 starts it loads iocontrol
|
||||
# this file enables encoder velocity timestamping
|
||||
# it will only work on PPMC encoder boards with
|
||||
# rev 4 or later firmware. In addition to the timestamp
|
||||
# feature, rev 4 and above boards also have the ability to
|
||||
# select the encoder digital filter frequeincy. Append
|
||||
# enc_clock="n" to the loadrt hal_ppmc line. N can be
|
||||
# 1, 2, 5 or 10 for 1, 2 5 or 10 MHz frequency. Any other
|
||||
# value will default to the standard 1 MHz.
|
||||
# it is best to use the lowest rate that allows your encoders
|
||||
# to be read, as this gives the greatest suppression of
|
||||
# electrical noise on the encoder inputs.
|
||||
|
||||
# kinematics
|
||||
loadrt [KINS]KINEMATICS
|
||||
|
||||
#motion controller, get name and thread periods from ini file
|
||||
loadrt [EMCMOT]EMCMOT servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[KINS]JOINTS
|
||||
|
||||
# next load the PID module, for four PID loops
|
||||
loadrt pid num_chan=4
|
||||
|
||||
# install Universal PWM Controller driver
|
||||
#if the PPMC is not connected to the standard parallel port at 0x378
|
||||
# add port_addr="0x1234" to the following command line
|
||||
# timestamp="0x00" turns on timestamp encoder velocity estimation on the
|
||||
# first encoder board of the PPMC system.
|
||||
# on LinuxCNC versions 2.7.9 and above, a parameter allows you to change the
|
||||
# way the EPP port is controlled. For PCIe cards using the NetMos 990x
|
||||
# chips, append epp_dir=1 to the end of the following line
|
||||
|
||||
loadrt hal_ppmc timestamp="0x00"
|
||||
|
||||
# make some signals for the scope for tuning.
|
||||
loadrt ddt count=4
|
||||
loadrt estop_latch count=1
|
||||
loadrt and2 count=1
|
||||
|
||||
# set up the realtime thread
|
||||
# read inputs first
|
||||
addf ppmc.0.read servo-thread
|
||||
# then run the motion controller
|
||||
addf motion-command-handler servo-thread
|
||||
addf and2.0 servo-thread
|
||||
addf estop-latch.0 servo-thread
|
||||
addf motion-controller servo-thread
|
||||
# then the PID loops
|
||||
addf pid.0.do-pid-calcs servo-thread
|
||||
addf pid.1.do-pid-calcs servo-thread
|
||||
addf pid.2.do-pid-calcs servo-thread
|
||||
addf pid.3.do-pid-calcs servo-thread
|
||||
# write outputs last
|
||||
addf ppmc.0.write servo-thread
|
||||
44
configs/by_interface/pico/ppmc_vel/ppmc_motion.hal
Normal file
44
configs/by_interface/pico/ppmc_vel/ppmc_motion.hal
Normal file
@@ -0,0 +1,44 @@
|
||||
# HAL config file for Pico Systems UPC board
|
||||
#
|
||||
|
||||
# connect position feedback signals to encoders
|
||||
net Xpos-fb <= ppmc.0.encoder.00.position
|
||||
net Ypos-fb <= ppmc.0.encoder.01.position
|
||||
net Zpos-fb <= ppmc.0.encoder.02.position
|
||||
net Apos-fb <= ppmc.0.encoder.03.position
|
||||
|
||||
# get feedback scaling from ini file
|
||||
setp ppmc.0.encoder.00.scale [JOINT_0]INPUT_SCALE
|
||||
setp ppmc.0.encoder.01.scale [JOINT_1]INPUT_SCALE
|
||||
setp ppmc.0.encoder.02.scale [JOINT_2]INPUT_SCALE
|
||||
setp ppmc.0.encoder.03.scale [JOINT_3]INPUT_SCALE
|
||||
|
||||
# connect PID output signals to step generators
|
||||
net Xoutput => ppmc.0.DAC.00.value
|
||||
net Youtput => ppmc.0.DAC.01.value
|
||||
net Zoutput => ppmc.0.DAC.02.value
|
||||
net Aoutput => ppmc.0.DAC.03.value
|
||||
|
||||
# set output scaling from ini file
|
||||
setp ppmc.0.DAC.00.scale [JOINT_0]OUTPUT_SCALE
|
||||
setp ppmc.0.DAC.01.scale [JOINT_1]OUTPUT_SCALE
|
||||
setp ppmc.0.DAC.02.scale [JOINT_2]OUTPUT_SCALE
|
||||
setp ppmc.0.DAC.03.scale [JOINT_3]OUTPUT_SCALE
|
||||
|
||||
# set slowest velocity for estimation
|
||||
setp ppmc.0.encoder.00.min-speed-estimate 0.001
|
||||
setp ppmc.0.encoder.01.min-speed-estimate 0.001
|
||||
setp ppmc.0.encoder.02.min-speed-estimate 0.001
|
||||
setp ppmc.0.encoder.03.min-speed-estimate 0.001
|
||||
|
||||
# Here's the part that connects the encoder velocity to the PID
|
||||
net Xfbderiv ppmc.0.encoder.00.velocity pid.0.feedback-deriv
|
||||
net Yfbderiv ppmc.0.encoder.01.velocity pid.1.feedback-deriv
|
||||
net Zfbderiv ppmc.0.encoder.02.velocity pid.2.feedback-deriv
|
||||
net Afbderiv ppmc.0.encoder.03.velocity pid.3.feedback-deriv
|
||||
|
||||
# add a couple of tuning test links
|
||||
# if these are useful will want to add them to the other axes as well
|
||||
# or make these setup with the tuning script
|
||||
net Xoutput ddt.0.in
|
||||
net Xpos-fb ddt.1.in
|
||||
95
configs/by_interface/pico/ppmc_vel/ppmc_servo.hal
Normal file
95
configs/by_interface/pico/ppmc_vel/ppmc_servo.hal
Normal file
@@ -0,0 +1,95 @@
|
||||
# HAL config file for servos -- expanded from core_servo.hal
|
||||
# for a full four axis setup
|
||||
|
||||
# create four position feedback signals
|
||||
|
||||
# connect position feedback to PID loop
|
||||
net Xpos-fb => pid.0.feedback
|
||||
net Ypos-fb => pid.1.feedback
|
||||
net Zpos-fb => pid.2.feedback
|
||||
net Apos-fb => pid.3.feedback
|
||||
|
||||
# connect position feedback to motion module
|
||||
net Xpos-fb => joint.0.motor-pos-fb
|
||||
net Ypos-fb => joint.1.motor-pos-fb
|
||||
net Zpos-fb => joint.2.motor-pos-fb
|
||||
net Apos-fb => joint.3.motor-pos-fb
|
||||
|
||||
# create PID to DAC output signals
|
||||
|
||||
# connect output signals to output of PID loops
|
||||
net Xoutput <= pid.0.output
|
||||
net Youtput <= pid.1.output
|
||||
net Zoutput <= pid.2.output
|
||||
net Aoutput <= pid.3.output
|
||||
|
||||
# set PID loop output limits to +/-1.00
|
||||
setp pid.0.maxoutput [JOINT_0]PID_MAX_VEL
|
||||
setp pid.1.maxoutput [JOINT_1]PID_MAX_VEL
|
||||
setp pid.2.maxoutput [JOINT_2]PID_MAX_VEL
|
||||
setp pid.3.maxoutput [JOINT_3]PID_MAX_VEL
|
||||
|
||||
# set PID loop gains
|
||||
setp pid.0.Pgain [JOINT_0]P
|
||||
setp pid.0.Igain [JOINT_0]I
|
||||
setp pid.0.Dgain [JOINT_0]D
|
||||
setp pid.0.bias [JOINT_0]BIAS
|
||||
setp pid.0.FF0 [JOINT_0]FF0
|
||||
setp pid.0.FF1 [JOINT_0]FF1
|
||||
setp pid.0.FF2 [JOINT_0]FF2
|
||||
setp pid.0.deadband [JOINT_0]DEADBAND
|
||||
|
||||
setp pid.1.Pgain [JOINT_1]P
|
||||
setp pid.1.Igain [JOINT_1]I
|
||||
setp pid.1.Dgain [JOINT_1]D
|
||||
setp pid.1.bias [JOINT_1]BIAS
|
||||
setp pid.1.FF0 [JOINT_1]FF0
|
||||
setp pid.1.FF1 [JOINT_1]FF1
|
||||
setp pid.1.FF2 [JOINT_1]FF2
|
||||
setp pid.1.deadband [JOINT_1]DEADBAND
|
||||
|
||||
setp pid.2.Pgain [JOINT_2]P
|
||||
setp pid.2.Igain [JOINT_2]I
|
||||
setp pid.2.Dgain [JOINT_2]D
|
||||
setp pid.2.bias [JOINT_2]BIAS
|
||||
setp pid.2.FF0 [JOINT_2]FF0
|
||||
setp pid.2.FF1 [JOINT_2]FF1
|
||||
setp pid.2.FF2 [JOINT_2]FF2
|
||||
setp pid.2.deadband [JOINT_2]DEADBAND
|
||||
|
||||
setp pid.3.Pgain [JOINT_3]P
|
||||
setp pid.3.Igain [JOINT_3]I
|
||||
setp pid.3.Dgain [JOINT_3]D
|
||||
setp pid.3.bias [JOINT_3]BIAS
|
||||
setp pid.3.FF0 [JOINT_3]FF0
|
||||
setp pid.3.FF1 [JOINT_3]FF1
|
||||
setp pid.3.FF2 [JOINT_3]FF2
|
||||
setp pid.3.deadband [JOINT_3]DEADBAND
|
||||
|
||||
# create four position command signals
|
||||
|
||||
# connect position commands to motion controller
|
||||
net Xpos-cmd <= joint.0.motor-pos-cmd
|
||||
net Ypos-cmd <= joint.1.motor-pos-cmd
|
||||
net Zpos-cmd <= joint.2.motor-pos-cmd
|
||||
net Apos-cmd <= joint.3.motor-pos-cmd
|
||||
|
||||
# connect position commands to PID input
|
||||
net Xpos-cmd => pid.0.command
|
||||
net Ypos-cmd => pid.1.command
|
||||
net Zpos-cmd => pid.2.command
|
||||
net Apos-cmd => pid.3.command
|
||||
|
||||
# create bit signals to enable/disable the PID loops
|
||||
|
||||
# connect the signals to the motion controller
|
||||
net Xenable <= joint.0.amp-enable-out
|
||||
net Yenable <= joint.1.amp-enable-out
|
||||
net Zenable <= joint.2.amp-enable-out
|
||||
net Aenable <= joint.3.amp-enable-out
|
||||
|
||||
# connect the signals to the PID blocks
|
||||
net Xenable => pid.0.enable
|
||||
net Yenable => pid.1.enable
|
||||
net Zenable => pid.2.enable
|
||||
net Aenable => pid.3.enable
|
||||
1
configs/by_interface/pico/univpwm/README
Normal file
1
configs/by_interface/pico/univpwm/README
Normal file
@@ -0,0 +1 @@
|
||||
A configuration for the Universal PWM card from Pico systems. This configuration includes motion connections and an IO set for handling estop within HAL. The IO configuration in univpwm_io.hal does not include signal connections for other bridgeportio like signal handling.
|
||||
35
configs/by_interface/pico/univpwm/pendant.hal
Normal file
35
configs/by_interface/pico/univpwm/pendant.hal
Normal file
@@ -0,0 +1,35 @@
|
||||
loadrt mux4 count=1
|
||||
loadrt ilowpass
|
||||
loadrt encoder num_chan=1
|
||||
|
||||
setp ilowpass.0.scale 100
|
||||
setp ilowpass.0.gain 0.01
|
||||
|
||||
addf mux4.0 servo-thread
|
||||
addf ilowpass.0 servo-thread
|
||||
addf encoder.update-counters servo-thread
|
||||
addf encoder.capture-position servo-thread
|
||||
|
||||
net jog-x ppmc.0.din.06.in => axis.0.jog-enable
|
||||
net jog-y ppmc.0.din.07.in => axis.1.jog-enable
|
||||
net jog-z ppmc.0.din.08.in => axis.2.jog-enable
|
||||
|
||||
net x10 ppmc.0.din.09.in => mux4.0.sel0
|
||||
net x100 ppmc.0.din.10.in => mux4.0.sel1
|
||||
|
||||
setp mux4.0.in1 .00000025
|
||||
setp mux4.0.in0 .0000025
|
||||
setp mux4.0.in2 .000025
|
||||
setp mux4.0.in3 0
|
||||
|
||||
net jogscale mux4.0.out => axis.0.jog-scale
|
||||
net jogscale => axis.1.jog-scale
|
||||
net jogscale => axis.2.jog-scale
|
||||
|
||||
net mpg-a ppmc.0.din.04.in => encoder.0.phase-A
|
||||
net mpg-b ppmc.0.din.05.in => encoder.0.phase-B
|
||||
net mpg-out encoder.0.rawcounts => ilowpass.0.in
|
||||
|
||||
net jogcounts ilowpass.0.out => axis.0.jog-counts
|
||||
net jogcounts => axis.1.jog-counts
|
||||
net jogcounts => axis.2.jog-counts
|
||||
1
configs/by_interface/pico/univpwm/spindle.hal
Normal file
1
configs/by_interface/pico/univpwm/spindle.hal
Normal file
@@ -0,0 +1 @@
|
||||
net SpindleRPM pyvcp.SpindleRPM
|
||||
9
configs/by_interface/pico/univpwm/spindle.xml
Normal file
9
configs/by_interface/pico/univpwm/spindle.xml
Normal file
@@ -0,0 +1,9 @@
|
||||
<pyvcp>
|
||||
<label>
|
||||
<text>"Spindle Speed:"</text>
|
||||
</label>
|
||||
<bar>
|
||||
<halpin>"SpindleRPM"</halpin>
|
||||
<max_>5000</max_>
|
||||
</bar>
|
||||
</pyvcp>
|
||||
258
configs/by_interface/pico/univpwm/univpwm.ini
Normal file
258
configs/by_interface/pico/univpwm/univpwm.ini
Normal file
@@ -0,0 +1,258 @@
|
||||
# EMC controller parameters for generic controller. Make these what you need
|
||||
# for your system.
|
||||
# General note: Comments can either be preceded with a # or ; - either is
|
||||
# acceptable, although # is in keeping with most linux config files.
|
||||
# General section -------------------------------------------------------------
|
||||
|
||||
[EMC]
|
||||
# Version of this INI file
|
||||
VERSION = 1.1
|
||||
# Name of machine, for use with display, etc.
|
||||
MACHINE = LinuxCNC-UNIVPWM
|
||||
# Debug level, 0 means no messages. See src/emc/nml_int/emcglb.h for others
|
||||
DEBUG = 0
|
||||
# DEBUG = 0x00000007
|
||||
# DEBUG = 0x7FFFFFFF
|
||||
# Sections for display options ------------------------------------------------
|
||||
|
||||
[DISPLAY]
|
||||
# Name of display program, e.g., axis
|
||||
DISPLAY = axis
|
||||
# DISPLAY = tklinuxcnc
|
||||
# Cycle time, in seconds, that display will sleep between polls
|
||||
CYCLE_TIME = 0.100
|
||||
# Path to help file
|
||||
HELP_FILE = tklinuxcnc.txt
|
||||
# Initial display setting for position, RELATIVE or MACHINE
|
||||
POSITION_OFFSET = RELATIVE
|
||||
# Initial display setting for position, COMMANDED or ACTUAL
|
||||
POSITION_FEEDBACK = ACTUAL
|
||||
# Highest value that will be allowed for feed override, 1.0 = 100%
|
||||
MAX_FEED_OVERRIDE = 1.2
|
||||
# Prefix to be used
|
||||
PROGRAM_PREFIX = ../../nc_files/
|
||||
# Introductory graphic
|
||||
INTRO_GRAPHIC = linuxcnc.gif
|
||||
INTRO_TIME = 2
|
||||
# Enable popup balloon help
|
||||
BALLOON_HELP = 1
|
||||
# Task controller section -----------------------------------------------------
|
||||
|
||||
[FILTER]
|
||||
#No Content
|
||||
|
||||
[RS274NGC]
|
||||
# File containing interpreter variables
|
||||
PARAMETER_FILE = univpwm.var
|
||||
# Motion control section ------------------------------------------------------
|
||||
|
||||
[EMCMOT]
|
||||
EMCMOT = motmod
|
||||
# Timeout for comm to emcmot, in seconds
|
||||
COMM_TIMEOUT = 1.0
|
||||
# Servo task period, in nanoseconds
|
||||
SERVO_PERIOD = 1000000
|
||||
# Hardware Abstraction Layer section --------------------------------------------------
|
||||
|
||||
[TASK]
|
||||
# Name of task controller program, e.g., milltask
|
||||
TASK = milltask
|
||||
# Cycle time, in seconds, that task controller will sleep between polls
|
||||
CYCLE_TIME = 0.010
|
||||
# Part program interpreter section --------------------------------------------
|
||||
|
||||
[HAL]
|
||||
# The run script first uses halcmd to execute any HALFILE
|
||||
# files, and then to execute any individual HALCMD commands.
|
||||
#
|
||||
# list of hal config files to run through halcmd
|
||||
# files are executed in the order in which they appear
|
||||
HALFILE = univpwm_load.hal
|
||||
HALFILE = univpwm_servo.hal
|
||||
HALFILE = univpwm_motion.hal
|
||||
HALFILE = univpwm_io.hal
|
||||
#uncomment the following line to enable the pendant function
|
||||
#HALFILE = pendant.hal
|
||||
#uncomment the following line to enable the spindle speed display
|
||||
#POSTGUI_HALFILE = spindle.hal
|
||||
#You need to remove axis 3 or provide another path for a spindle encoder to
|
||||
# feed into EMC for this to work.
|
||||
# Trajectory planner section --------------------------------------------------
|
||||
|
||||
[HALUI]
|
||||
#No Content
|
||||
|
||||
[TRAJ]
|
||||
# COORDINATES = X Y Z R P W
|
||||
COORDINATES = X Y Z A
|
||||
HOME = 0 0 0 0
|
||||
LINEAR_UNITS = inch
|
||||
ANGULAR_UNITS = degree
|
||||
DEFAULT_LINEAR_VELOCITY = 0.0167
|
||||
MAX_LINEAR_VELOCITY = 1.20
|
||||
DEFAULT_LINEAR_ACCELERATION = 15.0
|
||||
MAX_LINEAR_ACCELERATION = 20.0
|
||||
# Axes sections ---------------------------------------------------------------
|
||||
# Scaling: The OUTPUT_SCALE should be the speed
|
||||
# in UNITS/second (inches/sec or mm/sec) that would be
|
||||
# reached if the PWM duty cycle was 100%. It depends on
|
||||
# the power supply voltage, motor RPM/Volt factor, and
|
||||
# gearing/screw pitch. For example:
|
||||
#
|
||||
# Power supply voltage 50V
|
||||
# Motor RPM/V 1000RPM/24V
|
||||
# Gearing: 2 motor revs per 1 screw rev
|
||||
# Screw pitch: 0.2" per turn
|
||||
#
|
||||
# Max motor speed = 50V * 1000RPM/24V = 2083 RPM
|
||||
# Max screw speed = 2083RPM * 1(screw)/2(motor) = 1041RPM
|
||||
# Max table speed = 1041RPM * 0.2"/turn = 208 in/min
|
||||
# Max table speed = 208 in/min / 60 seconds = 3.47 inches/sec
|
||||
#
|
||||
# Since max speed is reached at 100% duty cycle, OUTPUT_SCALE
|
||||
# should be 3.47
|
||||
# First axis
|
||||
|
||||
[EMCIO]
|
||||
# tool table file
|
||||
TOOL_TABLE = univpwm.tbl
|
||||
|
||||
[KINS]
|
||||
KINEMATICS = trivkins
|
||||
JOINTS = 4
|
||||
|
||||
[AXIS_X]
|
||||
MIN_LIMIT = -10.0
|
||||
MAX_LIMIT = 10.0
|
||||
MAX_VELOCITY = 1.20
|
||||
MAX_ACCELERATION = 20.0
|
||||
|
||||
[JOINT_0]
|
||||
TYPE = LINEAR
|
||||
HOME = 0.000
|
||||
MAX_VELOCITY = 1.20
|
||||
MAX_ACCELERATION = 20.0
|
||||
PID_MAX_VEL = 1.25
|
||||
BACKLASH = 0.000
|
||||
INPUT_SCALE = 4000
|
||||
OUTPUT_SCALE = 5.0
|
||||
MIN_LIMIT = -10.0
|
||||
MAX_LIMIT = 10.0
|
||||
FERROR = 0.0100
|
||||
MIN_FERROR = 0.001
|
||||
HOME_OFFSET = 0.0
|
||||
HOME_SEARCH_VEL = 0.0
|
||||
HOME_LATCH_VEL = 0.0
|
||||
HOME_USE_INDEX = NO
|
||||
HOME_IGNORE_LIMITS = NO
|
||||
DEADBAND = 0.000126
|
||||
P = 150
|
||||
I = 100
|
||||
D = 0.1
|
||||
BIAS = 0.0
|
||||
FF0 = 0
|
||||
FF1 = 1
|
||||
FF2 = 0.0
|
||||
# Second axis
|
||||
|
||||
[AXIS_Y]
|
||||
MIN_LIMIT = -10.0
|
||||
MAX_LIMIT = 10.0
|
||||
MAX_VELOCITY = 1.20
|
||||
MAX_ACCELERATION = 20.0
|
||||
|
||||
[JOINT_1]
|
||||
TYPE = LINEAR
|
||||
HOME = 0.000
|
||||
MAX_VELOCITY = 1.20
|
||||
MAX_ACCELERATION = 20.0
|
||||
PID_MAX_VEL = 1.25
|
||||
BACKLASH = 0.000
|
||||
INPUT_SCALE = 4000
|
||||
OUTPUT_SCALE = 5.0
|
||||
MIN_LIMIT = -10.0
|
||||
MAX_LIMIT = 10.0
|
||||
FERROR = 0.010
|
||||
MIN_FERROR = 0.001
|
||||
HOME_OFFSET = 0.0
|
||||
HOME_SEARCH_VEL = 0.0
|
||||
HOME_LATCH_VEL = 0.0
|
||||
HOME_USE_INDEX = NO
|
||||
HOME_IGNORE_LIMITS = NO
|
||||
DEADBAND = 0.000126
|
||||
P = 150
|
||||
I = 100
|
||||
D = 0.1
|
||||
BIAS = 0.0
|
||||
FF0 = 0
|
||||
FF1 = 1
|
||||
FF2 = 0.0
|
||||
# Third axis
|
||||
|
||||
[AXIS_Z]
|
||||
MIN_LIMIT = -10.0
|
||||
MAX_LIMIT = 10.0
|
||||
MAX_VELOCITY = 1.20
|
||||
MAX_ACCELERATION = 20.0
|
||||
|
||||
[JOINT_2]
|
||||
TYPE = LINEAR
|
||||
HOME = 0.0
|
||||
MAX_VELOCITY = 1.20
|
||||
MAX_ACCELERATION = 20.0
|
||||
PID_MAX_VEL = 1.25
|
||||
BACKLASH = 0.000
|
||||
INPUT_SCALE = 4000
|
||||
OUTPUT_SCALE = 5.0
|
||||
MIN_LIMIT = -10.0
|
||||
MAX_LIMIT = 10.0
|
||||
FERROR = 0.010
|
||||
MIN_FERROR = 0.001
|
||||
HOME_OFFSET = 0.0
|
||||
HOME_SEARCH_VEL = 0.0
|
||||
HOME_LATCH_VEL = 0.0
|
||||
HOME_USE_INDEX = NO
|
||||
HOME_IGNORE_LIMITS = NO
|
||||
DEADBAND = 0.000126
|
||||
P = 150
|
||||
I = 100
|
||||
D = 0.1
|
||||
BIAS = 0.0
|
||||
FF0 = 0
|
||||
FF1 = 1
|
||||
FF2 = 0.0
|
||||
# Fourth axis
|
||||
|
||||
[AXIS_A]
|
||||
MIN_LIMIT = -3600.0
|
||||
MAX_LIMIT = 3600.0
|
||||
MAX_VELOCITY = 65
|
||||
MAX_ACCELERATION = 20.0
|
||||
|
||||
[JOINT_3]
|
||||
TYPE = ANGULAR
|
||||
HOME = 0.0
|
||||
MAX_VELOCITY = 65
|
||||
MAX_ACCELERATION = 20.0
|
||||
PID_MAX_VEL = 66
|
||||
BACKLASH = 0.000
|
||||
INPUT_SCALE = 11.11111111
|
||||
OUTPUT_SCALE = 5.0
|
||||
MIN_LIMIT = -3600.0
|
||||
MAX_LIMIT = 3600.0
|
||||
FERROR = 0.010
|
||||
MIN_FERROR = 0.001
|
||||
HOME_OFFSET = 0.0
|
||||
HOME_SEARCH_VEL = 0.0
|
||||
HOME_LATCH_VEL = 0.0
|
||||
HOME_USE_INDEX = NO
|
||||
HOME_IGNORE_LIMITS = NO
|
||||
DEADBAND = 0.046
|
||||
P = 150
|
||||
I = 100
|
||||
D = 0.1
|
||||
BIAS = 0.0
|
||||
FF0 = 0
|
||||
FF1 = 1
|
||||
FF2 = 0.0
|
||||
# section for main IO controller parameters -----------------------------------
|
||||
4
configs/by_interface/pico/univpwm/univpwm.tbl
Normal file
4
configs/by_interface/pico/univpwm/univpwm.tbl
Normal file
@@ -0,0 +1,4 @@
|
||||
T1 P1 D0.125000 Z+0.511000 ;1/8 end mill
|
||||
T2 P2 D0.062500 Z+0.100000 ;1/16 end mill
|
||||
T3 P3 D0.201000 Z+1.273000 ;#7 tap drill
|
||||
T99999 P99999 Z+0.100000 ;big tool number
|
||||
84
configs/by_interface/pico/univpwm/univpwm_io.hal
Normal file
84
configs/by_interface/pico/univpwm/univpwm_io.hal
Normal file
@@ -0,0 +1,84 @@
|
||||
# HAL config file for Pico Systems USC board
|
||||
#
|
||||
# Connect motion controller I/Os
|
||||
#
|
||||
|
||||
# connect limit/home switch outputs to motion controller
|
||||
net Xminlim <= ppmc.0.din.01.in
|
||||
net Xminlim => joint.0.neg-lim-sw-in
|
||||
net Xmaxlim <= ppmc.0.din.02.in
|
||||
net Xmaxlim => joint.0.pos-lim-sw-in
|
||||
net Xhome <= ppmc.0.din.00.in
|
||||
net Xhome => joint.0.home-sw-in
|
||||
|
||||
net Yminlim <= ppmc.0.din.05.in
|
||||
net Yminlim => joint.1.neg-lim-sw-in
|
||||
net Ymaxlim <= ppmc.0.din.06.in
|
||||
net Ymaxlim => joint.1.pos-lim-sw-in
|
||||
net Yhome <= ppmc.0.din.04.in
|
||||
net Yhome => joint.1.home-sw-in
|
||||
|
||||
net Zminlim <= ppmc.0.din.09.in
|
||||
net Zminlim => joint.2.neg-lim-sw-in
|
||||
net Zmaxlim <= ppmc.0.din.10.in
|
||||
net Zmaxlim => joint.2.pos-lim-sw-in
|
||||
net Zhome <= ppmc.0.din.08.in
|
||||
net Zhome => joint.2.home-sw-in
|
||||
|
||||
net Aminlim <= ppmc.0.din.12.in
|
||||
net Aminlim => joint.3.neg-lim-sw-in
|
||||
net Amaxlim <= ppmc.0.din.13.in
|
||||
net Amaxlim => joint.3.pos-lim-sw-in
|
||||
net Ahome <= ppmc.0.din.11.in
|
||||
net Ahome => joint.3.home-sw-in
|
||||
|
||||
|
||||
# connect index pulses to motion controller
|
||||
# uncomment these lines only if you have a Rev 3 UPC board
|
||||
# The ppmc.x.encoder.xx.index-enable pin is ONLY exported by the driver
|
||||
# if the UPC has rev 3 or above firmware
|
||||
#newsig Xindex bit
|
||||
#newsig Yindex bit
|
||||
#newsig Zindex bit
|
||||
#linksp Xindex <= ppmc.0.encoder.00.index-enable
|
||||
#linksp Xindex => joint.0.index-enable
|
||||
#linksp Yindex <= ppmc.0.encoder.01.index-enable
|
||||
#linksp Yindex => joint.1.index-enable
|
||||
#linksp Zindex <= ppmc.0.encoder.02.index-enable
|
||||
#linksp Zindex => joint.2.index-enable
|
||||
|
||||
#
|
||||
# Connect I/O controller I/Os
|
||||
#
|
||||
|
||||
# connect e-stop write/sense to I/O controller
|
||||
# and univpwm's fault with estop's output, so estop FF is reset, but
|
||||
# prevent continued estop signal from univpwm from holding FF cleared
|
||||
net ppmcEstop ppmc.0.din.15.in-not
|
||||
net ppmcEstop and2.0.in0
|
||||
net EstopOkIn estop-latch.0.fault-in
|
||||
net EstopOkIn and2.0.out
|
||||
net EstopOkOut <= ppmc.0.dout.07.out
|
||||
net EstopOkOut iocontrol.0.emc-enable-in
|
||||
net EstopOkOut estop-latch.0.ok-out
|
||||
net EstopOkOut and2.0.in1
|
||||
net emc-estop-out iocontrol.0.user-enable-out
|
||||
net emc-estop-out estop-latch.0.ok-in
|
||||
net emc-estop-reset iocontrol.0.user-request-enable
|
||||
net emc-estop-reset estop-latch.0.reset
|
||||
|
||||
# connect spindle fwd/rev to I/O controller
|
||||
net SpindleFwd <= ppmc.0.dout.00.out
|
||||
net SpindleFwd => spindle.0.forward
|
||||
net SpindleRev <= ppmc.0.dout.01.out
|
||||
net SpindleRev => spindle.0.reverse
|
||||
|
||||
# connect spindle brake to I/O controller
|
||||
net SpindleBrakeOn <= ppmc.0.dout.02.out
|
||||
net SpindleBrakeOn => spindle.0.brake
|
||||
|
||||
# connect mist/flood coolant to I/O controller
|
||||
net MistOn <= ppmc.0.dout.03.out
|
||||
net MistOn => iocontrol.0.coolant-mist
|
||||
net FloodOn <= ppmc.0.dout.04.out
|
||||
net FloodOn => iocontrol.0.coolant-flood
|
||||
41
configs/by_interface/pico/univpwm/univpwm_load.hal
Normal file
41
configs/by_interface/pico/univpwm/univpwm_load.hal
Normal file
@@ -0,0 +1,41 @@
|
||||
# sample file pulls all load commands into a single file
|
||||
# when emc2 starts it loads iocontrol
|
||||
|
||||
# kinematics
|
||||
loadrt [KINS]KINEMATICS
|
||||
# motion controller, get name and thread periods from ini file
|
||||
loadrt [EMCMOT]EMCMOT servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[KINS]JOINTS
|
||||
|
||||
# next load the PID module, for four PID loops
|
||||
loadrt pid num_chan=4
|
||||
|
||||
# install Universal PWM Controller driver
|
||||
# if the PWM controller is not connected to the standard parallel port
|
||||
# at address 0x378, add port_addr="0x1234" to the following line, separated
|
||||
# by a space
|
||||
# on LinuxCNC versions 2.7.9 and above, a parameter allows you to change the
|
||||
# way the EPP port is controlled. For PCIe cards using the NetMos 990x
|
||||
# chips, append epp_dir=1 to the end of the following line
|
||||
|
||||
loadrt hal_ppmc
|
||||
|
||||
# make some signals for the scope for tuning.
|
||||
loadrt ddt count=4
|
||||
loadrt estop_latch count=1
|
||||
loadrt and2 count=1
|
||||
|
||||
# set up the realtime thread
|
||||
# read inputs first
|
||||
addf ppmc.0.read servo-thread
|
||||
# then run the motion controller
|
||||
addf motion-command-handler servo-thread
|
||||
addf and2.0 servo-thread
|
||||
addf estop-latch.0 servo-thread
|
||||
addf motion-controller servo-thread
|
||||
# then the PID loops
|
||||
addf pid.0.do-pid-calcs servo-thread
|
||||
addf pid.1.do-pid-calcs servo-thread
|
||||
addf pid.2.do-pid-calcs servo-thread
|
||||
addf pid.3.do-pid-calcs servo-thread
|
||||
# write outputs last
|
||||
addf ppmc.0.write servo-thread
|
||||
55
configs/by_interface/pico/univpwm/univpwm_motion.hal
Normal file
55
configs/by_interface/pico/univpwm/univpwm_motion.hal
Normal file
@@ -0,0 +1,55 @@
|
||||
# HAL config file for Pico Systems UPC board
|
||||
#
|
||||
|
||||
# set the PWM frequency to suit Pico's PWM amps (50KHz)
|
||||
# users with other amps may need to change this
|
||||
setp ppmc.0.pwm.00-03.freq 50000
|
||||
# turn on bootstrapping for the MOSFET drivers
|
||||
# this also depends on the amplifiers
|
||||
setp ppmc.0.pwm.00.bootstrap TRUE
|
||||
setp ppmc.0.pwm.01.bootstrap TRUE
|
||||
setp ppmc.0.pwm.02.bootstrap TRUE
|
||||
setp ppmc.0.pwm.03.bootstrap TRUE
|
||||
# set max duty cycle to 95% for the MOSFET drives
|
||||
# at 50KHz this corresponds to 1 us
|
||||
setp ppmc.0.pwm.00.max-dc 0.95
|
||||
setp ppmc.0.pwm.01.max-dc 0.95
|
||||
setp ppmc.0.pwm.02.max-dc 0.95
|
||||
setp ppmc.0.pwm.03.max-dc 0.95
|
||||
|
||||
# connect position feedback signals to encoders
|
||||
net Xpos-fb <= ppmc.0.encoder.00.position
|
||||
net Ypos-fb <= ppmc.0.encoder.01.position
|
||||
net Zpos-fb <= ppmc.0.encoder.02.position
|
||||
net Apos-fb <= ppmc.0.encoder.03.position
|
||||
|
||||
# get feedback scaling from ini file
|
||||
setp ppmc.0.encoder.00.scale [JOINT_0]INPUT_SCALE
|
||||
setp ppmc.0.encoder.01.scale [JOINT_1]INPUT_SCALE
|
||||
setp ppmc.0.encoder.02.scale [JOINT_2]INPUT_SCALE
|
||||
setp ppmc.0.encoder.03.scale [JOINT_3]INPUT_SCALE
|
||||
|
||||
# connect PID output signals to step generators
|
||||
net Xoutput => ppmc.0.pwm.00.value
|
||||
net Youtput => ppmc.0.pwm.01.value
|
||||
net Zoutput => ppmc.0.pwm.02.value
|
||||
net Aoutput => ppmc.0.pwm.03.value
|
||||
|
||||
# connect axis enables to step generators
|
||||
net Xenable => ppmc.0.pwm.00.enable
|
||||
net Yenable => ppmc.0.pwm.01.enable
|
||||
net Zenable => ppmc.0.pwm.02.enable
|
||||
net Aenable => ppmc.0.pwm.03.enable
|
||||
|
||||
# set output scaling from ini file
|
||||
setp ppmc.0.pwm.00.scale [JOINT_0]OUTPUT_SCALE
|
||||
setp ppmc.0.pwm.01.scale [JOINT_1]OUTPUT_SCALE
|
||||
setp ppmc.0.pwm.02.scale [JOINT_2]OUTPUT_SCALE
|
||||
setp ppmc.0.pwm.03.scale [JOINT_3]OUTPUT_SCALE
|
||||
|
||||
# add a couple of tuning test links
|
||||
# if these are useful will want to add them to the other axes as well
|
||||
# or make these setup with the tuning script
|
||||
net Xoutput ddt.0.in
|
||||
net Xpos-fb ddt.1.in
|
||||
|
||||
95
configs/by_interface/pico/univpwm/univpwm_servo.hal
Normal file
95
configs/by_interface/pico/univpwm/univpwm_servo.hal
Normal file
@@ -0,0 +1,95 @@
|
||||
# HAL config file for servos -- expanded from core_servo.hal
|
||||
# for a full four axis setup
|
||||
|
||||
# create four position feedback signals
|
||||
|
||||
# connect position feedback to PID loop
|
||||
net Xpos-fb => pid.0.feedback
|
||||
net Ypos-fb => pid.1.feedback
|
||||
net Zpos-fb => pid.2.feedback
|
||||
net Apos-fb => pid.3.feedback
|
||||
|
||||
# connect position feedback to motion module
|
||||
net Xpos-fb => joint.0.motor-pos-fb
|
||||
net Ypos-fb => joint.1.motor-pos-fb
|
||||
net Zpos-fb => joint.2.motor-pos-fb
|
||||
net Apos-fb => joint.3.motor-pos-fb
|
||||
|
||||
# create PID to DAC output signals
|
||||
|
||||
# connect output signals to output of PID loops
|
||||
net Xoutput <= pid.0.output
|
||||
net Youtput <= pid.1.output
|
||||
net Zoutput <= pid.2.output
|
||||
net Aoutput <= pid.3.output
|
||||
|
||||
# set PID loop output limits to +/-1.00
|
||||
setp pid.0.maxoutput [JOINT_0]PID_MAX_VEL
|
||||
setp pid.1.maxoutput [JOINT_1]PID_MAX_VEL
|
||||
setp pid.2.maxoutput [JOINT_2]PID_MAX_VEL
|
||||
setp pid.3.maxoutput [JOINT_3]PID_MAX_VEL
|
||||
|
||||
# set PID loop gains
|
||||
setp pid.0.Pgain [JOINT_0]P
|
||||
setp pid.0.Igain [JOINT_0]I
|
||||
setp pid.0.Dgain [JOINT_0]D
|
||||
setp pid.0.bias [JOINT_0]BIAS
|
||||
setp pid.0.FF0 [JOINT_0]FF0
|
||||
setp pid.0.FF1 [JOINT_0]FF1
|
||||
setp pid.0.FF2 [JOINT_0]FF2
|
||||
setp pid.0.deadband [JOINT_0]DEADBAND
|
||||
|
||||
setp pid.1.Pgain [JOINT_1]P
|
||||
setp pid.1.Igain [JOINT_1]I
|
||||
setp pid.1.Dgain [JOINT_1]D
|
||||
setp pid.1.bias [JOINT_1]BIAS
|
||||
setp pid.1.FF0 [JOINT_1]FF0
|
||||
setp pid.1.FF1 [JOINT_1]FF1
|
||||
setp pid.1.FF2 [JOINT_1]FF2
|
||||
setp pid.1.deadband [JOINT_1]DEADBAND
|
||||
|
||||
setp pid.2.Pgain [JOINT_2]P
|
||||
setp pid.2.Igain [JOINT_2]I
|
||||
setp pid.2.Dgain [JOINT_2]D
|
||||
setp pid.2.bias [JOINT_2]BIAS
|
||||
setp pid.2.FF0 [JOINT_2]FF0
|
||||
setp pid.2.FF1 [JOINT_2]FF1
|
||||
setp pid.2.FF2 [JOINT_2]FF2
|
||||
setp pid.2.deadband [JOINT_2]DEADBAND
|
||||
|
||||
setp pid.3.Pgain [JOINT_3]P
|
||||
setp pid.3.Igain [JOINT_3]I
|
||||
setp pid.3.Dgain [JOINT_3]D
|
||||
setp pid.3.bias [JOINT_3]BIAS
|
||||
setp pid.3.FF0 [JOINT_3]FF0
|
||||
setp pid.3.FF1 [JOINT_3]FF1
|
||||
setp pid.3.FF2 [JOINT_3]FF2
|
||||
setp pid.3.deadband [JOINT_3]DEADBAND
|
||||
|
||||
# create four position command signals
|
||||
|
||||
# connect position commands to motion controller
|
||||
net Xpos-cmd <= joint.0.motor-pos-cmd
|
||||
net Ypos-cmd <= joint.1.motor-pos-cmd
|
||||
net Zpos-cmd <= joint.2.motor-pos-cmd
|
||||
net Apos-cmd <= joint.3.motor-pos-cmd
|
||||
|
||||
# connect position commands to PID input
|
||||
net Xpos-cmd => pid.0.command
|
||||
net Ypos-cmd => pid.1.command
|
||||
net Zpos-cmd => pid.2.command
|
||||
net Apos-cmd => pid.3.command
|
||||
|
||||
# create bit signals to enable/disable the PID loops
|
||||
|
||||
# connect the signals to the motion controller
|
||||
net Xenable <= joint.0.amp-enable-out
|
||||
net Yenable <= joint.1.amp-enable-out
|
||||
net Zenable <= joint.2.amp-enable-out
|
||||
net Aenable <= joint.3.amp-enable-out
|
||||
|
||||
# connect the signals to the PID blocks
|
||||
net Xenable => pid.0.enable
|
||||
net Yenable => pid.1.enable
|
||||
net Zenable => pid.2.enable
|
||||
net Aenable => pid.3.enable
|
||||
1
configs/by_interface/pico/univpwmv/README
Normal file
1
configs/by_interface/pico/univpwmv/README
Normal file
@@ -0,0 +1 @@
|
||||
A configuration for the Universal PWM COntroller board from Pico systems. This configuration includes motion connections and an IO set for handling estop within HAL. The IO configuration in univpwm_io.hal does not include signal connections for other bridgeportio like signal handling. This version takes advantage of the new UPC feature of velocity estimation to provide smoother motion, especially the functioning of the D term of the PID component.
|
||||
35
configs/by_interface/pico/univpwmv/pendant.hal
Normal file
35
configs/by_interface/pico/univpwmv/pendant.hal
Normal file
@@ -0,0 +1,35 @@
|
||||
loadrt mux4 count=1
|
||||
loadrt ilowpass
|
||||
loadrt encoder num_chan=1
|
||||
|
||||
setp ilowpass.0.scale 100
|
||||
setp ilowpass.0.gain 0.01
|
||||
|
||||
addf mux4.0 servo-thread
|
||||
addf ilowpass.0 servo-thread
|
||||
addf encoder.update-counters servo-thread
|
||||
addf encoder.capture-position servo-thread
|
||||
|
||||
net jog-x ppmc.0.din.06.in => joint.0.jog-enable
|
||||
net jog-y ppmc.0.din.07.in => joint.1.jog-enable
|
||||
net jog-z ppmc.0.din.08.in => joint.2.jog-enable
|
||||
|
||||
net x10 ppmc.0.din.09.in => mux4.0.sel0
|
||||
net x100 ppmc.0.din.10.in => mux4.0.sel1
|
||||
|
||||
setp mux4.0.in1 .00000025
|
||||
setp mux4.0.in0 .0000025
|
||||
setp mux4.0.in2 .000025
|
||||
setp mux4.0.in3 0
|
||||
|
||||
net jogscale mux4.0.out => joint.0.jog-scale
|
||||
net jogscale => joint.1.jog-scale
|
||||
net jogscale => joint.2.jog-scale
|
||||
|
||||
net mpg-a ppmc.0.din.04.in => encoder.0.phase-A
|
||||
net mpg-b ppmc.0.din.05.in => encoder.0.phase-B
|
||||
net mpg-out encoder.0.rawcounts => ilowpass.0.in
|
||||
|
||||
net jogcounts ilowpass.0.out => joint.0.jog-counts
|
||||
net jogcounts => joint.1.jog-counts
|
||||
net jogcounts => joint.2.jog-counts
|
||||
1
configs/by_interface/pico/univpwmv/spindle.hal
Normal file
1
configs/by_interface/pico/univpwmv/spindle.hal
Normal file
@@ -0,0 +1 @@
|
||||
linksp SpindleRPM pyvcp.SpindleRPM
|
||||
9
configs/by_interface/pico/univpwmv/spindle.xml
Normal file
9
configs/by_interface/pico/univpwmv/spindle.xml
Normal file
@@ -0,0 +1,9 @@
|
||||
<pyvcp>
|
||||
<label>
|
||||
<text>"Spindle Speed:"</text>
|
||||
</label>
|
||||
<bar>
|
||||
<halpin>"SpindleRPM"</halpin>
|
||||
<max_>5000</max_>
|
||||
</bar>
|
||||
</pyvcp>
|
||||
252
configs/by_interface/pico/univpwmv/univpwm.ini
Normal file
252
configs/by_interface/pico/univpwmv/univpwm.ini
Normal file
@@ -0,0 +1,252 @@
|
||||
# EMC controller parameters for UPC with threading and pendant
|
||||
# General note: Comments can either be preceded with a # or ; - either is
|
||||
# acceptable, although # is in keeping with most linux config files.
|
||||
# General section -------------------------------------------------------------
|
||||
|
||||
[EMC]
|
||||
# Version of this INI file
|
||||
VERSION = 1.1
|
||||
# Name of machine, for use with display, etc.
|
||||
MACHINE = LinuxCNC-UPC-Thread-Pendant
|
||||
# Name of NML file to use, default is emc.nml
|
||||
#NML_FILE = emc.nml
|
||||
# Debug level, 0 means no messages. See src/emc/nml_int/emcglb.h for others
|
||||
DEBUG = 0x00000001
|
||||
# DEBUG = 0x00000007
|
||||
# DEBUG = 0x7FFFFFFF
|
||||
# Sections for display options ------------------------------------------------
|
||||
|
||||
[DISPLAY]
|
||||
# Name of display program, e.g., axis
|
||||
DISPLAY = axis
|
||||
# DISPLAY = tklinuxcnc
|
||||
# Cycle time, in seconds, that display will sleep between polls
|
||||
CYCLE_TIME = 0.100
|
||||
# Path to help file
|
||||
HELP_FILE = doc/help.txt
|
||||
# Initial display setting for position, RELATIVE or MACHINE
|
||||
POSITION_OFFSET = RELATIVE
|
||||
# Initial display setting for position, COMMANDED or ACTUAL
|
||||
POSITION_FEEDBACK = ACTUAL
|
||||
# Highest value that will be allowed for feed override, 1.0 = 100%
|
||||
MAX_FEED_OVERRIDE = 1.2
|
||||
# Prefix to be used
|
||||
PROGRAM_PREFIX = ../../nc_files/
|
||||
# Introductory graphic
|
||||
INTRO_GRAPHIC = linuxcnc.gif
|
||||
INTRO_TIME = 2
|
||||
# Enable popup balloon help
|
||||
BALLOON_HELP = 1
|
||||
#spindle speed VCP
|
||||
PYVCP = spindle.xml
|
||||
# Task controller section -----------------------------------------------------
|
||||
|
||||
[FILTER]
|
||||
#No Content
|
||||
|
||||
[RS274NGC]
|
||||
# File containing interpreter variables
|
||||
PARAMETER_FILE = univpwm.var
|
||||
# Motion control section ------------------------------------------------------
|
||||
|
||||
[EMCMOT]
|
||||
EMCMOT = motmod
|
||||
# Key for real OS shared memory, e.g., for simulated motion
|
||||
SHMEM_KEY = 111
|
||||
# Timeout for comm to emcmot, in seconds
|
||||
COMM_TIMEOUT = 1.0
|
||||
# Base task period, in nanoseconds - this is the fastest thread in the machine
|
||||
BASE_PERIOD = 1000000
|
||||
# Servo task period, in nanoseconds - will be rounded to an integer multiple
|
||||
# of BASE_PERIOD
|
||||
SERVO_PERIOD = 1000000
|
||||
# Trajectory Planner task period, in nanoseconds - will be rounded to an
|
||||
# integer multiple of SERVO_PERIOD
|
||||
TRAJ_PERIOD = 10000000
|
||||
# Hardware Abstraction Layer section --------------------------------------------------
|
||||
|
||||
[TASK]
|
||||
# Name of task controller program, e.g., bridgeporttask
|
||||
TASK = milltask
|
||||
# Cycle time, in seconds, that task controller will sleep between polls
|
||||
CYCLE_TIME = 0.010
|
||||
# Part program interpreter section --------------------------------------------
|
||||
|
||||
[HAL]
|
||||
# The run script first uses halcmd to execute any HALFILE
|
||||
# files, and then to execute any individual HALCMD commands.
|
||||
#
|
||||
# list of hal config files to run through halcmd
|
||||
# files are executed in the order in which they appear
|
||||
HALFILE = univpwm_load.hal
|
||||
HALFILE = univpwm_servo.hal
|
||||
HALFILE = univpwm_io.hal
|
||||
HALFILE = univpwm_motion.hal
|
||||
HALFILE = pendant.hal
|
||||
POSTGUI_HALFILE = spindle.hal
|
||||
# list of halcmd commands to execute
|
||||
# commands are executed in the order in which they appear
|
||||
#HALCMD = save neta
|
||||
# Trajectory planner section --------------------------------------------------
|
||||
|
||||
[HALUI]
|
||||
#No Content
|
||||
|
||||
[TRAJ]
|
||||
# COORDINATES = X Y Z R P W
|
||||
COORDINATES = X Y Z
|
||||
HOME = 0 0 0
|
||||
LINEAR_UNITS = inch
|
||||
ANGULAR_UNITS = degree
|
||||
DEFAULT_LINEAR_VELOCITY = 0.15
|
||||
MAX_LINEAR_VELOCITY = 1.20
|
||||
DEFAULT_LINEAR_ACCELERATION = 5.0
|
||||
MAX_LINEAR_ACCELERATION = 5.0
|
||||
PROBE_INDEX = 0
|
||||
PROBE_POLARITY = 1
|
||||
# Axes sections ---------------------------------------------------------------
|
||||
# Important note about OUTPUT_SCALE and PWM_OUTPUT_SCALE
|
||||
# For this configuration, OUTPUT_SCALE is not used, because
|
||||
# EMC always overwrites it on shutdown. So PWM_OUTPUT_SCALE
|
||||
# was added to hold the scaling. Someday the OUTPUT_SCALE
|
||||
# issue may be fixed, and PWM_OUTPUT_SCALE will go away.
|
||||
# Scaling: The PWM_OUTPUT_SCALE should be the speed
|
||||
# in UNITS/second (inches/sec or mm/sec) that would be
|
||||
# reached if the PWM duty cycle was 100%. It depends on
|
||||
# the power supply voltage, motor RPM/Volt factor, and
|
||||
# gearing/screw pitch. For example:
|
||||
#
|
||||
# Power supply voltage 50V
|
||||
# Motor RPM/V 1000RPM/24V
|
||||
# Gearing: 2 motor revs per 1 screw rev
|
||||
# Screw pitch: 0.2" per turn
|
||||
#
|
||||
# Max motor speed = 50V * 1000RPM/24V = 2083 RPM
|
||||
# Max screw speed = 2083RPM * 1(screw)/2(motor) = 1041RPM
|
||||
# Max table speed = 1041RPM * 0.2"/turn = 208 in/min
|
||||
# Max table speed = 208 in/min / 60 seconds = 3.47 inches/sec
|
||||
#
|
||||
# Since max speed is reached at 100% duty cycle, PWM_OUTPUT_SCALE
|
||||
# should be 3.47
|
||||
# First axis
|
||||
|
||||
[EMCIO]
|
||||
# tool table file
|
||||
TOOL_TABLE = univpwm.tbl
|
||||
# section for external NML server parameters ----------------------------------
|
||||
|
||||
[KINS]
|
||||
KINEMATICS = trivkins
|
||||
JOINTS = 3
|
||||
|
||||
[AXIS_X]
|
||||
MIN_LIMIT = -12.0
|
||||
MAX_LIMIT = 0.1
|
||||
MAX_VELOCITY = 1.20
|
||||
MAX_ACCELERATION = 5.0
|
||||
|
||||
[JOINT_0]
|
||||
TYPE = LINEAR
|
||||
UNITS = 0.03937007874016
|
||||
HOME = 0.000
|
||||
MAX_VELOCITY = 1.20
|
||||
MAX_ACCELERATION = 5.0
|
||||
PID_MAX_VEL = 1.2
|
||||
BACKLASH = 0.000
|
||||
CYCLE_TIME = 0.001000
|
||||
INPUT_SCALE = -128000
|
||||
OUTPUT_SCALE = -1
|
||||
MIN_LIMIT = -12.0
|
||||
MAX_LIMIT = 0.1
|
||||
FERROR = 0.1
|
||||
MIN_FERROR = 1.0
|
||||
HOME_OFFSET = 0.0
|
||||
HOME_SEARCH_VEL = 0.5
|
||||
HOME_LATCH_VEL = 0.1
|
||||
HOME_USE_INDEX = YES
|
||||
HOME_IGNORE_LIMITS = NO
|
||||
DEADBAND = 2e-05
|
||||
P = 1000
|
||||
I = 2.5
|
||||
D = 1
|
||||
BIAS = 0
|
||||
FF0 = 0
|
||||
FF1 = 0.42
|
||||
FF2 = 0.0125
|
||||
# Second axis
|
||||
|
||||
[AXIS_Y]
|
||||
MIN_LIMIT = -10.0
|
||||
MAX_LIMIT = 10.0
|
||||
MAX_VELOCITY = 1.20
|
||||
MAX_ACCELERATION = 3.0
|
||||
|
||||
[JOINT_1]
|
||||
TYPE = LINEAR
|
||||
UNITS = 0.03937007874016
|
||||
HOME = 0.000
|
||||
MAX_VELOCITY = 1.20
|
||||
MAX_ACCELERATION = 3.0
|
||||
PID_MAX_VEL = 1.2
|
||||
BACKLASH = 0.000
|
||||
CYCLE_TIME = 0.001000
|
||||
INPUT_SCALE = -128000
|
||||
OUTPUT_SCALE = -1
|
||||
MIN_LIMIT = -10.0
|
||||
MAX_LIMIT = 10.0
|
||||
FERROR = 0.002
|
||||
MIN_FERROR = 1.005
|
||||
HOME_OFFSET = 0.0
|
||||
HOME_SEARCH_VEL = 0.0
|
||||
HOME_LATCH_VEL = 0.0
|
||||
HOME_USE_INDEX = NO
|
||||
HOME_IGNORE_LIMITS = NO
|
||||
DEADBAND = 7e-06
|
||||
P = 3000
|
||||
I = 2.5
|
||||
D = 40
|
||||
BIAS = 0
|
||||
FF0 = 0
|
||||
FF1 = 0.6
|
||||
FF2 = 0.001
|
||||
# Third axis
|
||||
|
||||
[AXIS_Z]
|
||||
MIN_LIMIT = -10.0
|
||||
MAX_LIMIT = 10.0
|
||||
MAX_VELOCITY = 1.20
|
||||
MAX_ACCELERATION = 3.0
|
||||
|
||||
[JOINT_2]
|
||||
TYPE = LINEAR
|
||||
UNITS = 0.03937007874016
|
||||
HOME = 0.0
|
||||
MAX_VELOCITY = 1.20
|
||||
MAX_ACCELERATION = 3.0
|
||||
PID_MAX_VEL = 1.2
|
||||
BACKLASH = 0.000
|
||||
CYCLE_TIME = 0.001000
|
||||
INPUT_SCALE = 128000
|
||||
OUTPUT_SCALE = 1
|
||||
MIN_LIMIT = -10.0
|
||||
MAX_LIMIT = 10.0
|
||||
FERROR = 0.002
|
||||
MIN_FERROR = 0.005
|
||||
HOME_OFFSET = 0.0
|
||||
HOME_SEARCH_VEL = 0.0
|
||||
HOME_LATCH_VEL = 0.0
|
||||
HOME_USE_INDEX = NO
|
||||
HOME_IGNORE_LIMITS = NO
|
||||
DEADBAND = 0.000075
|
||||
P = 1500
|
||||
I = 10
|
||||
D = 1.5
|
||||
BIAS = 0
|
||||
FF0 = 0
|
||||
FF1 = 0.3
|
||||
FF2 = 0.007
|
||||
# section for main IO controller parameters -----------------------------------
|
||||
|
||||
[EMCSERVER]
|
||||
# Uncomment the following line if you need to run a remote GUI.
|
||||
# EMCSERVER = emcsvr
|
||||
4
configs/by_interface/pico/univpwmv/univpwm.tbl
Normal file
4
configs/by_interface/pico/univpwmv/univpwm.tbl
Normal file
@@ -0,0 +1,4 @@
|
||||
T1 P1 D0.125000 Z+0.511000 ;1/8 end mill
|
||||
T2 P2 D0.062500 Z+0.100000 ;1/16 end mill
|
||||
T3 P3 D0.201000 Z+1.273000 ;#7 tap drill
|
||||
T99999 P99999 Z+0.100000 ;big tool number
|
||||
112
configs/by_interface/pico/univpwmv/univpwm_io.hal
Normal file
112
configs/by_interface/pico/univpwmv/univpwm_io.hal
Normal file
@@ -0,0 +1,112 @@
|
||||
# HAL config file for Pico Systems UPC board with threading
|
||||
#
|
||||
# Connect motion controller I/Os
|
||||
#
|
||||
|
||||
# connect limit/home switch outputs to motion controller
|
||||
newsig Xminlim bit
|
||||
newsig Xmaxlim bit
|
||||
newsig Xhome bit
|
||||
linksp Xminlim <= ppmc.0.din.01.in
|
||||
linksp Xminlim => joint.0.neg-lim-sw-in
|
||||
linksp Xmaxlim <= ppmc.0.din.02.in
|
||||
linksp Xmaxlim => joint.0.pos-lim-sw-in
|
||||
linksp Xhome <= ppmc.0.din.00.in
|
||||
linksp Xhome => joint.0.home-sw-in
|
||||
|
||||
newsig Yminlim bit
|
||||
newsig Ymaxlim bit
|
||||
newsig Yhome bit
|
||||
#linksp Yminlim <= ppmc.0.din.05.in
|
||||
#linksp Yminlim => joint.1.neg-lim-sw-in
|
||||
#linksp Ymaxlim <= ppmc.0.din.06.in
|
||||
#linksp Ymaxlim => joint.1.pos-lim-sw-in
|
||||
#linksp Yhome <= ppmc.0.din.04.in
|
||||
#linksp Yhome => joint.1.home-sw-in
|
||||
|
||||
newsig Zminlim bit
|
||||
newsig Zmaxlim bit
|
||||
newsig Zhome bit
|
||||
#linksp Zminlim <= ppmc.0.din.09.in
|
||||
#linksp Zminlim => joint.2.neg-lim-sw-in
|
||||
#linksp Zmaxlim <= ppmc.0.din.10.in
|
||||
#linksp Zmaxlim => joint.2.pos-lim-sw-in
|
||||
#linksp Zhome <= ppmc.0.din.08.in
|
||||
#linksp Zhome => joint.2.home-sw-in
|
||||
|
||||
newsig Aminlim bit
|
||||
newsig Amaxlim bit
|
||||
newsig Ahome bit
|
||||
linksp Aminlim <= ppmc.0.din.12.in
|
||||
linksp Aminlim => joint.3.neg-lim-sw-in
|
||||
linksp Amaxlim <= ppmc.0.din.13.in
|
||||
linksp Amaxlim => joint.3.pos-lim-sw-in
|
||||
linksp Ahome <= ppmc.0.din.11.in
|
||||
linksp Ahome => joint.3.home-sw-in
|
||||
|
||||
|
||||
# connect index pulses to motion controller
|
||||
# do these when index pulsing is figured out
|
||||
newsig Xindex bit
|
||||
newsig Yindex bit
|
||||
newsig Zindex bit
|
||||
linksp Xindex <= ppmc.0.encoder.00.index-enable
|
||||
linksp Xindex => joint.0.index-enable
|
||||
linksp Yindex <= ppmc.0.encoder.01.index-enable
|
||||
linksp Yindex => joint.1.index-enable
|
||||
linksp Zindex <= ppmc.0.encoder.02.index-enable
|
||||
linksp Zindex => joint.2.index-enable
|
||||
|
||||
#
|
||||
# Connect I/O controller I/Os
|
||||
#
|
||||
|
||||
# connect e-stop write/sense to I/O controller
|
||||
# and univpwm's fault with estop's output, so estop FF is reset, but
|
||||
# prevent continued estop signal from univpwm from holding FF cleared
|
||||
newsig ppmcEstop bit
|
||||
linksp ppmcEstop ppmc.0.din.15.in-not
|
||||
linksp ppmcEstop and2.0.in0
|
||||
newsig EstopOkIn bit
|
||||
linksp EstopOkIn estop-latch.0.fault-in
|
||||
linksp EstopOkIn and2.0.out
|
||||
newsig EstopOkOut bit
|
||||
linksp EstopOkOut <= ppmc.0.dout.07.out
|
||||
linksp EstopOkOut iocontrol.0.emc-enable-in
|
||||
linksp EstopOkOut estop-latch.0.ok-out
|
||||
linksp EstopOkOut and2.0.in1
|
||||
newsig emc-estop-out bit
|
||||
linksp emc-estop-out iocontrol.0.user-enable-out
|
||||
linksp emc-estop-out estop-latch.0.ok-in
|
||||
newsig emc-estop-reset bit
|
||||
linksp emc-estop-reset iocontrol.0.user-request-enable
|
||||
linksp emc-estop-reset estop-latch.0.reset
|
||||
|
||||
# connect spindle fwd/rev to I/O controller
|
||||
newsig SpindleFwd bit
|
||||
newsig SpindleRev bit
|
||||
linksp SpindleFwd <= ppmc.0.dout.00.out
|
||||
linksp SpindleFwd => spindle.0.forward
|
||||
linksp SpindleRev <= ppmc.0.dout.01.out
|
||||
linksp SpindleRev => spindle.0.reverse
|
||||
|
||||
# connect spindle speed up/down to I/O controller
|
||||
newsig SpindleUp bit
|
||||
newsig SpindleDown bit
|
||||
#linksp SpindleUp <= ppmc.0.dout.06.out
|
||||
#linksp SpindleUp => motion.spindle-incr-speed
|
||||
#linksp SpindleDown <= ppmc.0.dout.05.out
|
||||
#linksp SpindleDown => motion.spindle-decr-speed
|
||||
|
||||
# connect spindle brake to I/O controller
|
||||
newsig SpindleBrakeOn bit
|
||||
linksp SpindleBrakeOn <= ppmc.0.dout.02.out
|
||||
linksp SpindleBrakeOn => spindle.0.brake
|
||||
|
||||
# connect mist/flood coolant to I/O controller
|
||||
newsig MistOn bit
|
||||
newsig FloodOn bit
|
||||
linksp MistOn <= ppmc.0.dout.03.out
|
||||
linksp MistOn => iocontrol.0.coolant-mist
|
||||
linksp FloodOn <= ppmc.0.dout.04.out
|
||||
linksp FloodOn => iocontrol.0.coolant-flood
|
||||
58
configs/by_interface/pico/univpwmv/univpwm_load.hal
Normal file
58
configs/by_interface/pico/univpwmv/univpwm_load.hal
Normal file
@@ -0,0 +1,58 @@
|
||||
# loads all HAL modules for Universal PWM controller with threading
|
||||
# this version activates velocity estimation in the PPMC driver
|
||||
# with the timestamp=xx parameter in the loadrt line
|
||||
# this will only work with rev 4 UPC firmware and EMC2.4.6 or later
|
||||
|
||||
# kinematics
|
||||
loadrt [KINS]KINEMATICS
|
||||
# motion controller, get name and thread periods from ini file
|
||||
loadrt [EMCMOT]EMCMOT base_period_nsec=[EMCMOT]BASE_PERIOD servo_period_nsec=[EMCMOT]SERVO_PERIOD traj_period_nsec=[EMCMOT]SERVO_PERIOD key=[EMCMOT]SHMEM_KEY
|
||||
|
||||
# next load the PID module, for four PID loops
|
||||
loadrt pid num_chan=4
|
||||
|
||||
# install Universal PWM Controller driver
|
||||
# port_addr is the address of the parallel port data register
|
||||
# timestamp="0x00" turns on the timestamped encoder velocity feature
|
||||
# on the first PWM controller board
|
||||
# on LinuxCNC versions 2.7.9 and above, a parameter allows you to change the
|
||||
# way the EPP port is controlled. For PCIe cards using the NetMos 990x
|
||||
# chips, append epp_dir=1 to the end of the following line
|
||||
|
||||
loadrt hal_ppmc port_addr="0x378" timestamp="0x00"
|
||||
|
||||
# load realtime portion of scope, just to have it handy
|
||||
loadrt scope_rt
|
||||
|
||||
# make some signals for the scope for tuning.
|
||||
loadrt ddt count=4
|
||||
loadrt not count=1
|
||||
loadrt estop_latch count=1
|
||||
loadrt and2 count=1
|
||||
loadrt or2 count=1
|
||||
loadrt conv_s32_float count=1
|
||||
loadrt mult2 count=2
|
||||
loadrt lowpass count=1
|
||||
|
||||
# set up the realtime thread
|
||||
# read inputs first
|
||||
addf ppmc.0.read servo-thread
|
||||
# then run the motion controller
|
||||
addf motion-command-handler servo-thread
|
||||
addf and2.0 servo-thread
|
||||
addf estop-latch.0 servo-thread
|
||||
addf motion-controller servo-thread
|
||||
addf not.0 servo-thread
|
||||
# then the PID loops
|
||||
addf pid.0.do-pid-calcs servo-thread
|
||||
addf pid.1.do-pid-calcs servo-thread
|
||||
addf pid.2.do-pid-calcs servo-thread
|
||||
addf pid.3.do-pid-calcs servo-thread
|
||||
# for spindle
|
||||
addf or2.0 servo-thread
|
||||
addf conv-s32-float.0 servo-thread
|
||||
addf mult2.0 servo-thread
|
||||
addf mult2.1 servo-thread
|
||||
addf lowpass.0 servo-thread
|
||||
# write outputs last
|
||||
addf ppmc.0.write servo-thread
|
||||
99
configs/by_interface/pico/univpwmv/univpwm_motion.hal
Normal file
99
configs/by_interface/pico/univpwmv/univpwm_motion.hal
Normal file
@@ -0,0 +1,99 @@
|
||||
# HAL config file for Pico Systems UPC board using Velocity Estimation
|
||||
#
|
||||
|
||||
# set the PWM frequency to suit Pico's PWM amps (50KHz)
|
||||
# users with other amps may need to change this
|
||||
setp ppmc.0.pwm.00-03.freq 50000
|
||||
# turn on bootstrapping for the MOSFET drivers
|
||||
# this also depends on the amplifiers
|
||||
setp ppmc.0.pwm.00.bootstrap TRUE
|
||||
setp ppmc.0.pwm.01.bootstrap TRUE
|
||||
setp ppmc.0.pwm.02.bootstrap TRUE
|
||||
setp ppmc.0.pwm.03.bootstrap TRUE
|
||||
# set max duty cycle to 95% for the MOSFET drives
|
||||
# at 50KHz this corresponds to 1 us
|
||||
setp ppmc.0.pwm.00.max-dc 0.95
|
||||
setp ppmc.0.pwm.01.max-dc 0.95
|
||||
setp ppmc.0.pwm.02.max-dc 0.95
|
||||
setp ppmc.0.pwm.03.max-dc 0.95
|
||||
|
||||
setp ppmc.0.encoder.00.min-speed-estimate 0.001
|
||||
setp ppmc.0.encoder.01.min-speed-estimate 0.001
|
||||
setp ppmc.0.encoder.02.min-speed-estimate 0.001
|
||||
setp ppmc.0.encoder.03.min-speed-estimate 0.001
|
||||
|
||||
# Here's the part that connects the encoder velocity to the PID
|
||||
net Xfbderiv ppmc.0.encoder.00.velocity pid.0.feedback-deriv
|
||||
net Yfbderiv ppmc.0.encoder.01.velocity pid.1.feedback-deriv
|
||||
net Zfbderiv ppmc.0.encoder.02.velocity pid.2.feedback-deriv
|
||||
|
||||
# connect position feedback signals to encoders
|
||||
linksp Xpos-fb <= ppmc.0.encoder.00.position
|
||||
linksp Ypos-fb <= ppmc.0.encoder.01.position
|
||||
linksp Zpos-fb <= ppmc.0.encoder.02.position
|
||||
#linksp Apos-fb <= ppmc.0.encoder.03.position
|
||||
|
||||
# get feedback scaling from ini file
|
||||
setp ppmc.0.encoder.00.scale [JOINT_0]INPUT_SCALE
|
||||
setp ppmc.0.encoder.01.scale [JOINT_1]INPUT_SCALE
|
||||
setp ppmc.0.encoder.02.scale [JOINT_2]INPUT_SCALE
|
||||
setp ppmc.0.encoder.03.scale 6912
|
||||
|
||||
# connect PID output signals to PWM generators
|
||||
linksp Xoutput => ppmc.0.pwm.00.value
|
||||
linksp Youtput => ppmc.0.pwm.01.value
|
||||
linksp Zoutput => ppmc.0.pwm.02.value
|
||||
|
||||
# connect axis enables to PWM generators
|
||||
linksp Xenable => ppmc.0.pwm.00.enable
|
||||
linksp Yenable => ppmc.0.pwm.01.enable
|
||||
linksp Zenable => ppmc.0.pwm.02.enable
|
||||
|
||||
# set output scaling from ini file
|
||||
setp ppmc.0.pwm.00.scale [JOINT_0]OUTPUT_SCALE
|
||||
setp ppmc.0.pwm.01.scale [JOINT_1]OUTPUT_SCALE
|
||||
setp ppmc.0.pwm.02.scale [JOINT_2]OUTPUT_SCALE
|
||||
|
||||
# add a couple of tuning test links
|
||||
# if these are useful will want to add them to the other axes as well
|
||||
# or make these setup with the tuning script
|
||||
linkps ddt.0.in Xoutput
|
||||
linkps ddt.1.in Xpos-fb
|
||||
|
||||
newsig spindle-sync bit
|
||||
newsig spindle-index-en bit
|
||||
linksp spindle-index-en => ppmc.0.encoder.03.index-enable
|
||||
|
||||
# hook up motion controller's sync output
|
||||
linkps spindle.0.index-enable => spindle-index-en
|
||||
|
||||
# report rev count to motion controller
|
||||
newsig spindle-pos float
|
||||
linkps ppmc.0.encoder.03.position => spindle-pos
|
||||
linksp spindle-pos => spindle.0.revs
|
||||
|
||||
# set up 4th PWM generator as a spindle speed control
|
||||
newsig spindle-speed float
|
||||
newsig spindle-pwm-cmd float
|
||||
newsig spindle-pwm-filt float
|
||||
linkps spindle.0.speed-out => spindle-speed
|
||||
linksp spindle-speed => mult2.1.in0
|
||||
setp mult2.1.in1 0.0009018
|
||||
linkps mult2.1.out => spindle-pwm-cmd
|
||||
linksp spindle-pwm-cmd => lowpass.0.in
|
||||
linkps lowpass.0.out => spindle-pwm-filt
|
||||
linksp spindle-pwm-filt => ppmc.0.pwm.03.value
|
||||
setp lowpass.0.gain 0.005
|
||||
|
||||
newsig spindle-enable bit
|
||||
# SpindleFwd and SpindleRev come from univpwm_io.hal
|
||||
linksp SpindleFwd => or2.0.in0
|
||||
linksp SpindleRev => or2.0.in1
|
||||
linkps or2.0.out => spindle-enable
|
||||
linksp spindle-enable ppmc.0.pwm.03.enable
|
||||
# spindle speed display
|
||||
net spinraw ppmc.0.encoder.03.delta conv-s32-float.0.in
|
||||
net spinfloat conv-s32-float.0.out mult2.0.in0
|
||||
setp mult2.0.in1 8.6805555
|
||||
newsig SpindleRPM float
|
||||
linkps mult2.0.out => SpindleRPM
|
||||
90
configs/by_interface/pico/univpwmv/univpwm_servo.hal
Normal file
90
configs/by_interface/pico/univpwmv/univpwm_servo.hal
Normal file
@@ -0,0 +1,90 @@
|
||||
# HAL config file for servos -- expanded from core_servo.hal
|
||||
# for a full four axis setup
|
||||
|
||||
# create four position feedback signals
|
||||
newsig Xpos-fb float
|
||||
newsig Ypos-fb float
|
||||
newsig Zpos-fb float
|
||||
|
||||
# connect position feedback to PID loop
|
||||
linksp Xpos-fb => pid.0.feedback
|
||||
linksp Ypos-fb => pid.1.feedback
|
||||
linksp Zpos-fb => pid.2.feedback
|
||||
|
||||
# connect position feedback to motion module
|
||||
linksp Xpos-fb => joint.0.motor-pos-fb
|
||||
linksp Ypos-fb => joint.1.motor-pos-fb
|
||||
linksp Zpos-fb => joint.2.motor-pos-fb
|
||||
|
||||
# create PID to DAC output signals
|
||||
newsig Xoutput float
|
||||
newsig Youtput float
|
||||
newsig Zoutput float
|
||||
|
||||
# connect output signals to output of PID loops
|
||||
linksp Xoutput <= pid.0.output
|
||||
linksp Youtput <= pid.1.output
|
||||
linksp Zoutput <= pid.2.output
|
||||
setp pid.0.maxoutput [JOINT_0]PID_MAX_VEL
|
||||
|
||||
# set PID loop output limits to +/-1.00
|
||||
setp pid.1.maxoutput [JOINT_1]PID_MAX_VEL
|
||||
setp pid.2.maxoutput [JOINT_2]PID_MAX_VEL
|
||||
|
||||
# set PID loop gains
|
||||
setp pid.0.Pgain [JOINT_0]P
|
||||
setp pid.0.Igain [JOINT_0]I
|
||||
setp pid.0.Dgain [JOINT_0]D
|
||||
setp pid.0.bias [JOINT_0]BIAS
|
||||
setp pid.0.FF0 [JOINT_0]FF0
|
||||
setp pid.0.FF1 [JOINT_0]FF1
|
||||
setp pid.0.FF2 [JOINT_0]FF2
|
||||
setp pid.0.deadband [JOINT_0]DEADBAND
|
||||
|
||||
setp pid.1.Pgain [JOINT_1]P
|
||||
setp pid.1.Igain [JOINT_1]I
|
||||
setp pid.1.Dgain [JOINT_1]D
|
||||
setp pid.1.bias [JOINT_1]BIAS
|
||||
setp pid.1.FF0 [JOINT_1]FF0
|
||||
setp pid.1.FF1 [JOINT_1]FF1
|
||||
setp pid.1.FF2 [JOINT_1]FF2
|
||||
setp pid.1.deadband [JOINT_1]DEADBAND
|
||||
|
||||
setp pid.2.Pgain [JOINT_2]P
|
||||
setp pid.2.Igain [JOINT_2]I
|
||||
setp pid.2.Dgain [JOINT_2]D
|
||||
setp pid.2.bias [JOINT_2]BIAS
|
||||
setp pid.2.FF0 [JOINT_2]FF0
|
||||
setp pid.2.FF1 [JOINT_2]FF1
|
||||
setp pid.2.FF2 [JOINT_2]FF2
|
||||
setp pid.2.deadband [JOINT_2]DEADBAND
|
||||
|
||||
# create four position command signals
|
||||
newsig Xpos-cmd float
|
||||
newsig Ypos-cmd float
|
||||
newsig Zpos-cmd float
|
||||
|
||||
# connect position commands to motion controller
|
||||
linksp Xpos-cmd <= joint.0.motor-pos-cmd
|
||||
linksp Ypos-cmd <= joint.1.motor-pos-cmd
|
||||
linksp Zpos-cmd <= joint.2.motor-pos-cmd
|
||||
|
||||
# connect position commands to PID input
|
||||
linksp Xpos-cmd => pid.0.command
|
||||
linksp Ypos-cmd => pid.1.command
|
||||
linksp Zpos-cmd => pid.2.command
|
||||
|
||||
# create bit signals to enable/disable the PID loops
|
||||
newsig Xenable bit
|
||||
newsig Yenable bit
|
||||
newsig Zenable bit
|
||||
|
||||
# connect the signals to the motion controller
|
||||
linksp Xenable <= joint.0.amp-enable-out
|
||||
linksp Yenable <= joint.1.amp-enable-out
|
||||
linksp Zenable <= joint.2.amp-enable-out
|
||||
|
||||
# connect the signals to the PID blocks
|
||||
linksp Xenable => pid.0.enable
|
||||
linksp Yenable => pid.1.enable
|
||||
linksp Zenable => pid.2.enable
|
||||
1
configs/by_interface/pico/univstep/README
Normal file
1
configs/by_interface/pico/univstep/README
Normal file
@@ -0,0 +1 @@
|
||||
A configuration for the Universal Stepper card from Pico systems. This configuration includes motion connections and an IO set for handling estop within HAL. The IO configuration in univstep_io.hal does not include signal connections for other bridgeportio like signal handling.
|
||||
237
configs/by_interface/pico/univstep/univstep.ini
Normal file
237
configs/by_interface/pico/univstep/univstep.ini
Normal file
@@ -0,0 +1,237 @@
|
||||
# EMC controller parameters for generic controller. Make these what you need
|
||||
# for your system.
|
||||
# General note: Comments can either be preceded with a # or ; - either is
|
||||
# acceptable, although # is in keeping with most linux config files.
|
||||
# General section -------------------------------------------------------------
|
||||
|
||||
[EMC]
|
||||
# Version of this INI file
|
||||
VERSION = 1.1
|
||||
# Name of machine, for use with display, etc.
|
||||
MACHINE = LinuxCNC-UNIVSTEP
|
||||
# Debug level, 0 means no messages. See src/emc/nml_int/emcglb.h for others
|
||||
DEBUG = 0
|
||||
# DEBUG = 0x00000007
|
||||
# DEBUG = 0x7FFFFFFF
|
||||
# Sections for display options ------------------------------------------------
|
||||
|
||||
[DISPLAY]
|
||||
# Name of display program, e.g., axis
|
||||
DISPLAY = axis
|
||||
# DISPLAY = tklinuxcnc
|
||||
# Cycle time, in seconds, that display will sleep between polls
|
||||
CYCLE_TIME = 0.100
|
||||
# Path to help file
|
||||
HELP_FILE = tklinuxcnc.txt
|
||||
# Initial display setting for position, RELATIVE or MACHINE
|
||||
POSITION_OFFSET = RELATIVE
|
||||
# Initial display setting for position, COMMANDED or ACTUAL
|
||||
POSITION_FEEDBACK = ACTUAL
|
||||
# Highest value that will be allowed for feed override, 1.0 = 100%
|
||||
MAX_FEED_OVERRIDE = 1.2
|
||||
# Prefix to be used
|
||||
PROGRAM_PREFIX = ../../nc_files/
|
||||
# Introductory graphic
|
||||
INTRO_GRAPHIC = linuxcnc.gif
|
||||
INTRO_TIME = 2
|
||||
# Enable popup balloon help
|
||||
BALLOON_HELP = 1
|
||||
# Task controller section -----------------------------------------------------
|
||||
|
||||
[FILTER]
|
||||
#No Content
|
||||
|
||||
[RS274NGC]
|
||||
# File containing interpreter variables
|
||||
PARAMETER_FILE = univstep.var
|
||||
# Motion control section ------------------------------------------------------
|
||||
|
||||
[EMCMOT]
|
||||
EMCMOT = motmod
|
||||
# Timeout for comm to emcmot, in seconds
|
||||
COMM_TIMEOUT = 1.0
|
||||
# Servo task period, in nanoseconds
|
||||
SERVO_PERIOD = 1000000
|
||||
# Hardware Abstraction Layer section --------------------------------------------------
|
||||
|
||||
[TASK]
|
||||
# Name of task controller program, e.g., milltask
|
||||
TASK = milltask
|
||||
# Cycle time, in seconds, that task controller will sleep between polls
|
||||
CYCLE_TIME = 0.010
|
||||
# Part program interpreter section --------------------------------------------
|
||||
|
||||
[HAL]
|
||||
# The run script first uses halcmd to execute any HALFILE
|
||||
# files, and then to execute any individual HALCMD commands.
|
||||
#
|
||||
# list of hal config files to run through halcmd
|
||||
# files are executed in the order in which they appear
|
||||
HALFILE = univstep_load.hal
|
||||
HALFILE = univstep_servo.hal
|
||||
HALFILE = univstep_motion.hal
|
||||
HALFILE = univstep_io.hal
|
||||
# list of halcmd commands to execute
|
||||
# commands are executed in the order in which they appear
|
||||
#HALCMD = save neta
|
||||
# Trajectory planner section --------------------------------------------------
|
||||
|
||||
[HALUI]
|
||||
#No Content
|
||||
|
||||
[TRAJ]
|
||||
# COORDINATES = X Y Z R P W
|
||||
COORDINATES = X Y Z A
|
||||
HOME = 0 0 0 0
|
||||
LINEAR_UNITS = inch
|
||||
ANGULAR_UNITS = degree
|
||||
DEFAULT_LINEAR_VELOCITY = 0.0167
|
||||
MAX_LINEAR_VELOCITY = 1.20
|
||||
DEFAULT_LINEAR_ACCELERATION = 15.0
|
||||
MAX_LINEAR_ACCELERATION = 20.0
|
||||
# Axes sections ---------------------------------------------------------------
|
||||
# First axis
|
||||
|
||||
[EMCIO]
|
||||
# tool table file
|
||||
TOOL_TABLE = univstep.tbl
|
||||
|
||||
[KINS]
|
||||
KINEMATICS = trivkins
|
||||
JOINTS = 4
|
||||
|
||||
[AXIS_X]
|
||||
MIN_LIMIT = -10.0
|
||||
MAX_LIMIT = 10.0
|
||||
MAX_VELOCITY = 1.20
|
||||
MAX_ACCELERATION = 20.0
|
||||
|
||||
[JOINT_0]
|
||||
TYPE = LINEAR
|
||||
HOME = 0.000
|
||||
MAX_VELOCITY = 1.20
|
||||
MAX_ACCELERATION = 20.0
|
||||
PID_MAX_VEL = 1.25
|
||||
BACKLASH = 0.000
|
||||
SCALE = 4000
|
||||
OUTPUT_SCALE = 1.000
|
||||
MIN_LIMIT = -10.0
|
||||
MAX_LIMIT = 10.0
|
||||
FERROR = 0.0100
|
||||
MIN_FERROR = 0.001
|
||||
HOME_OFFSET = 0.0
|
||||
HOME_SEARCH_VEL = 0.0
|
||||
HOME_LATCH_VEL = 0.0
|
||||
HOME_USE_INDEX = NO
|
||||
HOME_IGNORE_LIMITS = NO
|
||||
DEADBAND = 0.000126
|
||||
P = 150
|
||||
I = 100
|
||||
D = 0.1
|
||||
BIAS = 0.0
|
||||
FF0 = 0
|
||||
FF1 = 1
|
||||
FF2 = 0.0
|
||||
# Second axis
|
||||
|
||||
[AXIS_Y]
|
||||
MIN_LIMIT = -10.0
|
||||
MAX_LIMIT = 10.0
|
||||
MAX_VELOCITY = 1.20
|
||||
MAX_ACCELERATION = 20.0
|
||||
|
||||
[JOINT_1]
|
||||
TYPE = LINEAR
|
||||
HOME = 0.000
|
||||
MAX_VELOCITY = 1.20
|
||||
MAX_ACCELERATION = 20.0
|
||||
PID_MAX_VEL = 1.25
|
||||
BACKLASH = 0.000
|
||||
SCALE = 4000
|
||||
OUTPUT_SCALE = 1.000
|
||||
MIN_LIMIT = -10.0
|
||||
MAX_LIMIT = 10.0
|
||||
FERROR = 0.010
|
||||
MIN_FERROR = 0.001
|
||||
HOME_OFFSET = 0.0
|
||||
HOME_SEARCH_VEL = 0.0
|
||||
HOME_LATCH_VEL = 0.0
|
||||
HOME_USE_INDEX = NO
|
||||
HOME_IGNORE_LIMITS = NO
|
||||
DEADBAND = 0.000126
|
||||
P = 150
|
||||
I = 100
|
||||
D = 0.1
|
||||
BIAS = 0.0
|
||||
FF0 = 0
|
||||
FF1 = 1
|
||||
FF2 = 0.0
|
||||
# Third axis
|
||||
|
||||
[AXIS_Z]
|
||||
MIN_LIMIT = -10.0
|
||||
MAX_LIMIT = 10.0
|
||||
MAX_VELOCITY = 1.20
|
||||
MAX_ACCELERATION = 20.0
|
||||
|
||||
[JOINT_2]
|
||||
TYPE = LINEAR
|
||||
HOME = 0.0
|
||||
MAX_VELOCITY = 1.20
|
||||
MAX_ACCELERATION = 20.0
|
||||
PID_MAX_VEL = 1.25
|
||||
BACKLASH = 0.000
|
||||
SCALE = 4000
|
||||
OUTPUT_SCALE = 1.000
|
||||
MIN_LIMIT = -10.0
|
||||
MAX_LIMIT = 10.0
|
||||
FERROR = 0.010
|
||||
MIN_FERROR = 0.001
|
||||
HOME_OFFSET = 0.0
|
||||
HOME_SEARCH_VEL = 0.0
|
||||
HOME_LATCH_VEL = 0.0
|
||||
HOME_USE_INDEX = NO
|
||||
HOME_IGNORE_LIMITS = NO
|
||||
DEADBAND = 0.000126
|
||||
P = 150
|
||||
I = 100
|
||||
D = 0.1
|
||||
BIAS = 0.0
|
||||
FF0 = 0
|
||||
FF1 = 1
|
||||
FF2 = 0.0
|
||||
# Fourth axis
|
||||
|
||||
[AXIS_A]
|
||||
MIN_LIMIT = -3600.0
|
||||
MAX_LIMIT = 3600.0
|
||||
MAX_VELOCITY = 65
|
||||
MAX_ACCELERATION = 20.0
|
||||
|
||||
[JOINT_3]
|
||||
TYPE = ANGULAR
|
||||
HOME = 0.0
|
||||
MAX_VELOCITY = 65
|
||||
MAX_ACCELERATION = 20.0
|
||||
PID_MAX_VEL = 66
|
||||
BACKLASH = 0.000
|
||||
SCALE = 11.11111111
|
||||
OUTPUT_SCALE = 1.000
|
||||
MIN_LIMIT = -3600.0
|
||||
MAX_LIMIT = 3600.0
|
||||
FERROR = 0.1
|
||||
MIN_FERROR = 0.2
|
||||
HOME_OFFSET = 0.0
|
||||
HOME_SEARCH_VEL = 0.0
|
||||
HOME_LATCH_VEL = 0.0
|
||||
HOME_USE_INDEX = NO
|
||||
HOME_IGNORE_LIMITS = NO
|
||||
DEADBAND = 0.046
|
||||
P = 150
|
||||
I = 100
|
||||
D = 0.1
|
||||
BIAS = 0.0
|
||||
FF0 = 0
|
||||
FF1 = 1
|
||||
FF2 = 0.0
|
||||
# section for main IO controller parameters -----------------------------------
|
||||
4
configs/by_interface/pico/univstep/univstep.tbl
Normal file
4
configs/by_interface/pico/univstep/univstep.tbl
Normal file
@@ -0,0 +1,4 @@
|
||||
T1 P1 D0.125000 Z+0.511000 ;1/8 end mill
|
||||
T2 P2 D0.062500 Z+0.100000 ;1/16 end mill
|
||||
T3 P3 D0.201000 Z+1.273000 ;#7 tap drill
|
||||
T99999 P99999 Z+0.100000 ;big tool number
|
||||
82
configs/by_interface/pico/univstep/univstep_io.hal
Normal file
82
configs/by_interface/pico/univstep/univstep_io.hal
Normal file
@@ -0,0 +1,82 @@
|
||||
# HAL config file for Pico Systems USC board
|
||||
#
|
||||
# Connect motion controller I/Os
|
||||
#
|
||||
|
||||
# connect limit/home switch outputs to motion controller
|
||||
net Xminlim <= ppmc.0.din.01.in
|
||||
net Xminlim => joint.0.neg-lim-sw-in
|
||||
net Xmaxlim <= ppmc.0.din.02.in
|
||||
net Xmaxlim => joint.0.pos-lim-sw-in
|
||||
net Xhome <= ppmc.0.din.00.in
|
||||
net Xhome => joint.0.home-sw-in
|
||||
|
||||
net Yminlim <= ppmc.0.din.05.in
|
||||
net Yminlim => joint.1.neg-lim-sw-in
|
||||
net Ymaxlim <= ppmc.0.din.06.in
|
||||
net Ymaxlim => joint.1.pos-lim-sw-in
|
||||
net Yhome <= ppmc.0.din.04.in
|
||||
net Yhome => joint.1.home-sw-in
|
||||
|
||||
net Zminlim <= ppmc.0.din.09.in
|
||||
net Zminlim => joint.2.neg-lim-sw-in
|
||||
net Zmaxlim <= ppmc.0.din.10.in
|
||||
net Zmaxlim => joint.2.pos-lim-sw-in
|
||||
net Zhome <= ppmc.0.din.08.in
|
||||
net Zhome => joint.2.home-sw-in
|
||||
|
||||
net Aminlim <= ppmc.0.din.12.in
|
||||
net Aminlim => joint.3.neg-lim-sw-in
|
||||
net Amaxlim <= ppmc.0.din.13.in
|
||||
net Amaxlim => joint.3.pos-lim-sw-in
|
||||
net Ahome <= ppmc.0.din.11.in
|
||||
net Ahome => joint.3.home-sw-in
|
||||
|
||||
|
||||
# connect index pulses to motion controller
|
||||
# uncomment these lines only if you have a Rev 2 USC board
|
||||
#newsig Xindex bit
|
||||
#newsig Yindex bit
|
||||
#newsig Zindex bit
|
||||
#linksp Xindex <= ppmc.0.encoder.00.index-enable
|
||||
#linksp Xindex => joint.0.index-enable
|
||||
#linksp Yindex <= ppmc.0.encoder.01.index-enable
|
||||
#linksp Yindex => joint.1.index-enable
|
||||
#linksp Zindex <= ppmc.0.encoder.02.index-enable
|
||||
#linksp Zindex => joint.2.index-enable
|
||||
|
||||
#
|
||||
# Connect I/O controller I/Os
|
||||
#
|
||||
|
||||
# connect e-stop write/sense to I/O controller
|
||||
# and univstep's fault with estop's output, so estop FF is reset, but
|
||||
# prevent continued estop signal from univstep from holding FF cleared
|
||||
net ppmcEstop ppmc.0.din.15.in-not
|
||||
net ppmcEstop and2.0.in0
|
||||
net EstopOkIn estop-latch.0.fault-in
|
||||
net EstopOkIn and2.0.out
|
||||
net EstopOkOut <= ppmc.0.dout.07.out
|
||||
net EstopOkOut iocontrol.0.emc-enable-in
|
||||
net EstopOkOut estop-latch.0.ok-out
|
||||
net EstopOkOut and2.0.in1
|
||||
net emc-estop-out iocontrol.0.user-enable-out
|
||||
net emc-estop-out estop-latch.0.ok-in
|
||||
net emc-estop-reset iocontrol.0.user-request-enable
|
||||
net emc-estop-reset estop-latch.0.reset
|
||||
|
||||
# connect spindle fwd/rev to I/O controller
|
||||
net SpindleFwd <= ppmc.0.dout.00.out
|
||||
net SpindleFwd => spindle.0.forward
|
||||
net SpindleRev <= ppmc.0.dout.01.out
|
||||
net SpindleRev => spindle.0.reverse
|
||||
|
||||
# connect spindle brake to I/O controller
|
||||
net SpindleBrakeOn <= ppmc.0.dout.02.out
|
||||
net SpindleBrakeOn => spindle.0.brake
|
||||
|
||||
# connect mist/flood coolant to I/O controller
|
||||
net MistOn <= ppmc.0.dout.03.out
|
||||
net MistOn => iocontrol.0.coolant-mist
|
||||
net FloodOn <= ppmc.0.dout.04.out
|
||||
net FloodOn => iocontrol.0.coolant-flood
|
||||
41
configs/by_interface/pico/univstep/univstep_load.hal
Normal file
41
configs/by_interface/pico/univstep/univstep_load.hal
Normal file
@@ -0,0 +1,41 @@
|
||||
# sample file pulls all load commands into a single file
|
||||
# when emc2 starts it loads iocontrol
|
||||
|
||||
# kinematics
|
||||
loadrt [KINS]KINEMATICS
|
||||
# motion controller, get name and thread periods from ini file
|
||||
loadrt [EMCMOT]EMCMOT servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[KINS]JOINTS
|
||||
|
||||
# next load the PID module, for four PID loops
|
||||
loadrt pid num_chan=4
|
||||
|
||||
# install driver
|
||||
#if the stepper controller is not connected to the standard parallel port
|
||||
# at address 0x378, add port_addr="0x1234" to the following line after a space
|
||||
# on LinuxCNC versions 2.7.9 and above, a parameter allows you to change the
|
||||
# way the EPP port is controlled. For PCIe cards using the NetMos 990x
|
||||
# chips, append epp_dir=1 to the end of the following line
|
||||
|
||||
loadrt hal_ppmc
|
||||
|
||||
# make some signals for the scope for tuning.
|
||||
loadrt ddt count=4
|
||||
# add components for E-stop logic
|
||||
loadrt estop_latch count=1
|
||||
loadrt and2 count=1
|
||||
|
||||
# set up the realtime thread
|
||||
# read inputs first
|
||||
addf ppmc.0.read servo-thread
|
||||
# then run the motion controller
|
||||
addf motion-command-handler servo-thread
|
||||
addf and2.0 servo-thread
|
||||
addf estop-latch.0 servo-thread
|
||||
addf motion-controller servo-thread
|
||||
# then the PID loops
|
||||
addf pid.0.do-pid-calcs servo-thread
|
||||
addf pid.1.do-pid-calcs servo-thread
|
||||
addf pid.2.do-pid-calcs servo-thread
|
||||
addf pid.3.do-pid-calcs servo-thread
|
||||
# write outputs last
|
||||
addf ppmc.0.write servo-thread
|
||||
47
configs/by_interface/pico/univstep/univstep_motion.hal
Normal file
47
configs/by_interface/pico/univstep/univstep_motion.hal
Normal file
@@ -0,0 +1,47 @@
|
||||
# HAL config file for Pico Systems USC board
|
||||
|
||||
# set sane pulse timing - these are basically Gecko numbers
|
||||
# both pulse width and space are set to 3.5 uS, to prevent
|
||||
# problems if the outputs are inverted externally
|
||||
setp ppmc.0.stepgen.00-03.pulse-width-ns 3500
|
||||
setp ppmc.0.stepgen.00-03.pulse-space-min-ns 3500
|
||||
# setup time is set to 1 uS
|
||||
setp ppmc.0.stepgen.00-03.setup-time-ns 1000
|
||||
|
||||
# connect position feedback signals to encoders
|
||||
net Xpos-fb <= ppmc.0.encoder.00.position
|
||||
net Ypos-fb <= ppmc.0.encoder.01.position
|
||||
net Zpos-fb <= ppmc.0.encoder.02.position
|
||||
net Apos-fb <= ppmc.0.encoder.03.position
|
||||
|
||||
# get feedback scaling from ini file
|
||||
setp ppmc.0.encoder.00.scale [JOINT_0]SCALE
|
||||
setp ppmc.0.encoder.01.scale [JOINT_1]SCALE
|
||||
setp ppmc.0.encoder.02.scale [JOINT_2]SCALE
|
||||
setp ppmc.0.encoder.03.scale [JOINT_3]SCALE
|
||||
|
||||
# connect PID output signals to step generators
|
||||
net Xoutput => ppmc.0.stepgen.00.velocity
|
||||
net Youtput => ppmc.0.stepgen.01.velocity
|
||||
net Zoutput => ppmc.0.stepgen.02.velocity
|
||||
net Aoutput => ppmc.0.stepgen.03.velocity
|
||||
|
||||
# connect axis enables to step generators
|
||||
net Xenable => ppmc.0.stepgen.00.enable
|
||||
net Yenable => ppmc.0.stepgen.01.enable
|
||||
net Zenable => ppmc.0.stepgen.02.enable
|
||||
net Aenable => ppmc.0.stepgen.03.enable
|
||||
|
||||
# set output scaling from ini file
|
||||
# input and output scales should (normally) be the same for a USC
|
||||
setp ppmc.0.stepgen.00.scale [JOINT_0]SCALE
|
||||
setp ppmc.0.stepgen.01.scale [JOINT_1]SCALE
|
||||
setp ppmc.0.stepgen.02.scale [JOINT_2]SCALE
|
||||
setp ppmc.0.stepgen.03.scale [JOINT_3]SCALE
|
||||
|
||||
# add a couple of tuning test links
|
||||
# if these are useful will want to add them to the other axes as well
|
||||
# or make these setup with the tuning script
|
||||
net Xoutput ddt.0.in
|
||||
net Xpos-fb ddt.1.in
|
||||
|
||||
95
configs/by_interface/pico/univstep/univstep_servo.hal
Normal file
95
configs/by_interface/pico/univstep/univstep_servo.hal
Normal file
@@ -0,0 +1,95 @@
|
||||
# HAL config file for servos -- expanded from core_servo.hal
|
||||
# for a full four axis setup
|
||||
|
||||
# create four position feedback signals
|
||||
|
||||
# connect position feedback to PID loop
|
||||
net Xpos-fb => pid.0.feedback
|
||||
net Ypos-fb => pid.1.feedback
|
||||
net Zpos-fb => pid.2.feedback
|
||||
net Apos-fb => pid.3.feedback
|
||||
|
||||
# connect position feedback to motion module
|
||||
net Xpos-fb => joint.0.motor-pos-fb
|
||||
net Ypos-fb => joint.1.motor-pos-fb
|
||||
net Zpos-fb => joint.2.motor-pos-fb
|
||||
net Apos-fb => joint.3.motor-pos-fb
|
||||
|
||||
# create PID to DAC output signals
|
||||
|
||||
# connect output signals to output of PID loops
|
||||
net Xoutput <= pid.0.output
|
||||
net Youtput <= pid.1.output
|
||||
net Zoutput <= pid.2.output
|
||||
net Aoutput <= pid.3.output
|
||||
|
||||
# set PID loop output limits to +/-1.00
|
||||
setp pid.0.maxoutput [JOINT_0]PID_MAX_VEL
|
||||
setp pid.1.maxoutput [JOINT_1]PID_MAX_VEL
|
||||
setp pid.2.maxoutput [JOINT_2]PID_MAX_VEL
|
||||
setp pid.3.maxoutput [JOINT_3]PID_MAX_VEL
|
||||
|
||||
# set PID loop gains
|
||||
setp pid.0.Pgain [JOINT_0]P
|
||||
setp pid.0.Igain [JOINT_0]I
|
||||
setp pid.0.Dgain [JOINT_0]D
|
||||
setp pid.0.bias [JOINT_0]BIAS
|
||||
setp pid.0.FF0 [JOINT_0]FF0
|
||||
setp pid.0.FF1 [JOINT_0]FF1
|
||||
setp pid.0.FF2 [JOINT_0]FF2
|
||||
setp pid.0.deadband [JOINT_0]DEADBAND
|
||||
|
||||
setp pid.1.Pgain [JOINT_1]P
|
||||
setp pid.1.Igain [JOINT_1]I
|
||||
setp pid.1.Dgain [JOINT_1]D
|
||||
setp pid.1.bias [JOINT_1]BIAS
|
||||
setp pid.1.FF0 [JOINT_1]FF0
|
||||
setp pid.1.FF1 [JOINT_1]FF1
|
||||
setp pid.1.FF2 [JOINT_1]FF2
|
||||
setp pid.1.deadband [JOINT_1]DEADBAND
|
||||
|
||||
setp pid.2.Pgain [JOINT_2]P
|
||||
setp pid.2.Igain [JOINT_2]I
|
||||
setp pid.2.Dgain [JOINT_2]D
|
||||
setp pid.2.bias [JOINT_2]BIAS
|
||||
setp pid.2.FF0 [JOINT_2]FF0
|
||||
setp pid.2.FF1 [JOINT_2]FF1
|
||||
setp pid.2.FF2 [JOINT_2]FF2
|
||||
setp pid.2.deadband [JOINT_2]DEADBAND
|
||||
|
||||
setp pid.3.Pgain [JOINT_3]P
|
||||
setp pid.3.Igain [JOINT_3]I
|
||||
setp pid.3.Dgain [JOINT_3]D
|
||||
setp pid.3.bias [JOINT_3]BIAS
|
||||
setp pid.3.FF0 [JOINT_3]FF0
|
||||
setp pid.3.FF1 [JOINT_3]FF1
|
||||
setp pid.3.FF2 [JOINT_3]FF2
|
||||
setp pid.3.deadband [JOINT_3]DEADBAND
|
||||
|
||||
# create four position command signals
|
||||
|
||||
# connect position commands to motion controller
|
||||
net Xpos-cmd <= joint.0.motor-pos-cmd
|
||||
net Ypos-cmd <= joint.1.motor-pos-cmd
|
||||
net Zpos-cmd <= joint.2.motor-pos-cmd
|
||||
net Apos-cmd <= joint.3.motor-pos-cmd
|
||||
|
||||
# connect position commands to PID input
|
||||
net Xpos-cmd => pid.0.command
|
||||
net Ypos-cmd => pid.1.command
|
||||
net Zpos-cmd => pid.2.command
|
||||
net Apos-cmd => pid.3.command
|
||||
|
||||
# create bit signals to enable/disable the PID loops
|
||||
|
||||
# connect the signals to the motion controller
|
||||
net Xenable <= joint.0.amp-enable-out
|
||||
net Yenable <= joint.1.amp-enable-out
|
||||
net Zenable <= joint.2.amp-enable-out
|
||||
net Aenable <= joint.3.amp-enable-out
|
||||
|
||||
# connect the signals to the PID blocks
|
||||
net Xenable => pid.0.enable
|
||||
net Yenable => pid.1.enable
|
||||
net Zenable => pid.2.enable
|
||||
net Aenable => pid.3.enable
|
||||
Reference in New Issue
Block a user