It's not clear whether you are using the Ebay controller of the KBMG drive. Personally I don't like the 0% DC= max revers, 50% DC = 0, 100% DC = Max forward type of control, but that's upto you. If you are still using the ebay controller why don't you just use the F/R pin on the drive to reverse the drive? The hal component motion will do like so with a gpio pin:
net spindle_dir motion.spindle-reverse => bb_gpio.pN.out-NN I assume you have your polarities all figured out by now. If you want to max duty cycle out @ 95% then it looks like: setp hpg.pwmgen.N.scale 0.95 Then make your adjustments to your drive that you are getting full speed while it's outputting 95% from BBB PWM That'll take care of the upper limit, but I wouldn't bother if I were you. Not sure what's wrong with using 0-100% if you're not using the R-0-F setup. On Monday, December 30, 2019 at 6:06:10 PM UTC-5, Aurelien wrote: > > Hi all > > Unfortunatly i have another question related to spindle : > > The linked DAC seems to work correctly with my PWM output, but need to > tweak pwm for output something like : > > 0% PWM = -3300rpm > 50% PWM = 0rpm > 100% PWM = 3300rpm > (i think i have understand that is better to not use 0% to 100% but > something like 5% to 95%) > > I have try to play with BIAS = 50 with this settings but seems to not work > fine for reversing direction. > Also try to change output_scale = 120 > > hal: > > > ##################################################################### > # 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 0 > setp pid-s.Pgain 0 > setp pid-s.Igain 1 > setp pid-s.Dgain 0 > setp pid-s.bias 50 > setp pid-s.FF0 1 > setp pid-s.FF1 0 > setp pid-s.FF2 0 > setp pid-s.deadband .05 > setp pid-s.maxoutput [SPINDLE]OUTPUT_SCALE > > > 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 [SPINDLE]ENCODER_SCALE # 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 pid-s.feedback # 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 > # ---setup spindle control signals and soft start--- > newinst limit2 lim-s-speed > > setp lim-s-speed.min -[SPINDLE]OUTPUT_MAX_LIMIT > setp lim-s-speed.max [SPINDLE]OUTPUT_MAX_LIMIT > setp lim-s-speed.maxv [SPINDLE]MAX_ACC > setp hpg.pwmgen.00.out.00.scale [SPINDLE]OUTPUT_SCALE > setp hpg.pwmgen.00.pwm_period [SPINDLE]OUTPUT_PERIOD # 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 > # WITH PID FOR WORKING > #net spindle-vel-cmd-rps-lim lim-s-speed.out => hpg.pwmgen.00.out.00.value > # WITOUT PID FOR TEST > net spindle-output pid-s.output => hpg.pwmgen.00.out.00.value > > > 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 > > > > Ini : > # Spindle > [SPINDLE] > ENCODER_SCALE = 400 > # Settings below are in Hz > OUTPUT_PERIOD = 10000000 > # Settings below are in unit/second > OUTPUT_SCALE = 60 > OUTPUT_MAX_LIMIT = 55 > # #55*60seconde = 3300rpm > MAX_ACC = 17 > > > I'm really lost with these spindle settings from long time, any help are > really welcome. > > > Ps : i hope a very good end of the years at all ! > -- website: http://www.machinekit.io blog: http://blog.machinekit.io github: https://github.com/machinekit --- You received this message because you are subscribed to the Google Groups "Machinekit" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/machinekit/05ef182a-d4ea-4561-8d4e-6b5246f98524%40googlegroups.com.
