最近硬件四轴很火,了解了很久,还是选择了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. ansible 批量安装yum包

    1.首先安装一下ansible yum install ansible 2.修改一下ansible的参数以防ssh过去的时候需要首次判断yes  或者no sed -i 's/#host_key_ch ...

  2. python matplotlib.pyplot 条形图详解

    python matplotlib.pyplot 条形图详解 一.创建直方图 可以用bar函数来创建直方图 然后用show函数显示直方图 比如: import matplotlib.pyplot as ...

  3. supermvc介绍

    马上要开始写毕设了,需要一个合适的框架.想想自己用过的几个框框speedphp tp啊 还有公司的 dagger啊 ,大同小易.每一种都有自己喜欢的地方.然后想到了二八理论,我们常用的功能可能不到框架 ...

  4. symfony生成路由

    控制器里生成地址 $this->generateUrl('course_manage_show_test', array('id' => 1)) twig前端文件生成地址: {{ path ...

  5. 定要过python二级选择题二套

    1. 2. 3. 4. 5. 6. 7. 8. 非主属性???? 9. 10.. 11.` 调用只是调用,但是没有返回值,,应为里面没有输出 12. 13. 14. 15. 16. 18. 19.

  6. P4542-[ZJOI2011]营救皮卡丘【费用流,Floyd】

    正题 题目链接:https://www.luogu.com.cn/problem/P4542 题目大意 给出\(n+1\)个点\(m\)条边的无向图,\(k\)个人开始在\(0\)号点,一个人进入\( ...

  7. Sentry 监控 - Alerts 告警

    系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Maps Sentry For ...

  8. 一个故事,一段代码告诉你如何使用不同语言(Golang&C#)提供相同的能力基于Consul做服务注册与发现

    目录 引言 什么是微服务 传统服务 微服务 什么是服务注册与服务发现 为什么要使用不同的语言提供相同的服务能力 服务协调器 服务注册 Golang C#(.NetCore3.1) 服务发现 通过Htt ...

  9. Go语言之数组与切片基础

    一.数组 数组是同一类型元素的集合,可以放多个值,但是类型一致,内存中连续存储 Go 语言中不允许混合不同类型的元素,而且数组的大小,在定义阶段就确定了,不能更改 1.数组的定义 // 定义一个大小为 ...

  10. Java-爬虫-小项目

    爬取数据:(获取请求返回的页面信息,筛选出我们想要的数据就可以了!) 项目地址:https://gitee.com/zwtgit/java-reptile 导入依赖,写一个工具类 <depend ...