Fixed backlash errors with soft reset; Code refactoring

pull/25/head
Patrick Felixberger 2019-01-01 18:20:52 +01:00
rodzic 84df23dd0d
commit 20fbe3b588
9 zmienionych plików z 384 dodań i 186 usunięć

Wyświetl plik

@ -74,7 +74,7 @@ static void GPIO_InitStepper(void)
GPIO_InitTypeDef GPIO_InitStructure;
/* GPIO Configuration: D13, D12, D11, D7, D8, D2 */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
@ -169,7 +169,7 @@ static void GPIO_InitSystem(void)
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_4;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_25MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
GPIO_Init(GPIOA, &GPIO_InitStructure);

Wyświetl plik

@ -108,12 +108,12 @@ void Spi_Init(SPI_TypeDef *SPIx, SPI_Mode mode)
// Periph clock enable
RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3, ENABLE);
GPIO_PinAFConfig(GPIOC, GPIO_PinSource3, GPIO_AF_SPI3);
GPIO_PinAFConfig(GPIOC, GPIO_PinSource4, GPIO_AF_SPI3);
GPIO_PinAFConfig(GPIOC, GPIO_PinSource5, GPIO_AF_SPI3);
GPIO_PinAFConfig(GPIOC, GPIO_PinSource10, GPIO_AF_SPI3);
GPIO_PinAFConfig(GPIOC, GPIO_PinSource11, GPIO_AF_SPI3);
GPIO_PinAFConfig(GPIOC, GPIO_PinSource12, GPIO_AF_SPI3);
// Configure SPI pins: SCK, MOSI
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_5;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_12;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
@ -121,7 +121,7 @@ void Spi_Init(SPI_TypeDef *SPIx, SPI_Mode mode)
GPIO_Init(GPIOC, &GPIO_InitStructure);
// Configure pins: MISO
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
GPIO_Init(GPIOC, &GPIO_InitStructure);
// Reset SPI Interface
@ -132,10 +132,24 @@ void Spi_Init(SPI_TypeDef *SPIx, SPI_Mode mode)
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CRCPolynomial = 7;
SPI_Init(SPIx, &SPI_InitStructure);
// Initialize chip select
RCC_AHB1PeriphClockCmd(SPI3_CS_GPIO_CLK, ENABLE);
// Configure CS pin
GPIO_InitStructure.GPIO_Pin = SPI3_CS_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(SPI3_CS_GPIO_PORT, &GPIO_InitStructure);
// Deselect chip
GPIO_SetBits(SPI3_CS_GPIO_PORT, SPI3_CS_PIN);
}
SPI_CalculateCRC(SPIx, DISABLE);

Wyświetl plik

@ -19,9 +19,9 @@
#define SPI2_CS_GPIO_CLK RCC_APB2Periph_GPIOB
// Default SPI3 CS Pins: PA15, PA4(AF)
#define SPI3_CS_PIN GPIO_Pin_15
#define SPI3_CS_GPIO_PORT GPIOA
#define SPI3_CS_GPIO_CLK RCC_APB2Periph_GPIOA
#define SPI3_CS_PIN GPIO_Pin_2
#define SPI3_CS_GPIO_PORT GPIOD
#define SPI3_CS_GPIO_CLK RCC_AHB1Periph_GPIOD
#define SPI_PRESCALER_2 0x0000

Wyświetl plik

