简介

四轴和遥控的主控芯片均为STM32F103C8T6
在这里插入图片描述

此开源项目为“从硬件设计到飞控的代码的编写,最终设计完整四轴”提供整体思路,只用作学习探讨。

九月又名青女月,故以“青女”作为项目名称。

说明

做四轴最基本的目的其实是用来检验学习成果,那么如何学习STM32和各种模块的使用便不在我们的讨论范围内,通过对GPIO、OLED、定时器、PWM、ADC、PMU6050、NRF24L01等模块的整合,就可以让四轴起飞。

明确难点

首先明确四轴的难点,四轴是由四个螺旋桨带动的飞行器,由图中可以看出各种器件的摆放并不是对称的,所以四轴要平稳起飞各电机提供的升力肯定也要不同,且若有风干扰,各个电机的升力还需要动态调节,如何动态调节每个电机的升力便是四轴最大的难点。

如何解决动态调节每个电机的升力?

PID算法便是解决这一难点的关键,或许绝大部分人都是卡在PID这一步,那么我就针对这一关键点着重进行分析:
PID中的P指的是比例,这是四轴的动力来源,最为重点,而I和D两项是作辅助用的,既然说PID是难点,那我们先抛开I和D,只讲P的情况,P可以看成是一个弹簧,假设现在拉力和重力一样,那么这个位置就是弹簧的平衡点,我们把这个平衡点记为目标位置a
在这里插入图片描述

拉动弹簧到b点(我们把b点记为实际位置b)后松开,可以预见弹簧会向上到达a点,由于存在惯性再向上,做往复运动。

用一个例子说明P在四轴上的情况是怎样的:
看下图
在这里插入图片描述

四个黑人抬棺材,为了表现得更专业,他们起码得抬得稳吧。假设每个黑人都将棺材抬到了离地150cm的位置,这时棺材是水平的,在抛开了I和D只有P的情况下,我们可以将每个黑人都理解为一个弹簧,而离地150cm的距离就是我们前面讲的目标位置a ,意外发生了,一个黑人被石头拌了下,他抬的距离变成了离地140cm,反应过来的他立马抬高,相当于是一个弹簧的他将会做往复运动。
四轴的原理正是如此,只不过将黑人换成了电机,离地的距离换成了MPU6050检测的角度。
而我们遥控四轴就是改变它的目标角度而已。

偷懒且AD技术很菜,硬件设计使用的是嘉立创的EDA。

硬件原理图如下:

青女四轴:
青女四轴
遥控:
遥控
PCB布局:
青女四轴
在这里插入图片描述

3D模型:
在这里插入图片描述

程序设计步骤建议

程序设计建议设计好步骤,一步一步来实现;
我的设计步骤是这样的:
1.最小系统灯(PC13)及全局数据变量定义-- (LED函数)
2.显示单片机基本数据-- (LED函数)+(OLED函数)
3.基本的功能调度-- (LED函数)+(OLED函数)+(定时函数)
4.获取姿态角数据-- (LED函数)+(OLED函数)+(定时函数)+(MPU6050 DMP处理函数)
5.nrf24l01将姿态角数据发送给遥控器-- (LED函数)+(OLED函数)+(定时函数)+(MPU6050 DMP处理函数)+(nrf24l01函数)
6.遥控器将接收到的数据发送至匿名上位机-- (LED函数)+(nrf24l01函数)+(串口通信函数)【注:此代码是遥控器的】
7.获取MPU6050角速度和加速度的值为串级PID提供数据基础-- (LED函数)+(OLED函数)+(定时函数)+(MPU6050 DMP处理函数)+(nrf24l01函数)+(MPU6050函数)
8.通过姿态角数据对单个空心杯电机进行PID测试-- (LED函数)+(OLED函数)+(定时函数)+(MPU6050 DMP处理函数)+(nrf24l01函数)+(PID函数)
9.最终控制,优化整理。

此程序设计步骤并不是最优,各位可以继续在此基础上进行优化。

最终程序

都到这了,不点赞不合适哈!
链接: https://pan.baidu.com/s/1DwOV3KzAUZhX2iB4YvUH-Q?pwd=rlo7.
提取码:rlo7

声明

本项目个人独立设计完成,参考了很多开源项目,仅供大家交流学习,精进技术,本人技术菜鸡,项目存在不足之处指出即可,勿喷!!!

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