配STM32全系列(F1/F4/G4/H7等),支持有感/无感FOC
一、核心选型指南(先选对硬件再动手)
| 参数 | 选型建议 | 适用场景 |
|---|---|---|
| MCU | STM32F303/G474(带内置运放/PGA最佳)、F103/F407 | F303/G4适合高压伺服,F103/F407适合低压低成本场景 |
| 功率器件 | MOS管/IGBT/专用驱动芯片(DRV83xx/STSPIN系列) | 低压小功率选DRV8313,高压大功率选IPM模块 |
| 电流采样方案 | 三电阻/单电阻 | 见下方双模式对比 |
三电阻 vs 单电阻 核心对比
| 维度 | 三电阻采样 | 单电阻采样 |
|---|---|---|
| 采样电阻数量 | 3个 | 1个 |
| 额外硬件要求 | 3路运放/ADC通道 | 1路高带宽运放/差分放大器 |
| 采样窗口限制 | 无 | 有最小采样脉宽要求,需规避非观测区 |
| 采样精度 | 最高 | 中等,依赖电流重构算法 |
| 硬件成本 | 高 | 低(省2个采样电阻+2路运放) |
| 适用场景 | 伺服、高精度控制 | 风机、水泵、小家电等成本敏感场景 |
二、硬件设计核心规范(避坑必看)
1. 通用设计规范
- 电源分层:功率地、数字地、模拟地单点接地,避免开关噪声干扰采样
- PWM输出线与电流采样线严禁交叉布线,采样线走差分对称走线
- 采样电阻两端必须采用开尔文走线,直接从电阻焊盘引出到ADC引脚,消除PCB铜箔压降影响
- 功率器件预留至少2~3倍电流余量,避免过载炸机
2. 三电阻采样专属硬件
- 采样电阻选5~20mΩ,后端接同相比例运放电路,放大后接入STM32 ADC通道,增益根据ADC量程调整(一般放大20~50倍)
- 每路采样电路并联RC滤波电路,滤除PWM高频噪声
3. 单电阻采样专属硬件
- 采样电阻选10~50mΩ,后端接高带宽差分放大器(如INA240,共模抑制比≥80dB),抑制功率回路共模噪声
- 运放输出端并联RC滤波,ADC采样通道配置为定时器PWM周期中段触发,确保采样点在稳定区间
- 调整
T_RISE(电流振荡稳定时间)为2~3μs,平衡采样精度和母线利用率
三、CubeMX/MC Workbench配置步骤
1. 基础外设配置
- 高级定时器(TIM1/TIM8):中央对齐模式3,开启互补PWM输出、死区控制,CCR比较值触发ADC采样
- ADC:配置为定时器触发采样,开启DMA传输,采样通道对应电流采样引脚
- GPIO:配置PWM输出、故障保护、编码器/霍尔接口(有感方案)
2. 电流采样模式专属配置
三电阻采样配置
无需额外复杂配置,直接在MC Workbench中选择三电阻模式,采样通道对应U/V/W三相电流即可
单电阻采样配置
- 配置定时器通道5/6上升沿触发TRGO2信号,用于ADC采样触发
- 配置定时器通道4比较值为最小采样脉宽
HTMIN(死区时间+T_RISE+ADC采样时间) - 在代码中根据SVPWM扇区动态计算PWM占空比,避让非观测区
四、核心代码逻辑
1. 三电阻采样代码(最简单)
// 根据SVPWM扇区选择不受窗口限制的两相电流采样voidThreeResistor_CurrentSample(void){switch(current_sector){case1:case6:// 采样Ib、Ic,Ia = -(Ib+Ic)Ia=-(ADC_GetValue(CH2)+ADC_GetValue(CH3));Ib=ADC_GetValue(CH2);Ic=ADC_GetValue(CH3);break;case2:case3:// 采样Ia、Ic,Ib = -(Ia+Ic)Ia=ADC_GetValue(CH1);Ib=-(ADC_GetValue(CH1)+ADC_GetValue(CH3));Ic=ADC_GetValue(CH3);break;case4:case5:// 采样Ia、Ib,Ic = -(Ia+Ib)Ia=ADC_GetValue(CH1);Ib=ADC_GetValue(CH2);Ic=-(ADC_GetValue(CH1)+ADC_GetValue(CH2));break;}}2. 单电阻采样代码(电流重构核心)
// 单PWM周期两次采样重构三相电流voidSingleResistor_CurrentReconstruct(void){staticuint8_tsample_phase=0;if(sample_phase==0){// 第一次采样:获取第一相电流I1=ADC_GetValue(BUS_CURRENT_CH);}elseif(sample_phase==1){// 第二次采样:获取第二相电流,第三相通过KCL计算I2=ADC_GetValue(BUS_CURRENT_CH);I3=-(I1+I2);}sample_phase=(sample_phase+1)%3;}3. FOC核心算法框架
电机参数初始化 → 状态机切换(预定位→强拖加速→切入闭环)→ Clarke/Park变换 → PI电流环控制 → 反Park变换 → SVPWM调制 → ADC电流采样参考代码 STM32驱动三相电机,包括三电阻、单电阻反馈,foc算法www.youwenfan.com/contentcst/182266.html
五、调试避坑指南
- 先调三电阻再切单电阻:先在硬件三电阻模式下完成电机参数辨识、启动参数调试,确认电机正常运行后再切换单电阻模式,降低调试难度
- 采样波形验证:用示波器抓取采样波形,确保电流波形正弦且无杂波,若波形畸变需调整运放增益或采样点位置
- 启动参数调试:无感启动重点调整强拖加速度阈值、切入闭环速度阈值,避免启动抖动或反转
- 保护配置:开启过流、过压、欠压、堵转保护,避免炸机