Daniel Lee wrote: > > I find that using a PC for stepping is fine for low speed stepping. I > need a device that can handle smooth stepping as well as servo upgrades. > The current EMC2 can not handle my needs of speed, smooth stepping, > expantion, as well as program loading and editing while the > machine is in operation. With a little hardware assist on the outside, the current EMC2 certainly can handle all these things at once. > Harddrive, usb RS232 port operation and video updates while running > cause irregular stepping at high stepping speeds > with the current design. > Some motherboards are hopeless for real-time. Some software components compromise the rwal-time envoronment. It has been shown that if you get the latency test to run with acceptable results, EMC2 gives good real-time performance. Have you run the latency test program? If so, you should have gotten bad results, and solved that before ever moving on to moving a machine with EMC. If you are using a laptop, then try a desktop. We have found few if any recent laptops that work for real-time.
I have always believed that forcing a PC to deliver very high step rates via software alone is just wrong, and there is some grey area above which a hardware assist is required. There are several boards available at modest cost (I make one of them, so there's your full disclosure) that move the difficult step generation task out of the CPU, and solve this problem. I also make some boards for servo motor control. USB has problems, however, in getting high rates of bidirectional transfers synchronized with an arbitrary real-time interrupt. I have done some experiments that show it can move a HELL of a lot of data, and so it seems, in theory, that open-loop stepping could be done by just sending a stream of bytes to a USB target that feeds them out on a parallel port. I've used the Cypress "EZ USB" FX chips to do this. A little board with the FX, crystal osc and maybe just using their programmable port timing logic would do everything. EMC2 currently has no way to interface to the USB host hardware from the real-time environment. And, if you want to use a USB mouse and keyboard, you have a real conflict between RT and Linux use of the ports. > If this sounds like a project to start and to define the next > generation of EMC I would like to help. > We have also been looking at the possibility of using a dedicated ethernet port for this purpose. There are a couple of advantages. 1. Ethernet is electrically isolated, so it should be more immune to electrical noise from the CNC motor drives. 2. Modern ethernet is full-duplex, so the PC => controller and PC <= controller messages won't have to share bandwidth (although in the simple case it doesn't matter). 3. Nobody will ever try to plug a mouse or keyboard into the ethernet. 4. rtnet has already been developed, it looks like a good base to interface to our our HAL environement. I have been thinking it would be quite easy to use one of the ARM7 (or ARM9) CPUs with built-in 10/100 ethernet to make an adaptor to my already existing motion-control boards, which now use the parallel port. The protocol is like this: The PC asks for position and digital input data, computes new velocities and then sends new velocity and digital output data to the board. So, every servo cycle (typically 1 ms) is sends a request, gets back a response, and then sends a command packet. What I envision in detail is that each packet sent by the PC would have a map of the registers to be read and/or written. After the map would be the bytes to be written, in order corresponding to the map. A packet of read values would be returned if there were any registers to be read. This should be a VERY short and simple code in the ARM CPU, and should execute very quickly, probably working faster than the current version does on the oh-so-slow parallel port directly. If you have any interest in working on the integration of rtnet or other real-time ethernet library to EMC/HAL, I'd be VERY interested in this. On the other hand, if you can actually figure out how to make USB work in real-time, I would ALSO be very interested in that. If you could come up with a scheme that could perform roughly the same kind of protocol as I described above, but with USB, it would also be of great interest. (Just to flesh that out, I BELIEVE, after some calculations, that it is theoretically possible to run my boards with a 10 KHz servo update rate using 100 mbit ethernet. This would require 3 small packets per servo cycle, or 30,000 per second at the 10 KHz rate. I don't have any idea of the delays involved in the rtnet protocol stack, so this may be completely impossible. There are some delays and limits inherent in the USB protocol, which puts a lot of limits (IN the HARDWARE) on what you can and can't do that may prevent this kind of rapid-fire back and forth communication.) Jon ------------------------------------------------------------------------------ Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, CA -OSBC tackles the biggest issue in open source: Open Sourcing the Enterprise -Strategies to boost innovation and cut costs with open source participation -Receive a $600 discount off the registration fee with the source code: SFAD http://p.sf.net/sfu/XcvMzF8H _______________________________________________ Emc-developers mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/emc-developers
