最近硬件四轴很火,了解了很久,还是选择了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. HCNP Routing&Switching之IS-IS路由渗透和开销

    前文我们了解了IS-IS邻居建立过程.LSDB同步.拓扑计算和路由的形成:回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15265698.html:今天我们来聊 ...

  2. Loadrunner拼装唯一值方法

    由于Loadrunner函数有限性,唯一值需要几个函数的字符串进行拼装,可实现流水号.订单号等等数值的唯一性.具体可见下列方法: 方法一: char OraderID[15];srand(time{N ...

  3. 【PHP】随机生成名字

    public function test(){ $a = "赵 钱 孙 李 周 吴 郑 王 冯 陈 楮 卫 蒋 沈 韩 杨 朱 秦 尤 许 何 吕 施 张 孔 曹 严 华 金 魏 陶 姜 戚 ...

  4. Shell系列(13)- read

    前言 作用是往脚本中传递参数,之前文章的位置参数变量也有此功能,但是只适用于脚本的作者,为什么?第三方用户不知道这个脚本要传递哪些参数,这些参数分别是什么.本篇随笔read就可以实现上述功能,别且该命 ...

  5. JDBC-3(Transcation) ****

    3.1 异常的使用说明 在工具类中(JDBCUtils)的方法最好声明异常(throws),以便后续实现类中去捕获这些异常. 工具类中捕获异常通常没有意义 eg:实现类中connection建立过程出 ...

  6. session入库

    #存储session的数据表示列结构,可作为参考#创建数据库(可选)CREATE DATABASE session;#使用创建的数据库(可选)USE session;#创建存储session的数据表( ...

  7. hadoop生态之CDH搭建系列

    本次搭建使用的版本是CloudManager 1.15.1

  8. Mybatis-Plus 全局Update更新策略,和insert插入查询策略

    前言 最近在使用mybatis-plus做项目的时候,发现使用updatById方法的时候,更新某个字段时候出现了问题,一般业务操作都是更新不为空的字段,结果发现更新了所有字段,这是由于mybatis ...

  9. 腾讯的表妹告诉我怎么学Python,今天就教我搭建Python环境和基本语法,我【码上开始】

    本文首发公众号:码上开始 环境准备 Pycharm Python3 window10/win7 安装 Python 打开Python官网地址 下载 executable installer,x86 表 ...

  10. Ubuntu开发相关环境搭建

    一.Ubuntu系统语言环境切换修改 安装时,选择的中文版,但实际使用起来,很不爽,果断切换为英文 1.1 打开终端: vim /etc/default/locale 1.2 修改配置 LANG=&q ...