无人机电调 BLHeli_S 方案源码深度解析(基于 C_H_30 固件)——深入学习理解PID三环控制,DSHOT总线应用

1. 硬件架构与核心器件分析

1.1 主控芯片选型与系统资源分配

BLHeli_S 电调在 C_H_30 固件版本中通常采用ATmega328P作为主控芯片,其资源分配如下:

资源类型 数量 / 规格 主要用途
Flash 存储器 32KB 存储固件程序
SRAM 2KB 运行时数据存储
EEPROM 1KB 存储配置参数(PID 值等)
ADC 通道 8 路 10 位 电流采样、电压监测
PWM 输出 3 路 16 位 驱动 MOSFET 桥
定时器 3 个(16 位 ×2,8 位 ×1) 产生 PWM、处理定时任务
USART 1 个 Dshot 通信接口

芯片外设的典型配置代码:

c

运行

// 系统初始化代码片段(基于C_H_30源码分析)
void system_init(void) {
    // 设置系统时钟(16MHz)
    CLKPR = (1 << CLKPCE);  // 允许时钟预分频器修改
    CLKPR = 0;             // 系统时钟分频比为1
    
    // 初始化ADC(用于电流采样)
    ADMUX = (1 << REFS0);  // AVCC作为参考电压
    ADCSRA = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);  // 使能ADC,分频比128
    
    // 配置PWM输出(16位定时器1)
    TCCR1A = (1 << COM1A1) | (1 << COM1B1) | (1 << WGM11);  // 快速PWM模式,非反转输出
    TCCR1B = (1 << WGM13) | (1 << WGM12) | (1 << CS10);     // 模式14 (ICR1作为TOP),不分频
    ICR1 = 4000;  // 设置PWM频率为4kHz (16MHz/4000)
    
    // 初始化USART(用于Dshot通信)
    UBRR0H = 0;
    UBRR0L = 8;  // 波特率1M (16MHz/16/8-1)
    UCSR0B = (1 << TXEN0);  // 使能发送
    UCSR0C = (1 << UCSZ01) | (1 << UCSZ00);  // 8位数据,无校验,1位停止位
}
1.2 功率驱动电路设计

功率驱动部分采用三相半桥拓扑结构,主要器件包括:

  1. 功率 MOSFET:通常选用低 RDS (on)(<10mΩ)的 N 沟道 MOSFET,如 IRLB3034PbF

  2. MOSFET 驱动芯片:如 IR2104,提供:

    • 高低边驱动能力
    • 死区时间控制(典型值 200ns)
    • 自举电路设计
  3. 电源去耦网络

    • 大容量电解电容(1000μF/16V)滤除低频纹波
    • 陶瓷电容(0.1μF)抑制高频噪声

典型的三相半桥驱动电路:

plaintext

         +Vcc
          |
          ▼
        +---+
        |   |
   HIN1-|   |-HO1  ┌───┐
        |   |      |   |
   LIN1-|   |-LO1--|   |
        |   |      |   |
        |   |      |MOS|
        |IR |      |   |
        |210|      |   |
        |4  |      └───┘
        |   |        |
   HIN2-|   |-HO2    |
        |   |        |
   LIN2-|   |-LO2    |
        |   |        |
        |   |        ▼
        +---+      ┌───┐
          |        |   |
          |        |   |
          |        |GND|
          |        |   |
          |        └───┘
          |
          ▼
        +---+
        |   |
   HIN3-|   |-HO3
        |   |
   LIN3-|   |-LO3
        |   |
        +---+
1.3 电流采样电路

电流检测采用低侧电阻采样方案,典型电路参数:

  • 采样电阻:0.1Ω/1%/3W
  • 放大器:INA213 或等效器件
  • 增益设置:G=50(将 mV 级信号放大到 ADC 可检测范围)
  • 滤波网络:RC 滤波(R=10kΩ,C=10nF,截止频率 1.6kHz)

电流采样的关键代码:

c

运行

// 电流采样与转换函数
uint16_t read_motor_current(void) {
    // 启动ADC转换
    ADCSRA |= (1 << ADSC);
    
    // 等待转换完成
    while (ADCSRA & (1 << ADSC));
    
    // 读取ADC值并转换为实际电流值(mA)
    // 假设:10位ADC (0-1023),参考电压5V,采样电阻0.1Ω,放大器增益50
    // 满量程电流 = (5V/1023) / (0.1Ω * 50) = 977mA
    return (uint16_t)((uint32_t)ADC * 977 / 1023);
}
2. 发展历程与技术演进
2.1 BLHeli 系列发展时间线
  1. 2011 年:BLHeli 项目启动,基于 SimonK 固件改进

    • 初始版本支持基本 PWM 控制
    • 仅提供固定频率控制
  2. 2013 年:BLHeli_S 分支出现

    • 引入 Dshot 协议支持
    • 优化轻载效率
    • 改进低转速控制性能
  3. 2016 年:C_H_30 固件版本发布

    • 完整实现三环 PID 控
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值