linear scale and AC servo set up - sanity check

More
4 years 3 weeks ago #253678 by chienMouille
I'm super new to HAL would be kind to show me how to go about adding an extra PID? Any thing else than just the last block of code you posted? I'm imagining I should declare it as an object before and add its variables to INI, isn't it?

Please Log in to join the conversation.

More
4 years 3 weeks ago #253679 by andypugh
Somewhere near the top of the HAL will be "loadrt pid count = 3" (or something like that)
You can just double this number.
Then you need to addf the new pids to the servo-thread (look further down the HAL for lines to copy)

It is possible that your hal uses "loadrt pid names=pid.x,pid.y,pid.z" for named pids, (and you might prefer to change to that, if not) You could use pid.xi, pid.xo etc for inner and outer pid loops for each axis)
In this case you just addf the pids by name to the servo-thread, not by number.

Please Log in to join the conversation.

More
4 years 3 weeks ago #253682 by chienMouille
Ok I get some errors, probably something stupid:

./cncmilltestclassicladder1.hal:147: Unknown command 'joint.0.motor-pos-cmd'

here is the hal and ini attempts:


Attachment not found

Attachment not found

Please Log in to join the conversation.

More
4 years 3 weeks ago #253685 by chienMouille
ok, I have got it to net give errors, by commenting what seemed doubled and adding signal names. but now the servo won't move on jogs. would you check the setup?

thanks

 

Attachment not found


Attachment not found


Attachment not found

Please Log in to join the conversation.

More
4 years 3 weeks ago #253692 by andypugh
#net pid.x.output => stepgen.x.velocity-cmd

Shouldn't be commented out, you need that, but also need to add a signal name

net x-output => stepgen.x.velocity-cmd

(as that is the signal name used above for the pid.x.output) 

Please Log in to join the conversation.

More
4 years 3 weeks ago #253696 by chienMouille
but isn't it what's connected in line 134?

net x-output => hm2_7i95.0.stepgen.00.velocity-cmd

Please Log in to join the conversation.

More
4 years 3 weeks ago #253697 by andypugh
Sorry, yes.
Maybe that line (referring to a software stepgen, now I look at it) should be deleted rather than commented.

Please Log in to join the conversation.

More
4 years 3 weeks ago #253698 by chienMouille
alright I can do that but why is the servo not moving at all now? I think I probably messed up the hal config between the two PIDs no?

Please Log in to join the conversation.

More
4 years 3 weeks ago #253813 by chienMouille

Im running in step/dir from a 7i95 mesa card, with the servo driver set in position mode.

Yes, but you have the stepgen running in vocity mode, so the PID needs to output a velocity. 

Now, what you could do (and it would be an interesting experiment) would be to run the normal Mesa-style velocity PID to close the stepgen position loop, and then add an outer loop like I described with the linear scale as feedback. 

Parport setup:
Code:
joint.N.motor-pos.cmd -> stepgen.N.position-cmd stepgen.N.pos-fb -> joint.N.motor-pos-fb Common Mesa config, using external velocity PID: [code]joint.N.motor-pos.cmd -> pid.N.command pid.N.output - > stepgen.N.velocity-cmd stepgen.N.position-fb -> pid.N.feedback -> joint.N.pos-fb Alternative with scales: [code]joint.N.motor-pos-cmd -> pid.M.command pid.M.output -> pid.N.command pid.N.output - > stepgen.N.velocity-cmd stepgen.N.position-fb -> pid.N.feedback scale.M.position -> pid.M.feedback -> joint.N.motor-pos-fb
[/code][/code]
 

