MiniFly四軸飛行器之部分系統及電源分析

  最近硬件四軸很火,瞭解了很久,還是選擇了MiniFly,主要還是資料多,後邊可以有人討論,不像很多就是建了個羣,研究問題還是在論壇方便很多。

  四軸終於拿到手,功能很強大,主要是還支持二次開發,可以研究下玩玩小四軸了

  還是先從硬件入手分析下

  1.系統框架

  主體可以分成兩個小系統,後續可以按照這個順序分析代碼

  1.通信部分---基於M0和NFR51822,包括電源管理

  2.控制部分---基於M4和外圍傳感器

  


  image.png

  2.比較關注的電源部分

  電源還是比較考究,直接包含了充電功能,不用每次使用外置的充電模塊(之前自制過一個充電模塊,看來以後可以集成到電路里了)

  按鍵斷電功能這個比較喜歡:這個是NFR51822控制VEN_D引腳來實現斷電的

  上個NFR51822部分電路

  


  image.png

  開始看代碼,大致看了下程序,先是監測按鍵狀態

  

複製代碼


  /*按鍵掃描處理*/

  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;

  }

  }

  }

  /*獲取按鍵狀態*/

  buttonEvent_e buttonGetState()

  {

  buttonEvent_e currentState = state;

  state = buttonIdle;

  return currentState;

  }

  

複製代碼


  然後就是在主函數中進行相應的操作,先不說了

  看下怎麼實現電源開關的:這麼最後應該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);// 設置ADC

  nrf_gpio_pin_clear(PM_VBAT_SINK_PIN);

  pmStartAdc(); //開啓ADC轉換

  }

  

複製代碼


  

複製代碼


  /*關閉電源*/

  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); //關閉 LDO使能控制腳

  LED_OFF();

  nrf_gpio_pin_clear(RADIO_PAEN_PIN); //關閉PA

  nrf_gpio_cfg_input(PM_VBAT_SINK_PIN, NRF_GPIO_PIN_NOPULL);

  NRF_POWER->SYSTEMOFF = 1UL;

  while(1); //進入死循環

  }

  void pmInit()

  {

  /* STM32 電源配置 */

  nrf_gpio_cfg_output(PM_VCCEN_PIN);

  nrf_gpio_pin_set(PM_VCCEN_PIN); //使能stm32電源

  msDelay(100);

  /* STM32 復位 */

  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(); //開啓電源

  }

  

複製代碼


  最後也是給大家分享一些四軸和stm32方面的資料方便後期的學習參考

  四軸飛行器開發:makeru.com.cn/course/details/2986?s=45051

  


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章