1. 项目概述
这块BLDC无刷直流驱动控制板是我最近在开源平台上发现的一个工业级解决方案,采用STM32F103作为主控芯片,支持15-36V宽电压输入,最大驱动功率可达500W。板子最吸引我的地方是它完整的设计资料和经过量产的可靠性验证——包括原理图、PCB工程、固件源码全部开源,甚至连配套的电机型号都明确标注了。
控制板采用经典的六步换相控制策略,通过霍尔传感器实时检测转子位置。硬件设计上,MOS驱动使用IR2104半桥驱动器,电流检测采用ACS712ELCTR-20A模块,实测过流保护响应时间小于10μs。通信接口方面除了基本的按键控制外,还集成了CAN总线接口,方便组建分布式控制系统。
注意:虽然标称功率为300W,但实际测试中短时间可以承受500W负载,持续工作时建议配合散热片使用。
2. 硬件设计解析
2.1 电源架构设计
输入电源处理采用两级滤波设计:
- 前级TVS二极管+大容量电解电容组成浪涌保护
- 后级LC滤波网络消除高频噪声
主控供电通过LM2596-5.0将输入电压降至5V,再经LD1117-3.3转换为3.3V。这种设计保证了在15V-36V宽电压范围内都能稳定工作,实测电压波动小于±5%。
2.2 功率驱动电路
MOS桥采用三颗IRF3205并联的设计,每颗MOS管的:
- Vds=55V
- Rds(on)=8mΩ
- Id=110A(脉冲)
驱动芯片IR2104的典型参数:
- 工作频率:可达500kHz
- 驱动电流:±2A峰值
- 死区时间:典型值520ns
这种配置使得开关损耗控制在合理范围内,实测在20kHz PWM频率下,MOS管温升不超过40℃(无散热条件)。
2.3 电流检测方案
ACS712ELCTR-20A模块的关键特性:
- 灵敏度:100mV/A
- 响应时间:5μs
- 零电流输出电压:VCC/2
电路设计中在输出端增加了RC低通滤波(R=1kΩ,C=100nF),截止频率约1.6kHz,既保留了过流保护的快速响应,又有效抑制了开关噪声干扰。
3. 软件实现细节
3.1 六步换相控制
霍尔传感器中断服务函数优化要点:
- 直接访问GPIO寄存器读取状态,比HAL库快3倍
- 使用查表法确定换相顺序:
c复制const uint8_t phase_table[8] = {
0xFF, // 无效状态
0b001, // 位置1
0b101, // 位置2
0b100, // 位置3
0b110, // 位置4
0b010, // 位置5
0b011, // 位置6
0xFF // 无效状态
};
- 中断优先级设置为最高(NVIC_IRQChannelPreemptionPriority=0)
3.2 PWM生成配置
使用TIM1高级定时器生成三路互补PWM:
- 计数模式:中央对齐模式1
- 预分频:72MHz/72 = 1MHz
- 重载值:1000 → PWM频率=1MHz/1000=1kHz
- 死区时间:1μs(对应寄存器值=72)
关键寄存器配置:
c复制TIM1->CCR1 = duty_cycle; // 相位U高侧
TIM1->CCR2 = duty_cycle; // 相位V高侧
TIM1->CCR3 = duty_cycle; // 相位W高侧
TIM1->BDTR |= TIM_BDTR_MOE; // 使能主输出
3.3 CAN通信协议
自定义的轻量级协议帧格式:
code复制| 字节 | 内容 | 说明 |
|------|-----------|--------------------|
| 0 | 0xA5 | 帧头标识 |
| 1-2 | speed | 转速设定值(0-1000) |
| 3 | cmd^speed | 异或校验 |
数据发送示例:
c复制CAN_TxHeaderTypeDef tx_header = {
.StdId = 0x123,
.ExtId = 0,
.IDE = CAN_ID_STD,
.RTR = CAN_RTR_DATA,
.DLC = 4
};
CAN_Frame tx_frame;
tx_frame.cmd = 0xA5;
tx_frame.speed = target_speed;
tx_frame.checksum = tx_frame.cmd ^ tx_frame.speed;
HAL_CAN_AddTxMessage(&hcan, &tx_header, tx_frame.data, &tx_mailbox);
4. 关键参数调试指南
4.1 电流保护阈值设置
在bsp_current.c中修改:
c复制#define OVER_CURRENT_THRESHOLD 1500 // 对应15A电流
计算公式:
code复制ADC值 = (电流 × 灵敏度 + VCC/2) × 4095 / VCC
例如:15A × 100mV/A = 1.5V → (1.5+1.65)×4095/3.3≈1500
4.2 转速环PID参数
默认参数(在pid.c中):
c复制Kp = 0.5, Ki = 0.01, Kd = 0.1
调试建议:
- 先设Ki=0,Kd=0,逐步增大Kp直到出现振荡
- 取振荡时Kp值的50%作为最终Kp
- 逐步增加Ki直到转速能稳定跟踪设定值
- 最后加入Kd抑制超调
4.3 霍尔传感器安装偏差补偿
在hall.c中添加角度偏移补偿:
c复制uint8_t hall_state = read_hall() + offset_angle;
偏移量可通过以下步骤确定:
- 给电机施加恒定电流
- 记录各霍尔状态对应的反电动势过零点
- 计算需要补偿的机械角度
5. 量产测试要点
5.1 老化测试项目
标准测试流程:
- 常温带载测试:24V/10A连续运行4小时
- 高温测试:60℃环境温度下运行1小时
- 振动测试:10-500Hz随机振动30分钟
- 冲击测试:50g半正弦波冲击3次
5.2 常见故障处理
| 故障现象 | 可能原因 | 解决方案 |
|---|---|---|
| 电机抖动 | 霍尔相位错误 | 检查霍尔线序 |
| 启动困难 | PWM死区时间不足 | 增大TIM1->BDTR中死区寄存器值 |
| CAN通信失败 | 终端电阻未接 | 在总线两端接120Ω电阻 |
| 过流保护误触发 | 电流检测RC滤波参数不当 | 调整R1/C1值 |
5.3 生产烧录规范
批量生产时建议:
- 使用J-Link Commander脚本自动烧录
bat复制JLink.exe -device STM32F103C8 -if SWD -speed 4000 -CommanderScript flash.jlink
- flash.jlink内容:
code复制loadfile firmware.hex
r
q
- 校验每个板的CAN ID是否唯一
6. 性能优化技巧
6.1 降低开关损耗
实测优化方案:
- 将PWM频率从20kHz降至15kHz
- 增加死区时间到1.5μs
- 优化栅极驱动电阻:
- 原设计:Rg=10Ω
- 优化后:Rg=4.7Ω+铁氧体磁珠
6.2 提升转速精度
软件改进措施:
- 采用定时器捕获功能测量霍尔间隔
- 实现转速预测算法:
c复制float predict_speed = current_speed + (current_speed - last_speed) * 0.3;
- 增加转速平滑滤波:
c复制#define FILTER_GAIN 0.1
filtered_speed = filtered_speed * (1-FILTER_GAIN) + new_speed * FILTER_GAIN;
6.3 增强EMC性能
通过以下改动通过CE认证:
- 在电源输入端增加共模电感(10mH)
- MOS管DS并联103电容
- 电机线套磁环(镍锌材质)
- PCB布局改进:
- 缩短栅极驱动走线
- 增加功率地与非功率地的单点连接
7. 配套电机选型
推荐电机参数范围:
- 额定电压:24V-36V
- 额定功率:200W-500W
- 极对数:4-8极
- 霍尔传感器类型:低电平有效
实测兼容型号:
- MY1020(36V/500W):
- 空载转速:3000RPM
- 额定转矩:1.6N·m
- 57BLF03(24V/200W):
- 空载转速:4500RPM
- 霍尔安装角度:120°
重要提示:使用前务必确认霍尔传感器逻辑与程序定义一致,错误的霍尔极性会导致电机反转或振动。
