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。
之后進行系統的上電,系統上電用到了一個很好的電路,如下:
上電需要兩個引腳進行控制,只有同時設置時,上電才會完成,完成上電以后,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代碼解析執行驅動步進驅動器