I posted about this machine before (
forum.linuxcnc.org/10-advanced-configura...32-conversion#253308
) but am getting serious about converting it. Since that post years ago I've worked in/around the control pretty extensively and know it back and forth. Although it works just as well as it did when it was delivered in 1998 I'm tiring of the lack of a real trajectory planner (bad stuttering on surfacing and adaptive toolpaths) and the lack of any automated probing cycles. The latter is mostly just a convenience feature but the former really sucks a lot of my time. A set of parts I was running a few weeks ago took at least two hours of additional spindle time due to stuttering. It can be reduced with enough tool path adjusting and smoothing but that also sucks time!
My thought is to build a wiring PCB that is essentially a 1:1 replacement for the "BMDC" board that is the heart of the "DX32" control on the machine. The control is quite well documented including the order of operations for tool changes, spindle gearbox changes etc. Use its existing PWM DC servo amps (essentially PWM torque mode control, but no smoothing essentially just driving IGBTs directly) and existing auxilliary boards that do higher voltage GPIO outputs (the AUF and LcTLAUF boards). The latter are connected via dedicated RS422 serial interfaces. My hope is that if I finish this others could use this PCB to very easily do "no wiring" conversion on similar machines or any of the many Bridgeport mills/lathes that used the DX32 control. These are great machines and they are very cheap due to their antiquated control. No one remembers how to use DOS apparently! It has been a fine "garage VMC" for me complete with seamless wifi network connectivity, rigid tapping, probe scanning and other features that many machines from the 90's lack.
The BMDC board has:
- 11x low voltage GPIO inputs (used for front panel controls)
- 4x Analog inputs (for 2x speed override pots and a spindle load feedback signal)
- 5x Analog outputs (only one is used on my machine for spindle control)
- 1x MPG encoder input for the jog dial
- 2x low side power drivers (1A) for the ESTOP and the spindle gearbox
- 2x RS422 serial ports for connecting to the AUF (auxilliary functions) and LcTLAUF (Tool Changer) boards
- 4x PWM differential outputs for axis torque control - RS422 levels @25 khz
- A few additional GPIOs to enable and reset the servo amps
- 5x RS422 level differential encoder inputs
All of the above connections leave the board through 2x 50 pin ribbon cables and 4x 10 pin ribbon cables (for the 4 supported axes). My PCB will have these on them so the original wiring can plug right in.
My thought is to use the following MESA boards
- 6i25 - PCIe FPGA card
- 7i52 - Six channels of encoder input and RS422 output - For #4, #7, #8, #9 - Essentially all the axis controls as well as the front panel MPG
- 7i66-8 - Use this for the analog inputs, GPIOs, power drivers (#1,#2, #5). Hooked to the 7i52 via SSERIAL
- SPINX - Single PWM->Analog channel for the spindle control. Hook this to one of the outputs on the 7i52. I might leave empty spots for more of these since some machines that used the BMDC (including lathes) used Analog servo amps instead of the PWM control.
For the RS422 ports I was thinking I'd just put some additional RS422 serial ports (PCIe) on the PC.
A few questions I was hoping to ask here:
1. For the RS422 controlled AUF and LcTLAUF boards I am fairly certain I can reverse engineer the protocol. I was thinking I'd write a simple HAL module to talk to these. I noticed that there was now a way to do serial ports directly through the Mesa boards (pktUart). Would using this be preferable and/or easier than just using a standard serial port? In general these outputs are all "low speed" such as running coolant, air solenoids, etc.
2. I assume the analog input pins on the 7i66-8 will be adequate resolution for reading some pots? The spindle load is a pretty noisy/rough signal anyways.
3. Will setting up the gains for the direct control of the DC servo amp IGBTs be difficult? The past LinuxCNC conversions I have done used analog velocity control so it was pretty straightforward (FF1, some P). The DX32 manual has a fairly extensive discussion of the BMDC PWMINT control loops including a digital filter to reduce vibrations from the PWM drive. The manual says this is to remove quantization noise caused by the encoders are very low speeds. I assume this is fairly similar to using a Mesa 7i29, which folks have done (although it seems uncommon). One reason I'm thinking about using the original amps is that if they ever died I could then fairly easily replace them with 7i29(s).
Any other feedback on my "design" is welcome! I'm sure this will evolve as I go through it. It is also likely I might want some additional monitoring on the machine that the old control left out. As with many older machines like this they were clearly limited by their GPIO inputs and consequently many faults with the machine don't have clear error messages and can be difficult to interpret.