Code to drive a CNC machine via a PC LPT port lookalike 25 pin 'D', experiment in 'PC/Mach3' replacement. Designed to compile and run on mbed LPC1768, Freescale KL25Z and Freescale KL46Z. Proved on LPC1768 and KL25Z, problem with serial port on KL46Z. Reads subset of 'G Codes' through usb/serial port and drives 3 stepper/servo drives for X, Y and Z, also similar Step/Dir outputs for spindle motor control. Emulates PC LPT, outputs 'charge pump', proved driving Seig KX3 CNC mill
Diff: cnc.h
- Revision:
- 1:66ee619f206b
- Parent:
- 0:5d0f270bfc87
- Child:
- 2:b3c668ec43ac
diff -r 5d0f270bfc87 -r 66ee619f206b cnc.h --- a/cnc.h Fri Jan 31 11:16:21 2014 +0000 +++ b/cnc.h Thu Feb 06 08:45:02 2014 +0000 @@ -1,9 +1,12 @@ -#define axis_speeds_buffsize 20 - -struct axis_speeds_element { - signed long x, y, z, a, duration_ticks; - bool ready; -} ; +const double TWO_PI = 8.0 * atan(1.0); +const double epsilon = 1e-5; +struct pirbufgrain { + double x, + y, + z, + c, + f_rate; + } ; struct singleGparam { // Place to put all we know about 'x' or 'j' etc parameter from G Code line double dbl; @@ -16,10 +19,11 @@ struct singleGparam x, y, z, i, j, r, a, b, c, d; // After sorting, know where to find any X, Y etc values ! } ; -struct digital_readouts { - signed int x, y, z, a, b, c; // Allow up to six dros +struct digital_readouts { // DROs keep count of 'Step' positive edges detected in interrupt handler + signed long x, y, z; // Could easily expand up to six or more dros bool dro_output; // To enabe / disable output to terminal } ; extern const double n_for_onemmpermin, feed_rate_max, feed_rate_min, spindle_min, spindle_max; -extern const long pulses_per_mm, max_mm_per_min, interrupt_period_us; +//extern const long pulses_per_mm, max_mm_per_min, interrupt_period_us; +extern const double pulses_per_mm, max_mm_per_min, interrupt_period_us;