ppmc_servo.hal - Rotary encoder

# 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

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

linksp Apos-fb => pid.3.feedback

# connect position feedback to motion module

linksp Xpos-fb => axis.0.motor-pos-fb

linksp Ypos-fb => axis.1.motor-pos-fb

linksp Zpos-fb => axis.2.motor-pos-fb

linksp Apos-fb => axis.3.motor-pos-fb

# create PID to DAC output signals

newsig Xoutput float

newsig Youtput float

newsig Zoutput float

newsig Aoutput float

# connect output signals to output of PID loops

linksp Xoutput <= pid.0.output

linksp Youtput <= pid.1.output

linksp Zoutput <= pid.2.output

linksp Aoutput <= pid.3.output

# set PID loop output limits to +/-1.00

setp pid.0.maxoutput [AXIS_0]PID_MAX_VEL

setp pid.1.maxoutput [AXIS_1]PID_MAX_VEL

setp pid.2.maxoutput [AXIS_2]PID_MAX_VEL

setp pid.3.maxoutput [AXIS_3]PID_MAX_VEL

# set PID loop gains

setp pid.0.Pgain [AXIS_0]P

setp pid.0.Igain [AXIS_0]I

setp pid.0.Dgain [AXIS_0]D

setp pid.0.bias [AXIS_0]BIAS

setp pid.0.FF0 [AXIS_0]FF0

setp pid.0.FF1 [AXIS_0]FF1

setp pid.0.FF2 [AXIS_0]FF2

setp pid.0.deadband [AXIS_0]DEADBAND

setp pid.1.Pgain [AXIS_1]P

setp pid.1.Igain [AXIS_1]I

setp pid.1.Dgain [AXIS_1]D

setp pid.1.bias [AXIS_1]BIAS

setp pid.1.FF0 [AXIS_1]FF0

setp pid.1.FF1 [AXIS_1]FF1

setp pid.1.FF2 [AXIS_1]FF2

setp pid.1.deadband [AXIS_1]DEADBAND

setp pid.2.Pgain [AXIS_2]P

setp pid.2.Igain [AXIS_2]I

setp pid.2.Dgain [AXIS_2]D

setp pid.2.bias [AXIS_2]BIAS

setp pid.2.FF0 [AXIS_2]FF0

setp pid.2.FF1 [AXIS_2]FF1

setp pid.2.FF2 [AXIS_2]FF2

setp pid.2.deadband [AXIS_2]DEADBAND

setp pid.3.Pgain [AXIS_3]P

setp pid.3.Igain [AXIS_3]I

setp pid.3.Dgain [AXIS_3]D

setp pid.3.bias [AXIS_3]BIAS

setp pid.3.FF0 [AXIS_3]FF0

setp pid.3.FF1 [AXIS_3]FF1

setp pid.3.FF2 [AXIS_3]FF2

setp pid.3.deadband [AXIS_3]DEADBAND

# create four position command signals

newsig Xpos-cmd float

newsig Ypos-cmd float

newsig Zpos-cmd float

newsig Apos-cmd float

# connect position commands to motion controller

linksp Xpos-cmd <= axis.0.motor-pos-cmd

linksp Ypos-cmd <= axis.1.motor-pos-cmd

linksp Zpos-cmd <= axis.2.motor-pos-cmd

linksp Apos-cmd <= axis.3.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

linksp Apos-cmd => pid.3.command

# create bit signals to enable/disable the PID loops

newsig Xenable bit

newsig Yenable bit

newsig Zenable bit

newsig Aenable bit

# connect the signals to the motion controller

linksp Xenable <= axis.0.amp-enable-out

linksp Yenable <= axis.1.amp-enable-out

linksp Zenable <= axis.2.amp-enable-out

linksp Aenable <= axis.3.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

linksp Aenable => pid.3.enable