GRBL在上电之后要进行初始化,初始化完成以后,如果之前有存储一个执行的位置,则重新上电需要在之前存储的位置处开始时,先调用此参数作为开启位置。上电以后,先GRBL系统设置结构体的标志清空,memset(&sys, 0, sizeof(sys));typedef struct { uint8_t abort; //系统中止 uint8_t state; // GRBL的当前状态 volatile uint8_t execute; //系统运行状态 int32_t position[N_AXIS]; // 实时位置 uint8_t auto_start; // 自动重启} system_t;然后将abort和state设置为初始化运行后,进行init_grbl初始化。在init_grbl中,初始化如下模块:调度器初始化解析器初始化协议初始化主轴初始化冷却剂初始化限位器初始化步进子系统参数初始化然后同步一下控制系统的位置值sys_sync_current_position,将当前位置设置为逻辑原点。然后系统清一下报警和上电完成指示后,返回一个调试的信息。如果上电之前有保存的轨迹,则把开始启动行从存储器中读出以后,再进行执行,函数名为:settings_read_startup_line里面调用了存储函数memcpy_from_eeprom_with_checksum。之后进行系统的上电,系统上电用到了一个很好的电路,如下:
24V上电原理图
上电需要两个引脚进行控制,只有同时设置时,上电才会完成,完成上电以后,POWER_IN引脚拉低,指示24V上电完成。#define PWR_ON GPIO_SetBits(GPIOE, GPIO_Pin_14);GPIO_ResetBits(GPIOE, GPIO_Pin_15)#define PWR_OFF GPIO_ResetBits(GPIOE, GPIO_Pin_14);GPIO_SetBits(GPIOE, GPIO_Pin_15)继续确认一下单片机时钟稳定以后,发送调试指令:BOOT完成。然后挂载一下U盘,我们需要从U盘中读取G代码进行解析执行,判断完成U盘挂载,并输出U盘的剩余容量以后,蜂鸣器输出,同时给冷却液通电,也可以接风扇,输出全部通过光耦,光耦输入为3.3V信号,输出为24V驱动MOS,MOS型号可选SI2302(待定)。然后读一下主板的设置,如果ID=1,则确认是从U盘开始执行。ReadTestboardID,GPIO_ReadInputDataBit然后进入最重要的函数WorkingFromSDfile:才U盘读取G代码解析执行驱动步进驱动器