最近硬件四轴很火,了解了很久,还是选择了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方面的资料方便后期的学习参考

四轴飞行器开发
http://www.makeru.com.cn/course/details/2986?s=45051

(stm32直流电机驱动)
http://www.makeru.com.cn/live/1392_1218.html?s=45051

(stm32串口应用)
http://www.makeru.com.cn/live/1392_1164.html?s=45051

stm32 如何用DMA搬运数据
http://www.makeru.com.cn/live/detail/1484.html?s=45051

MiniFly四轴飞行器之部分系统及电源分析的更多相关文章

  1. 四轴飞行diy全套入门教程(从最基础的开始)

    转载:http://www.cnmox.com/thread-12460-1-1.html首先声明本人也是菜鸟,此教程就是从一个菜鸟的角度来讲解,现在论坛上的帖子都突然冒很多名词出来,又不成体系,我自 ...

  2. 系统级性能分析工具perf的介绍与使用

    测试环境:Ubuntu16.04(在VMWare虚拟机使用perf top存在无法显示问题) Kernel:3.13.0-32 系统级性能优化通常包括两个阶段:性能剖析(performance pro ...

  3. 开启win7系统关闭日志分析

    笔记本突然没有任何征兆的自动重启了,想起之前曾经在网上看过通过系统日志查看一下是哪个东东搞的鬼,于是开始上网搜索,发现默认情况下是关机的信息记录的很少,不过可以开启审计功能来记录这个捣鬼的程序.于是就 ...

  4. 从Android系统出发,分析Android控件构架

    从Android系统出发,分析Android控件构架 Android中所有的控件追溯到根源,就是View 和ViewGroup,相信这个大家都知道,但是大家也许会不太清楚它们之间的具体关系是什么,在A ...

  5. 《Android系统源代码情景分析》连载回忆录:灵感之源

    上个月,在花了一年半时间之后,写了55篇文章,分析完成了Chromium在Android上的实现,以及Android基于Chromium实现的WebView.学到了很多东西,不过也挺累的,平均不到两个 ...

  6. Android系统--Binder系统具体框架分析(二)Binder驱动情景分析

    Android系统--Binder系统具体框架分析(二)Binder驱动情景分析 1. Binder驱动情景分析 1.1 进程间通信三要素 源 目的:handle表示"服务",即向 ...

  7. 系统级性能分析工具perf的介绍与使用[转]

    测试环境:Ubuntu16.04(在VMWare虚拟机使用perf top存在无法显示问题) Kernel:3.13.0-32 系统级性能优化通常包括两个阶段:性能剖析(performance pro ...

  8. iOS 苹果官方 Crash文件分析方法 (iOS系统Crash文件分析方法)

    时间2013-08-20 12:49:20 GoWhich原文  http://www.gowhich.com/blog/view/id/343 苹果官方 Crash文件分析方法 (iOS系统Cras ...

  9. Android系统--Binder系统具体框架分析(一)补充

    Android系统--Binder系统具体框架分析(一)补充 补充:对Binder驱动分析一的代码补充,添加saygoobye和saygoodbye_to服务 test_server.h #ifnde ...

随机推荐

  1. 面试HashMap你都扛不住,还想拿到offer?

    当我们面试Java开发岗位时,面试官问的频率出现最多的问题,就是这个HashMap,不管是传统型公司还是互联公司,HashMap是必问的,所以作者爆肝整理了HashMap的23个问题以及答案,请查收! ...

  2. Consul+Ocelot+Polly在.NetCore中使用(.NET5)-Consul服务注册,服务发现

    环境 .NET5,Consul_v1.10.2 一.简介 在微服务中利用Consul可以实现服务的注册,服务发现,治理,健康检查等. Web调站点需要调用多个服务,如果没有Consul,可能就是Web ...

  3. DP之背包经典三例

    0/1背包 HDU2602 01背包(ZeroOnePack): 有N件物品和一个容量为V的背包,每种物品均只有一件.第i件物品的费用是c[i],价值是w[i].求解将哪些物品装入背包可使价值总和最大 ...

  4. 关于goto

    (下面一段来源<征服C指针>) 75: ReadLineStatus read_line(FILE *fp, char **line) 76: { 77: int ch; 78: Read ...

  5. 利用滴答定时器(SysTick)实现简单的延时函数

    预备知识: 对标准库来说,如果定义了时钟频率,则系统会默认初始化该时钟频率. SysTick是CM4的内核外设,是一个24位的向下递减计数器,每次计数时间是1/SYSCLK,即1/168000000. ...

  6. PHP中的数组分页实现(非数据库)

    在日常开发的业务环境中,我们一般都会使用 MySQL 语句来实现分页的功能.但是,往往也有些数据并不多,或者只是获取 PHP 中定义的一些数组数据时需要分页的功能.这时,我们其实不需要每次都去查询数据 ...

  7. mysql5.7执行sql语句提示Expression #1 of ORDER BY clause is not in GROUP BY

    mysql 新版本出现group by 语句不兼容问题 [Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause ...

  8. ecshop不同的文章分类使用不同的模板的方法

    ecshop文章模板做的太简单,页面很丑,怎么才能实现不同的文章使用不同的模板呢,方法是有的,就是没有shopex那么方便,但还可以实现,只要能用就行. 1.打开article_cat.php文件,在 ...

  9. VS 2019下载、安装与注册包含MF、界面美化和安装Visual Assist

    下载: 1.在搜索框中输入"微软" 2. 3. 安装: 1.双击运行-继续-等待安装完成 2. 3.安装完后,重启电脑,并创建快捷方式. 注册: 1.打开软件 2. 3. 4.网上 ...

  10. Java面向对象系列(6)- 封装详解

    封装 该露的露,该藏得藏 我们程序设计要追求"高内聚,低耦合".高内聚就是类得内部数据操作细节自己完成,不允许外部干涉:低耦合:仅暴露少量得方法给外部使用 封装(数据得隐藏) 通常 ...