On Monday 03 August 2015 16:52:33 Gene Heskett wrote:

An update, PS, whatever

> On Monday 03 August 2015 10:46:58 John Kasunich wrote:
> > On Mon, Aug 3, 2015, at 04:19 AM, Gene Heskett wrote:
> > > The discussion is nice, but it still doesn't get me a signal I can
> > > strobe the .hold lines with.
> >
> > In my first reply to Andy I also included something aimed at you:
> > >>    Gene:
> > >>
> > >>    If you XOR the two quadrature signals together you'll get one
> > >>    edge (rising or falling) on every transition.
> > >>
> > >>    The HAL oneshot component can be configured to produce
> > >>    a pulse on both rising and falling edges.
> >
> > Although now I see that you aren't using the software encoder
> > counter, you have a 5i25.  So that means the individual quadrature
> > signals don't exist in HAL and what I described won't work.
>
> Correct.
>
> > Which raises the question:  how fast are your quadrature signals?
> > If you are using a hardware encoder counter because your signals are
> > too fast to count in software, then your scheme is doomed from the
> > start. If they are too fast for HAL to count, they are also too fast
> > for HAL to do the summation, etc, on every quadrature edge (or every
> > fourth edge).
> >
> > Have you actually looked at a halscope trace of the velocity
> > feedback using the 5i25 counter with the spindle running at your
> > expected min and max speeds?  Do you really know how bad the jitter
> > is, and what frequency it is jittering at?  Is the dominant jitter
> > frequency one cycle per slot, or one cycle per revolution, or
> > something else?
> >
> > I don't remember every detail of every message about this encoder
> > project.  Can you repeat the basics:
> >
> > 1) what is the lowest expected operating speed
>
> 50 rpm for sensing
>
> > 2) what is the highest expected operating speed
>
> 2500 if the motor is pushed to its short term limit
>
> > 3) how many slots on the wheel
>
> 67
>
> This has to get thru one of those damned slow opto-couplers on the
> BOB's input.  Because one of them was too slow, its been excised from
> the BOB and replaced by a jumper from the opto driver to P14.  I may
> excise a few more of them before I am satisfied.
>
That will get tested yet today, by cranking the spindle wide open, in 
this case as fast as a resetable thermal in the motor will let me,
which is an s2200 the highest it will run without going into a 30
second cooldown stop about once a minute. However, the encoder says that
it is actually turning something north of 2600 revs when asked for 2200.

The motor itself is under cover, and is not kicking any noticable hot 
air out of the vents even after half an hour at 2600 indicated.  And
this is with a dc supply of only about 118 volts when the motor is off.

The bottom of the quill is by then up to about 100F in a 72F room,
those spindle bearings are shit even when loosened up from the excessive
preload they shipped with.  Before I loosened them up, it would have been
north of 150F by then.  The bearing fit is excessively tight, makes 
adjusting the preload pretty much a pad the shaft with some alu and beat 
it with a hammer, check feel, when loose, drive adjuster nut back about 
1 degree at a time until no play can be felt.  Hell of a way to run a
train IMNSHO.

> > Thanks,
> >
> > John
>
> Thanks John.
>
> > > This is what I have written so far:
> > >
and grep'ed from my working .hal

#loadrt stuff
loadrt  sample_hold names=enc0,enc1,enc2,enc3
loadrt  sum2 names=sum01,sum23,sumenc
loadrt  conv_float_s32  count=1
loadrt  conv_s32_float  count=4
loadrt  scale   names=scaleX60

#addf category

#************************************
# encoder-velocity noise filter
# arrange these to save the previous modules state, 
# otherwise it cascades thru in one cycle
addf    scaleX60        servo-thread
addf    conv-float-s32.0        servo-thread
addf    enc3    servo-thread    # so it saves enc2's output
addf    enc2    servo-thread    # so it saves enc1's output
addf    enc1    servo-thread    # so it saves enc0's output
addf    enc0    servo-thread    # so it saves encoder velocity
addf    conv-s32-float.3        servo-thread
addf    conv-s32-float.2        servo-thread
addf    conv-s32-float.1        servo-thread
addf    conv-s32-float.0        servo-thread
addf    sum01   servo-thread    # now total it up
addf    sum23   servo-thread    # ditto
addf    sumenc  servo-thread    # ditto
# end of encoder filter sequencing

#setp's needed
#***********************************
# stuff for encoder noise filter
setp    scaleX60.gain 60.000
setp    sumenc.gain0 .2500              # scale it back to unity
setp    sumenc.gain1 .2500              # scale it back to unity
setp    enc3.hold       false
setp    enc2.hold       false
setp    enc1.hold       false
setp    enc0.hold       false

#Then the working stanza stuffs

# feed enc0.in
net spindle-vel-fb-rps       <=   hm2_5i25.0.encoder.00.velocity => scaleX60.in
net spindle-index-enable     <=>  hm2_5i25.0.encoder.00.index-enable

# gotta scale it to rpms, and convert to signed 32 for Sample_hold's
net encfilter.rpm0      scaleX60.out  conv-float-s32.0.in
net encfilter.rpm1      conv-float-s32.0.out    enc0.in

net     encoderfilter-1         enc0.out                enc1.in         
conv-s32-float.3.in
net     encoderfilter-11        conv-s32-float.3.out    sum01.in0       # link 
output
net     encoderfilter-2         enc1.out                enc2.in         
conv-s32-float.2.in
net     encoderfilter-22        conv-s32-float.2.out    sum01.in1       # link 
output
net     encoderfilter-3         enc2.out                enc3.in         
conv-s32-float.1.in
net     encoderfilter-33        conv-s32-float.1.out    sum23.in0               
        
net     encoderfilter-4         enc3.out                conv-s32-float.0.in
net     encoderfilter-44        conv-s32-float.0.out    sum23.in1       # link 
output
net     encoderfilter-5         sum01.out               sumenc.in0      # put 
it all together
net     encoderfilter-6         sum23.out               sumenc.in1      # put 
it all together
net     spndl-velocity          sumenc.out              # to where ever needed, 
watch with halscope

I have not hooked sumenc.out to pid.s.feedback yet, but sumenc.out is a 
heck of a lot cleaner than scaleX60's output.  Mathematically it should 
be 4x quieter, and its at least that much quieter on the halscope view.
It pains me to have to do all that data conversion back & forth, it would
greatly simplicate things if sample_hold was float.  Now I am going to
hook it up to pid.s.feedback & see how much PGain I can use before it
starts stuttering.

Comments? Shoot me downs?

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)
Genes Web page <http://geneslinuxbox.net:6309/gene>

------------------------------------------------------------------------------
_______________________________________________
Emc-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/emc-users

Reply via email to