STM32 三相电机FOC驱动方案(三电阻单电阻双模式)

配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三相电流即可

单电阻采样配置
  1. 配置定时器通道5/6上升沿触发TRGO2信号,用于ADC采样触发
  2. 配置定时器通道4比较值为最小采样脉宽HTMIN(死区时间+T_RISE+ADC采样时间)
  3. 在代码中根据SVPWM扇区动态计算PWM占空比,避让非观测区

四、核心代码逻辑

1. 三电阻采样代码(最简单)

c 复制代码
// 根据SVPWM扇区选择不受窗口限制的两相电流采样
void ThreeResistor_CurrentSample(void) {
    switch(current_sector) {
        case 1: case 6:
            // 采样Ib、Ic,Ia = -(Ib+Ic)
            Ia = -(ADC_GetValue(CH2) + ADC_GetValue(CH3));
            Ib = ADC_GetValue(CH2);
            Ic = ADC_GetValue(CH3);
            break;
        case 2: case 3:
            // 采样Ia、Ic,Ib = -(Ia+Ic)
            Ia = ADC_GetValue(CH1);
            Ib = -(ADC_GetValue(CH1) + ADC_GetValue(CH3));
            Ic = ADC_GetValue(CH3);
            break;
        case 4: case 5:
            // 采样Ia、Ib,Ic = -(Ia+Ib)
            Ia = ADC_GetValue(CH1);
            Ib = ADC_GetValue(CH2);
            Ic = -(ADC_GetValue(CH1) + ADC_GetValue(CH2));
            break;
    }
}

2. 单电阻采样代码(电流重构核心)

c 复制代码
// 单PWM周期两次采样重构三相电流
void SingleResistor_CurrentReconstruct(void) {
    static uint8_t sample_phase = 0;
    if(sample_phase == 0) {
        // 第一次采样:获取第一相电流
        I1 = ADC_GetValue(BUS_CURRENT_CH);
    } else if(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

五、调试避坑指南

  1. 先调三电阻再切单电阻:先在硬件三电阻模式下完成电机参数辨识、启动参数调试,确认电机正常运行后再切换单电阻模式,降低调试难度
  2. 采样波形验证:用示波器抓取采样波形,确保电流波形正弦且无杂波,若波形畸变需调整运放增益或采样点位置
  3. 启动参数调试:无感启动重点调整强拖加速度阈值、切入闭环速度阈值,避免启动抖动或反转
  4. 保护配置:开启过流、过压、欠压、堵转保护,避免炸机
相关推荐
WeeJot嵌入式2 小时前
【串口】初始串口-轮询模式
stm32·单片机·嵌入式
yong99903 小时前
基于 51 单片机配合霍尔传感器实现计数 + 转速测量
单片机·嵌入式硬件
崇山峻岭之间3 小时前
单片机时钟配置01
单片机·嵌入式硬件
LongRunning4 小时前
【BLE】STM32WB55_资料链接(八)
stm32
踏着七彩祥云的小丑4 小时前
嵌入式——面试题
单片机·嵌入式硬件
椰羊~王小美5 小时前
STM32加密
stm32·单片机·嵌入式硬件
Wave8455 小时前
STM32 启动模式与固件更新机制 (底层深度解析)
stm32·单片机·嵌入式硬件
EVERSPIN5 小时前
国产异步SRAM单片机外扩专用存储芯片
单片机·嵌入式硬件·sram·国产sram·异步sram·国产异步sram
WeeJot嵌入式5 小时前
【中断】深入了解中断
单片机·嵌入式硬件