I would say that the first critical thing to determine and accomplish is
the lowest jitter data transfers as possible via Ethernet.  Since you are
using one of the STM32 processors I would thing that DMA would be the best
method to process the packet data.

What stack are you planning to use?

On Tue, Apr 5, 2016 at 2:05 AM, Nicklas Karlsson <
[email protected]> wrote:

> The synchronization further down is the hard problem.
>
> > It may be useful to consider what hostmot2 does, before deciding whether
> > to do it the same way or differently.
>
> I currently use the hostmot2 Ethernet protocol but for stepper generator
> it would make sense with UART if fast enough. USB might also be an option.
> There are cheap power supplies for mains power readily available so I
> sometimes use USB port as power supply even though port is not used for
> communication at all.
>
> > The command to the step generator is a velocity or frequency command
> > (e.g., in units of 20ns is convenient for a DDS-type generator running
> > at 50MHz and can express step rates down to around 1/minute in a 32-bit
> > register), and the feedback is cumulative position (mod 2^32 or other
> > convenient width that doesn't overflow too often).
> >
> > In the hostmot2 hal component, the narrow position feedback register is
> > extended to a larger width such as 2^64, and divided by the scale to
> > give a position in inches, degrees, mm, or whatever.  +-2^63 counts is
> > enough that you can ignore "roll over" for approximately the length of
> > written human history -- at 25MHz step rate you have over 116 centuries
> > before the values overflow around.
>
> I think I got it correct speed out and position back.
>
> > Add to that the necessary HAL configuration to take linuxcnc's commanded
> > position and the stepgen feedback position to produce a frequency
> > command.  This can be done e.g., by a PID loop.  I think he recommends
> > FF1=1, P=1e9/servo_period_ns (so 1000 for a 1ms servo period), other
> > terms 0 as a starting point. (I think this is only documented by word of
> > mouth, unfortunately)
>
> There is no PID for stepper. I have to read source to figure out.
>
> > This already produces very good position following despite some jitter
> > in the PC.  Peter does a few additional tricks in his FPGA, like
> > actually sampling the position a bit before it expects the request for
> > position feedback to arrive, eliminating jitter of the time the position
> > feedback is taken. (this involves a PLL in the FPGA that tracks the PC's
> > servo thread frequency, plus a negative offset so that it can sample the
> > position early enough)
>
> This time synchronization is the hard problem.
>
> Jitter in the position feedback will be a problem if Linuxcnc assume there
> is no jitter. There will also be some delay which is may cause problem if
> Linuxcnc assume there are no delay.
>
> In average there should only be a small clock skew between them. It make
> sense to allow jitter within the full period because in such case dead line
> will be equal to period and this fit with real time scheduling theories.
> Timer registers in micro controllers usually have shadow registers which
> are written to real registers at hardware controlled update event and then
> jitter within period will not matter at all.
>
> If servo period is averaged and tracked it is possible to correct errors
> about assumptions period is without jitter even including the execution of
> the servo period itself. Delay is possible to compensate because micro
> controller know it will generate pulses which have not yet been generated.
>
>
> Ideally I think Linuxcnc should send a stream of stepper positions to
> micro controller. Then micro controller interpolate between the steps and
> motion get smother. With this method it would also be possible to send
> several values at once and have a receive buffer.
>
>
> > (hostmot2 the hal component also offers a mode where its input is
> > position command, but it uses a different algorithm and empirically PCW
> > says that the PID solution gives better following.  A good small project
> > in linuxcnc would be to move this pre-tuned PID loop into hostmot2 so
> > that the position mode gives following that is as good as with external
> > PID; a slightly less small project might be to pull out PID into a
> > library that could be used by PID the component but also by various
> > smart step generators such as hostmot2 that would benefit from a
> > pre-tuned PID)
> >
> > Jeff
>
>
> Nicklas Karlsson
>
>
> ------------------------------------------------------------------------------
> _______________________________________________
> 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

Reply via email to