Servo tuning with voltage control

More
7 years 9 months ago #123445 by Vitran
Great news overall. I have the XZW moving and within a very tight control. The PID values were:
P 150
I 0
D 0
FF0 0
FF1 1.5
FF2 0.005

I was having challenges with enabling the spindle, but I now have it going. I can spin the spindle using an open loop of:
Code:
addf scale.0 servo-thread setp scale.0.gain 0.0025 net spindle-speed-scale motion.spindle-speed-out => scale.0.in net spindle-speed-DAC scale.0.out => hm2_5i25.0.7i77.0.1.analogout5

However, the challenge is how to close the loop. The old code on the machine did not seem to let me change the speed.

It is likely the amount of code I have uploaded/recycled/repaired in the .hal file that is causing the issue. I will next try to make a new configuration using the PNCCONFIG to make the control loop for me.

Please Log in to join the conversation.

More
7 years 9 months ago #123450 by Vitran
I figured out some, but not all, of how to make it work. If I click spin forward it will give an output voltage of 1, then if I click the +, it will go to 10V. Same in reverse.

I do not think it is doing any form of PID control now. It only has a P of 1. Is there a tuning process for spindles? The Calibration window doesn't seem to let me control the spindle inputs. I suppose I could renumber the spindle to _8 so that it would show up. I will try that tomorrow.

Please Log in to join the conversation.

More
7 years 9 months ago #123521 by Vitran
Something odd is happening with the spindle control. I am noticing that the spindle vel-fb-rps is working, but the vel-fb-rpm is not.



What can cause this and/or how can I link the two?
Code:
#******************* # SPINDLE S #******************* setp pid.s.Pgain [SPINDLE_9]P setp pid.s.Igain [SPINDLE_9]I setp pid.s.Dgain [SPINDLE_9]D setp pid.s.bias [SPINDLE_9]BIAS setp pid.s.FF0 [SPINDLE_9]FF0 setp pid.s.FF1 [SPINDLE_9]FF1 setp pid.s.FF2 [SPINDLE_9]FF2 setp pid.s.deadband [SPINDLE_9]DEADBAND setp pid.s.maxoutput [SPINDLE_9]MAX_OUTPUT setp pid.s.error-previous-target true net spindle-index-enable <=> pid.s.index-enable net spindle-enable => pid.s.enable net spindle-vel-cmd-rpm => pid.s.command net spindle-vel-fb-rpm => pid.s.feedback net spindle-output <= pid.s.output # ---PWM Generator signals/setup--- setp hm2_5i25.0.7i77.0.1.analogout5-scalemax [SPINDLE_9]OUTPUT_SCALE setp hm2_5i25.0.7i77.0.1.analogout5-minlim [SPINDLE_9]OUTPUT_MIN_LIMIT setp hm2_5i25.0.7i77.0.1.analogout5-maxlim [SPINDLE_9]OUTPUT_MAX_LIMIT net spindle-output => hm2_5i25.0.7i77.0.1.analogout5 net spindle-enable => hm2_5i25.0.7i77.0.1.spinena # ---Encoder feedback signals/setup--- setp hm2_5i25.0.encoder.00.counter-mode 0 setp hm2_5i25.0.encoder.00.filter 1 setp hm2_5i25.0.encoder.00.index-invert 0 setp hm2_5i25.0.encoder.00.index-mask 0 setp hm2_5i25.0.encoder.00.index-mask-invert 0 setp hm2_5i25.0.encoder.00.scale [SPINDLE_9]ENCODER_SCALE net spindle-revs <= hm2_5i25.0.encoder.00.position net spindle-vel-fb-rps <= hm2_5i25.0.encoder.00.velocity net spindle-index-enable <=> hm2_5i25.0.encoder.00.index-enable # ---setup spindle control signals--- net spindle-vel-cmd-rps <= motion.spindle-speed-out-rps net spindle-vel-cmd-rps-abs <= motion.spindle-speed-out-rps-abs net spindle-vel-cmd-rpm <= motion.spindle-speed-out net spindle-vel-cmd-rpm-abs <= motion.spindle-speed-out-abs net spindle-enable <= motion.spindle-on net spindle-cw <= motion.spindle-forward net spindle-ccw <= motion.spindle-reverse net spindle-brake <= motion.spindle-brake net spindle-revs => motion.spindle-revs net spindle-at-speed => motion.spindle-at-speed net spindle-vel-fb-rps => motion.spindle-speed-in net spindle-index-enable <=> motion.spindle-index-enable # ---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 3.333333

Please Log in to join the conversation.

More
7 years 9 months ago #123522 by alan_3301
add another scale with a gain of 60 and then
net spindle-vel-fb-rps => scale.x.in
net spindle-vel-fb-rpm <= scale.x.out

Please Log in to join the conversation.

More
7 years 9 months ago #124661 by shameless
Hi
I feel confused about the *.hal. I have inserted the lcec. I just don't know how to make the motor run. Could you give me some advices or any examples?

Please Log in to join the conversation.

More
7 years 9 months ago #124860 by Vitran
I am nowhere near knowledgeable about Linux CNC to give a full run down but here I will try.

HAL is where all the links happen. You say a pin has this name? Link it to something real like a hm2_5i25.0.7i77.0.0.output-00. You also load variables, like a scale. Loadrt scale.0. You can set the scale to a value in the ini file.

So when someone writes => scale.0.in, they are taking whatever is being put into scale.0 and multiplying it by the gain set on scale.0. That value can then be written to some other real or virtual pin.

So scale neess to be loaded, defined a gain, have a value put into it, then it can scale that value and give an output that you write to a pin.

Please Log in to join the conversation.

Time to create page: 0.045 seconds
Powered by Kunena Forum