Dear Developers
I am new to your Mailing List and want to introduce myself: I live in Germany, 
studied applied Engineering of Mechatronics some years ago and i am fascinated 
of CNC Stepper Software. 
The first SW i used was written in TurboPascal, using DOS, the code came along 
with the SMC1500 from Conrad Electronics.
I programmed new functions and made my own special Program to build forms and 
cores for Modelist Airplanes Wings. For this, i built a machine together with 
good friend. 
>From the beginning, i had the feeling, that there was something wrong with the 
>original code and the principles of generating steps. It took me some years to 
>find out, that the way of generating 3D-Steps was suboptimal. 
The original SW was calculating steps in a way like Grafics SW. It just created 
a loop with the periodicity of the fastet axis and the other two axis were 
dependent on this. If i tried to optimize the parameters Maximum Velocity and 
Acceleration for only one axis acting alone, i could get very good results, 
reaching the maximum step frequency delivered by the SMC1500. But if i tried to 
mill with these parameters using arbitrary 3D-Vectors, it lost steps massively. 
Even reducing the Maximum Velocity to one fourth never worked out perfectly. 
The effectiveness was bad, it took 8 hours and more to build one form. 
But: There was solution. I found out, that taking the fastest axis to create 
the periodicity was the wrong way. I reprogrammed the whole kernel so the Time 
Slice was dependent on the real velocity of the tool and was kept at constant 
speed. Additionally, i accurately calculated the period for every single axis 
and divided the Time Slice. So, the frequency of every single axis output (not 
only the fastest) was kept constant. This lead to success. I preprocessed the 
complete files, where the Input was absolute Coordinates, i calculated the 
angles between two vectors, deriving the maximum acceleration and from that the 
Maximum Velocity between two Vectors. The Output was the Parallelport Byte 
Output and a Delay to the next step. The whole Output Stream was saved in a 
file and this was executed afterwards. This ran on a 33MHz 486 with very good 
results.
After i heard about EMC, i studied the principles. But again, i found the 
Drawbacks of a fixed Interrupt Frequency: It produces lots of Overhead in 
Runtime and still does not meet the Requirements of a fixed Frequency fo every 
axis. This Drawback is eliminated by good Hardware and a lean Operating System. 
But on the other hand, it could produce even better results, if the next step 
timing and Output Byte would be calculated, the Interrupt Compare Value would 
be written with some reserve (Latency), and after the ISR is running it would 
poll for the Hardwaretimer until the real compare value shows up and write the 
Output Pattern. Of course, there would have to be a routine, which calculates, 
if it makes sense to set up a new Interrupt or just to poll the Timer.
The Advantages:
At low speed, the ISR load is significantly lower.
At high speed, the ISR load is still lower, but the Runtime of the ISR is 
proportional to the Latency Jitter.

With fixed Interrupt Frequency the maximum stable Output frequency is much 
lower. 
Feel free to bash me.
Andreas

------------------------------------------------------------------------------
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

Reply via email to