Spindle reverse/forward but need wait spindle stopped before change direction

33 views
Skip to first unread message

Aurelien

unread,
Nov 21, 2019, 6:15:22 PM11/21/19
to Machinekit
Hi all

Can you help me for better PID tunning i'm unsure about the gain setting.

But the most question is there a way to force waiting spindle near or axactly at 0rpm before changing direction reverse/forward ?

If you see something strange i really like to have some checking lol.

Br

parts of my hal file :
#####################################################################
# Spindel VFD closed loop with PID LOWPASS NEAR SCALE
#####################################################################

newinst pid pid-s                   # used for closed loop spindle
newinst lowpass lp-s-fb
newinst near near-s-fb              # used for spindle at speed
newinst scale scale-spindle-rpm     # used for display RPM to user

# maxerror is related to the Igain (max value possible to add by pid = Igain x maxerrorI)
setp pid-s.maxerrorI 30
setp pid-s.Pgain .01
setp pid-s.Igain 1
setp pid-s.Dgain 0
setp pid-s.bias 0
setp pid-s.FF0 1
setp pid-s.FF1 0
setp pid-s.FF2 0
setp pid-s.deadband 0
setp pid-s.maxoutput 60

setp near-s-fb.scale 1.01        # 1.01 Allow 1% / 1.1 Allow 10% for speed cmd vs real
setp lp-s-fb.gain 0.005


# --- Spindle encoder
setp hpg.encoder.00.chan.00.scale 400                     # counts per revolution
setp hpg.encoder.00.chan.00.filter 1                      # Currently unsupported, included for compatability with hm2. ????  
setp hpg.encoder.00.chan.00.index-mask 1                  # Currently unsupported, included for compatability with hm2. ????  
                                                          # disable encoder index as it is not working in pru encoder (finally seems to be ok)
#setp hpg.encoder.00.chan.00.counter-mode 0               # Quadrature mode AB default

net spindle-index-enable motion.spindle-index-enable <=> hpg.encoder.00.chan.00.index-enable pid-s.index-enable # need testing

# ---Spindle VFD closed loop with PID and compensation
net spindle-pos hpg.encoder.00.chan.00.position => motion.spindle-revs                           # report our revolution count to the motion controller
     
net spindle-vel-fb hpg.encoder.00.chan.00.velocity => lp-s-fb.in pid-s.feedback                  # report encoder speed to pid and speed filter input

net spindle-vel-fb-lp lp-s-fb.out => near-s-fb.in2  motion.spindle-speed-in scale-spindle-rpm.in # report speed filtered to motion controller + scale input
                                                                                                 # +report speed filtered to near component  = Yes/No allowed with 1% difference

net spindle-at-speed near-s-fb.out => motion.spindle-at-speed                                    # connect the near output to motion spindle-at-speed = Yes/No
setp scale-spindle-rpm.gain 60                                                                   # scale filtered speed RPSx60 = asked RPM 
net spindle-vel-rpm scale-spindle-rpm.out                                                        # create hal for user display asked RPM connected with scale



# ---"PWM 24v to opto-PNP to 0/5V" driven by pru pwmgen for now connected to speed potentiometer
# ---setup spindle control signals and soft start---
newinst limit2 lim-s-speed

setp lim-s-speed.min -3000
setp lim-s-speed.max 3000
setp lim-s-speed.maxv 12
setp hpg.pwmgen.00.out.00.scale 60
setp hpg.pwmgen.00.pwm_period 10000000                              # spec du controler ACRF16

net spindle.is-on motion.spindle-on hpg.pwmgen.00.out.00.enable     # active pwmgen only when spindle is on from motion 

net spindle-vel-cmd-rps motion.spindle-speed-out-rps lim-s-speed.in near-s-fb.in1
net spindle-vel-cmd-rps-lim lim-s-speed.out => pid-s.command
net spindle-output pid-s.output => hpg.pwmgen.00.out.00.value

net spindle-vel-cmd-rps-abs motion.spindle-speed-out-rps-abs => comp-s-cmd.in1
net spindle-vel-cmd <= motion.spindle-speed-out
net spindle-vel-cmd-rpm-abs <= motion.spindle-speed-out-abs

net spindle.is-on => pid-s.enable fur.do-6                     # output pin for enable VFD
net spindle.runs-reverse motion.spindle-reverse => fur.do-7    # output pin for reverse direction
#####################################################################


# THREADS

addf lp-s-fb servo-thread

addf near-s-fb servo-thread
#addf comp-s-cmd slow-thread          #servo-thread
addf lim-s-speed servo-thread
addf pid-s.do-pid-calcs servo-thread
addf scale-spindle-rpm slow-thread


Reply all
Reply to author
Forward
0 new messages