MiniFly四轴飞行器之部分系统及电源分析
最近硬件四轴很火,了解了很久,还是选择了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四轴飞行器之部分系统及电源分析的更多相关文章
- 四轴飞行diy全套入门教程(从最基础的开始)
转载:http://www.cnmox.com/thread-12460-1-1.html首先声明本人也是菜鸟,此教程就是从一个菜鸟的角度来讲解,现在论坛上的帖子都突然冒很多名词出来,又不成体系,我自 ...
- 系统级性能分析工具perf的介绍与使用
测试环境:Ubuntu16.04(在VMWare虚拟机使用perf top存在无法显示问题) Kernel:3.13.0-32 系统级性能优化通常包括两个阶段:性能剖析(performance pro ...
- 开启win7系统关闭日志分析
笔记本突然没有任何征兆的自动重启了,想起之前曾经在网上看过通过系统日志查看一下是哪个东东搞的鬼,于是开始上网搜索,发现默认情况下是关机的信息记录的很少,不过可以开启审计功能来记录这个捣鬼的程序.于是就 ...
- 从Android系统出发,分析Android控件构架
从Android系统出发,分析Android控件构架 Android中所有的控件追溯到根源,就是View 和ViewGroup,相信这个大家都知道,但是大家也许会不太清楚它们之间的具体关系是什么,在A ...
- 《Android系统源代码情景分析》连载回忆录:灵感之源
上个月,在花了一年半时间之后,写了55篇文章,分析完成了Chromium在Android上的实现,以及Android基于Chromium实现的WebView.学到了很多东西,不过也挺累的,平均不到两个 ...
- Android系统--Binder系统具体框架分析(二)Binder驱动情景分析
Android系统--Binder系统具体框架分析(二)Binder驱动情景分析 1. Binder驱动情景分析 1.1 进程间通信三要素 源 目的:handle表示"服务",即向 ...
- 系统级性能分析工具perf的介绍与使用[转]
测试环境:Ubuntu16.04(在VMWare虚拟机使用perf top存在无法显示问题) Kernel:3.13.0-32 系统级性能优化通常包括两个阶段:性能剖析(performance pro ...
- iOS 苹果官方 Crash文件分析方法 (iOS系统Crash文件分析方法)
时间2013-08-20 12:49:20 GoWhich原文 http://www.gowhich.com/blog/view/id/343 苹果官方 Crash文件分析方法 (iOS系统Cras ...
- Android系统--Binder系统具体框架分析(一)补充
Android系统--Binder系统具体框架分析(一)补充 补充:对Binder驱动分析一的代码补充,添加saygoobye和saygoodbye_to服务 test_server.h #ifnde ...
随机推荐
- vue-element-admin 全局loading加载等待
最近遇到需求: 全局加载loading,所有接口都要可以手动控制是否展示加载等待的功能 当拿到这个需求的时候我是拒绝的,因为我以及局部写好了0.0,这是要大改呀....,没办法老板的要求,只能硬着头皮 ...
- -bash: ulimit: core file size: cannot modify limit: Operation not permitted
一.问题描述 使用普通用户执行某个软件加载环境变量时报错 -bash: ulimit: core file size: cannot modify limit: Operation not permi ...
- ECSHOP任意页面显示指定分类、数量、排序的任意类型文章,包括只显示置顶or普通的文章
1.在需要使用此功能的PHP页面里最后的?>前面添加以下代码,现在以article.php为例子 /** jinmozhe 专业ECSHOP二次开发 * 获得指定分类ID.文章类型.指定数量.排 ...
- Jmeter系列(29)- 性能指标(2) | 并发数
并发数 概念 同时承载正常使用系统功能的用户数量:系统能够同时处理请求的数目. 通过问题详解 问题:网站的并发数,究竟指的同时提交请求的用户数目,还是用户同时提交的请求的数目? 答案:根据这句描述&q ...
- Centos8.X 搭建Prometheus+node_exporter+Grafana实时监控平台
Prometheus Promtheus是一个时间序列数据库,其采集的数据会以文件的形式存储在本地中,因此项目目录下需要一个data目录,需要我们自己创建,下面会讲到 下载 下载好的.tar.gz包放 ...
- Hbuilder 生成移动App资源升级包
建立文件夹www,将需要更新的文件放置在里面. 将manifest.json文件中version字段的版本修改为新编号. 在文件夹www外建立文件update.xml,内容如下: <?xml v ...
- Dockerfile 的常用参数注解和范例
一. docker hello world 1.1 Dockerfile FROM centos:7.5.1804 MAINTAINER 11@qq.com CMD echo "hello ...
- P4717-[模板]快速莫比乌斯/沃尔什变换(FMT/FWT)
正题 题目链接:https://www.luogu.com.cn/problem/P4717 题目大意 给出两个长度为\(2^n\)的数列\(A,B\)求 \[C_{n}=\sum_{i\ or\ j ...
- P2179-[NOI2012]骑行川藏【导数,二分】
正题 题目链接:https://www.luogu.com.cn/problem/P2179 题目大意 给出\(E\)和\(n\)个\(s_i,k_i,u_i\)求一个序列\(v_i\)满足 \[\s ...
- P5956-[POI2017]Podzielno【数学】
正题 题目链接:https://www.luogu.com.cn/problem/P5956 题目大意 \(B\)进制下,给出序列\(a\),\(a_i\)表示数字\(i\)有多少个.求一个最大的\( ...