$140, $141, $142 current control

This commit is contained in:
Todd Fleming 2017-01-15 17:09:59 -05:00
parent b32be3d2c1
commit 6b1e180e66
8 changed files with 26 additions and 8 deletions

View File

@ -21,6 +21,11 @@ Usage notes:
* Hard limits not yet ported
* Control inputs not yet ported (e.g. Cycle Start and Safety Door switches)
New configuration settings
* $140, $141, $142 are X, Y, Z current (amps)
* Default to 0.0 A to avoid burning out your motors
* Your motors will likely stall if you don't set these!
Build notes:
* Include ```make``` and the ```arm-none-eabi-*``` tools in your path.
* Make produces 2 files:

View File

@ -24,6 +24,10 @@
#include "grbl.h"
#include "Driver_I2C.h"
#undef min
#undef max
#include <algorithm>
#ifdef CURRENT_I2C
extern ARM_DRIVER_I2C CURRENT_I2C;
static const uint8_t wiperRegs[] = CURRENT_WIPERS;
@ -48,9 +52,9 @@ void current_init()
;
#endif
set_current(0, DEFAULT_X_CURRENT);
set_current(1, DEFAULT_Y_CURRENT);
set_current(2, DEFAULT_Z_CURRENT);
set_current(0, settings.current[0]);
set_current(1, settings.current[1]);
set_current(2, settings.current[2]);
set_current(3, DEFAULT_A_CURRENT);
#endif
}
@ -60,7 +64,7 @@ void set_current(uint8_t motor, float amps)
#if defined(CURRENT_I2C) && defined(CURRENT_MCP44XX_ADDR)
uint8_t command[] = {
uint8_t(wiperRegs[motor] << 4),
uint8_t(std::round(amps * CURRENT_FACTOR)),
uint8_t(std::min(255.0, std::max(0.0, std::round(amps * CURRENT_FACTOR)))),
};
CURRENT_I2C.MasterTransmit(CURRENT_MCP44XX_ADDR, command, sizeof(command), false);
while (CURRENT_I2C.GetStatus().busy)

View File

@ -731,8 +731,8 @@
#define DEFAULT_X_ACCELERATION (5000.0*60*60) // 5000*60*60 mm/min^2 = 5000 mm/sec^2
#define DEFAULT_Y_ACCELERATION (5000.0*60*60) // 5000*60*60 mm/min^2 = 5000 mm/sec^2
#define DEFAULT_Z_ACCELERATION (5000.0*60*60) // 5000*60*60 mm/min^2 = 5000 mm/sec^2
#define DEFAULT_X_CURRENT 0.4 // amps
#define DEFAULT_Y_CURRENT 1.5 // amps
#define DEFAULT_X_CURRENT 0.0 // amps
#define DEFAULT_Y_CURRENT 0.0 // amps
#define DEFAULT_Z_CURRENT 0.0 // amps
#define DEFAULT_A_CURRENT 0.0 // amps
#define DEFAULT_X_MAX_TRAVEL 200.0 // mm

View File

@ -62,6 +62,7 @@
#include "spindle_control.h"
#include "stepper.h"
#include "jog.h"
#include "current_control.h"
// ---------------------------------------------------------------------------------------
// COMPILE-TIME ERROR CHECKING OF DEFINE VALUES:

View File

@ -20,7 +20,6 @@
*/
#include "grbl.h"
#include "current_control.h"
void isr_init();

View File

@ -218,6 +218,7 @@ void report_grbl_settings() {
case 1: report_util_float_setting(val+idx,settings.max_rate[idx],N_DECIMAL_SETTINGVALUE); break;
case 2: report_util_float_setting(val+idx,settings.acceleration[idx]/(60*60),N_DECIMAL_SETTINGVALUE); break;
case 3: report_util_float_setting(val+idx,-settings.max_travel[idx],N_DECIMAL_SETTINGVALUE); break;
case 4: report_util_float_setting(val+idx,settings.current[idx],N_DECIMAL_SETTINGVALUE); break;
}
}
val += AXIS_SETTINGS_INCREMENT;

View File

@ -117,6 +117,9 @@ void settings_restore(uint8_t restore_flag) {
settings.max_travel[X_AXIS] = (-DEFAULT_X_MAX_TRAVEL);
settings.max_travel[Y_AXIS] = (-DEFAULT_Y_MAX_TRAVEL);
settings.max_travel[Z_AXIS] = (-DEFAULT_Z_MAX_TRAVEL);
settings.current[X_AXIS] = DEFAULT_X_CURRENT;
settings.current[Y_AXIS] = DEFAULT_Y_CURRENT;
settings.current[Z_AXIS] = DEFAULT_Z_CURRENT;
write_global_settings(false);
}
@ -231,6 +234,10 @@ uint8_t settings_store_global_setting(uint8_t parameter, float value) {
break;
case 2: settings.acceleration[parameter] = value*60*60; break; // Convert to mm/min^2 for grbl internal use.
case 3: settings.max_travel[parameter] = -value; break; // Store as negative for grbl internal use.
case 4:
settings.current[parameter] = value;
set_current(parameter, settings.current[parameter]);
break;
}
break; // Exit while-loop after setting has been configured and proceed to the EEPROM write call.
} else {

View File

@ -70,7 +70,7 @@
// #define SETTING_INDEX_G92 N_COORDINATE_SYSTEM+2 // Coordinate offset (G92.2,G92.3 not supported)
// Define Grbl axis settings numbering scheme. Starts at START_VAL, every INCREMENT, over N_SETTINGS.
#define AXIS_N_SETTINGS 4
#define AXIS_N_SETTINGS 5
#define AXIS_SETTINGS_START_VAL 100 // NOTE: Reserving settings values >= 100 for axis settings. Up to 255.
#define AXIS_SETTINGS_INCREMENT 10 // Must be greater than the number of axis settings
@ -81,6 +81,7 @@ typedef struct {
float max_rate[N_AXIS];
float acceleration[N_AXIS];
float max_travel[N_AXIS];
float current[N_AXIS];
// Remaining Grbl settings
uint8_t pulse_microseconds;