On Friday 08 May 2020 18:01:41 Jon Elson wrote:
> On 05/08/2020 04:04 PM, Dan Henderson wrote:
> > Thanks Jon and Chris!
> >
> > Jon do you have a code example of the Hal filter that is needed?
>
> # set up 4th DAC generator as a spindle speed control
> newsig spindle-speed float
> newsig spindle-DAC-cmd float
> newsig spindle-DAC-filt float
> newsig spindle-DAC-abs float
> linkps motion.spindle-speed-out => spindle-speed
> linksp spindle-speed => mult2.1.in0
> setp mult2.1.in1 0.002457
> linkps mult2.1.out => spindle-DAC-cmd
> linksp spindle-DAC-cmd => lowpass.0.in
> linkps lowpass.0.out => spindle-DAC-filt
> setp lowpass.0.gain 0.005
> linksp spindle-DAC-filt => abs.0.in
> linksp spindle-DAC-abs => abs.0.out
> linksp spindle-DAC-abs => ppmc.0.DAC.03.value
>
That hal code is all, I assume, from your 2.5.4 install Jon. everything but
the setp has been deprecated, and I am not sure todays version of hal
understands those commands.
I believe that linksp and newsig have been replaced in general function with
'net' which has its own newsig function as its first argument and which
apparently assumes the properties of the 2nd argument, and can link all
the rest of the arguments as targets to send the newsig's data to. Thats if
I understand it properly. Perhaps it can auto-translate ala TWOPASS as its
loaded? IDK for sure as I have not tried to mix-n-match.
The newer syntax is more compact
So the first 2 linkps statements then becomes a single:
net spindle-speed <= motion.spindle-speed-out => mult2.1.in0
And once 'spindle-speed' is set and is encountered in a new 'net'
statement lower in the file because you need that data elsewhere it becomes:
net spindle-speed output2 output3 output4 etc etc etc
The '=>' and '<=' direction arrows are for human readability and are
ignored by hal. Me = ancient human with short term memory problems
so I use them most of the time.
> This is for my PPMC analog boards, but ppmc.0.DAC.03.value
> is the speed value sent to the drive.
> lowpass.0.gain is set to 0.005, the name of the pin is a bit
> odd, as gain is actually what sets the time constant of the
> filter. You will have to loadrt lowpass and then addf
> lowpass to the servo_thread
>
> mult2 sets up the speed factor so that the S word gives the
> right speed.
>
> Jon
this code is from a config I used quite some time, back, in 2014 TBE
to do this in my 7x12: (turn off word wrap in your reader)
# now spindle direction changes need a forced stop until it has stopped
# need an artificial zero speed for artificial offs when a dir change occurs
setp mux2.0.in0 0.00000 # zero speed when off
setp wcomp.1.min 2 # rpm, used as nearly stopped
indicator
setp wcomp.1.max 1600 # rpm, use for runaway
shutdown, feed into e-stop
# setup pid.0.command channel, with delay for startup surges, otherwise
straight thru
# describe a "net" specifier line
# type signal-name sig-src target1
target2 target3 etc
net spindle-drive0 motion.spindle-speed-out-rps
mux2.0.in1 # active speed when not stopped
net spindle-drive-switched mux2.0.out
limit2.0.in # mux feeds 0.000 into pid while stopping
# control acceleration of spindle, decel too
net kill-spindle or2.0.out #
lowpass.0.load
setp limit2.0.maxv 4 # max
delta speed per second
net spindle-drive1 limit2.0.out
abs.pid.in # all fwd to logic
net spindle-drive2 abs.pid.out
pid.0.command
# now, we need to disable the probe when an axis is homing so we can use the
probe as home contact.
net dis-home0 axis.0.homing
lut5.0.in-0
net dis-home2 axis.2.homing
lut5.0.in-1
setp lut5.0.function 0x10 # 3
input semi-xor?
net home-out lut5.0.out #
motion.probe-input
# Setup encoder for closed loop spindle speed control
setp encoder.0.counter-mode false # counts quadrature when false,
200 edges/rev from 50 slot disk
setp encoder.0.index-enable true
setp encoder.0.x4-mode true #
smoother output? Yes
setp encoder.0.position-scale 200.00 # of
edges in wheel for 1 turn
# now use encoder-velocity, redescribe "net"
# type signal-name signal-src target1
target2 target3
setp scale.0.gain 60 # sets spindle display calibration, set
at 10 rps=600 rpms
setp scale.0.offset 0.0
net spindle-feedback0 encoder.0.velocity abs.vel.in
scale.0.in
# do suicide brake staging with wcomp.0, disable if spindle on, and send its
outputs to pin-8-9 of parport
net spindle-rpm-filtered abs.tachplus.out wcomp.0.in
wcomp.1.in
net braking-med-spd wcomp.0.out and2.8.in0
or2.0.in0 # med speed brakes
net braking-slow-spd wcomp.0.under and2.9.in0
# low speed brakes
net spindle-feedback2 abs.vel.out pid.0.feedback
net tach-feed scale.0.out limit2.1.in
# to smooth tach a bit
net tach-feed-abs limit2.1.out abs.tachplus.in
# feeds custom-postgui.hal
# is spindle turning? Or overspeeding?
net spindle-is-running wcomp.1.out # not used,
yet...
net spindle-is-stopped wcomp.1.under and2.4.in1
net e-stop wcomp.1.over not.1.in
net e-stop-inv not.1.out
iocontrol.0.emc-enable-in
setp edge.0.in-edge false
setp edge.0.out-width-ns 5000000 # in nanoseconds! long enough
to see on halmeter
# now, M3->M4, or M4->M3 transition? Catch both edges of motion.spindle-reverse
setp edge.1.in-edge false
setp edge.2.in-edge true
setp edge.1.out-width-ns 5000000 # long enough to see on halmeter
setp edge.2.out-width-ns 5000000 # ditto but once proved, shorten both
to 5ms or less
# this is where we plug in the stopping brake delay lockout
# now make an M5 out of state change of motion.spindle-reverse
# detect both edges
# type sig-name sig-src target1
target2 target3
net spindle-ccw motion.spindle-reverse edge.1.in
edge.2.in flipflop.1.data
net yanother-spindle and2.5.out and2.4.in0
not.0.in
net spindle-on-cmd motion.spindle-on and2.5.in1
net dir-changedF edge.1.out-invert and2.6.in0
net dir-changedR edge.2.out-invert and2.6.in1
net spindle-M3-M4-disable and2.6.out and2.5.in0
net spindle-lockout and2.4.out flipflop.0.data
edge.0.in
net spindle-off not.0.out flipflop.0.reset
flipflop.1.reset or2.0.in1
# this one was not right, if use edge.out, no reverse startup from stopped,
# with invert, it starts in rev, stutters while reverseing, grrrr.
net spindle-on-edge edge.0.out-invert flipflop.0.clk
flipflop.1.clk
net spindle-switch flipflop.0.out pwmgen.0.enable
pid.0.enable mux2.0.sel not.2.in
# if spindle on, turn off and's
net spindle-switch-not not.2.out and2.8.in1
and2.9.in1
# now, 11/5/13 add brake kill if spindle is on, stop rattling relays when
spindle running.
net switched-med-brakes and2.8.out
parport.0.pin-08-out
net switched-slow-brakes and2.9.out
parport.0.pin-09-out
# required by axis
net dumbsig motion.spindle-speed-out
This actually used two different relays and resistors for braking. Worked but
not
to my liking, so I threw more sheckles at it in later 2014 and bought a
pwm-servo
amp from Jon which after one mod, has worked very well since. Deserves to be
said
that it Just Works. And since this was a copy/paste, just pieces of the file,
it
is incomplete and will need a batch of loadrt's and addf's added.
>
> > On Fri, May 8, 2020 at 3:58 PM Chris Albertson
> > <[email protected]>
> >
> > wrote:
> >> You have to compare the signals on BOTH sides of the interface to
> >> see what is happening. The build-in halscope can only see what
> >> has crossed the interface. Compare this to what is on the parallel
> >> port pins and also what is on the encoder side of the
> >> opto-isolators.
> >>
> >> If a new digital oscilloscope is out of budget then look at one of
> >> these: ebay.com/itm/USB-SALEAE-24M-8CH-Logic-Analyzer...
> >> <
> >> https://www.ebay.com/itm/USB-SALEAE-24M-8CH-Logic-Analyzer-24M-8-Ch
> >>annel-with-Buffer-Support-1-1-16/173828458153?hash=item2878fbc6a9:g:
> >>tDUAAOSwJiddkJ1E It is an 8-channel logic analyzer that is fast
> >> enough fo anything you will ever do with a machine tool of motion
> >> control. It has no trouble sampling Mhz class square waves. (The
> >> above is a Chinese clone of the actual Saleae unit.)
> >>
> >> Get the software for it here. You can try the software without
> >> buying the hardware but obviously can't collect data.
> >> https://www.saleae.com/downloads/
> >>
> >> The oscilloscope is best because it shows the actual analog
> >> waveform but the analyzer has more channels and has very complex
> >> triggers and can de-code serial busses
> >>
> >> On Thu, May 7, 2020 at 3:45 PM Gene Heskett <[email protected]> wrote:
> >>> On Thursday 07 May 2020 17:39:32 Dan Henderson wrote:
> >>>> Why certainly Gene (see attached). I actually have it working a
> >>>> little better now. My spindle-at-speed LED will start going
> >>>> bonkers around 1200 rpm. I'm guessing this is when the counter
> >>>> "throws up it's hands and says - I quit!" lol. The spindle will
> >>>> operate all the way to around 4700 rpm but anything above this
> >>>> and the MC-2100 shuts it down -- must be some kind of voltage
> >>>> limiter kicking in then.
> >>>
> >>> The one time I tried to use one of them was a failure, it seemed
> >>> to have a mind of its own. I made a power supply and bought one
> >>> of the pico systems pwm-servo's. Bulletproof but be sure and tell
> >>> Jon you are going to drive a PMDC spindle motor with it so he'll
> >>> add more toroids so it runs cooler when working continuously.
> >>>
> >>> That said, your config is as well laid out as any I've looked at,
> >>> and I don't see anything wrong at all. But I can also see how the
> >>> parport and its missing of the encoders signals could be all of
> >>> the higher speed problems. The 4700 limit might be the pwmgen
> >>> going to 100% duty, losing the 0% recharge pulse. You can check
> >>> that with halscope. I run more voltage than the mc2100 can muster,
> >>> so I can spin a treadmill motor up to where I worry about the cast
> >>> iron fan/pulley exploding but set limits somewhat below that,
> >>> probably around 7 grand max. Even though its geared 3/1 before it
> >>> gets near the spindle drive, its still too fast to cut steel.
> >>>
> >>> If you can set the encoder even lower you might get to a couple
> >>> thousand revs before the tach gets funkity.
> >>>
> >>> 18:40 here, I'd better go see what my missus wants for dinner.
> >>>
> >>>> On Thu, May 7, 2020 at 2:29 PM Gene Heskett
> >>>> <[email protected]>
> >>>
> >>> wrote:
> >>>>> On Thursday 07 May 2020 13:19:23 Dan Henderson wrote:
> >>>>>> I believe this is open loop. Isn’t PID only used in closed loop
> >>>>>> control?
> >>>>>
> >>>>> Its (the PID is) a waste of processor time if open loop. I don't
> >>>>> use one of those in any spindle run by a vfd, the vfd is
> >>>>> generally stiff enough control by itself. If I thread on that
> >>>>> machine, it will have a spindle encoder, but its only job is to
> >>>>> glue the axis motion being driven to cut the thread, to the
> >>>>> spindle rotation, in the case of a g33.1, going both in and out
> >>>>> of the hole. If you aren't useing a PID for the spindle, that
> >>>>> leaves motion I think.
> >>>>>
> >>>>> I think its time we saw your .hal file. Can you insert it into a
> >>>>> mail?
> >>>>>
> >>>>>> On Thu, May 7, 2020 at 11:03 AM Gene Heskett
> >>>>>> <[email protected]>
> >>>>>
> >>>>> wrote:
> >>>>>>> On Thursday 07 May 2020 11:27:57 Jon Elson wrote:
> >>>>>>>> On 05/06/2020 09:20 PM, Dan Henderson wrote:
> >>>>>>>>> I’ve confirmed the fluctuation occurs when spindle-at-speed
> >>>>>>>>> is configured. When I remove this feature, the spindle rpm
> >>>>>>>>> appears to stabilize. It’s almost like it gets caught in a
> >>>>>>>>> loop trying to chase its tail.
> >>>>>>>>
> >>>>>>>> This is VERY common in servo systems, and is due to delay in
> >>>>>>>> response of the object being controlled.
> >>>>>>>> You need to slow down the response of the PID to ignore the
> >>>>>>>> delay. This may be possible by adding
> >>>>>>>> D to it.
> >>>>>>>>
> >>>>>>>> Jon
> >>>>>>>
> >>>>>>> But my msg was that a near module generated spindle.N.at-speed
> >>>>>>> was never to be injected into any signal path leading back to
> >>>>>>> a PID. That near's output s/b only to that input to motion,
> >>>>>>> and possibly to an indicator led in the gui so the operator
> >>>>>>> can be advised if its acting funkity. Flickering could be worn
> >>>>>>> brushes in a brushed PMDC motor for instance.
> >>>>>>>
> >>>>>>> What you are describing as delays can often be fixed by the
> >>>>>>> proper re-ordering of the addf's involved for the oscillating
> >>>>>>> axis. That aspect of configuring LinuxCNC hasn't been
> >>>>>>> mentioned recently or I wouldn't even have included that
> >>>>>>> paragraph in my reply.
> >>>>>>>
> >>>>>>> And from Dan's description above, I think this is an entirely
> >>>>>>> different critter from a timeing delay.
> >>>>>>>
> >>>>>>> Cheers Jon & stay well, Gene Heskett
> >>>>>>> --
> >>>>>>> "There are four boxes to be used in defense of liberty:
> >>>>>>> soap, ballot, jury, and ammo. Please use in that order."
> >>>>>>> -Ed Howdershelt (Author)
> >>>>>>> If we desire respect for the law, we must first make the law
> >>>>>>> respectable. - Louis D. Brandeis
> >>>>>>> Genes Web page <http://geneslinuxbox.net:6309/gene>
> >>>>>>>
> >>>>>>>
> >>>>>>> _______________________________________________
> >>>>>>> Emc-users mailing list
> >>>>>>> [email protected]
> >>>>>>> https://lists.sourceforge.net/lists/listinfo/emc-users
> >>>>>>
> >>>>>> _______________________________________________
> >>>>>> Emc-users mailing list
> >>>>>> [email protected]
> >>>>>> https://lists.sourceforge.net/lists/listinfo/emc-users
> >>>>>
> >>>>> Cheers, Gene Heskett
> >>>>> --
> >>>>> "There are four boxes to be used in defense of liberty:
> >>>>> soap, ballot, jury, and ammo. Please use in that order."
> >>>>> -Ed Howdershelt (Author)
> >>>>> If we desire respect for the law, we must first make the law
> >>>>> respectable. - Louis D. Brandeis
> >>>>> Genes Web page <http://geneslinuxbox.net:6309/gene>
> >>>>>
> >>>>>
> >>>>> _______________________________________________
> >>>>> Emc-users mailing list
> >>>>> [email protected]
> >>>>> https://lists.sourceforge.net/lists/listinfo/emc-users
> >>>
> >>> Cheers, Gene Heskett
> >>> --
> >>> "There are four boxes to be used in defense of liberty:
> >>> soap, ballot, jury, and ammo. Please use in that order."
> >>> -Ed Howdershelt (Author)
> >>> If we desire respect for the law, we must first make the law
> >>> respectable. - Louis D. Brandeis
> >>> Genes Web page <http://geneslinuxbox.net:6309/gene>
> >>>
> >>>
> >>> _______________________________________________
> >>> Emc-users mailing list
> >>> [email protected]
> >>> https://lists.sourceforge.net/lists/listinfo/emc-users
> >>
> >> --
> >>
> >> Chris Albertson
> >> Redondo Beach, California
> >>
> >> _______________________________________________
> >> Emc-users mailing list
> >> [email protected]
> >> https://lists.sourceforge.net/lists/listinfo/emc-users
> >
> > _______________________________________________
> > Emc-users mailing list
> > [email protected]
> > https://lists.sourceforge.net/lists/listinfo/emc-users
>
> _______________________________________________
> Emc-users mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/emc-users
Cheers, Gene Heskett
--
"There are four boxes to be used in defense of liberty:
soap, ballot, jury, and ammo. Please use in that order."
-Ed Howdershelt (Author)
If we desire respect for the law, we must first make the law respectable.
- Louis D. Brandeis
Genes Web page <http://geneslinuxbox.net:6309/gene>
_______________________________________________
Emc-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/emc-users