123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- // Tonokip RepRap firmware rewrite based off of Hydra-mmm firmware.
- // Licence: GPL
- #include <WProgram.h>
- #include "fastio.h"
- extern "C" void __cxa_pure_virtual();
- void __cxa_pure_virtual(){};
- void get_command();
- void process_commands();
-
- void manage_inactivity(byte debug);
-
- void manage_heater();
- int temp2analogu(int celsius, const short table[][2], int numtemps);
- float analog2tempu(int raw, const short table[][2], int numtemps);
- #ifdef HEATER_USES_THERMISTOR
- #define HEATERSOURCE 1
- #endif
- #ifdef BED_USES_THERMISTOR
- #define BEDSOURCE 1
- #endif
-
- #define temp2analogh( c ) temp2analogu((c),temptable,NUMTEMPS)
- #define analog2temp( c ) analog2tempu((c),temptable,NUMTEMPS)
-
- #if X_ENABLE_PIN > -1
- #define enable_x() WRITE(X_ENABLE_PIN, X_ENABLE_ON)
- #define disable_x() WRITE(X_ENABLE_PIN,!X_ENABLE_ON)
- #else
- #define enable_x() ;
- #define disable_x() ;
- #endif
- #if Y_ENABLE_PIN > -1
- #define enable_y() WRITE(Y_ENABLE_PIN, Y_ENABLE_ON)
- #define disable_y() WRITE(Y_ENABLE_PIN,!Y_ENABLE_ON)
- #else
- #define enable_y() ;
- #define disable_y() ;
- #endif
- #if Z_ENABLE_PIN > -1
- #define enable_z() WRITE(Z_ENABLE_PIN, Z_ENABLE_ON)
- #define disable_z() WRITE(Z_ENABLE_PIN,!Z_ENABLE_ON)
- #else
- #define enable_z() ;
- #define disable_z() ;
- #endif
- #if E_ENABLE_PIN > -1
- #define enable_e() WRITE(E_ENABLE_PIN, E_ENABLE_ON)
- #define disable_e() WRITE(E_ENABLE_PIN,!E_ENABLE_ON)
- #else
- #define enable_e() ;
- #define disable_e() ;
- #endif
-
- #define X_AXIS 0
- #define Y_AXIS 1
- #define Z_AXIS 2
- #define E_AXIS 3
-
- void FlushSerialRequestResend();
- void ClearToSend();
-
- void get_coordinates();
- void prepare_move();
- void linear_move(unsigned long steps_remaining[]);
- void do_step(int axis);
- void kill(byte debug);
-
- // This struct is used when buffering the setup for each linear movement "nominal" values are as specified in
- // the source g-code and may never actually be reached if acceleration management is active.
- typedef struct {
- // Fields used by the bresenham algorithm for tracing the line
- long steps_x, steps_y, steps_z, steps_e; // Step count along each axis
- long step_event_count; // The number of step events required to complete this block
- volatile long accelerate_until; // The index of the step event on which to stop acceleration
- volatile long decelerate_after; // The index of the step event on which to start decelerating
- volatile long acceleration_rate; // The acceleration rate used for acceleration calculation
- unsigned char direction_bits; // The direction bit set for this block (refers to *_DIRECTION_BIT in config.h)
-
- long advance_rate;
- volatile long initial_advance;
- volatile long final_advance;
- float advance;
-
- // Fields used by the motion planner to manage acceleration
- float speed_x, speed_y, speed_z, speed_e; // Nominal mm/minute for each axis
- float nominal_speed; // The nominal speed for this block in mm/min
- float millimeters; // The total travel of this block in mm
- float entry_speed;
- float acceleration; // acceleration mm/sec^2
-
- // Settings for the trapezoid generator
- long nominal_rate; // The nominal step rate for this block in step_events/sec
- volatile long initial_rate; // The jerk-adjusted step rate at start of block
- volatile long final_rate; // The minimal rate at exit
- long acceleration_st; // acceleration steps/sec^2
- volatile char busy;
- } block_t;
-
- void check_axes_activity();
- void plan_init();
- void st_init();
- void tp_init();
- void plan_buffer_line(float x, float y, float z, float e, float feed_rate);
- void plan_set_position(float x, float y, float z, float e);
- void st_wake_up();
- void st_synchronize();
|