ESP32-S3四轴飞行器
四轴飞行器效果
(广告位)

一、项目使用元件
| 核心板 | ESP32 30PIN | ||
| 电源 | 1S航模 | 电压3.7V-4.2V 高倍率 | 500mah(5-10分钟) |
| 调试网页 | http://192.168.4.1 | ||
| MPU6500模块 | 陀螺仪(加速度计 姿态传感器模块) | 稳压模块 | ME6118A33PG |
| 肖特基二极管 | B5819W | ||
| N沟道MOS场效应管 | AO3416 | ||
二、设计思路
(逆向工程与破坏性测试)
为什么这么设计、哪里设计得不好、以及踩过的坑
1.修改代码
- 如果重新绘制pcb,引脚修改
- 调参记录(如PD调参)
- 增加串口输出(如打印MPU6500原始数据或者PID环计算结果)-串口波形图
2.架构图绘制
- 必须:主循环闭环图
读取传感器(IMU)-姿态融合(Filter)- 串级PID运算-混控分配(Mixer)-输出PWM
需要知道函数在哪几个文件 - 中断与定时器
飞控基于多少HZ?运行,是通过delay还是硬件定时器中断触发
3. 破坏性测试
示例:
- 拔掉旋钮/线缆
- 逆向通信测试
- 传感器遮挡/干扰测试
4. 挑刺-开源项目的不足(也是我们的改进点)
客观评价优缺点,给出优化
5.硬件精通(物理层)
硬件板上的东西需要知道是什么,也需要知道为什么选择它
原理图

1)电源部分-稳压电路

理解:

