MODIFYING THE HOBBY CNCPro DRIVER BOARD TO USE MACH3 CURRENT CONTROL
Before I can suggest anyone try this modification, conscience requires me to fully explain the background and logic behind it. I will try to make it as non-technical as possible, and I apologize in advance for its length. Or, you can skip the whole thing and go straight to the mod instructions at the end; short story: It works. It's worth it.
The circuit background:
The Hobby CNC Pro driver board (hereafter HCNCP) uses a timing circuit that activates when it receives a step pulse. When activated, this circuit stays active for ten seconds. While active, it turns off the driver chip sync function, and holds the driver current at a high level. This is the normal 'step activity' state. If there is no step activity for ten seconds, the circuit 'times out', which turns on the sync function (reducing noise), and reduces the driver current (reducing heat). Each axis of the HCNCP has its own timer circuit which operates independently for that axis only.
This timer circuit is taken from the Allegro data sheet for the SLA7078 driver chip. In that data sheet, the circuit's use was intended for the sync function only, not the combination of sync-current reduction. Also, the time setting of this circuit was suggested to be something just longer than the average time between step pulses; something like a few tenths of a second (or less), rather than ten seconds.
So, why is the HCNCP's timer set for ten seconds? I suspect the reason for that is because the timer-sync function has been bundled with the current reduction function. Remember, the timers for each axis are independent, so, if there is no activity on one axis, it could go to reduced current while another axis is in motion. Due to a total lack of experience in such matters, I can't say for certain, but it seems to me that you would always want all axes at full current while any are in motion. And, I believe this is the reason for the '10-second' timer on the HCNCP: If any one axis is idle for ten seconds, it's likely that all cutting and motion has ceased, and it is OK to reduce the current.
That's probably a pretty good assumption, so why is it a problem? Well, the issue is, that it is the step pulse that triggers the timer, turning off the sync and restoring full current. That step pulse also goes directly to the driver chip, which immediately starts the commanded step, and that action doesn't wait for the timer/sync/current functions to return to a normal operating state.
So, what happens is, you have an axis that functions normally most of the time, but when it has been idle for ten seconds, it stalls when attempting to begin motion again. This apparently happens because the current ruduction or sync functions have not really turned off when the step action starts. The common suggestion is to "reduce the acceleration" or "reduce the step rate", which is an attempt to slow down the initial motion to allow the circuit to 'catch up'. Apparently this is inadequate in some situations, or the driver software doesn't support it; regardless, it's what's technically known as a 'kludge'.
The difficulty in diagnosing this problem is that it manifests itself differently on different systems; and allsystems are different: Different motors, screws, nuts, lubrication, cables, masses, voltages, currents, etc. Some will never see an issue, while for others it appears to be a persistent problem. In testing on my own system, it's pretty easy to set up a step rate and acceleration that will jog reliably when there are no delays between jogs, but which will nearly always stall when attempting to jog after a 10 second idle time. This can be nearly always fixed by reducing the acceleration, or, by disabling the current reduction (placing J4). Since the problem is fixed by disabling the current reduction, we can be pretty sure that sync is not a part of the stalling problem (disabling current reduction does not affect the sync function). The question is though, why, should I have to live with reduced acceleration all of the time to accomodate this single problem case, or, why should I have to forego the temperature reduction advantage of a reduced current control to get back that acceleration?
Briefly, the object is to eliminate the timer circuit on the HCNCP, and control the current and sync function directly with the current reduction control built into the driver software. Mach3 has an optional current reduction output - I have no idea about other driver software.
On Mach3, if you assign the current reduction fuction to an output pin, it will command high currentbefore any step activity takes place, will remain at high current when step activity is taking place on any axis, and will switch to low current only when step activity has ceased on all axes. There is also no reason why sync couldn't be combined to operate off of the same control.
There is zero information on this control in the Mach3 documentation that I have found. I asked about it once on the Mach3 forum and got no response. The above description is the way I assume it works, based upon setting it up and observing it's action with an oscilloscope. I could be wrong.
What this means: If you use the Mach3 current reduction output to control the HCNCP, there will be no ten-second delay before low current and sync are activated; they will activate when there is no step activity for some period (short and unspecified, but observed to be no more than a few hundred milliseconds). Since there is no ten second wait, and it will switch to low current even for short pauses, this probably means lower temperatures and less noise overall. The difference is that all axes must operate in concert - all will go to low current/sync only when none are active. When step activity begins on any axis, all will go to full current, before the step activity begins. Which, I believe, is exactly the type of operation you really want.
HCNCP hardware modification for Mach3 current control:
fine-tip soldering iron, solder
fine-tip diagonal cutters
fine-tip needle nose pliers, or tweezers
small hook-up wire, ~12 inches (solid, 28-30 guage wire-wrip wire would work best)
No modifications are made to the printed circuit board itself. The modification is reversible simply by removing any added wires, and replacing the removed components.
The modification may be applied to a single axis at a time. Try it on one, and if that works, it can be added to the remaining axes.
Got all that? Ready? Confident? Here's how to do the mod:
Remember you can mod and test one axis only, or all at once, your choice.
For the X-axis, remove R9 (100K), C15 (100uF), and Q1 (BS250P)
For the Y-axis, remove R10 (100K), C16 (100uF), and Q3 (BS250P)
For the Z-axis, remove R11 (100K), C17 (100uF), and Q5 (BS250P)
For the A-axis, remove R12 (100K), C18 (100uF), and Q7 (BS250P)
If you are building a new board, the mod is simple, just don't install the indicated components. On an assembled board, you have to remove those components, but it's not very hard. If you want to be extra careful, you can unsolder and remove the components without damage, but it's hardly worth the trouble; they are common, inexpensive components that are easily replaced. The resistor and transistor can just be clipped out using small diagonal wire cutters. The capacitor is likely sitting flush with the board without the leads exposed, so it will probably have to be unsoldered - you can alternately heat one leg at a time from the bottom and 'rock' it out a little bit each time.
Now, for each axis, run a wire from the '+' hole of the removed capacitor location, to the #1 input location (near the parallel port connector, just above where it says "no pullups"). You could run these wires on the top or bottom of the board; I chose the top so it would be easier to insure I had the correct locations. You could also 'daisy-chain' one wire from cap-to-cap-to-cap-to-cap-to-#1, but using four separate wires is just as easy. No particular routing of the wires is necessary; you'll note from the pictures that I threaded them through the legs of other components to keep them dressed against the board.
If you are not confident to make this modification yourself, or, don't have the tools to do so, I'd be happy to install it for anyone that wants to give it a try. No charge, just pay the shipping here and back.
Configuring the Mach3 software:
from the main menu, select config\ports & pins
select output signals tab
scroll down to Current Hi/Low
column 1, click to get green 'enable' check
column 2, set to port #1 (or whatever port you're using)
column 3, set to pin #1
column 4, click to get green 'active low' check
Apply, OK, close, whatever
removed components and added wire. this is the Z-axis; the others are very similar.
all of the wires go to pin 1.
Mach3 output configuration screen
my current arrangement reduces the cutting area somewhat.
Email: netboss at mypage dot net