70 lines
2.3 KiB
Plaintext
Executable File
70 lines
2.3 KiB
Plaintext
Executable File
# counting the spindle encoder in software
|
|
loadrt encoder names=encoder_0
|
|
# simulate the encoder
|
|
loadrt sim_encoder names=sim_encoder_0
|
|
loadrt limit2 names=limit_speed
|
|
|
|
addf limit_speed servo-thread
|
|
|
|
#######################################################
|
|
# Beginning of threading related stuff
|
|
#######################################################
|
|
|
|
# spindle speed control
|
|
net spindle-speed-cmd spindle.0.speed-out => limit_speed.in
|
|
net spindle-speed-limited limit_speed.out => sim_encoder_0.speed
|
|
|
|
# simulate spindle mass
|
|
setp limit_speed.maxv 3000.0 # rpm/second
|
|
|
|
# spindle encoder
|
|
# connect encoder signals to encoder counter
|
|
net spindle-phase-A sim_encoder_0.phase-A => encoder_0.phase-A
|
|
net spindle-phase-B sim_encoder_0.phase-B => encoder_0.phase-B
|
|
net spindle-phase-Z sim_encoder_0.phase-Z => encoder_0.phase-Z
|
|
|
|
# assume 120 ppr = 480 counts/rev for the spindle
|
|
setp sim_encoder_0.ppr 12
|
|
# iocontrol output is in rpm, but sim-encoder speed is rps
|
|
setp sim_encoder_0.scale 60
|
|
# scale encoder output to read in revolutions
|
|
# (that way thread pitches can be straightforward,
|
|
# a 20 tpi thread would multiply the encoder output
|
|
# by 1/20, etc)
|
|
setp encoder_0.position-scale 48
|
|
|
|
# encoder reset control
|
|
# hook up motion controller's sync output
|
|
net spindle-index-enable spindle.0.index-enable <=> encoder_0.index-enable
|
|
|
|
# report our revolution count to the motion controller
|
|
net spindle-pos encoder_0.position => spindle.0.revs
|
|
|
|
# for spindle velocity estimate
|
|
loadrt lowpass names=lowpass_velocity
|
|
loadrt scale names=scale_to_rpm
|
|
net spindle-rps-raw encoder_0.velocity lowpass_velocity.in
|
|
net spindle-rps-filtered lowpass_velocity.out scale_to_rpm.in spindle.0.speed-in
|
|
net spindle-rpm-filtered scale_to_rpm.out
|
|
setp scale_to_rpm.gain 60
|
|
setp lowpass_velocity.gain .07
|
|
addf lowpass_velocity servo-thread
|
|
addf scale_to_rpm servo-thread
|
|
|
|
# for at-speed detection
|
|
loadrt near names=near_speed
|
|
addf near_speed servo-thread
|
|
setp near_speed.scale 1.1
|
|
setp near_speed.difference 10
|
|
net spindle-speed-cmd => near_speed.in1
|
|
net spindle-rpm-filtered => near_speed.in2
|
|
net spindle-at-speed near_speed.out spindle.0.at-speed
|
|
|
|
net spindle-fwd <= spindle.0.forward
|
|
|
|
addf encoder.capture-position servo-thread
|
|
addf sim-encoder.update-speed servo-thread
|
|
|
|
addf sim-encoder.make-pulses base-thread
|
|
addf encoder.update-counters base-thread
|