天天看點

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

  最近硬體四軸很火,了解了很久,還是選擇了MiniFly,主要還是資料多,後邊可以有人讨論,不像很多就是建了個群,研究問題還是在論壇友善很多。

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

  還是先從硬體入手分析下

  1.系統架構

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

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

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

  

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

  image.png

  2.比較關注的電源部分

  電源還是比較考究,直接包含了充電功能,不用每次使用外置的充電子產品(之前自制過一個充電子產品,看來以後可以內建到電路裡了)

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

  上個NFR51822部分電路

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

  開始看代碼,大緻看了下程式,先是監測按鍵狀态

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

  /*按鍵掃描處理*/

  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;

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

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

  看下怎麼實作電源開關的:這麼最後應該F1部分還是有電的,隻是消耗較少,尋求一種可以完全斷電的方案??

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

  /*開啟電源*/

  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轉換

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

  /*關閉電源*/

  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_set(STM_NRST_PIN);

  nrf_gpio_cfg_input(USB_CONNECTED_PIN, NRF_GPIO_PIN_NOPULL);

  nrf_gpio_cfg_input(PM_CHG_STATE_PIN, NRF_GPIO_PIN_PULLUP);

  pmPowerOn(); //開啟電源

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

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

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

繼續閱讀