Raise precision of STEP_PER_MM_x by factor 1000.

This commit is contained in:
Markus Hitter 2010-10-10 17:45:50 +02:00
parent 2aa98b3131
commit 91eb11bd1e
2 changed files with 29 additions and 9 deletions

View File

@ -3,19 +3,19 @@
/*
Values reflecting the gearing of your machine.
All numbers are integers, so no decimals, please :-)
All numbers are fixed point integers, so no more than 3 digits to the right of the decimal point, please :-)
*/
// calculate these values appropriate for your machine
// for threaded rods, this is (steps motor per turn) / (pitch of the thread)
// for belts, this is (steps per motor turn) / (number of gear teeth) / (belt module)
// half-stepping doubles the number, quarter stepping requires * 4, etc.
#define STEPS_PER_MM_X 320
#define STEPS_PER_MM_Y 320
#define STEPS_PER_MM_Z 320
#define STEPS_PER_MM_X 320.000
#define STEPS_PER_MM_Y 320.000
#define STEPS_PER_MM_Z 320.000
// http://blog.arcol.hu/?p=157 may help with this next one
#define STEPS_PER_MM_E 320
#define STEPS_PER_MM_E 320.000
/*
Values depending on the capabilities of your stepper motors and other mechanics.

28
gcode.c
View File

@ -15,9 +15,29 @@
#include "heater.h"
#include "sersendf.h"
/*
Switch user friendly values to coding friendly values
This also affects the possible build volume. We have +-2^31 numbers available and as we internally measure position in steps and use a precision factor of 1000, this translates into a possible range of
2^31 mm / STEPS_PER_MM_x / 1000
for each axis. For a M6 threaded rod driven machine and 1/16 microstepping this evaluates to
2^31 mm / 200 / 1 / 16 / 1000 = 671 mm,
which is about the worst case we have. All other machines have a bigger build volume.
*/
#define STEPS_PER_M_X ((uint32_t) (STEPS_PER_MM_X * 1000.0))
#define STEPS_PER_M_Y ((uint32_t) (STEPS_PER_MM_Y * 1000.0))
#define STEPS_PER_M_Z ((uint32_t) (STEPS_PER_MM_Z * 1000.0))
#define STEPS_PER_M_E ((uint32_t) (STEPS_PER_MM_E * 1000.0))
/*
mm -> inch conversion
*/
#define STEPS_PER_IN_X ((uint32_t) ((25.4 * STEPS_PER_MM_X) + 0.5))
#define STEPS_PER_IN_Y ((uint32_t) ((25.4 * STEPS_PER_MM_Y) + 0.5))
#define STEPS_PER_IN_Z ((uint32_t) ((25.4 * STEPS_PER_MM_Z) + 0.5))
@ -133,7 +153,7 @@ void scan_char(uint8_t c) {
if (next_target.option_inches)
next_target.target.X = decfloat_to_int(&read_digit, STEPS_PER_IN_X, 1);
else
next_target.target.X = decfloat_to_int(&read_digit, STEPS_PER_MM_X, 1);
next_target.target.X = decfloat_to_int(&read_digit, STEPS_PER_M_X, 1000);
if (debug_flags & DEBUG_ECHO)
serwrite_int32(next_target.target.X);
break;
@ -141,7 +161,7 @@ void scan_char(uint8_t c) {
if (next_target.option_inches)
next_target.target.Y = decfloat_to_int(&read_digit, STEPS_PER_IN_Y, 1);
else
next_target.target.Y = decfloat_to_int(&read_digit, STEPS_PER_MM_Y, 1);
next_target.target.Y = decfloat_to_int(&read_digit, STEPS_PER_M_Y, 1000);
if (debug_flags & DEBUG_ECHO)
serwrite_int32(next_target.target.Y);
break;
@ -149,7 +169,7 @@ void scan_char(uint8_t c) {
if (next_target.option_inches)
next_target.target.Z = decfloat_to_int(&read_digit, STEPS_PER_IN_Z, 1);
else
next_target.target.Z = decfloat_to_int(&read_digit, STEPS_PER_MM_Z, 1);
next_target.target.Z = decfloat_to_int(&read_digit, STEPS_PER_M_Z, 1000);
if (debug_flags & DEBUG_ECHO)
serwrite_int32(next_target.target.Z);
break;
@ -157,7 +177,7 @@ void scan_char(uint8_t c) {
if (next_target.option_inches)
next_target.target.E = decfloat_to_int(&read_digit, STEPS_PER_IN_E, 1);
else
next_target.target.E = decfloat_to_int(&read_digit, STEPS_PER_MM_E, 1);
next_target.target.E = decfloat_to_int(&read_digit, STEPS_PER_M_E, 1000);
if (debug_flags & DEBUG_ECHO)
serwrite_uint32(next_target.target.E);
break;