ESP32-S3四轴飞行器

四轴飞行器效果

(广告位)
image

一、项目使用元件

核心板 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.硬件精通(物理层)

硬件板上的东西需要知道是什么,也需要知道为什么选择它
原理图
image

1)电源部分-稳压电路

LDO稳压芯片ME6118A33PD数据手册

image

理解:
image

2)电源部分-ADC电量检测

经典电阻分压网络,用来做电池电压检测

问:

  1. 为什么要分压?电池为3.7V-4.2V,那为什么不把VBAT连接欸到ESP32的ADC引脚?
  • 查找数据手册。ADC最大安全输入电压为3.3V,当电池满电的时候,ESP32会冒烟,因此需要分压降低电压
  1. 计算:当电池满电达到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这个极限的边缘

  2. 当电池没电的时候,降压到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

  1. C9(100nF)的作用是?
    电机转动的时候,电池电压(VBAT)会剧烈抖动,纹波大,C9充当硬件低通滤波器,小电容过滤高频噪声,平滑ADC引脚电压。帮助读取ADC电压值相对平稳。

  2. 单节锂电池的保护截止电压?

  • 满电最高电压4.2V
  • 标称电压3.7V
  • 保护截止电压 3.3V/3.2V

image

3)电机驱动部分(MOS管)AO3416,N沟道MOS管

  1. ESP32的PWM信号不直接接电机,而是链接Q4?
    ESP32的GPIO引脚输出电流极小,无法驱动大安培的空心杯电机,用到MOS作为功率放大器。
    ESP32通过PWM信号控制MOS管开关频率来控制电池的大电流是否流过电机。

  2. 栅极电阻R7 (47Ω)的作用?
    保护MOS管,限流和缓冲,也能起到抑制PWM高频开关时产生的信号振铃(高频振荡)
    PWM信号快速切换时,瞬间给电容充放电的电流过大会烧坏ESP32的引脚,

  3. 下拉电阻R8(10KΩ)的作用?能不能省略?
    防止炸机。在ESP32刚商店时,程序还没有初始化的瞬间,GPIO处于悬空,电压会扰乱,加R8是给一个默认状态。
    不加会可能导致MOS管意外导通,会导致电机一上电就转。

  4. D4(B5819W肖特基二极管)和C3(100nF)的作用?
    D4是肖特基二极管(恢复时间极短且正向压降小),功能,续流,续流二极管。
    电机是线圈,断电瞬间会产生极高的反向电压尖峰,二极管反向并联在电机两端,平时不通电。
    而在高压产生时,二极管会瞬间导通,把高压短路泄放,保护MOS管。

线圈的特性:电感,电感规律:电流不能突变。
当MOS管突然关断时,原来流过电机的电流突然被掐断,但是线圈为了维持原来的电流,瞬间产生一个极高的反向电压,如果这个电压直接加在只能承受几V的MOS管上会击穿MOS管。

  • 烧坏过
  • 问:
    “为什么电机旁边要反向并联一个肖特基二极管?”

答:“因为空心杯电机是感性负载,内部是线圈。当驱动它的 MOS 管在 PWM 关断的瞬间,线圈电流不能突变,会产生极高的反向电动势(几十伏高压)。如果不加保护,这个高压会直接击穿 MOS 管。所以必须反向并联一个恢复时间极短的肖特基二极管(B5819W)。平时它反向截止,当高压产生时,它瞬间正向导通,形成一个内部泄放回路,保护 MOS 管不被烧毁。我也正是因为没注意这个管子,烧过一次 MOS 管,所以印象极其深刻。”

image

image

  • 三极管(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#,掉电会死机,怎么防止?

  1. 硬件方面才有大电容储能,470uF的电解电容。
  2. LDO采用ME6118,低压差稳压芯片。普通稳压芯片要求输入电压笔输出高2v,但是电池最高4.2v,最低3v3,所必须采用LDO,它能够在输入电压低至3.4v时候依然可以稳定输出3.3v。
  3. 软件层面,在代码中加入软件看门狗(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管不会被击穿。

  • 摄像头工程续用

posted on 2026-11-02 20:12  Seeyu^-^  阅读(10)  评论(0)    收藏  举报

导航