|
最近硬件四軸很火,了解了很久,還是選擇了MiniFly,主要還是資料多,后邊可以有人討論,不像很多就是建了個群,研究問題還是在論壇方便很多。 四軸終于拿到手,功能很強大,主要是還支持二次開發(fā),可以研究下玩玩小四軸了 還是先從硬件入手分析下 1.系統(tǒng)框架 主體可以分成兩個小系統(tǒng),后續(xù)可以按照這個順序分析代碼 1.通信部分---基于M0和NFR51822,包括電源管理 2.控制部分---基于M4和外圍傳感器 ![]() ![]() image.png 2.比較關(guān)注的電源部分 電源還是比較考究,直接包含了充電功能,不用每次使用外置的充電模塊(之前自制過一個充電模塊,看來以后可以集成到電路里了) 按鍵斷電功能這個比較喜歡:這個是NFR51822控制VEN_D引腳來實現(xiàn)斷電的 上個NFR51822部分電路 ![]() ![]() image.png 開始看代碼,大致看了下程序,先是監(jiān)測按鍵狀態(tài) /*按鍵掃描處理*/ void buttonProcess() { static unsigned int lastTick; static unsigned int pressedTick; static bool pressed = false; if (lastTick != systickGetTick()) { lastTick = systickGetTick(); if(pressed==false && BUTTON_READ()==BUTTON_PRESSED) { pressed = true; pressedTick = systickGetTick(); } else if(pressed==true) { if(BUTTON_READ()==BUTTON_RELEASED) pressed = false; if ((systickGetTick()-pressedTick) > BUTTON_LONGPRESS_TICK) state = buttonLongPress; else if(BUTTON_READ()==BUTTON_RELEASED) state = buttonShortPress; } } } /*獲取按鍵狀態(tài)*/ buttonEvent_e buttonGetState() { buttonEvent_e currentState = state; state = buttonIdle; return currentState; } 然后就是在主函數(shù)中進行相應(yīng)的操作,先不說了 看下怎么實現(xiàn)電源開關(guān)的:這么最后應(yīng)該F1部分還是有電的,只是消耗較少,尋求一種可以完全斷電的方案?? /*開啟電源*/ void pmPowerOn(void) { nrf_gpio_cfg_output(UART_TX_PIN); //使能串口TX nrf_gpio_pin_set(UART_TX_PIN); nrf_gpio_cfg_output(RADIO_PAEN_PIN);// 開啟無線功能 nrf_gpio_pin_set(RADIO_PAEN_PIN); nrf_gpio_cfg_output(PM_VBAT_SINK_PIN);// 設(shè)置ADC nrf_gpio_pin_clear(PM_VBAT_SINK_PIN); pmStartAdc(); //開啟ADC轉(zhuǎn)換 } /*關(guān)閉電源*/ void pmPowerOff(void) { nrf_gpio_cfg_input(UART_TX_PIN, NRF_GPIO_PIN_PULLDOWN); uartDeinit(); nrf_gpio_cfg_input(STM_NRST_PIN, NRF_GPIO_PIN_PULLDOWN); nrf_gpio_pin_clear(STM_NRST_PIN); nrf_gpio_pin_clear(PM_VCCEN_PIN); //關(guān)閉 LDO使能控制腳 LED_OFF(); nrf_gpio_pin_clear(RADIO_PAEN_PIN); //關(guān)閉PA nrf_gpio_cfg_input(PM_VBAT_SINK_PIN, NRF_GPIO_PIN_NOPULL); NRF_POWER->SYSTEMOFF = 1UL; while(1); //進入死循環(huán) } void pmInit() { /* STM32 電源配置 */ nrf_gpio_cfg_output(PM_VCCEN_PIN); nrf_gpio_pin_set(PM_VCCEN_PIN); //使能stm32電源 msDelay(100); /* STM32 復(fù)位 */ nrf_gpio_cfg_output(STM_NRST_PIN); nrf_gpio_pin_clear(STM_NRST_PIN); msDelay(100); nrf_gpio_pin_set(STM_NRST_PIN); msDelay(100); nrf_gpio_cfg_input(USB_CONNECTED_PIN, NRF_GPIO_PIN_NOPULL); nrf_gpio_cfg_input(PM_CHG_STATE_PIN, NRF_GPIO_PIN_PULLUP); pmPowerOn(); //開啟電源 } |
|
|
來自: 人生如戲ds3xoc > 《文件夾1》