RE: New project...PCI based servo control board





Craig wrote:

> Hi John,
>
> Sounds like we are thinking along the same lines...
> And yes, I'm certainly open to collaboration.

Great!

> At this stage, I'm envisioning a single PCI card,
> with an architecture that is very tightly coupled
> to the primary CPU. That's why I've mostly considered
> the PCI bus, despite the complexity and cost drawbacks.

> Most definitely FPGA based, because I'm sure we won't
> get it "right" the first time, at least with regard to
> feature set.

FPGA is the cheapest and smallest solution.  I'm
somewhat concerned about long term availability.
For this type of application, the design lifetime
could be many years.  I don't want to design around
a part that will go obsolete in a year or two.  I
think that can be avoided if we choose the right FPGA,
and the other advantages of FPGAs are too much to
pass up.

> Actually, I guess I'm thinking that if we can get the
> initial board design completed with just a basic set
> of functions implemented, it could "grow" over time to
> support more advanced features.

Good plan.

> Initially I was thinking of primarily including the
> functionality of the Servo to Go ISA board, with
> stepper support being something for the future.

I'm strongly in favor of providing pulse outputs from
the very beginning.  Using Geckos, pulses can drive
either servo or stepper motors.  And pulse outputs are
a purely digital, FPGA friendly solution, unlike D/A
converters.  To meet the full range of applications,
we'll need both.

If I understand EMC correctly, the update rate for the
servo loop is 1KHz.  At that frequency, perhaps an all
digital (FPGA) system could make 20KHz or higher PWM
waveforms that are filtered to generate the analog
outputs. Then no D/A converters would be needed.  A
chunk of FPGA gates could be either a pulse generator
for steppers, or a PWM generator for analog output.
Only the output signal conditioning would need to
change.

> As you probably know, the PCI bus (and associated drivers)
> are fairly complex, at least if one wants to do a full
> implementation.  Even 32 bit, 33MHz target only VHDL code
> for a FPGA instantiation is pretty pricey, but I'm working
> on some options.

I know only enough about PCI to know that I can't possibly
do a PCI design on my own.  PnP and everything else are
way beyond me.

On the other hand, my strengths are in the area of the
control hardware - D/A converters, digital I/O, pulse
generators, encoder counters, etc., plus the interface
between TTL or CMOS logic levels and the real world.
Noise, isolation, voltage swings, etc.  Digital inputs
should be isolated and I personally prefer to run 24V
thru the switches instead of 5V.  Outputs need to be
relays, either solid state or electro-mechanical.
Encoders need input buffers, power supplies, and
filtering.  And so on....

> If we can afford a large enough FPGA, there will be plenty
> of room for stepper pulse generators and GP I/O.  As you
> pointed out, there a large number of trade offs to be made
> with regard to how many features we try to include on single
> board, but that's the fun of a project like this.

> I think it's fair to say I'm pretty firmly in the "single
> board" camp, as I really want a solution that is tightly
> coupled to the motherboard. But having said that.. I guess
> we could consider "daughter" cards....:)

The signal conditioning stuff will probably force a
two board solution.  Relays switching 120V don't belong
inside a PC, and there isn't enough space on the back of
a single PC slot for all the I/O wiring if everything is
inside.  Maybe the bus interface, FPGA, etc., should be
on the PC card, with a cable (50 pin ribbon or D-shell?)
coming out of the PC to an interface card with opto-
isolators for digital input, relays or solid state
relays for digital output, and terminal blocks for the
analog and pulse outputs and encoder inputs?

The more I think about it, the more I think there are
really THREE parts to the project.  (Although they may
still wind up on only two boards.)

The central part is the basic control hardware.  This
is a mixture of D/A converters, counters, output registers
and input ports.  Except for the D/A converters, it's pure
digital and would fit in a decent FPGA, and even the
converters are only a chip or two (or use PWM and eliminate
the converters).  It would definitely fit inside the PC.
With a largish FPGA, we could provide lots of inputs,
outputs, counters, and so on, at very low cost per channel.

On one side of the control hardware is the bus interface.
You are strongly in favor of PCI, for some very good
reasons.    There are also reasons to favor other
interfaces, and I think it would be really nice if the
interface was sufficiently divided from the actual control
hardware that different interfaces could be used.

Finally, on the other side of the control hardware is the
interface to the machine.  This doesn't belong inside the
PC case, for a number of reasons.  It's also where a large
part of the cost is hidden.  The cost to provide 8, 16, or
even more TTL level digital inputs or outputs is very low.
But connecting those TTL signals to the outside world is
more expensive.  Opto-isolators and the associated caps,
resistors, and terminal blocks add up quickly.  Using
OPTO-22 type I/O blocks is easier, but even more expensive.
For outputs, the OPTO-22 blocks make more sense, but simple
electromechanical relay may still be cheaper if you can
accept their limitations.

I'd like to propose a two board system.  Board #1 contains
the bus interface and FPGA based hardware.  There could be
ISA and PCI versions that plug into a PC, and/or ethernet
or parallel port versions that mount outside the PC and
require external power supplies.  The common denominator
for all versions would be the connector to board #2.
Board #1 is a high tech board, with one or more fine
pitch FPGA chips, and possibly a fast, wide, complex
bus interface.  I would expect that people would want to
buy it already assembled.  Hopefully the price would be
under $200 for the PCI version, $150 for the ISA or
parallel port version, and maybe $200-250 for the ethernet
version.  I'm basing these prices on Jon's price for the
universal stepper controller.  This board would have a
bigger FPGA (which are getting cheaper as time goes by),
but would be smaller and not have the terminal blocks
or I/O circuits.

The connector to the I/O board would be a 60 pin ribbon
cable or some other high pin count connection.  With 60
pins, board #1 could provide a mix similar to this:

power and ground - 2 or 3 ground pins, +5V, +12V, -12V
total 5-6 pins

6-8 axis outputs - 2 pins per output - either step and
direction, or PWM analog, determined by the FPGA program
total 12-16 pins.

6-8 axis encoder inputs - 2 pins per input - either quadrature
for real encoders, or step/dir for open loop systems,
determined by the FPGA program.
total 12-16 pins

24 digital I/O lines - 1 pin per line, input or output
determined by FPGA program
total 24 pins

Board #2 is the interface board.  I see this as a low-tech
design that anyone could build.  The user would buy a bare
board and stuff it to suit their needs.  It would have
space for the signal conditioning and terminal blocks for
all the functions on the 60 pin cable, but the user would
build it to suit their exact needs.  There might even be
2 versions of the PC board - one limited to say 4 axis and
16 digital I/O, for a smaller, cheaper bare board.  The
other design would be for hexapod folks, with all 8 channels
supported.  The bare board would probably cost $50-100,
depending on quantity.  The parts cost would depend on
exactly how much I/O you need.

Comments?  Suggestions?  Flames?

John Kasunich









Date Index | Thread Index | Back to archive index | Back to Mailing List Page

Problems or questions? Contact