kopia lustrzana https://github.com/Schildkroet/GRBL-Advanced
commit
adf49524c6
|
@ -74,8 +74,8 @@
|
|||
<Add option="-std=c99" />
|
||||
<Add option="-Wextra" />
|
||||
<Add option="-Wall" />
|
||||
<Add option="-fno-strict-aliasing" />
|
||||
<Add option="-fsingle-precision-constant" />
|
||||
<Add option="-fno-strict-aliasing" />
|
||||
<Add symbol="ARM_MATH_CM4" />
|
||||
<Add symbol="__FPU_USED" />
|
||||
<Add symbol="STM32F411RE" />
|
||||
|
@ -93,6 +93,11 @@
|
|||
<Add option="-flto" />
|
||||
<Add option="-lm" />
|
||||
</Linker>
|
||||
<ExtraCommands>
|
||||
<Add after="arm-none-eabi-objcopy -O binary ${PROJECT_DIR}${TARGET_OUTPUT_DIR}${TARGET_OUTPUT_BASENAME}.elf ${PROJECT_DIR}${TARGET_OUTPUT_DIR}${TARGET_OUTPUT_BASENAME}.bin" />
|
||||
<Mode before="0" />
|
||||
<Mode after="1" />
|
||||
</ExtraCommands>
|
||||
<Unit filename="cmsis\arm_common_tables.h" />
|
||||
<Unit filename="cmsis\arm_math.h" />
|
||||
<Unit filename="cmsis\core_cm4.h" />
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
</File>
|
||||
<File name="cmsis\core_cmFunc.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="1392" topLine="80" />
|
||||
<Cursor1 position="11905" topLine="437" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="cmsis\core_cmInstr.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
|
@ -21,29 +21,29 @@
|
|||
<Cursor1 position="1639" topLine="32" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="grbl\Config.h" open="0" top="0" tabpos="3" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<File name="grbl\Config.h" open="1" top="0" tabpos="2" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="819" topLine="0" />
|
||||
<Cursor1 position="8686" topLine="135" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="grbl\CoolantControl.c" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="776" topLine="0" />
|
||||
<Cursor1 position="959" topLine="8" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="grbl\CoolantControl.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="767" topLine="21" />
|
||||
<Cursor1 position="873" topLine="13" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="grbl\defaults.h" open="0" top="0" tabpos="1" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<File name="grbl\defaults.h" open="1" top="0" tabpos="4" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="750" topLine="0" />
|
||||
<Cursor1 position="2491" topLine="30" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="grbl\GCode.c" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="809" topLine="30" />
|
||||
<Cursor1 position="51560" topLine="1228" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="grbl\GCode.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
|
@ -68,7 +68,7 @@
|
|||
</File>
|
||||
<File name="grbl\Limits.c" open="0" top="0" tabpos="3" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="858" topLine="0" />
|
||||
<Cursor1 position="10865" topLine="269" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="grbl\Limits.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
|
@ -76,9 +76,9 @@
|
|||
<Cursor1 position="858" topLine="15" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="grbl\MotionControl.c" open="0" top="0" tabpos="7" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<File name="grbl\MotionControl.c" open="1" top="0" tabpos="3" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="848" topLine="0" />
|
||||
<Cursor1 position="1311" topLine="18" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="grbl\MotionControl.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
|
@ -91,9 +91,9 @@
|
|||
<Cursor1 position="896" topLine="0" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="grbl\Planner.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<File name="grbl\Planner.h" open="0" top="0" tabpos="2" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="861" topLine="0" />
|
||||
<Cursor1 position="1896" topLine="15" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="grbl\Probe.c" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
|
@ -106,9 +106,9 @@
|
|||
<Cursor1 position="778" topLine="0" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="grbl\Protocol.c" open="0" top="0" tabpos="8" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<File name="grbl\Protocol.c" open="0" top="0" tabpos="4" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="7298" topLine="171" />
|
||||
<Cursor1 position="4480" topLine="105" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="grbl\Protocol.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
|
@ -116,39 +116,39 @@
|
|||
<Cursor1 position="842" topLine="3" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="grbl\Report.c" open="0" top="0" tabpos="2" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<File name="grbl\Report.c" open="1" top="0" tabpos="1" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="776" topLine="0" />
|
||||
<Cursor1 position="7133" topLine="223" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="grbl\Report.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="776" topLine="0" />
|
||||
<Cursor1 position="1255" topLine="9" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="grbl\Settings.c" open="0" top="0" tabpos="2" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="5420" topLine="141" />
|
||||
<Cursor1 position="8966" topLine="241" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="grbl\Settings.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="817" topLine="0" />
|
||||
<Cursor1 position="3593" topLine="62" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="grbl\SpindleControl.c" open="1" top="0" tabpos="3" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<File name="grbl\SpindleControl.c" open="0" top="0" tabpos="3" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="978" topLine="12" />
|
||||
<Cursor1 position="2495" topLine="41" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="grbl\SpindleControl.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<File name="grbl\SpindleControl.h" open="0" top="0" tabpos="2" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="824" topLine="0" />
|
||||
<Cursor1 position="1411" topLine="12" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="grbl\Stepper.c" open="1" top="0" tabpos="4" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<File name="grbl\Stepper.c" open="1" top="0" tabpos="5" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="10292" topLine="204" />
|
||||
<Cursor1 position="46208" topLine="1051" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="grbl\Stepper.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
|
@ -158,7 +158,7 @@
|
|||
</File>
|
||||
<File name="grbl\System.c" open="0" top="0" tabpos="2" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="0" topLine="0" />
|
||||
<Cursor1 position="12252" topLine="135" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="grbl\util.c" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
|
@ -166,9 +166,9 @@
|
|||
<Cursor1 position="31" topLine="0" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="grbl\util.h" open="0" top="0" tabpos="4" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<File name="grbl\util.h" open="0" top="0" tabpos="7" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="1463" topLine="34" />
|
||||
<Cursor1 position="2820" topLine="54" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="HAL\EXTI\EXTI.c" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
|
@ -193,12 +193,12 @@
|
|||
</File>
|
||||
<File name="HAL\GPIO\GPIO.c" open="0" top="0" tabpos="2" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="583" topLine="42" />
|
||||
<Cursor1 position="1238" topLine="93" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="HAL\GPIO\GPIO.h" open="0" top="0" tabpos="4" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="727" topLine="78" />
|
||||
<Cursor1 position="1808" topLine="38" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="HAL\SPI\SPI.c" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
|
@ -218,7 +218,7 @@
|
|||
</File>
|
||||
<File name="HAL\STM32\stm32f4xx.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="171145" topLine="2290" />
|
||||
<Cursor1 position="79135" topLine="840" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="HAL\STM32\stm32f4xx_conf.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
|
@ -228,7 +228,7 @@
|
|||
</File>
|
||||
<File name="HAL\STM32\stm32f4xx_it.c" open="0" top="0" tabpos="5" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="4797" topLine="156" />
|
||||
<Cursor1 position="5450" topLine="195" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="HAL\STM32\stm32f4xx_it.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
|
@ -248,7 +248,7 @@
|
|||
</File>
|
||||
<File name="HAL\System32.c" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="1064" topLine="15" />
|
||||
<Cursor1 position="1451" topLine="13" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="HAL\System32.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
|
@ -256,12 +256,12 @@
|
|||
<Cursor1 position="1130" topLine="9" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="HAL\TIM\TIM.c" open="1" top="1" tabpos="2" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<File name="HAL\TIM\TIM.c" open="0" top="0" tabpos="2" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="3181" topLine="67" />
|
||||
<Cursor1 position="3237" topLine="69" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="HAL\TIM\TIM.h" open="1" top="0" tabpos="1" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<File name="HAL\TIM\TIM.h" open="0" top="0" tabpos="1" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="841" topLine="0" />
|
||||
</Cursor>
|
||||
|
@ -286,9 +286,9 @@
|
|||
<Cursor1 position="781" topLine="12" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="main.c" open="1" top="0" tabpos="5" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<File name="main.c" open="1" top="1" tabpos="6" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="2489" topLine="35" />
|
||||
<Cursor1 position="2755" topLine="52" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="SPL\inc\stm32f4xx_cryp.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
|
@ -313,7 +313,7 @@
|
|||
</File>
|
||||
<File name="SPL\inc\stm32f4xx_tim.h" open="0" top="0" tabpos="1" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="2663" topLine="56" />
|
||||
<Cursor1 position="44718" topLine="1018" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="SPL\src\stm32f4xx_cryp.c" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
|
@ -348,7 +348,7 @@
|
|||
</File>
|
||||
<File name="Src\Print.c" open="0" top="0" tabpos="3" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="118" topLine="0" />
|
||||
<Cursor1 position="364" topLine="0" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="Src\Print.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
#include "SPI.h"
|
||||
#include "stm32f4xx_rcc.h"
|
||||
#include "stm32f4xx_gpio.h"
|
||||
|
||||
|
||||
void Spi_Init(SPI_TypeDef *SPIx, SPI_Mode mode)
|
||||
|
@ -163,3 +165,84 @@ uint8_t Spi_WriteByte(SPI_TypeDef *SPIx, uint8_t _data)
|
|||
return (uint8_t)SPI_I2S_ReceiveData(SPIx);
|
||||
}
|
||||
|
||||
|
||||
void Spi_ReadByteArray(SPI_TypeDef *SPIx, uint8_t *_buffer, uint8_t _len)
|
||||
{
|
||||
uint8_t i = 0;
|
||||
|
||||
for(i = 0; i < _len; ++i)
|
||||
{
|
||||
// Loop while DR register is not empty
|
||||
while(SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_TXE) == RESET);
|
||||
|
||||
// Send byte through the SPIx peripheral
|
||||
SPI_I2S_SendData(SPIx, 0xFF);
|
||||
|
||||
while(SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_RXNE) == RESET);
|
||||
|
||||
_buffer[i] = (uint8_t)SPI_I2S_ReceiveData(SPIx);
|
||||
}
|
||||
}
|
||||
|
||||
void Spi_WriteDataArray(SPI_TypeDef *SPIx, uint8_t *_data, uint8_t _len)
|
||||
{
|
||||
uint8_t i = 0;
|
||||
|
||||
for(i = 0; i < _len; ++i)
|
||||
{
|
||||
// Loop while DR register is not empty
|
||||
while(SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_TXE) == RESET);
|
||||
|
||||
// Send byte through the SPIx peripheral
|
||||
SPI_I2S_SendData(SPIx, _data[i]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void Spi_SetPrescaler(SPI_TypeDef *SPIx, uint16_t prescaler)
|
||||
{
|
||||
SPI_Cmd(SPIx, DISABLE);
|
||||
|
||||
uint16_t tmpreg = SPIx->CR1;
|
||||
|
||||
tmpreg |= prescaler;
|
||||
|
||||
SPIx->CR1 = tmpreg;
|
||||
|
||||
SPI_Cmd(SPIx, ENABLE);
|
||||
}
|
||||
|
||||
|
||||
void Spi_ChipSelect(SPI_TypeDef *SPIx, bool select)
|
||||
{
|
||||
if(select)
|
||||
{
|
||||
if(SPIx == SPI1)
|
||||
{
|
||||
GPIO_ResetBits(SPI1_CS_GPIO_PORT, SPI1_CS_PIN);
|
||||
}
|
||||
else if(SPIx == SPI2)
|
||||
{
|
||||
GPIO_ResetBits(SPI2_CS_GPIO_PORT, SPI2_CS_PIN);
|
||||
}
|
||||
else if(SPIx == SPI3)
|
||||
{
|
||||
GPIO_ResetBits(SPI3_CS_GPIO_PORT, SPI3_CS_PIN);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(SPIx == SPI1)
|
||||
{
|
||||
GPIO_SetBits(SPI1_CS_GPIO_PORT, SPI1_CS_PIN);
|
||||
}
|
||||
else if(SPIx == SPI2)
|
||||
{
|
||||
GPIO_SetBits(SPI2_CS_GPIO_PORT, SPI2_CS_PIN);
|
||||
}
|
||||
else if(SPIx == SPI3)
|
||||
{
|
||||
GPIO_SetBits(SPI3_CS_GPIO_PORT, SPI3_CS_PIN);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,12 +3,35 @@
|
|||
|
||||
|
||||
#include <stdint.h>
|
||||
#include "stm32f4xx_conf.h"
|
||||
#include <stdbool.h>
|
||||
#include "stm32f4xx_spi.h"
|
||||
|
||||
|
||||
typedef enum {
|
||||
SPI_MODE0, SPI_MODE1, SPI_MODE2, SPI_MODE3
|
||||
} SPI_Mode;
|
||||
// CS Pin Configuration
|
||||
// Default SPI1 CS Pins: PA4, PA15(Remap)
|
||||
#define SPI1_CS_PIN GPIO_Pin_6
|
||||
#define SPI1_CS_GPIO_PORT GPIOB
|
||||
#define SPI1_CS_GPIO_CLK RCC_APB2Periph_GPIOB
|
||||
|
||||
// Default SPI2 CS Pins: PB12, PB9(AF)
|
||||
#define SPI2_CS_PIN GPIO_Pin_12
|
||||
#define SPI2_CS_GPIO_PORT GPIOB
|
||||
#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 SPI_PRESCALER_2 0x0000
|
||||
#define SPI_PRESCALER_4 0x0008
|
||||
#define SPI_PRESCALER_8 0x0010
|
||||
#define SPI_PRESCALER_16 0x0018
|
||||
#define SPI_PRESCALER_32 0x0020
|
||||
#define SPI_PRESCALER_64 0x0028
|
||||
#define SPI_PRESCALER_128 0x0030
|
||||
#define SPI_PRESCALER_256 0x0038
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
@ -16,11 +39,22 @@ typedef enum {
|
|||
#endif
|
||||
|
||||
|
||||
typedef enum {
|
||||
SPI_MODE0, SPI_MODE1, SPI_MODE2, SPI_MODE3
|
||||
} SPI_Mode;
|
||||
|
||||
|
||||
void Spi_Init(SPI_TypeDef *SPIx, SPI_Mode mode);
|
||||
|
||||
uint8_t Spi_ReadByte(SPI_TypeDef *SPIx);
|
||||
uint8_t Spi_WriteByte(SPI_TypeDef *SPIx, uint8_t _data);
|
||||
|
||||
void Spi_ReadByteArray(SPI_TypeDef *SPIx, uint8_t *_buffer, uint8_t _len);
|
||||
void Spi_WriteDataArray(SPI_TypeDef *SPIx, uint8_t *_data, uint8_t _len);
|
||||
|
||||
void Spi_SetPrescaler(SPI_TypeDef *SPIx, uint16_t prescaler);
|
||||
void Spi_ChipSelect(SPI_TypeDef *SPIx, bool select);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -54,11 +54,19 @@ extern void Limit_PinChangeISR(void);
|
|||
extern void System_PinChangeISR(void);
|
||||
|
||||
|
||||
// Counter for milliseconds
|
||||
static volatile uint32_t gMillis = 0;
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
/* Cortex-M4 Processor Exceptions Handlers */
|
||||
/******************************************************************************/
|
||||
|
||||
uint32_t millis(void)
|
||||
{
|
||||
return gMillis;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles NMI exception.
|
||||
* @param None
|
||||
|
@ -191,6 +199,8 @@ void SysTick_Handler(void)
|
|||
if(DebounceCounterControl && !controls) {
|
||||
DebounceCounterControl--;
|
||||
}
|
||||
|
||||
gMillis++;
|
||||
}
|
||||
|
||||
|
||||
|
|
31
Src/Print.c
31
Src/Print.c
|
@ -16,6 +16,7 @@ void Print_Init(void)
|
|||
Usart_Init(STDOUT, BAUD_RATE);
|
||||
}
|
||||
|
||||
|
||||
int Printf(const char *str, ...)
|
||||
{
|
||||
char buffer[MAX_BUFFER_SIZE];
|
||||
|
@ -30,17 +31,30 @@ int Printf(const char *str, ...)
|
|||
i = MAX_BUFFER_SIZE;
|
||||
}
|
||||
|
||||
#ifdef BUFFERD_OUTPUT
|
||||
while(i)
|
||||
{
|
||||
while(USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET);
|
||||
USART_SendData(USART2, buffer[idx++]);
|
||||
|
||||
{
|
||||
FifoUsart_Insert(STDOUT_NUM, 1, buffer[idx++]);
|
||||
i--;
|
||||
}
|
||||
|
||||
va_end(vl);
|
||||
|
||||
return 0;
|
||||
// Enable sending via interrupt
|
||||
Usart_TxInt(STDOUT, true);
|
||||
#else
|
||||
while(i)
|
||||
{
|
||||
while(USART_GetFlagStatus(STDOUT, USART_FLAG_TC) == RESET);
|
||||
USART_SendData(STDOUT, buffer[idx++]);
|
||||
i--;
|
||||
}
|
||||
|
||||
va_end(vl);
|
||||
#endif
|
||||
|
||||
// Return number of sent bytes
|
||||
return idx;
|
||||
}
|
||||
|
||||
// Convert float to string by immediately converting to a long integer, which contains
|
||||
|
@ -105,8 +119,15 @@ int8_t Getc(char *c)
|
|||
|
||||
int Putc(const char c)
|
||||
{
|
||||
#ifdef BUFFERD_OUTPUT
|
||||
FifoUsart_Insert(STDOUT_NUM, 1, c);
|
||||
|
||||
// Enable sending via interrupt
|
||||
Usart_TxInt(STDOUT, true);
|
||||
#else
|
||||
while(USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET);
|
||||
USART_SendData(USART2, c);
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -38,8 +38,11 @@
|
|||
// If doing so, simply comment out these two defines and see instructions below.
|
||||
#define DEFAULTS_GENERIC
|
||||
|
||||
|
||||
// Serial baud rate
|
||||
#define BAUD_RATE 115200
|
||||
//#define BAUD_RATE 230400
|
||||
|
||||
|
||||
// Define realtime command special characters. These characters are 'picked-off' directly from the
|
||||
// serial read data stream and are not passed to the grbl line execution parser. Select characters
|
||||
|
@ -47,12 +50,12 @@
|
|||
// used, if they are available per user setup. Also, extended ASCII codes (>127), which are never in
|
||||
// g-code programs, maybe selected for interface programs.
|
||||
// NOTE: If changed, manually update help message in report.c.
|
||||
|
||||
#define CMD_RESET 0x18 // ctrl-x.
|
||||
#define CMD_STATUS_REPORT '?'
|
||||
#define CMD_CYCLE_START '~'
|
||||
#define CMD_FEED_HOLD '!'
|
||||
|
||||
|
||||
// NOTE: All override realtime commands must be in the extended ASCII character set, starting
|
||||
// at character value 128 (0x80) and up to 255 (0xFF). If the normal set of realtime commands,
|
||||
// such as status reports, feed hold, reset, and cycle start, are moved to the extended set
|
||||
|
@ -82,11 +85,13 @@
|
|||
#define CMD_COOLANT_FLOOD_OVR_TOGGLE 0xA0
|
||||
#define CMD_COOLANT_MIST_OVR_TOGGLE 0xA1
|
||||
|
||||
|
||||
// If homing is enabled, homing init lock sets Grbl into an alarm state upon power up. This forces
|
||||
// the user to perform the homing cycle (or override the locks) before doing anything else. This is
|
||||
// mainly a safety feature to remind the user to home, since position is unknown to Grbl.
|
||||
#define HOMING_INIT_LOCK // Comment to disable
|
||||
|
||||
|
||||
// Define the homing cycle patterns with bitmasks. The homing cycle first performs a search mode
|
||||
// to quickly engage the limit switches, followed by a slower locate mode, and finished by a short
|
||||
// pull-off motion to disengage the limit switches. The following HOMING_CYCLE_x defines are executed
|
||||
|
@ -112,11 +117,13 @@
|
|||
//#define HOMING_CYCLE_0 (1<<X_AXIS) // COREXY COMPATIBLE: First home X
|
||||
//#define HOMING_CYCLE_1 (1<<Y_AXIS) // COREXY COMPATIBLE: Then home Y
|
||||
|
||||
|
||||
// Number of homing cycles performed after when the machine initially jogs to limit switches.
|
||||
// This help in preventing overshoot and should improve repeatability. This value should be one or
|
||||
// greater.
|
||||
#define N_HOMING_LOCATE_CYCLE 1 // Integer (1-128)
|
||||
|
||||
|
||||
// Enables single axis homing commands. $HX, $HY, and $HZ for X, Y, and Z-axis homing. The full homing
|
||||
// cycle is still invoked by the $H command. This is disabled by default. It's here only to address
|
||||
// users that need to switch between a two-axis and three-axis machine. This is actually very rare.
|
||||
|
@ -134,6 +141,7 @@
|
|||
// parser state depending on user preferences.
|
||||
#define N_STARTUP_LINE 0 // Integer (1-2)
|
||||
|
||||
|
||||
// Number of floating decimal points printed by Grbl for certain value types. These settings are
|
||||
// determined by realistic and commonly observed values in CNC machines. For example, position
|
||||
// values cannot be less than 0.001mm or 0.0001in, because machines can not be physically more
|
||||
|
@ -146,6 +154,7 @@
|
|||
#define N_DECIMAL_SETTINGVALUE 3 // Decimals for floating point setting values
|
||||
#define N_DECIMAL_RPMVALUE 0 // RPM value in rotations per min.
|
||||
|
||||
|
||||
// If your machine has two limits switches wired in parallel to one axis, you will need to enable
|
||||
// this feature. Since the two switches are sharing a single pin, there is no way for Grbl to tell
|
||||
// which one is enabled. This option only effects homing, where if a limit is engaged, Grbl will
|
||||
|
@ -154,21 +163,25 @@
|
|||
// homing cycle while on the limit switch and not have to move the machine off of it.
|
||||
// #define LIMITS_TWO_SWITCHES_ON_AXES
|
||||
|
||||
|
||||
// Upon a successful probe cycle, this option provides immediately feedback of the probe coordinates
|
||||
// through an automatically generated message. If disabled, users can still access the last probe
|
||||
// coordinates through Grbl '$#' print parameters.
|
||||
#define MESSAGE_PROBE_COORDINATES // Enabled by default. Comment to disable.
|
||||
|
||||
|
||||
// Enables a second coolant control pin via the mist coolant g-code command M7 on the Arduino Uno
|
||||
// analog pin 4. Only use this option if you require a second coolant control pin.
|
||||
// NOTE: The M8 flood coolant control pin on analog pin 3 will still be functional regardless.
|
||||
//#define ENABLE_M7 // Disabled by default. Uncomment to enable.
|
||||
|
||||
|
||||
// After the safety door switch has been toggled and restored, this setting sets the power-up delay
|
||||
// between restoring the spindle and coolant and resuming the cycle.
|
||||
#define SAFETY_DOOR_SPINDLE_DELAY 2.0 // Float (seconds)
|
||||
#define SAFETY_DOOR_COOLANT_DELAY 1.0 // Float (seconds)
|
||||
|
||||
|
||||
// Enable CoreXY kinematics. Use ONLY with CoreXY machines.
|
||||
// IMPORTANT: If homing is enabled, you must reconfigure the homing cycle #defines above to
|
||||
// #define HOMING_CYCLE_0 (1<<X_AXIS) and #define HOMING_CYCLE_1 (1<<Y_AXIS)
|
||||
|
@ -178,6 +191,7 @@
|
|||
// have the same steps per mm internally.
|
||||
// #define COREXY // Default disabled. Uncomment to enable.
|
||||
|
||||
|
||||
// Inverts select limit pin states based on the following mask. This effects all limit pin functions,
|
||||
// such as hard limits and homing. However, this is different from overall invert limits setting.
|
||||
// This build option will invert only the limit pins defined here, and then the invert limits setting
|
||||
|
@ -186,6 +200,7 @@
|
|||
// NOTE: PLEASE DO NOT USE THIS, unless you have a situation that needs it.
|
||||
//#define INVERT_LIMIT_PIN_MASK ((1<<X_LIMIT_BIT)|(1<<Y_LIMIT_BIT)) // Default disabled. Uncomment to enable.
|
||||
|
||||
|
||||
// Inverts the spindle enable pin from low-disabled/high-enabled to low-enabled/high-disabled. Useful
|
||||
// for some pre-built electronic boards.
|
||||
// NOTE: If VARIABLE_SPINDLE is enabled(default), this option has no effect as the PWM output and
|
||||
|
@ -193,11 +208,13 @@
|
|||
// uncomment the config option USE_SPINDLE_DIR_AS_ENABLE_PIN below.
|
||||
//#define INVERT_SPINDLE_ENABLE_PIN // Default disabled. Uncomment to enable.
|
||||
|
||||
|
||||
// Inverts the selected coolant pin from low-disabled/high-enabled to low-enabled/high-disabled. Useful
|
||||
// for some pre-built electronic boards.
|
||||
//#define INVERT_COOLANT_FLOOD_PIN // Default disabled. Uncomment to enable.
|
||||
//#define INVERT_COOLANT_MIST_PIN // Default disabled. Note: Enable M7 mist coolant in Config.h
|
||||
|
||||
|
||||
// When Grbl powers-cycles or is hard reset with the Arduino reset button, Grbl boots up with no ALARM
|
||||
// by default. This is to make it as simple as possible for new users to start using Grbl. When homing
|
||||
// is enabled and a user has installed limit switches, Grbl will boot up in an ALARM state to indicate
|
||||
|
@ -206,12 +223,14 @@
|
|||
// OEMs and LinuxCNC users that would like this power-cycle behavior.
|
||||
//#define FORCE_INITIALIZATION_ALARM // Default disabled. Uncomment to enable.
|
||||
|
||||
|
||||
// At power-up or a reset, Grbl will check the limit switch states to ensure they are not active
|
||||
// before initialization. If it detects a problem and the hard limits setting is enabled, Grbl will
|
||||
// simply message the user to check the limits and enter an alarm state, rather than idle. Grbl will
|
||||
// not throw an alarm message.
|
||||
#define CHECK_LIMITS_AT_INIT
|
||||
|
||||
|
||||
// ---------------------------------------------------------------------------------------
|
||||
// ADVANCED CONFIGURATION OPTIONS:
|
||||
|
||||
|
@ -235,11 +254,13 @@
|
|||
#define SPINDLE_OVERRIDE_COARSE_INCREMENT 10 // (1-99). Usually 10%.
|
||||
#define SPINDLE_OVERRIDE_FINE_INCREMENT 1 // (1-99). Usually 1%.
|
||||
|
||||
|
||||
// When a M2 or M30 program end command is executed, most g-code states are restored to their defaults.
|
||||
// This compile-time option includes the restoring of the feed, rapid, and spindle speed override values
|
||||
// to their default values at program end.
|
||||
#define RESTORE_OVERRIDES_AFTER_PROGRAM_END // Default enabled. Comment to disable.
|
||||
|
||||
|
||||
// The status report change for Grbl v1.1 and after also removed the ability to disable/enable most data
|
||||
// fields from the report. This caused issues for GUI developers, who've had to manage several scenarios
|
||||
// and configurations. The increased efficiency of the new reporting style allows for all data fields to
|
||||
|
@ -253,6 +274,7 @@
|
|||
#define REPORT_FIELD_OVERRIDES // Default enabled. Comment to disable.
|
||||
#define REPORT_FIELD_LINE_NUMBERS // Default enabled. Comment to disable.
|
||||
|
||||
|
||||
// Some status report data isn't necessary for realtime, only intermittently, because the values don't
|
||||
// change often. The following macros configures how many times a status report needs to be called before
|
||||
// the associated data is refreshed and included in the status report. However, if one of these value
|
||||
|
@ -267,6 +289,7 @@
|
|||
#define REPORT_WCO_REFRESH_BUSY_COUNT 30 // (2-255)
|
||||
#define REPORT_WCO_REFRESH_IDLE_COUNT 10 // (2-255) Must be less than or equal to the busy count
|
||||
|
||||
|
||||
// The temporal resolution of the acceleration management subsystem. A higher number gives smoother
|
||||
// acceleration, particularly noticeable on machines that run at very high feedrates, but may negatively
|
||||
// impact performance. The correct value for this parameter is machine dependent, so it's advised to
|
||||
|
@ -274,14 +297,16 @@
|
|||
// NOTE: Changing this value also changes the execution time of a segment in the step segment buffer.
|
||||
// When increasing this value, this stores less overall time in the segment buffer and vice versa. Make
|
||||
// certain the step segment buffer is increased/decreased to account for these changes.
|
||||
#define ACCELERATION_TICKS_PER_SECOND 220
|
||||
#define ACCELERATION_TICKS_PER_SECOND 210
|
||||
|
||||
|
||||
// Sets the maximum step rate allowed to be written as a Grbl setting. This option enables an error
|
||||
// check in the settings module to prevent settings values that will exceed this limitation. The maximum
|
||||
// step rate is strictly limited by the CPU speed and will change if something other than an AVR running
|
||||
// at 16MHz is used.
|
||||
// NOTE: For now disabled, will enable if flash space permits.
|
||||
#define MAX_STEP_RATE_HZ 50000 // Hz
|
||||
#define MAX_STEP_RATE_HZ 50000 // Hz
|
||||
|
||||
|
||||
// By default, Grbl sets all input pins to normal-high operation with their internal pull-up resistors
|
||||
// enabled. This simplifies the wiring for users by requiring only a switch connected to ground,
|
||||
|
@ -300,17 +325,20 @@
|
|||
//#define DISABLE_PROBE_PIN_PULL_UP
|
||||
//#define DISABLE_CONTROL_PIN_PULL_UP
|
||||
|
||||
|
||||
// Sets which axis the tool length offset is applied. Assumes the spindle is always parallel with
|
||||
// the selected axis with the tool oriented toward the negative direction. In other words, a positive
|
||||
// tool length offset value is subtracted from the current location.
|
||||
#define TOOL_LENGTH_OFFSET_AXIS Z_AXIS // Default z-axis. Valid values are X_AXIS, Y_AXIS, or Z_AXIS.
|
||||
|
||||
|
||||
// Enables variable spindle output voltage for different RPM values. On the Arduino Uno, the spindle
|
||||
// enable pin will output 5V for maximum RPM with 256 intermediate levels and 0V when disabled.
|
||||
// NOTE: IMPORTANT for Arduino Unos! When enabled, the Z-limit pin D11 and spindle enable pin D12 switch!
|
||||
// The hardware PWM output on pin D11 is required for variable spindle output voltages.
|
||||
#define VARIABLE_SPINDLE // Default enabled. Comment to disable.
|
||||
|
||||
|
||||
// Used by variable spindle output only. This forces the PWM output to a minimum duty cycle when enabled.
|
||||
// The PWM pin will still read 0V when the spindle is disabled. Most users will not need this option, but
|
||||
// it may be useful in certain scenarios. This minimum PWM settings coincides with the spindle rpm minimum
|
||||
|
@ -322,6 +350,7 @@
|
|||
// NOTE: Compute duty cycle at the minimum PWM by this equation: (% duty cycle)=(SPINDLE_PWM_MIN_VALUE/255)*100
|
||||
//#define SPINDLE_PWM_MIN_VALUE 5 // Default disabled. Uncomment to enable. Must be greater than zero. Integer (1-255).
|
||||
|
||||
|
||||
// Alters the behavior of the spindle enable pin with the USE_SPINDLE_DIR_AS_ENABLE_PIN option . By default,
|
||||
// Grbl will not disable the enable pin if spindle speed is zero and M3/4 is active, but still sets the PWM
|
||||
// output to zero. This allows the users to know if the spindle is active and use it as an additional control
|
||||
|
@ -330,6 +359,7 @@
|
|||
// NOTE: Requires USE_SPINDLE_DIR_AS_ENABLE_PIN to be enabled.
|
||||
//#define SPINDLE_ENABLE_OFF_WITH_ZERO_SPEED // Default disabled. Uncomment to enable.
|
||||
|
||||
|
||||
// With this enabled, Grbl sends back an echo of the line it has received, which has been pre-parsed (spaces
|
||||
// removed, capitalized letters, no comments) and is to be immediately executed by Grbl. Echoes will not be
|
||||
// sent upon a line buffer overflow, but should for all normal lines sent to Grbl. For example, if a user
|
||||
|
@ -339,6 +369,7 @@
|
|||
// to help minimize transmission waiting within the serial write protocol.
|
||||
//#define REPORT_ECHO_LINE_RECEIVED // Default disabled. Uncomment to enable.
|
||||
|
||||
|
||||
// Minimum planner junction speed. Sets the default minimum junction speed the planner plans to at
|
||||
// every buffer block junction, except for starting from rest and end of the buffer, which are always
|
||||
// zero. This value controls how fast the machine moves through junctions with no regard for acceleration
|
||||
|
@ -347,17 +378,20 @@
|
|||
// should not be much greater than zero or to the minimum value necessary for the machine to work.
|
||||
#define MINIMUM_JUNCTION_SPEED 0.0 // (mm/min)
|
||||
|
||||
|
||||
// Sets the minimum feed rate the planner will allow. Any value below it will be set to this minimum
|
||||
// value. This also ensures that a planned motion always completes and accounts for any floating-point
|
||||
// round-off errors. Although not recommended, a lower value than 1.0 mm/min will likely work in smaller
|
||||
// machines, perhaps to 0.1mm/min, but your success may vary based on multiple factors.
|
||||
#define MINIMUM_FEED_RATE 1.0 // (mm/min)
|
||||
|
||||
|
||||
// Number of arc generation iterations by small angle approximation before exact arc trajectory
|
||||
// correction with expensive sin() and cos() calcualtions. This parameter maybe decreased if there
|
||||
// are issues with the accuracy of the arc generations, or increased if arc execution is getting
|
||||
// bogged down by too many trig calculations.
|
||||
#define N_ARC_CORRECTION 8 // Integer (1-255)
|
||||
#define N_ARC_CORRECTION 6 // Integer (1-255)
|
||||
|
||||
|
||||
// The arc G2/3 g-code standard is problematic by definition. Radius-based arcs have horrible numerical
|
||||
// errors when arc at semi-circles(pi) or full-circles(2*pi). Offset-based arcs are much more accurate
|
||||
|
@ -369,6 +403,7 @@
|
|||
// much greater than this. The default setting should capture most, if not all, full arc error situations.
|
||||
#define ARC_ANGULAR_TRAVEL_EPSILON 5E-7 // Float (radians)
|
||||
|
||||
|
||||
// Time delay increments performed during a dwell. The default value is set at 50ms, which provides
|
||||
// a maximum time delay of roughly 55 minutes, more than enough for most any application. Increasing
|
||||
// this delay will increase the maximum dwell time linearly, but also reduces the responsiveness of
|
||||
|
@ -376,6 +411,7 @@
|
|||
// time step. Also, keep in mind that the Arduino delay timer is not very accurate for long delays.
|
||||
#define DWELL_TIME_STEP 50 // Integer (1-255) (milliseconds)
|
||||
|
||||
|
||||
// The number of linear motions in the planner buffer to be planned at any give time. The vast
|
||||
// majority of RAM that Grbl uses is based on this buffer size. Only increase if there is extra
|
||||
// available RAM, like when re-compiling for a Mega2560. Or decrease if the Arduino begins to
|
||||
|
@ -383,6 +419,7 @@
|
|||
// new incoming motions as they are executed.
|
||||
#define BLOCK_BUFFER_SIZE 64 // Uncomment to override default in planner.h.
|
||||
|
||||
|
||||
// Governs the size of the intermediary step segment buffer between the step execution algorithm
|
||||
// and the planner blocks. Each segment is set of steps executed at a constant velocity over a
|
||||
// fixed time defined by ACCELERATION_TICKS_PER_SECOND. They are computed such that the planner
|
||||
|
@ -391,6 +428,7 @@
|
|||
// before having to come back and refill this buffer, currently at ~50msec of step moves.
|
||||
#define SEGMENT_BUFFER_SIZE 32 // Uncomment to override default in stepper.h.
|
||||
|
||||
|
||||
// Line buffer size from the serial input stream to be executed. Also, governs the size of
|
||||
// each of the startup blocks, as they are each stored as a string of this size. Make sure
|
||||
// to account for the available EEPROM at the defined memory address in settings.h and for
|
||||
|
@ -401,6 +439,7 @@
|
|||
// we know how much extra memory space we can re-invest into this.
|
||||
#define LINE_BUFFER_SIZE 200 // Uncomment to override default in protocol.h
|
||||
|
||||
|
||||
// Serial send and receive buffer size. The receive buffer is often used as another streaming
|
||||
// buffer to store incoming blocks to be processed by Grbl when its ready. Most streaming
|
||||
// interfaces will character count and track each block send to each block response. So,
|
||||
|
@ -408,16 +447,18 @@
|
|||
// memory allows. The send buffer primarily handles messages in Grbl. Only increase if large
|
||||
// messages are sent and Grbl begins to stall, waiting to send the rest of the message.
|
||||
// NOTE: Grbl generates an average status report in about 0.5msec, but the serial TX stream at
|
||||
// 115200 baud will take 5 msec to transmit a typical 55 character report. Worst case reports are
|
||||
// 115200 will take 5 msec to transmit a typical 55 character report. Worst case reports are
|
||||
// around 90-100 characters. As long as the serial TX buffer doesn't get continually maxed, Grbl
|
||||
// will continue operating efficiently. Size the TX buffer around the size of a worst-case report.
|
||||
//#define RX_BUFFER_SIZE 128 // (1-254) Uncomment to override defaults in serial.h
|
||||
//#define TX_BUFFER_SIZE 100 // (1-254)
|
||||
|
||||
|
||||
// Configures the position after a probing cycle during Grbl's check mode. Disabled sets
|
||||
// the position to the probe target, when enabled sets the position to the start position.
|
||||
//#define SET_CHECK_MODE_PROBE_TO_START // Default disabled. Uncomment to enable.
|
||||
|
||||
|
||||
// Force Grbl to check the state of the hard limit switches when the processor detects a pin
|
||||
// change inside the hard limit ISR routine. By default, Grbl will trigger the hard limits
|
||||
// alarm upon any pin change, since bouncing switches can cause a state check like this to
|
||||
|
@ -428,6 +469,7 @@
|
|||
// NOTE: This option has no effect if SOFTWARE_DEBOUNCE is enabled.
|
||||
//#define HARD_LIMIT_FORCE_STATE_CHECK // Default disabled. Uncomment to enable.
|
||||
|
||||
|
||||
// Adjusts homing cycle search and locate scalars. These are the multipliers used by Grbl's
|
||||
// homing cycle to ensure the limit switches are engaged and cleared through each phase of
|
||||
// the cycle. The search phase uses the axes max-travel setting times the SEARCH_SCALAR to
|
||||
|
@ -438,6 +480,7 @@
|
|||
//#define HOMING_AXIS_SEARCH_SCALAR 1.5 // Uncomment to override defaults in limits.c.
|
||||
//#define HOMING_AXIS_LOCATE_SCALAR 10.0 // Uncomment to override defaults in limits.c.
|
||||
|
||||
|
||||
// Enable the '$RST=*', '$RST=$', and '$RST=#' eeprom restore commands. There are cases where
|
||||
// these commands may be undesirable. Simply comment the desired macro to disable it.
|
||||
// NOTE: See SETTINGS_RESTORE_ALL macro for customizing the `$RST=*` command.
|
||||
|
@ -445,6 +488,7 @@
|
|||
#define ENABLE_RESTORE_EEPROM_DEFAULT_SETTINGS // '$RST=$' Default enabled. Comment to disable.
|
||||
#define ENABLE_RESTORE_EEPROM_CLEAR_PARAMETERS // '$RST=#' Default enabled. Comment to disable.
|
||||
|
||||
|
||||
// Defines the EEPROM data restored upon a settings version change and `$RST=*` command. Whenever the
|
||||
// the settings or other EEPROM data structure changes between Grbl versions, Grbl will automatically
|
||||
// wipe and restore the EEPROM. This macro controls what data is wiped and restored. This is useful
|
||||
|
@ -454,6 +498,7 @@
|
|||
// NOTE: Uncomment to override defaults in settings.h
|
||||
//#define SETTINGS_RESTORE_ALL (SETTINGS_RESTORE_DEFAULTS | SETTINGS_RESTORE_PARAMETERS | SETTINGS_RESTORE_STARTUP_LINES | SETTINGS_RESTORE_BUILD_INFO)
|
||||
|
||||
|
||||
// Enable the '$I=(string)' build info write command. If disabled, any existing build info data must
|
||||
// be placed into EEPROM via external means with a valid checksum value. This macro option is useful
|
||||
// to prevent this data from being over-written by a user, when used to store OEM product data.
|
||||
|
@ -462,6 +507,7 @@
|
|||
// NOTE: See the included grblWrite_BuildInfo.ino example file to write this string seperately.
|
||||
#define ENABLE_BUILD_INFO_WRITE_COMMAND // '$I=' Default enabled. Comment to disable.
|
||||
|
||||
|
||||
// AVR processors require all interrupts to be disabled during an EEPROM write. This includes both
|
||||
// the stepper ISRs and serial comm ISRs. In the event of a long EEPROM write, this ISR pause can
|
||||
// cause active stepping to lose position and serial receive data to be lost. This configuration
|
||||
|
@ -476,6 +522,7 @@
|
|||
// job. At this time, this option only forces a planner buffer sync with these g-code commands.
|
||||
#define FORCE_BUFFER_SYNC_DURING_EEPROM_WRITE // Default enabled. Comment to disable.
|
||||
|
||||
|
||||
// In Grbl v0.9 and prior, there is an old outstanding bug where the `WPos:` work position reported
|
||||
// may not correlate to what is executing, because `WPos:` is based on the g-code parser state, which
|
||||
// can be several motions behind. This option forces the planner buffer to empty, sync, and stop
|
||||
|
@ -484,6 +531,7 @@
|
|||
// that any of these commands are used need continuous motions through them.
|
||||
#define FORCE_BUFFER_SYNC_DURING_WCO_CHANGE // Default enabled. Comment to disable.
|
||||
|
||||
|
||||
// By default, Grbl disables feed rate overrides for all G38.x probe cycle commands. Although this
|
||||
// may be different than some pro-class machine control, it's arguable that it should be this way.
|
||||
// Most probe sensors produce different levels of error that is dependent on rate of speed. By
|
||||
|
@ -491,6 +539,7 @@
|
|||
// repeatable. If needed, you can disable this behavior by uncommenting the define below.
|
||||
//#define ALLOW_FEED_OVERRIDE_DURING_PROBE_CYCLES // Default disabled. Uncomment to enable.
|
||||
|
||||
|
||||
// Enables and configures parking motion methods upon a safety door state. Primarily for OEMs
|
||||
// that desire this feature for their integrated machines. At the moment, Grbl assumes that
|
||||
// the parking motion only involves one axis, although the parking implementation was written
|
||||
|
@ -506,6 +555,7 @@
|
|||
// positive direction.
|
||||
//#define PARKING_ENABLE // Default disabled. Uncomment to enable
|
||||
|
||||
|
||||
// Configure options for the parking motion, if enabled.
|
||||
#define PARKING_AXIS Z_AXIS // Define which axis that performs the parking motion
|
||||
#define PARKING_TARGET -5.0 // Parking axis target. In mm, as machine coordinate [-max_travel,0].
|
||||
|
@ -514,6 +564,7 @@
|
|||
#define PARKING_PULLOUT_INCREMENT 5.0 // Spindle pull-out and plunge distance in mm. Incremental distance.
|
||||
// Must be positive value or equal to zero.
|
||||
|
||||
|
||||
// Enables a special set of M-code commands that enables and disables the parking motion.
|
||||
// These are controlled by `M56`, `M56 P1`, or `M56 Px` to enable and `M56 P0` to disable.
|
||||
// The command is modal and will be set after a planner sync. Since it is g-code, it is
|
||||
|
@ -523,12 +574,18 @@
|
|||
//#define ENABLE_PARKING_OVERRIDE_CONTROL // Default disabled. Uncomment to enable
|
||||
//#define DEACTIVATE_PARKING_UPON_INIT // Default disabled. Uncomment to enable.
|
||||
|
||||
|
||||
// This option will automatically disable the laser during a feed hold by invoking a spindle stop
|
||||
// override immediately after coming to a stop. However, this also means that the laser still may
|
||||
// be reenabled by disabling the spindle stop override, if needed. This is purely a safety feature
|
||||
// to ensure the laser doesn't inadvertently remain powered while at a stop and cause a fire.
|
||||
#define DISABLE_LASER_DURING_HOLD // Default enabled. Comment to disable.
|
||||
|
||||
|
||||
// Backlash Compensation
|
||||
#define ENABLE_BACKLASH_COMPENSATION
|
||||
|
||||
|
||||
/* ---------------------------------------------------------------------------------------
|
||||
OEM Single File Configuration Option
|
||||
|
||||
|
|
|
@ -32,6 +32,11 @@
|
|||
#include "Report.h"
|
||||
#include "CoolantControl.h"
|
||||
#include "MotionControl.h"
|
||||
#include "defaults.h"
|
||||
|
||||
|
||||
static float target_prev[N_AXIS] = {0.0};
|
||||
static uint8_t dir_negative[N_AXIS] = {0};
|
||||
|
||||
|
||||
// Execute linear motion in absolute millimeter coordinates. Feed rate given in millimeters/second
|
||||
|
@ -43,6 +48,15 @@
|
|||
// in the planner and to let backlash compensation or canned cycle integration simple and direct.
|
||||
void MC_Line(float *target, Planner_LineData_t *pl_data)
|
||||
{
|
||||
Planner_LineData_t pl_backlash = {0};
|
||||
uint8_t backlash_update = 0;
|
||||
|
||||
|
||||
pl_backlash.spindle_speed = pl_data->spindle_speed;
|
||||
pl_backlash.line_number = pl_data->line_number;
|
||||
pl_backlash.feed_rate = pl_data->feed_rate;
|
||||
|
||||
|
||||
// If enabled, check for soft limit violations. Placed here all line motions are picked up
|
||||
// from everywhere in Grbl.
|
||||
if(BIT_IS_TRUE(settings.flags, BITFLAG_SOFT_LIMIT_ENABLE)) {
|
||||
|
@ -71,6 +85,7 @@ void MC_Line(float *target, Planner_LineData_t *pl_data)
|
|||
// doesn't update the machine position values. Since the position values used by the g-code
|
||||
// parser and planner are separate from the system machine positions, this is doable.
|
||||
|
||||
|
||||
// If the buffer is full: good! That means we are well ahead of the robot.
|
||||
// Remain in this loop until there is room in the buffer.
|
||||
do {
|
||||
|
@ -90,6 +105,66 @@ void MC_Line(float *target, Planner_LineData_t *pl_data)
|
|||
}
|
||||
} while(1);
|
||||
|
||||
#ifdef ENABLE_BACKLASH_COMPENSATION
|
||||
pl_backlash.backlash_motion = 1;
|
||||
pl_backlash.condition = PL_COND_FLAG_RAPID_MOTION; // Set rapid motion condition flag.
|
||||
|
||||
// Backlash compensation
|
||||
for(uint8_t i = 0; i < N_AXIS; i++)
|
||||
{
|
||||
// Move positive?
|
||||
if(target[i] > target_prev[i])
|
||||
{
|
||||
// Last move negative?
|
||||
if(dir_negative[i] == 1)
|
||||
{
|
||||
dir_negative[i] = 0;
|
||||
target_prev[i] += settings.backlash[i];
|
||||
|
||||
backlash_update = 1;
|
||||
}
|
||||
}
|
||||
// Move negative?
|
||||
else if(target[i] < target_prev[i])
|
||||
{
|
||||
// Last move positive?
|
||||
if(dir_negative[i] == 0)
|
||||
{
|
||||
dir_negative[i] = 1;
|
||||
target_prev[i] -= settings.backlash[i];
|
||||
|
||||
backlash_update = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(backlash_update)
|
||||
{
|
||||
// Perform backlash move if necessary
|
||||
Planner_BufferLine(target_prev, &pl_backlash);
|
||||
}
|
||||
|
||||
memcpy(target_prev, target, N_AXIS*sizeof(float));
|
||||
|
||||
// Backlash move needs a slot in planner buffer, so we have to check again, if planner is free
|
||||
do {
|
||||
Protocol_ExecuteRealtime(); // Check for any run-time commands
|
||||
|
||||
if(sys.abort) {
|
||||
// Bail, if system abort.
|
||||
return;
|
||||
}
|
||||
|
||||
if(Planner_CheckBufferFull()) {
|
||||
// Auto-cycle start when buffer is full.
|
||||
Protocol_AutoCycleStart();
|
||||
}
|
||||
else {
|
||||
break;
|
||||
}
|
||||
} while(1);
|
||||
#endif
|
||||
|
||||
// Plan and queue motion into planner buffer
|
||||
if(Planner_BufferLine(target, pl_data) == PLAN_EMPTY_BLOCK) {
|
||||
if(BIT_IS_TRUE(settings.flags, BITFLAG_LASER_MODE)) {
|
||||
|
|
|
@ -94,10 +94,11 @@ uint8_t Planner_BufferLine(float *target, Planner_LineData_t *pl_data)
|
|||
{
|
||||
// Prepare and initialize new block. Copy relevant pl_data for block execution.
|
||||
Planner_Block_t *block = &block_buffer[block_buffer_head];
|
||||
memset(block,0,sizeof(Planner_Block_t)); // Zero all block values.
|
||||
memset(block, 0, sizeof(Planner_Block_t)); // Zero all block values.
|
||||
block->condition = pl_data->condition;
|
||||
block->spindle_speed = pl_data->spindle_speed;
|
||||
block->line_number = pl_data->line_number;
|
||||
block->backlash_motion = pl_data->backlash_motion;
|
||||
|
||||
// Compute and store initial move distance data.
|
||||
int32_t target_steps[N_AXIS], position_steps[N_AXIS];
|
||||
|
@ -247,9 +248,12 @@ uint8_t Planner_BufferLine(float *target, Planner_LineData_t *pl_data)
|
|||
Planner_ComputeProfileParams(block, nominal_speed, planner.previous_nominal_speed);
|
||||
planner.previous_nominal_speed = nominal_speed;
|
||||
|
||||
// Update previous path unit_vector and planner position.
|
||||
memcpy(planner.previous_unit_vec, unit_vec, sizeof(unit_vec)); // pl.previous_unit_vec[] = unit_vec[]
|
||||
memcpy(planner.position, target_steps, sizeof(target_steps)); // pl.position[] = target_steps[]
|
||||
if(block->backlash_motion == 0)
|
||||
{
|
||||
// Update previous path unit_vector and planner position.
|
||||
memcpy(planner.previous_unit_vec, unit_vec, sizeof(unit_vec)); // pl.previous_unit_vec[] = unit_vec[]
|
||||
memcpy(planner.position, target_steps, sizeof(target_steps)); // pl.position[] = target_steps[]
|
||||
}
|
||||
|
||||
// New block is all set. Update buffer head and next buffer head indices.
|
||||
block_buffer_head = next_buffer_head;
|
||||
|
|
|
@ -73,6 +73,8 @@ typedef struct {
|
|||
|
||||
// Stored spindle speed data used by spindle overrides and resuming methods.
|
||||
float spindle_speed; // Block spindle speed. Copied from pl_line_data.
|
||||
|
||||
uint8_t backlash_motion;
|
||||
} Planner_Block_t;
|
||||
|
||||
|
||||
|
@ -82,6 +84,8 @@ typedef struct {
|
|||
float spindle_speed; // Desired spindle speed through line motion.
|
||||
uint8_t condition; // Bitflag variable to indicate planner conditions. See defines above.
|
||||
int32_t line_number; // Desired line number to report when executing.
|
||||
|
||||
uint8_t backlash_motion;
|
||||
} Planner_LineData_t;
|
||||
|
||||
|
||||
|
|
|
@ -96,6 +96,7 @@ void Protocol_MainLoop(void)
|
|||
uint8_t char_counter = 0;
|
||||
char c;
|
||||
|
||||
|
||||
for(;;) {
|
||||
// Process one line of incoming serial data, as the data becomes available. Performs an
|
||||
// initial filtering by removing spaces and comments and capitalizing all letters.
|
||||
|
|
|
@ -250,9 +250,12 @@ void Report_GrblSettings(void) {
|
|||
uint8_t idx, set_idx;
|
||||
uint8_t val = AXIS_SETTINGS_START_VAL;
|
||||
|
||||
for(set_idx = 0; set_idx < AXIS_N_SETTINGS; set_idx++) {
|
||||
for(idx = 0; idx < N_AXIS; idx++) {
|
||||
switch(set_idx) {
|
||||
for(set_idx = 0; set_idx < AXIS_N_SETTINGS; set_idx++)
|
||||
{
|
||||
for(idx = 0; idx < N_AXIS; idx++)
|
||||
{
|
||||
switch(set_idx)
|
||||
{
|
||||
case 0:
|
||||
report_util_float_setting(val+idx,settings.steps_per_mm[idx],N_DECIMAL_SETTINGVALUE);
|
||||
break;
|
||||
|
@ -269,6 +272,10 @@ void Report_GrblSettings(void) {
|
|||
report_util_float_setting(val+idx,-settings.max_travel[idx],N_DECIMAL_SETTINGVALUE);
|
||||
break;
|
||||
|
||||
case 4:
|
||||
report_util_float_setting(val+idx,settings.backlash[idx],N_DECIMAL_SETTINGVALUE);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -129,6 +129,10 @@ void Settings_Restore(uint8_t restore_flag) {
|
|||
settings.max_travel[Y_AXIS] = (-DEFAULT_Y_MAX_TRAVEL);
|
||||
settings.max_travel[Z_AXIS] = (-DEFAULT_Z_MAX_TRAVEL);
|
||||
|
||||
settings.backlash[X_AXIS] = DEFAULT_X_BACKLASH;
|
||||
settings.backlash[Y_AXIS] = DEFAULT_Y_BACKLASH;
|
||||
settings.backlash[Z_AXIS] = DEFAULT_Z_BACKLASH;
|
||||
|
||||
WriteGlobalSettings();
|
||||
}
|
||||
|
||||
|
@ -261,6 +265,7 @@ uint8_t Settings_StoreGlobalSetting(uint8_t parameter, float value) {
|
|||
|
||||
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.backlash[parameter] = value; break;
|
||||
}
|
||||
break; // Exit while-loop after setting has been configured and proceed to the EEPROM write call.
|
||||
}
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
|
||||
// Version of the EEPROM data. Will be used to migrate existing data from older versions of Grbl
|
||||
// when firmware is upgraded. Always stored in byte 0 of eeprom
|
||||
#define SETTINGS_VERSION 2 // NOTE: Check settings_reset() when moving to next version.
|
||||
#define SETTINGS_VERSION 3 // NOTE: Check settings_reset() when moving to next version.
|
||||
|
||||
|
||||
// Define bit flag masks for the boolean settings in settings.system_flags
|
||||
|
@ -78,7 +78,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
|
||||
|
||||
|
@ -95,6 +95,8 @@ typedef struct {
|
|||
float acceleration[N_AXIS];
|
||||
float max_travel[N_AXIS];
|
||||
|
||||
float backlash[N_AXIS];
|
||||
|
||||
// Remaining Grbl settings
|
||||
// TODO: document system_flags
|
||||
uint8_t system_flags;
|
||||
|
|
|
@ -97,6 +97,8 @@ typedef struct {
|
|||
uint8_t st_block_index; // Stepper block data index. Uses this information to execute this segment.
|
||||
uint8_t amass_level; // Indicates AMASS level for the ISR to execute this segment
|
||||
uint8_t spindle_pwm;
|
||||
|
||||
uint8_t backlash_motion;
|
||||
} Stepper_Segment_t;
|
||||
|
||||
|
||||
|
@ -222,6 +224,7 @@ void Stepper_Init(void)
|
|||
TIM9_Init();
|
||||
}
|
||||
|
||||
|
||||
// Stepper state initialization. Cycle should only start if the st.cycle_start flag is
|
||||
// enabled. Startup init and limits call this function but shouldn't start the cycle.
|
||||
void Stepper_WakeUp(void)
|
||||
|
@ -444,12 +447,15 @@ void Stepper_MainISR(void)
|
|||
st.step_outbits |= (1<<X_STEP_BIT);
|
||||
st.counter_x -= st.exec_block->step_event_count;
|
||||
|
||||
if(st.exec_block->direction_bits & (1<<X_DIRECTION_BIT)) {
|
||||
sys_position[X_AXIS]--;
|
||||
}
|
||||
else {
|
||||
sys_position[X_AXIS]++;
|
||||
}
|
||||
if(st.exec_segment->backlash_motion == 0)
|
||||
{
|
||||
if(st.exec_block->direction_bits & (1<<X_DIRECTION_BIT)) {
|
||||
sys_position[X_AXIS]--;
|
||||
}
|
||||
else {
|
||||
sys_position[X_AXIS]++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
st.counter_y += st.steps[Y_AXIS];
|
||||
|
@ -458,12 +464,15 @@ void Stepper_MainISR(void)
|
|||
st.step_outbits |= (1<<Y_STEP_BIT);
|
||||
st.counter_y -= st.exec_block->step_event_count;
|
||||
|
||||
if(st.exec_block->direction_bits & (1<<Y_DIRECTION_BIT)) {
|
||||
sys_position[Y_AXIS]--;
|
||||
}
|
||||
else {
|
||||
sys_position[Y_AXIS]++;
|
||||
}
|
||||
if(st.exec_segment->backlash_motion == 0)
|
||||
{
|
||||
if(st.exec_block->direction_bits & (1<<Y_DIRECTION_BIT)) {
|
||||
sys_position[Y_AXIS]--;
|
||||
}
|
||||
else {
|
||||
sys_position[Y_AXIS]++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
st.counter_z += st.steps[Z_AXIS];
|
||||
|
@ -472,12 +481,15 @@ void Stepper_MainISR(void)
|
|||
st.step_outbits |= (1<<Z_STEP_BIT);
|
||||
st.counter_z -= st.exec_block->step_event_count;
|
||||
|
||||
if(st.exec_block->direction_bits & (1<<Z_DIRECTION_BIT)) {
|
||||
sys_position[Z_AXIS]--;
|
||||
}
|
||||
else {
|
||||
sys_position[Z_AXIS]++;
|
||||
}
|
||||
if(st.exec_segment->backlash_motion == 0)
|
||||
{
|
||||
if(st.exec_block->direction_bits & (1<<Z_DIRECTION_BIT)) {
|
||||
sys_position[Z_AXIS]--;
|
||||
}
|
||||
else {
|
||||
sys_position[Z_AXIS]++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// During a homing cycle, lock out and prevent desired axes from moving.
|
||||
|
@ -859,6 +871,8 @@ void Stepper_PrepareBuffer(void)
|
|||
// Set new segment to point to the current segment data block.
|
||||
prep_segment->st_block_index = prep.st_block_index;
|
||||
|
||||
prep_segment->backlash_motion = pl_block->backlash_motion;
|
||||
|
||||
/*------------------------------------------------------------------------------------
|
||||
Compute the average velocity of this new segment by determining the total distance
|
||||
traveled over the segment time DT_SEGMENT. The following code first attempts to create
|
||||
|
|
|
@ -33,22 +33,26 @@
|
|||
#define DEFAULT_X_STEPS_PER_MM 400.0
|
||||
#define DEFAULT_Y_STEPS_PER_MM 400.0
|
||||
#define DEFAULT_Z_STEPS_PER_MM 400.0
|
||||
#define DEFAULT_X_MAX_RATE 1000.0 // mm/min
|
||||
#define DEFAULT_Y_MAX_RATE 1000.0 // mm/min
|
||||
#define DEFAULT_Z_MAX_RATE 1000.0 // mm/min
|
||||
#define DEFAULT_X_ACCELERATION (20.0*60*60) // 10*60*60 mm/min^2 = 10 mm/sec^2
|
||||
#define DEFAULT_Y_ACCELERATION (20.0*60*60) // 10*60*60 mm/min^2 = 10 mm/sec^2
|
||||
#define DEFAULT_Z_ACCELERATION (20.0*60*60) // 10*60*60 mm/min^2 = 10 mm/sec^2
|
||||
#define DEFAULT_X_MAX_TRAVEL 400.0 // mm NOTE: Must be a positive value.
|
||||
#define DEFAULT_X_MAX_RATE 2000.0 // mm/min
|
||||
#define DEFAULT_Y_MAX_RATE 2000.0 // mm/min
|
||||
#define DEFAULT_Z_MAX_RATE 2000.0 // mm/min
|
||||
#define DEFAULT_X_ACCELERATION (30.0*60*60) // 30*60*60 mm/min^2 = 30 mm/sec^2
|
||||
#define DEFAULT_Y_ACCELERATION (30.0*60*60) // 30*60*60 mm/min^2 = 30 mm/sec^2
|
||||
#define DEFAULT_Z_ACCELERATION (30.0*60*60) // 30*60*60 mm/min^2 = 30 mm/sec^2
|
||||
#define DEFAULT_X_MAX_TRAVEL 600.0 // mm NOTE: Must be a positive value.
|
||||
#define DEFAULT_Y_MAX_TRAVEL 400.0 // mm NOTE: Must be a positive value.
|
||||
#define DEFAULT_Z_MAX_TRAVEL 400.0 // mm NOTE: Must be a positive value.
|
||||
#define DEFAULT_SPINDLE_RPM_MAX 1000.0 // rpm
|
||||
#define DEFAULT_Z_MAX_TRAVEL 600.0 // mm NOTE: Must be a positive value.
|
||||
#define DEFAULT_SPINDLE_RPM_MAX 3000.0 // rpm
|
||||
#define DEFAULT_SPINDLE_RPM_MIN 0.0 // rpm
|
||||
|
||||
#define DEFAULT_X_BACKLASH 0.05 // mm
|
||||
#define DEFAULT_Y_BACKLASH 0.05 // mm
|
||||
#define DEFAULT_Z_BACKLASH 0.05 // mm
|
||||
|
||||
#define DEFAULT_SYSTEM_INVERT_MASK 0
|
||||
#define DEFAULT_STEPPING_INVERT_MASK 0
|
||||
#define DEFAULT_DIRECTION_INVERT_MASK 4 // Invert Z-Axis
|
||||
#define DEFAULT_STEPPER_IDLE_LOCK_TIME 25 // msec (0-254, 255 keeps steppers enabled)
|
||||
#define DEFAULT_STEPPER_IDLE_LOCK_TIME 50 // msec (0-254, 255 keeps steppers enabled)
|
||||
#define DEFAULT_STATUS_REPORT_MASK 1 // MPos enabled
|
||||
#define DEFAULT_JUNCTION_DEVIATION 0.01 // mm
|
||||
#define DEFAULT_ARC_TOLERANCE 0.001 // mm
|
||||
|
@ -59,7 +63,7 @@
|
|||
#define DEFAULT_HARD_LIMIT_ENABLE 1 // false
|
||||
#define DEFAULT_INVERT_PROBE_PIN 0 // false
|
||||
#define DEFAULT_LASER_MODE 0 // false
|
||||
#define DEFAULT_HOMING_ENABLE 0 // false
|
||||
#define DEFAULT_HOMING_ENABLE 1 // false
|
||||
#define DEFAULT_HOMING_DIR_MASK 0 // move positive dir
|
||||
#define DEFAULT_HOMING_FEED_RATE 50.0 // mm/min
|
||||
#define DEFAULT_HOMING_SEEK_RATE 500.0 // mm/min
|
||||
|
|
Ładowanie…
Reference in New Issue