#******************* # SPINDLE #******************* setp pid.s.Pgain [SPINDLE_0]P setp pid.s.Igain [SPINDLE_0]I setp pid.s.Dgain [SPINDLE_0]D setp pid.s.bias [SPINDLE_0]BIAS setp pid.s.FF0 [SPINDLE_0]FF0 setp pid.s.FF1 [SPINDLE_0]FF1 setp pid.s.FF2 [SPINDLE_0]FF2 setp pid.s.deadband [SPINDLE_0]DEADBAND setp pid.s.maxoutput [SPINDLE_0]MAX_OUTPUT setp pid.s.error-previous-target true setp pid.s.maxerrorI 10 net spindle-index-trigger-in <= motion.digital-out-07 net spindle-index-trigger-in => tristate-bit.0.enable setp tristate-bit.0.in 1 net spindle-index-enable <=> tristate-bit.0.out net spindle-index-enable => pid.s.index-enable net spindle-vel-enable => pid.s.enable net spindle-vel-cmd-rpm => pid.s.command net spindle-vel-fb-rpm => pid.s.feedback net spindle-vel-output <= pid.s.output # ---digital potentionmeter output signals/setup--- setp [HMOT](CARD0).7i76.0.0.spinout-minlim [SPINDLE_0]OUTPUT_MIN_LIMIT setp [HMOT](CARD0).7i76.0.0.spinout-maxlim [SPINDLE_0]OUTPUT_MAX_LIMIT setp [HMOT](CARD0).7i76.0.0.spinout-scalemax [SPINDLE_0]OUTPUT_SCALE # spindle output is based on mux2 and sel bit net spindle-vel-output => mux2.0.in0 net spindle-output <= mux2.0.out net spindle-output => abs.1.in net spindle-output-abs <= abs.1.out net spindle-output-abs => [HMOT](CARD0).7i76.0.0.spinout net spindle-output-dir <= abs.1.is-negative net spindle-output-dir => [HMOT](CARD0).7i76.0.0.spindir # spindle enable from or2; either spindle-vel-enable or orient-enable net spindle-vel-enable => or2.4.in0 net spindle-enable <= or2.4.out net spindle-enable => [HMOT](CARD0).7i76.0.0.spinena # ---Encoder feedback signals/setup--- setp [HMOT](CARD0).encoder.00.counter-mode 0 setp [HMOT](CARD0).encoder.00.filter 1 setp [HMOT](CARD0).encoder.00.index-invert 0 setp [HMOT](CARD0).encoder.00.index-mask 0 setp [HMOT](CARD0).encoder.00.index-mask-invert 0 setp [HMOT](CARD0).encoder.00.scale [SPINDLE_0]ENCODER_SCALE net spindle-revs <= [HMOT](CARD0).encoder.00.position net spindle-vel-fb-rps <= [HMOT](CARD0).encoder.00.velocity net spindle-vel-fb-rpm <= [HMOT](CARD0).encoder.00.velocity-rpm net spindle-index-enable <=> [HMOT](CARD0).encoder.00.index-enable # ---setup spindle control signals--- net spindle-vel-cmd-rps <= spindle.0.speed-out-rps net spindle-vel-cmd-rps-abs <= spindle.0.speed-out-rps-abs net spindle-vel-cmd-rpm <= spindle.0.speed-out net spindle-vel-cmd-rpm-abs <= spindle.0.speed-out-abs net spindle-vel-enable <= spindle.0.on net spindle-cw <= spindle.0.forward net spindle-ccw <= spindle.0.reverse net spindle-brake <= spindle.0.brake net spindle-revs => spindle.0.revs net spindle-at-speed => spindle.0.at-speed net spindle-vel-fb-rps => spindle.0.speed-in net spindle-index-enable <=> spindle.0.index-enable net ALARM_VFD <= [HMOT](CARD0).7i76.0.0.input-27 net ALARM_VFD => spindle.0.amp-fault-in # ---Setup spindle at speed signals--- net spindle-vel-cmd-rps => near.0.in1 net spindle-vel-fb-rps => near.0.in2 net spindle-at-speed <= near.0.out setp near.0.scale 1.000000 setp near.0.difference 1.666667 #RMC added for spindle PID feedback setp lowpass.spindle.gain 1.000000 net spindle-vel-fb-rpm => abs.0.in net spindle-vel-fb-rpm-abs <= abs.0.out net spindle-vel-fb-rpm-abs => lowpass.spindle.in net spindle-fb-rpm-abs-filtered <= lowpass.spindle.out #******************* # ORIENT #******************* # M19 trigger orient.0.enable; pid.o enable; spinena; select analogout #net spindle-orient <= spindle.0.orient #orient command #net spindle-orient => or2.5.in0 #to orient enable #net spindle-orient => and2.6.in0 #to spindle is oriented #net orient-lock <= spindle.0.locked #net orient-lock => or2.5.in1 #to orient ennable #net orient-enable <= or2.5.out net orient-enable <= spindle.0.orient #orient command net orient-enable => orient.0.enable net orient-enable => pid.o.enable net orient-enable => or2.4.in1 #to spindle enable net orient-enable => mux2.0.sel # M19 orient angle R in to orient component net orient-angle <= spindle.0.orient-angle net orient-angle => orient.0.angle # M19 orient mode P in to orient component default 0 net orient-mode <= spindle.0.orient-mode net orient-mode => orient.0.mode # Encoder position into orient component and orient pid net spindle-revs => orient.0.position net spindle-revs => pid.o.feedback # Orient component position into orient pid net orient-command <= orient.0.command net orient-command => pid.o.command # Orient pid output to spindle analog net spindle-orient-output <= pid.o.output net spindle-orient-output => mux2.0.in1 # Orient component return that orient is complete #net orient-complete <= orient.0.is-oriented #net orient-complete => and2.6.in1 #net spindle-is-oriented <= and2.6.out net spindle-is-oriented <= orient.0.is-oriented net spindle-is-oriented => spindle.0.is-oriented net orient-lock <= spindle.0.locked setp pid.o.Pgain 2000 #[TUNE]P setp pid.o.Igain 0 #[TUNE]I setp pid.o.Dgain 160 #[TUNE]D setp pid.o.bias 0 #[TUNE]BIAS setp pid.o.FF0 0 #[TUNE]FF0 setp pid.o.FF1 0 #[TUNE]FF1 setp pid.o.FF2 0 #[TUNE]FF2 setp pid.o.deadband 0.004 #[TUNE]DEADBAND 0.0015 setp pid.o.maxoutput 210 #[TUNE]MAX_OUTPUT setp pid.o.error-previous-target true setp orient.0.tolerance 1.5 setp lincurve.0.x-val-00 -0.02 setp lincurve.0.y-val-00 1500 setp lincurve.0.x-val-01 -0.008 setp lincurve.0.y-val-01 9000 setp lincurve.0.x-val-02 -0.002 setp lincurve.0.y-val-02 0 setp lincurve.0.x-val-03 0.002 setp lincurve.0.y-val-03 0 setp lincurve.0.x-val-04 0.008 setp lincurve.0.y-val-04 9000 setp lincurve.0.x-val-05 0.02 setp lincurve.0.y-val-05 1500 net orient-lincurve-in <= pid.o.error net orient-lincurve-in => lincurve.0.in net orient-lincurve-out <= lincurve.0.out net orient-lincurve-out => pid.o.Pgain