@ -67,6 +67,7 @@ uint32_t millis(void)
return gMillis;
}
/**
* @brief This function handles NMI exception.
* @param None

Plik diff jest za duży Load Diff

Wyświetl plik

@ -33,22 +33,24 @@
// a unique motion. These are defined in the NIST RS274-NGC v3 g-code standard, available online,
// and are similar/identical to other g-code interpreters by manufacturers (Haas,Fanuc,Mazak,etc).
// NOTE: Modal group define values must be sequential and starting from zero.
#define MODAL_GROUP_G0 0 // [G4,G10,G28,G28.1,G30,G30.1,G53,G92,G92.1] Non-modal
#define MODAL_GROUP_G1 1 // [G0,G1,G2,G3,G38.2,G38.3,G38.4,G38.5,G80] Motion
#define MODAL_GROUP_G2 2 // [G17,G18,G19] Plane selection
#define MODAL_GROUP_G3 3 // [G90,G91] Distance mode
#define MODAL_GROUP_G4 4 // [G91.1] Arc IJK distance mode
#define MODAL_GROUP_G5 5 // [G93,G94] Feed rate mode
#define MODAL_GROUP_G6 6 // [G20,G21] Units
#define MODAL_GROUP_G7 7 // [G40] Cutter radius compensation mode. G41/42 NOT SUPPORTED.
#define MODAL_GROUP_G8 8 // [G43.1,G49] Tool length offset
#define MODAL_GROUP_G12 9 // [G54,G55,G56,G57,G58,G59] Coordinate system selection
#define MODAL_GROUP_G13 10 // [G61] Control mode
#define MODAL_GROUP_G0 0 // [G4,G10,G28,G28.1,G30,G30.1,G53,G92,G92.1] Non-modal
#define MODAL_GROUP_G1 1 // [G0,G1,G2,G3,G38.2,G38.3,G38.4,G38.5,G80] Motion
#define MODAL_GROUP_G2 2 // [G17,G18,G19] Plane selection
#define MODAL_GROUP_G3 3 // [G90,G91] Distance mode
#define MODAL_GROUP_G4 4 // [G91.1] Arc IJK distance mode
#define MODAL_GROUP_G5 5 // [G93,G94] Feed rate mode
#define MODAL_GROUP_G6 6 // [G20,G21] Units
#define MODAL_GROUP_G7 7 // [G40] Cutter radius compensation mode. G41/42 NOT SUPPORTED.
#define MODAL_GROUP_G8 8 // [G43.1,G49] Tool length offset
#define MODAL_GROUP_G12 9 // [G54,G55,G56,G57,G58,G59] Coordinate system selection
#define MODAL_GROUP_G13 10 // [G61] Control mode
#define MODAL_GROUP_G10 11 // [G98, G99] Canned Cycles Return Mode
#define MODAL_GROUP_M4 11 // [M0,M1,M2,M30] Stopping
#define MODAL_GROUP_M7 12 // [M3,M4,M5] Spindle turning
#define MODAL_GROUP_M8 13 // [M7,M8,M9] Coolant control
#define MODAL_GROUP_M9 14 // [M56] Override control
#define MODAL_GROUP_M7 12 // [M3,M4,M5] Spindle turning
#define MODAL_GROUP_M8 13 // [M7,M8,M9] Coolant control
#define MODAL_GROUP_M9 14 // [M56] Override control
// Define command actions for within execution-type modal groups (motion, stopping, non-modal). Used
@ -81,6 +83,9 @@
#define MOTION_MODE_PROBE_AWAY 142 // G38.4 (Do not alter value)
#define MOTION_MODE_PROBE_AWAY_NO_ERROR 143 // G38.5 (Do not alter value)
#define MOTION_MODE_NONE 80 // G80 (Do not alter value)
#define MOTION_MODE_DRILL 81 // G81
#define MOTION_MODE_DRILL_DWELL 82 // G82
#define MOTION_MODE_DRILL_PECK 83 // G83
// Modal Group G2: Plane select
#define PLANE_SELECT_XY 0 // G17 (Default: Must be zero)
@ -129,6 +134,10 @@
#define TOOL_LENGTH_OFFSET_CANCEL 0 // G49 (Default: Must be zero)
#define TOOL_LENGTH_OFFSET_ENABLE_DYNAMIC 1 // G43.1
// Modal Group G10: Canned Cycle Return Level
#define RETRACT_OLD_Z 0 // G98 (Default: Must be zero)
#define RETRACT_SPECIFIED_R 1
// Modal Group G12: Active work coordinate system
// N/A: Stores coordinate system value (54-59) to change to.
@ -146,6 +155,7 @@
#define WORD_X 10
#define WORD_Y 11
#define WORD_Z 12
#define WORD_Q 13
// Define g-code parser position updating flags
#define GC_UPDATE_POS_TARGET 0 // Must be zero
@ -183,6 +193,7 @@ typedef struct {
uint8_t feed_rate; // {G93,G94}
uint8_t units; // {G20,G21}
uint8_t distance; // {G90,G91}
uint8_t retract; // {G98,G99}
// uint8_t distance_arc; // {G91.1} NOTE: Don't track. Only default supported.
uint8_t plane_select; // {G17,G18,G19}
// uint8_t cutter_comp; // {G40} NOTE: Don't track. Only default supported.
@ -201,7 +212,7 @@ typedef struct {
uint8_t l; // G10 or canned cycles parameters
int32_t n; // Line number
float p; // G10 or dwell parameters
// float q; // G82 peck drilling
float q; // G82 peck drilling
float r; // Arc radius
float s; // Spindle speed
uint8_t t; // Tool selection

Wyświetl plik

@ -39,6 +39,20 @@ static float target_prev[N_AXIS] = {0.0};
static uint8_t dir_negative[N_AXIS] = {0};
void MC_Init(void)
{
int32_t current_position[N_AXIS]; // Copy current state of the system position variable
for(uint8_t i = 0; i < N_AXIS; i++)
{
dir_negative[i] = 0;
}
memcpy(current_position, sys_position, sizeof(sys_position));
System_ConvertArraySteps2Mpos(target_prev, current_position);
}
// Execute linear motion in absolute millimeter coordinates. Feed rate given in millimeters/second
// unless invert_feed_rate is true. Then the feed_rate means that the motion should be completed in
// (1 minute)/feed_rate time.
@ -305,6 +319,7 @@ void MC_Dwell(float seconds)
return;
}
// TODO: DWELL sys.state
Protocol_BufferSynchronize();
Delay_sec(seconds, DELAY_MODE_DWELL);
}

Wyświetl plik

@ -35,6 +35,9 @@
#define HOMING_CYCLE_Z BIT(Z_AXIS)
void MC_Init(void);
// Execute linear motion in absolute millimeter coordinates. Feed rate given in millimeters/second
// unless invert_feed_rate is true. Then the feed_rate means that the motion should be completed in
// (1 minute)/feed_rate time.

6
main.c
Wyświetl plik

@ -40,9 +40,6 @@ volatile uint8_t sys_rt_exec_accessory_override; // Global realtime executor bit
int main(void)
{
// Init SysTick 1ms
SysTick_Init();
// Init formatted output
Print_Init();
@ -52,6 +49,9 @@ int main(void)
System_ResetPosition();
// Init SysTick 1ms
SysTick_Init();
if(BIT_IS_TRUE(settings.flags, BITFLAG_HOMING_ENABLE))
{
sys.state = STATE_ALARM;