Import LinuxCNC source tree
This commit is contained in:
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
|
||||
Reference in New Issue
Block a user