GRBL在上電之后要進行初始化,初始化完成以后耍贾,如果之前有存儲一個執(zhí)行的位置,則重新上電需要在之前存儲的位置處開始時路幸,先調(diào)用此參數(shù)作為開啟位置荐开。
上電以后,先GRBL系統(tǒng)設(shè)置結(jié)構(gòu)體的標志清空简肴,memset(&sys, 0, sizeof(sys));
typedef struct {
? uint8_t abort;? ? ? ? ? ? ? ? //系統(tǒng)中止
? uint8_t state;? ? ? ? ? ? ? ? // GRBL的當前狀態(tài)
? volatile uint8_t execute;? ? ? //系統(tǒng)運行狀態(tài)
? int32_t position[N_AXIS];? ? ? // 實時位置
? uint8_t auto_start;? ? ? ? ? ? // 自動重啟
} system_t;
然后將abort和state設(shè)置為初始化運行后晃听,進行init_grbl初始化。
在init_grbl中砰识,初始化如下模塊:
調(diào)度器初始化
解析器初始化
協(xié)議初始化
主軸初始化
冷卻劑初始化
限位器初始化
步進子系統(tǒng)參數(shù)初始化
然后同步一下控制系統(tǒng)的位置值sys_sync_current_position能扒,將當前位置設(shè)置為邏輯原點。
然后系統(tǒng)清一下報警和上電完成指示后辫狼,返回一個調(diào)試的信息初斑。
如果上電之前有保存的軌跡,則把開始啟動行從存儲器中讀出以后膨处,再進行執(zhí)行见秤,函數(shù)名為:
settings_read_startup_line里面調(diào)用了存儲函數(shù)memcpy_from_eeprom_with_checksum。
之后進行系統(tǒng)的上電真椿,系統(tǒng)上電用到了一個很好的電路鹃答,如下:
上電需要兩個引腳進行控制,只有同時設(shè)置時突硝,上電才會完成测摔,完成上電以后,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)
繼續(xù)確認一下單片機時鐘穩(wěn)定以后舟肉,發(fā)送調(diào)試指令:BOOT完成修噪。
然后掛載一下U盤查库,我們需要從U盤中讀取G代碼進行解析執(zhí)行,判斷完成U盤掛載黄琼,并輸出U盤的剩余容量以后樊销,蜂鳴器輸出,同時給冷卻液通電脏款,也可以接風扇围苫,輸出全部通過光耦,光耦輸入為3.3V信號撤师,輸出為24V驅(qū)動MOS剂府,MOS型號可選SI2302(待定)。
然后讀一下主板的設(shè)置剃盾,如果ID=1腺占,則確認是從U盤開始執(zhí)行。
ReadTestboardID痒谴,GPIO_ReadInputDataBit
然后進入最重要的函數(shù)WorkingFromSDfile:才U盤讀取G代碼解析執(zhí)行驅(qū)動步進驅(qū)動器