模吧

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

1130查看 | 0回复

MiniFly四轴学习备忘之---四轴部分系统及电源分析

[复制链接]
发表于 2022-11-26 21:45:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
MiniFly四轴学习备忘之---四轴部分系统及电源分析

  最近硬件四轴很火,了解了很久,还是选择了正点原子的MiniFly,主要还是原子的论坛资料多,后边可以有人讨论,不像很多就是建了个群,研究问题还是在论坛方便很多。
  四轴终于拿到手,功能很强大,主要是还支持二次开发,可以研究下玩玩小四轴了
  还是先从硬件入手分析下
  1.系统框架
  主体可以分成两个小系统,后续可以按照这个顺序分析代码
  1.通信部分---基于M0和NFR51822,包括电源管理
  2.控制部分---基于M4和外围传感器
MiniFly四轴学习备忘之---四轴部分系统及电源分析 四轴,很强大,问题,讨论,很多 作者:15519743871 2387
image.png

  2.比较关注的电源部分
  电源还是比较考究,直接包含了充电功能,不用每次使用外置的充电模块(之前自制过一个充电模块,看来以后可以集成到电路里了)
  按键断电功能这个比较喜欢:这个是NFR51822控制VEN_D引脚来实现断电的
  上个NFR51822部分电路
MiniFly四轴学习备忘之---四轴部分系统及电源分析 四轴,很强大,问题,讨论,很多 作者:15519743871 267
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(); //开启电源  }






您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|关于模吧|APP下载|广告报价|手机版|企业会员|商城入驻|联系我们|模吧 ( 黔ICP备2022002348号-1 )

© 2013-2020 Moz8.com 模吧,玩出精彩!