I tried now to clean up and follow your sketch here precisely. But servo still doesn't move. Any idea?
That's how I've connected it:
Code:
#******************* #  AXIS X JOINT 0 #******************* setp   pid.x.Pgain     [JOINT_0]P setp   pid.x.Igain     [JOINT_0]I setp   pid.x.Dgain     [JOINT_0]D setp   pid.x.bias      [JOINT_0]BIAS setp   pid.x.FF0       [JOINT_0]FF0 setp   pid.x.FF1       [JOINT_0]FF1 setp   pid.x.FF2       [JOINT_0]FF2 setp   pid.x.deadband  [JOINT_0]DEADBAND setp   pid.x.maxoutput [JOINT_0]MAX_OUTPUT setp   pid.x.error-previous-target true setp   pid.x.maxerrorI [JOINT_0]MAX_ERRORI setp   pid.x_external.Pgain     [JOINT_0]P_EX setp   pid.x_external.Igain     [JOINT_0]I_EX setp   pid.x_external.Dgain     [JOINT_0]D_EX setp   pid.x_external.bias      [JOINT_0]BIAS_EX setp   pid.x_external.FF0       [JOINT_0]FF0_EX setp   pid.x_external.FF1       [JOINT_0]FF1_EX setp   pid.x_external.FF2       [JOINT_0]FF2_EX setp   pid.x_external.deadband  [JOINT_0]DEADBAND_EX setp   pid.x_external.maxoutput [JOINT_0]MAX_OUTPUT_EX setp   pid.x_external.error-previous-target true setp   pid.x_external.maxerrorI [JOINT_0]MAX_ERRORI_EX # Step Gen signals/setup setp   hm2_7i95.0.stepgen.00.dirsetup        [JOINT_0]DIRSETUP setp   hm2_7i95.0.stepgen.00.dirhold         [JOINT_0]DIRHOLD setp   hm2_7i95.0.stepgen.00.steplen         [JOINT_0]STEPLEN setp   hm2_7i95.0.stepgen.00.stepspace       [JOINT_0]STEPSPACE setp   hm2_7i95.0.stepgen.00.position-scale  [JOINT_0]STEP_SCALE setp   hm2_7i95.0.stepgen.00.step_type        0 setp   hm2_7i95.0.stepgen.00.control-type     1 setp   hm2_7i95.0.stepgen.00.maxaccel         [JOINT_0]STEPGEN_MAXACCEL setp   hm2_7i95.0.stepgen.00.maxvel           [JOINT_0]STEPGEN_MAXVEL # -- section to calculate "real following error" loadrt sum2 count=3 addf sum2.0 servo-thread setp sum2.0.gain1 -1.0 net x-pos-cmd     => sum2.0.in0 #net my-x-pos-fb   <= hm2_7i95.0.encoder.00.position => sum2.0.in1 net x-pos-fb      => sum2.0.in1 net real-f-error  <= sum2.0.out # This setting is to limit bogus stepgen # velocity corrections caused by position # feedback sample time jitter. setp   pid.x.maxerror 0.012700 setp   pid.x_external.maxerror 0.012700 net x-index-enable  <=> pid.x.index-enable net x-enable        =>  pid.x.enable net x-ex-index-enable  <=> pid.x_external.index-enable net x-ex-enable        =>  pid.x_external.enable net x-pos-fb        =>  pid.x.feedback net x-ex-pos-fb        =>  pid.x_external.feedback # ---closedloop stepper signals--- net x-vel-cmd    <= joint.0.vel-cmd net x-pos-ex-cmd    <= joint.0.motor-pos-cmd net x-pos-ex-cmd  => pid.x_external.command net x-ex-output <=  pid.x_external.output net x-ext-output => pid.x.command net x-output     => hm2_7i95.0.stepgen.00.velocity-cmd net x-pos-fb     <= hm2_7i95.0.stepgen.00.position-fb net x-ex-pos-fb <= hm2_7i95.0.encoder.00.position net x-ex-pos-fb => joint.0.motor-pos-fb net x-enable     <= joint.0.amp-enable-out net x-enable     => hm2_7i95.0.stepgen.00.enable # ---Encoder feedback signals/setup--- setp    hm2_7i95.0.encoder.00.counter-mode 0 setp    hm2_7i95.0.encoder.00.filter 1 setp    hm2_7i95.0.encoder.00.index-invert 1 setp    hm2_7i95.0.encoder.00.index-mask 0 setp    hm2_7i95.0.encoder.00.index-mask-invert 0 setp    hm2_7i95.0.encoder.00.scale  [JOINT_0]ENCODER_SCALE #net x-index-enable    joint.0.index-enable  <=>  hm2_7i95.0.encoder.00.index-enable #net x-pos-rawcounts        <=  hm2_7i95.0.encoder.00.rawcounts
 

Please Log in to join the conversation.

More
4 years 3 weeks ago #253867 by andypugh
Sorry to abandon you, I had a bit of a busy weekend.

The first thing that I notice is that I don't think that the pid.x_external PID component is being enabled.

Both PIDs can share the x-enable signal.

change
Code:
net x-ex-index-enable <=> pid.x_external.index-enable net x-ex-enable => pid.x_external.enable net x-pos-fb => pid.x.feedback net x-ex-pos-fb => pid.x_external.feedback

to
Code:
net x-ex-index-enable <=> pid.x_external.index-enable net x-enable => pid.x_external.enable net x-pos-fb => pid.x.feedback net x-ex-pos-fb => pid.x_external.feedback

Does the linear scale have index marks? Those would be the best way to home, if they do. Otherwise you might want to remove the x-ex-index-enable net.

Please Log in to join the conversation.

Time to create page: 0.129 seconds
Powered by Kunena Forum