[etherlab-users] Is Ethercat Master Enough to Control Servo
Henry Bausley
hbausley at deltatau.com
Mon Sep 17 16:25:10 CEST 2012
I have been using Graeme's patch w/ xenomai in kernel mode and been
happy so far.
I create a kernel level task with
rt_task_set_periodic(&phaseclock_task,TM_NOW,phaseperiod);
And in that task I tweak the periodic tasks interval based upon the
ecrt_master_sync_slave_clocks_diff value returned from Graemes patch
ie.
phaseclock_task.thread_base.ptimer.interval =
xnarch_ns_to_tsc(phaseperiod_modifed);
I think this is what you refer to as "you have to fix the master TIMER"
I was able to control the Copley at 16kHz in torque mode w/ quadrature
encoders and on the scope I see no drift. Without the scope all I have
to
do is look at the time difference of ecrt_master_sync_slave_clocks_diff
and make sure its steady and I know its synced up.
It would be real nice to get a slave based distributed clock solution in
the repository!!!
It doesn't seem the slaves sync if the master is used as the reference
clock.
On Fri, 2012-09-14 at 21:49 +0200, Ben Yehuda, Raz wrote:
> no. I do not use Graeme Foot's patch because it is was not enough. you have to fix the master TIMER ( not the time ) as well.
>
> this is what i did:
>
> 1. Sampling sync0 - rx port0 of slave 0.
>
> 2. do the above 5 times a second.
>
> 3. calibrating hpet0 frequency according to delta = sync0 - rx port0. i chose delta=300 us . i am getting delta of +-50us in average.
> Calibration is done by speeding up hpet or decreasing down the hpet clock frequency. i calibrated my system to 250HZ, and fixed
> the hpet driver code to:
> 3.1 provide a hardware timer hook . not a simulated one. ie, not hpet[1...] but hpet0. see hpet spec for that.
> 3.2 provide ioctl to hpet to be able to decrease/increase the speed of the clock in a mild manner ( i cannot change frequency to 249 or 251,,
> it is too aggressive).
> 3.2 my cyclic task is done in kernel space in the hpet timer hook, the motion logic in user space.
>
> 4. once system is rescanned i perform a STANDARD offset calibration. ie, sampling rxport of each slave. Etherlab reads 910 from each slave, not 0x900
> as in the standard.
>
> 5. send ARMW constantly each tick. also, i am reading 910 all the time. i will be fixing it to provide 910 from each slave to be able to see
> if slaves are NOT calibrated without scope.
>
> i order to see how bad the master clock is i connected parallel wire to the master and out_b to the parallel (lpt) each time cyclic task woke.
> i connected probes to the parallel wire.
> I was able to sync 3 hilscher slaves with sync0-rxport=300us +- 50us , and 3 hilscher slaves with sync0 -rx port = 300 += 70us jitter.
> currently i testing other slaves. i still have some way to go with these patches.
>
> I use preempt rt. i am not using xenomai or rtai. and i am not using threads for transmission. once you use threads, you are subordinates your
> task the os heuristics more than in the case of hardware interrupt.
>
> ________________________________________
> From: Henry Bausley [hbausley at deltatau.com]
> Sent: Thursday, September 13, 2012 10:16 PM
> To: Ben Yehuda, Raz
> Cc: etherlab-users at etherlab.org
> Subject: Re: [etherlab-users] Is Ethercat Master Enough to Control Servo
>
> Raz,
>
> Did you use Graeme Foot's DC patch?
>
> http://lists.etherlab.org/pipermail/etherlab-users/2012/001642.html
>
>
> I found that without using the slave's clock as a reference there was
> always drift even though I have a system with low jitter and my cycles
> are performed in kernel mode. I still don't quite understand why if
> someone has a answer let me know.
>
> Using a scope we monitored the Copley sync0 interrupt and the arrival
> of the packet (Thank you for these diagnostic outputs Copley). You can
> see them drifting with respect to one another in the mpeg link.
>
> ftp://support.deltatau.com/DT-USA/Henry/CopleyEtherLAB.mp4
>
>
> This would manifest itself as a periodic growling noise in the motor
> every time the packet would arrive at the same time as the sync
> interrupt. You MAY be able to get away with this in a point to point
> application like a pick and place robot, however it would be
> unacceptable for machining.
>
> I found I could never get some amplifiers to properly sync up without
> using a slave as the reference clock. The slave timing does not seem to
> modify its self to the master's clock. Using graeme's patch and
> modifying my cycle time based on the slave's clock I was able to get rid
> of the drift you see in the scope in the mpeg and the growling noise in
> the motor.
>
> I use xenomai on PPC in kernel mode. I am not sure how well
> RT_PREEMPT would work but if the slave is used as the reference clock I
> think it might have a chance.
>
> On Wed, 2012-09-05 at 09:13 +0300, Raz Ben Yehuda wrote:
> > On Sun, 2012-09-02 at 11:47 +0200, takeshi ikeya wrote:
> > > Hi Tahir!
> > > I think ENOUGH..
> > > If you need quick response, you'd beter use it under RTAI (Linux).
> > >
> > I must add that did not find the current design suitable for moving
> > servo drives. For this reason I modified etherlab to support slave DC
> > bus time ( currently etherlab is App time based).
> >
> > >
> > > takeshi.ikeya at gmail.com
> >
>
>
>
>
>
>
> Outbound scan for Spam or Virus by Barracuda at Delta Tau
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.etherlab.org/pipermail/etherlab-users/attachments/20120917/7eeb3de3/attachment-0005.htm>
More information about the Etherlab-users
mailing list