2)电源部分-ADC电量检测
经典电阻分压网络,用来做电池电压检测
问:
- 为什么要分压?电池为3.7V-4.2V,那为什么不把VBAT连接欸到ESP32的ADC引脚?
- 查找数据手册。ADC最大安全输入电压为3.3V,当电池满电的时候,ESP32会冒烟,因此需要分压降低电压
-
计算:当电池满电达到4.2V时,经过R11和R10的分压,中间ADC_1这个点的电压是多少伏?
串联分压,串联电路中电流处处相等,电阻越大,分到的电压越多。
总电阻= R11+R10 = 43K
总电流=VBAT/总电阻 = VBAT/43K
电压= 电流R10(测R10两端电压)
串联电路分压公式: Vout=Vin(R10/(R11+R10))
下偏电阻R10=33K,上偏电阻R11=10K
总电阻43K,
ADC_1的电压 = 4.2V*(33/43) = 3.22V
处于3.3V这个极限的边缘 -
当电池没电的时候,降压到3.3V时,ADC_1的电压是多少?
Vin = 3.3V
ADC_1电压= 3.3V*(33/43)=2.53V
当单片机ADC电压调到2.5V左右,就相当于飞机快没电,需要降落,设计低电量保护/失控保护
飞控中,ESP32读到ADC_1的是数字,需要推算:
实际电池电压=ADC读出电压*((10+33K)/33K)
-
ADC读出的电压 = 实际电池电压*(33/43)
-
实际电池电压 = ADC读出的电压/(33/43)
-
ADC转换电压为数字,
12位ADC,max为4095,
-- ADC引脚物理电压= ADC原始读取值/4095 x参考电压(3.3V)
-- ADC原始读数(如3995( = ADC引脚的物理电压(3.22V)/量程(3.3V) * 4095
-
C9(100nF)的作用是?
电机转动的时候,电池电压(VBAT)会剧烈抖动,纹波大,C9充当硬件低通滤波器,小电容过滤高频噪声,平滑ADC引脚电压。帮助读取ADC电压值相对平稳。 -
单节锂电池的保护截止电压?
- 满电最高电压4.2V
- 标称电压3.7V
- 保护截止电压 3.3V/3.2V

3)电机驱动部分(MOS管)AO3416,N沟道MOS管
-
ESP32的PWM信号不直接接电机,而是链接Q4?
ESP32的GPIO引脚输出电流极小,无法驱动大安培的空心杯电机,用到MOS作为功率放大器。
ESP32通过PWM信号控制MOS管开关频率来控制电池的大电流是否流过电机。 -
栅极电阻R7 (47Ω)的作用?
保护MOS管,限流和缓冲,也能起到抑制PWM高频开关时产生的信号振铃(高频振荡)
PWM信号快速切换时,瞬间给电容充放电的电流过大会烧坏ESP32的引脚, -
下拉电阻R8(10KΩ)的作用?能不能省略?
防止炸机。在ESP32刚商店时,程序还没有初始化的瞬间,GPIO处于悬空,电压会扰乱,加R8是给一个默认状态。
不加会可能导致MOS管意外导通,会导致电机一上电就转。 -
D4(B5819W肖特基二极管)和C3(100nF)的作用?
D4是肖特基二极管(恢复时间极短且正向压降小),功能,续流,续流二极管。
电机是线圈,断电瞬间会产生极高的反向电压尖峰,二极管反向并联在电机两端,平时不通电。
而在高压产生时,二极管会瞬间导通,把高压短路泄放,保护MOS管。
线圈的特性:电感,电感规律:电流不能突变。
当MOS管突然关断时,原来流过电机的电流突然被掐断,但是线圈为了维持原来的电流,瞬间产生一个极高的反向电压,如果这个电压直接加在只能承受几V的MOS管上会击穿MOS管。
- 烧坏过
- 问:
“为什么电机旁边要反向并联一个肖特基二极管?”
答:“因为空心杯电机是感性负载,内部是线圈。当驱动它的 MOS 管在 PWM 关断的瞬间,线圈电流不能突变,会产生极高的反向电动势(几十伏高压)。如果不加保护,这个高压会直接击穿 MOS 管。所以必须反向并联一个恢复时间极短的肖特基二极管(B5819W)。平时它反向截止,当高压产生时,它瞬间正向导通,形成一个内部泄放回路,保护 MOS 管不被烧毁。我也正是因为没注意这个管子,烧过一次 MOS 管,所以印象极其深刻。”


- 三极管(BJT):电流控制
需要一股小电流(基极电流Ib)去顶开阀门,才能有大水流(集电极电流Ic)。需要单片机持续输出电流来维持开启。费电。 - MOS管(场效应管):电压控制
G(Gate)栅极:控制端
D(Drain)漏极:接近电机一端
S(Source)源极:接地GND
类似静电开关。栅极(G)和源极(S)之间有一层绝缘膜,相当于小电容。只要给栅极加电压,就会形成一条导电沟道,开关就会打开,几乎不需要电流维持,只需要电压,省电。
4)补充点
- I2C为什么要接上拉电阻?
因为I2C它采用的是开漏结构,使用开漏输出模式,是总线结构。那就意味着一条SDA线上可能挂载这MPU6500、气压计、磁力计等多个设备,如果使用推挽输出,那当a想输出高电平,b想输出低电平,就会发生电压短路。
而使用开漏,开漏输出只能往下拉,接地,不能往上推。所以无论多少个设备,只要有一个设备想拉低总线,总线就是低电平。只有所有设备都释放总线,上拉电阻才能把线拉到高电平。
而上拉电阻的阻值,通常4.7K或者10K,决定信号上升沿时间,阻值太大波形上升慢的话会导致告诉通信失败。
I2C采用开漏结构是为了实现线与逻辑,需要外加上拉电阻才有能力拉高电平。
-
电机PWM频率是多少?
代码中给MOS管发PWM波的频率
空心杯电机的PWMM频率通常设置在20KHz到25kHz之间。
低于20kHZ,电机线圈会产生人耳能够通道的尖锐啸叫声
如果高于25KHz,MOS管的开关损耗会急剧上升,导致MOS管发热严重。 -
板子如何防止掉电重启?
在飞的时候,如果猛推油门,电机会瞬间抽走几个安培电流,电池电压会瞬间拉低。
但是ESP32和MPU6500都需要文档3V#,掉电会死机,怎么防止?
- 硬件方面才有大电容储能,470uF的电解电容。
- LDO采用ME6118,低压差稳压芯片。普通稳压芯片要求输入电压笔输出高2v,但是电池最高4.2v,最低3v3,所必须采用LDO,它能够在输入电压低至3.4v时候依然可以稳定输出3.3v。
- 软件层面,在代码中加入软件看门狗(Watchdog),卡死自动复位单片机。
总结
飞控板分为四个部分
-
供电与检测:
电池3.7V输入,经过ME6118LDO降压3V3,输入输出配置470uF以及0.1uF大小电容滤波储能。同时10K和33K电阻分压,接入ESP32的ADC实现电量检测。 -
姿态采集
ESP32通过I2C总线与MPU6500通信,总线配置10K上拉电阻保证开漏输出的正常工作 -
动力驱动
ESP32的4路PWM信号经过47Ω限流电阻,驱动AO3416N沟道MOS管。同时配置10K下拉电阻防止上电失控 -
抗干扰保护
每个电机两端反向并联B5819W肖特基二极管,用于吸收感性负载关断时候产生的反向电动势,保护MOS管不会被击穿。 -
摄像头工程续用
浙公网安备 33010602011771号