[Home]PPMC Board Set

LinuxCNCKnowledgeBase | RecentChanges | PageIndex | Preferences | LinuxCNC.org

The Pico Systems PPMC boards in the minimum configuration control up to 4 servo axes powered by a servo amplifier that accepts an analog velocity command signal. (This system can be expanded by plugging additional boards into the motherboard, to handle more than 4 axes, additional I/O, extra encoders for spindle or MPG, etc.)

The DAC board produces +/- 10 V velocity command signals. The encoder board can take either single-ended or differential quadrature signals from the encoder. It will also take an index signal, if present. This board has 4 axes of 24-bit encoder counters to read position from the encoders. LinuxCNC will sign-extend and overflow the 24-bit count to a signed 32-bit integer and then convert to a floating-point value. The digital filter on the encoder inputs limits the encoder count rate to roughly 500,000 counts/second (per axis). If you should need a higher count rate, a simple change can allow this to be increased.

The Digital I/O board has 17 opto-isolated digital inputs and positions where up to 8 solid state relays can be installed. (The last digital input controls the e-stop logic.) These input pins can be wired through any N.C. overtravel switches, manual E-stop (N.C.) switches and axis fault circuits (again, N.C.). When the entire chain is a closed circuit, the green LED will light, and LinuxCNC will know it is OK to come out of estop. The 8 SSR positions are controlled by LinuxCNC, and can be assigned in the appropriate HAL file to particular functions, such as spindle, coolant, etc. The SSRs are all shut off when the DIO board is in E-stop. Some of the digital inputs are usually assigned to axis limit and home switches.

This board set interfaces to the PC through an EPP parallel port. An IEEE-1284 compliant cable must be used. I have tested it with 2' through 15' cables. I have never had a problem EVER with Dell motherboards. I have also seen the SMC37C665, 37C666 and 37C669 family of chips work fine. The Winbond W83977TF-AM chip on a Supero motherboard has also worked fine when set to EPP mode. The UMC chips have not worked at all, and the timing of the signals clearly demonstrates serious problems with the chip or the integration of the chip to the motherboard. Hopefully these are completely obsolete, and we won't be seeing them again.

I have also gotten it to work with the PCI4008A chip used on some PCI plug-in parallel port boards. Watch out for Comp USA, as they sell several different PCI parallel port boards under the SAME SKU number, and they have different chips. The ITE8875F chip does not work. The NetMos MCS9705 is known not to perform EPP mode correctly. SIIG PCI parallel ports work well. These may have a configuration PROM on board that needs to be set for EPP mode using their DOS utility. Contact elson@pico-systems.com for more info on this procedure. SIIG PCI cards work, but SIIG's PCIe card (and others that use the Oxford OXPCIe952 chip, such as Startech and Rosewill) do not work with older versions of LinuxCNC. Latest versions of LinuxCNC since March, 2017 have this problem fixed. They Syba PCIe card with the NetMos 9900 or 9901 chip works fine.

(I'll be glad to put LinuxCNC on your Dell desktop or Intel D525 motherboard to prevent these sorts of disasters.)

When you power the PPMC on, the red "Load Fail" light on the Encoder board should blink on for about 1/4 second, and then go out. If it doesn't do this, the FPGA did not load its configuration correctly from the serial PROM, for some reason. This might be a power supply issue.

I have a diagnostic program (currently separate from LinuxCNC, available for download from the PPMC web page at http://pico-systems.com/codes/ppmcdiags.tgz, documentation at http://pico-systems.com/codes/ppmcdiags.html

First, you want to run it to check if the boards can even be seen : sudo ./ppmcdiags 378 bus

Again, this program needs to be run with sudo. You should get a report of 16 possible addresses, and the boards should show up like :
PPMC Encoder at 0x10, Ver 1
PPMC DAC at 0x40, Ver 1
PPMC DIO at 0x60, Ver 1

If the bus test has run correctly, then run the communications test : sudo ./ppmcdiags 378 commtest

You should get a report like :
1000 cycles completed, no errors
2000 cycles completed, no errors
3000 cycles completed, no errors

Let this run for 100,000 cycles (about 30 seconds) to see if any errors show up. If you have encoders connected, they can cause errors if they dither between adjacent states, so you may want to unhook them. If you get 100,000 test cycles without any errors, you can be pretty confident the computer and UPC board are communicating well.

LinuxCNC includes sample ini and hal files which will configure LinuxCNC for the PPMC boards. These will be in the configs/ppmc sub-directory of where you have LinuxCNC installed. You will still have to set the INPUT_SCALE parameter for each axis to correspond to the number of encoder counts per user unit for that axis. If the axis counts the wrong way when you move it, change the sign of INPUT_SCALE. Set the P parameter to a small value, such as 100. Hit F1 to power up the servo amps and then F2 to activate the positioning loop. If it runs away, hit F1 to stop motion. Edit the ini file and change the sign of OUTPUT_SCALE from 1.0 to -1.0 (or vice versa) and try again. It should now attempt to hold position, and roughly follow the commanded position when you jog slowly. You now have to "tune" the servo loop!

First, you need to fire up Halscope. From the Axis window, it is on the "Machine" pull-down menu, from the Axis GUI it is in "Machine". You can pull the corner of the scope window to make it bigger. Select the boxed "1" on the lower left corner, and it will show a list of signals to look at. The one you want is pid.0.error

The IniFile for the PWM controller.

This article was specifically written for our PWM servo amplifiers, but is almost exactly to the point for the PPMC system, as well: Tuning the PWM controller with Pico Systems PWM servo amplifiers.

LinuxCNCKnowledgeBase | RecentChanges | PageIndex | Preferences | LinuxCNC.org
This page is read-only. Follow the BasicSteps to edit pages. | View other revisions
Last edited May 1, 2017 9:04 am by Jmelson (diff)
Published under a Creative Commons License