Win98 Control software.
Posted by
Art Fenerty
on 2000-08-17 13:12:22 UTC
Hi All:
I've gotten a request to "explain myself" so to speak. O.K. Here goes:
http://users.andara.com/~fenerty/master.htm is my website and what you'll find there
is a win9x controller program for CNC work. I've been asked a couple of questions about it
so lets take it one step at a time.
1) How do I get around timing issues.
As you probably know, windows normally limits you to 1ms timing on timers. You can get
fairly reliable 1ms pulses but not 100% of the time. This is no good for steppers due to
resonance and other problems being created by the time irregularities. What I did was use
the motherboard hi-res timer routines in the following way.
1) analyse g-code line for what pulses would be needed at what timing interval.
2) Create a bit pusher array for output to the printer port.
3) Send the bits and delay while watching the timer. When the proper interval has passed,
Allow the next pulse to happen. This is a little different from a timing delay loop. Most delay
loops do not watch the timer. They are trial and error for each processor. ie. count from 0
to 12543 is about .5ms so I'll do that between pulses. This works kinda well but only when
someone calculates the loops for each machine.
Because I stream the data out only when the line is analysed and then carefully watch the delays
between each bit. The lines are smooth with no irregularities. This allows me then to analyse
the line before bursting it out to see what ramping can be done. On my machine this smoothing
and ramping stopped all sorts of problems with inertia on my heavy gantry causing false movement,
and sped up my production quite a bit as well. Of course this has some drawbacks as well.
1) Since my program does not do IJ interp. , the curves are many lines with small movements
creating an arc. If I were to process a line at a time, you couldn't get smoothness or ramping
on curves. So I compromised and said 500mm sounds good for my application. If a line is
not at least 500mm I concatenate it onto the next line until at least 500mm is in the burst buffer.
Then after the burst I tell windows to do its dirty work, and come back to me immediately when
its finished.
2) Since I must let windows do its job the movement must stop momentarily at certain times. I have
tried to optimise the ramping so that it's more of a slowdown, then speed up again movement. On
a pentium 400, I have found this to be no problem, and my work doesn't show any stop points. This
is due in large part to the fact that the head knows to slowly come to a stop and then ramp up again
afterwards. So the head theoretically is not stressed in any direction at the time of pause and there-fore
does not create a chafe mark. ( This is in wood, I don't know how it would work in metal ).
I will be adding a setting to allow the user to decide what distance is the magical cut-off point( 500mm or 1km?).
Lets face it, it is not possible to do this in windows perfectly, but for those of us out there who like to build machines
and run them, this software would likely be perfect for mst home inventors who don't want to run linux. ( I run linux, win2000
and win98 ) but some people are very mechanical but not able to program, so after my own oddysee ( It took me 2 years to
weld, bolt and program my two machines ) I thought my program might be usefull to others.
Price: I was also asked what my plans were for the commercialization? of master control. You will notice in the
about box that I'm asking $50.00 for a fully functional version ( The shareware version get's a bit inaccurate after
30 minutes of use. I will be increasing that to 1 hour of use in next version ). I'm not really looking to make money on this
but the program cut's and engraves well enough for me now, so i figured if I can get the occasion 50 for it, it will keep me spurred
on to keep making it better.. I figure the market for this type of software is pretty small, so If I end up selling 10 copies or
so in a year, then I can justify the hours of code-chasing to make it do more and better things. Anyone registering will
of course, get free updates from then on. I'm shocked to see how much mail I'm getting from home inventors around the world,
Seems like I'm not the only one out there confined to my electronic and mechanical dungeon most of the time.
This program was designed by and for ME. I hope others like it and can use it. After designing , and etching PCB's for controllers,
Cutting and bolting the gantry seen in the opening screens of MasterCNC and even rewiring SLo-Syn AC motors to become
monster stepper motors, I was suprised to find out how difficult it was to program what I thought was a trivial program. Hopefully,
I can save some folks the hassle.
Hope this answers all,
Art ( sorry for the verbosity )
PS. Sorry , but the program works only in WIN9X due to the fact that WINNT and WIN2000 cannot use vxd's.
[Non-text portions of this message have been removed]
I've gotten a request to "explain myself" so to speak. O.K. Here goes:
http://users.andara.com/~fenerty/master.htm is my website and what you'll find there
is a win9x controller program for CNC work. I've been asked a couple of questions about it
so lets take it one step at a time.
1) How do I get around timing issues.
As you probably know, windows normally limits you to 1ms timing on timers. You can get
fairly reliable 1ms pulses but not 100% of the time. This is no good for steppers due to
resonance and other problems being created by the time irregularities. What I did was use
the motherboard hi-res timer routines in the following way.
1) analyse g-code line for what pulses would be needed at what timing interval.
2) Create a bit pusher array for output to the printer port.
3) Send the bits and delay while watching the timer. When the proper interval has passed,
Allow the next pulse to happen. This is a little different from a timing delay loop. Most delay
loops do not watch the timer. They are trial and error for each processor. ie. count from 0
to 12543 is about .5ms so I'll do that between pulses. This works kinda well but only when
someone calculates the loops for each machine.
Because I stream the data out only when the line is analysed and then carefully watch the delays
between each bit. The lines are smooth with no irregularities. This allows me then to analyse
the line before bursting it out to see what ramping can be done. On my machine this smoothing
and ramping stopped all sorts of problems with inertia on my heavy gantry causing false movement,
and sped up my production quite a bit as well. Of course this has some drawbacks as well.
1) Since my program does not do IJ interp. , the curves are many lines with small movements
creating an arc. If I were to process a line at a time, you couldn't get smoothness or ramping
on curves. So I compromised and said 500mm sounds good for my application. If a line is
not at least 500mm I concatenate it onto the next line until at least 500mm is in the burst buffer.
Then after the burst I tell windows to do its dirty work, and come back to me immediately when
its finished.
2) Since I must let windows do its job the movement must stop momentarily at certain times. I have
tried to optimise the ramping so that it's more of a slowdown, then speed up again movement. On
a pentium 400, I have found this to be no problem, and my work doesn't show any stop points. This
is due in large part to the fact that the head knows to slowly come to a stop and then ramp up again
afterwards. So the head theoretically is not stressed in any direction at the time of pause and there-fore
does not create a chafe mark. ( This is in wood, I don't know how it would work in metal ).
I will be adding a setting to allow the user to decide what distance is the magical cut-off point( 500mm or 1km?).
Lets face it, it is not possible to do this in windows perfectly, but for those of us out there who like to build machines
and run them, this software would likely be perfect for mst home inventors who don't want to run linux. ( I run linux, win2000
and win98 ) but some people are very mechanical but not able to program, so after my own oddysee ( It took me 2 years to
weld, bolt and program my two machines ) I thought my program might be usefull to others.
Price: I was also asked what my plans were for the commercialization? of master control. You will notice in the
about box that I'm asking $50.00 for a fully functional version ( The shareware version get's a bit inaccurate after
30 minutes of use. I will be increasing that to 1 hour of use in next version ). I'm not really looking to make money on this
but the program cut's and engraves well enough for me now, so i figured if I can get the occasion 50 for it, it will keep me spurred
on to keep making it better.. I figure the market for this type of software is pretty small, so If I end up selling 10 copies or
so in a year, then I can justify the hours of code-chasing to make it do more and better things. Anyone registering will
of course, get free updates from then on. I'm shocked to see how much mail I'm getting from home inventors around the world,
Seems like I'm not the only one out there confined to my electronic and mechanical dungeon most of the time.
This program was designed by and for ME. I hope others like it and can use it. After designing , and etching PCB's for controllers,
Cutting and bolting the gantry seen in the opening screens of MasterCNC and even rewiring SLo-Syn AC motors to become
monster stepper motors, I was suprised to find out how difficult it was to program what I thought was a trivial program. Hopefully,
I can save some folks the hassle.
Hope this answers all,
Art ( sorry for the verbosity )
PS. Sorry , but the program works only in WIN9X due to the fact that WINNT and WIN2000 cannot use vxd's.
[Non-text portions of this message have been removed]