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

Dependencies:   MODSERIAL mbed

cnc.h

Committer:
JonFreeman
Date:
2014-02-20
Revision:
2:b3c668ec43ac
Parent:
1:66ee619f206b
Child:
3:7aaf0072cc22

File content as of revision 2:b3c668ec43ac:

#define ESTOP   0x100   //  bits used in input reading
#define XLIM    1
#define YLIM    2
#define ZLIM    4
#define UNKN    8
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;
    unsigned long   ul;
    int         i,  c;
    bool            changed;      // Flagged true when new value for this axis found in Gcode line, false otherwise 
}   ;

struct  Gparams {  //  Where possibly messy G code line gets ordered and sorted into
    struct  singleGparam   x, y, z, i, j, r, a, b, c, d;   //  After sorting, know where to find any X, Y etc values !
}   ;

extern  const double  n_for_onemmpermin, feed_rate_max, feed_rate_min, spindle_min, spindle_max, spindle_factor;
//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;