3、硬件平台搭建:主控芯片选型(STM32/GD32)、驱动芯片(DRV8301/IR2101)、电流采样电路设计
做FOC矢量控制,硬件平台是地基。地基没打好,算法写得再漂亮也白搭。我这些年折腾下来,发现很多新手一上来就急着调PI参数,结果电机嗡嗡响就是不转,最后查出来是电流采样电路噪声太大——嗯,这种坑我踩过不止一次。
今天咱们就把硬件平台的三个核心模块掰开揉碎了讲:主控芯片怎么选、驱动芯片用哪个、电流采样电路怎么设计。说白了,这三样东西决定了你的FOC能跑多稳、能跑多快。
3.1 主控芯片选型:STM32还是GD32?
主控芯片是FOC的大脑。它要干三件事:跑算法、采电流、发PWM。我个人习惯,选型时先看三点——算力够不够、外设全不全、成本压不压得住。
3.1.1 STM32系列
STM32在电机控制领域是绝对的主流。我最早做FOC用的就是STM32F103,那时候还叫「神车F1」。现在主流方案已经升级到STM32G4系列了。
| 型号 | 主频 | 特色外设 | 适用场景 |
|---|---|---|---|
| STM32F103 | 72MHz | 基本定时器、ADC | 入门学习、低速电机 |
| STM32F405 | 168MHz | FPU、高级定时器 | 中高速FOC |
| STM32G431 | 170MHz | CORDIC、HRTIM、运放 | 专业FOC、伺服 |
| STM32H743 | 480MHz | 双核、高精度PWM | 多电机、复杂算法 |
我个人最推荐STM32G431。为什么?它内置了CORDIC硬件加速器,算三角函数比软件快10倍以上。你想想看,FOC里SVPWM要算sin/cos,用CORDIC一眨眼就出来了。而且它还集成了运放和比较器,省掉外部运放芯片,板子能小一圈。
3.1.2 GD32系列
GD32是国产芯片,跟STM32引脚兼容。说白了就是「平替版」。价格只有STM32的一半甚至更低。我最近几个量产项目都在用GD32F303,跑FOC完全没问题。
但要注意几个坑:
- ADC精度: GD32的ADC噪声比STM32大一些。我测过,STM32G431的ADC有效位数能做到11.5位,GD32F303大概在10.8位左右。做电流采样时,这个差距会影响低速性能。
- 定时器同步: GD32的高级定时器跟STM32寄存器地址不完全一样。移植代码时,定时器配置要重新调。我曾经因为没注意这个,PWM相位差了180度,电机直接反转——嗯,那场面挺尴尬的。
- 温度范围: 工业级产品建议用STM32。GD32在高温下(85°C以上)稳定性差一些。
3.2 驱动芯片:DRV8301 vs IR2101
主控芯片输出的是3.3V/5V的逻辑信号,驱动不了电机。驱动芯片的作用就是把逻辑信号放大成12V-48V的栅极驱动电压,同时提供死区时间保护。
3.2.1 DRV8301——集成方案
DRV8301是TI的明星产品。它把三个半桥驱动、电流采样放大器、降压稳压器全集成在一个芯片里。我最早用这个芯片时,感觉就像拿到了「懒人包」——外围电路少得可怜。
它的核心参数:
- 供电电压:6V-60V
- 驱动电流:2.3A sink / 1.7A source
- 内置三个差分放大器(增益可调:10/20/40/80)
- SPI接口配置参数
- 死区时间可编程(50ns-200ns)
我在一个48V/500W的电机项目里用了DRV8301。说实话,真省心。电流采样直接用芯片自带的放大器,连外部运放都省了。而且它的SPI接口能实时读取故障状态——过流、过温、欠压,一目了然。
3.2.2 IR2101——分立方案
IR2101是经典的半桥驱动芯片。一个芯片只能驱动一个半桥,做三相FOC需要三片。它没有集成电流采样,需要外加运放。
它的核心参数:
- 供电电压:10V-20V
- 驱动电流:290mA sink / 210mA source
- 自举电路供电(需要外接自举二极管和电容)
- 死区时间由外部电阻设置
为什么还有人用IR2101?便宜啊!三片IR2101加起来不到5块钱,一片DRV8301要20多块。而且分立方案灵活,你可以自己选MOS管、自己调死区时间。
但代价是什么?
- PCB面积大——三片IR2101加三个自举电路,再加三个运放,板子比DRV8301方案大两倍
- 调试麻烦——自举电容选型、死区时间匹配、走线布局,每个环节都可能出问题
- 可靠性低——分立元件多,焊点多,故障率自然高
3.3 电流采样电路设计
电流采样是FOC的「眼睛」。采样不准,角度算出来就是错的,电机就会抖、会啸叫、会丢步。我见过太多人花大价钱买好芯片、好MOS管,结果在电流采样上省了几毛钱,整个系统性能一塌糊涂。
3.3.1 采样方式选择
电流采样有三种主流方式:
| 方式 | 原理 | 优点 | 缺点 |
|---|---|---|---|
| 低侧采样 | 在MOS管源极和GND之间串采样电阻 | 电路简单、共模电压低 | 只能在下管导通时采样 |
| 高侧采样 | 在电源和MOS管漏极之间串采样电阻 | 可连续采样 | 共模电压高、需要差分运放 |
| 相电流采样 | 在电机相线上串采样电阻 | 直接测量相电流 | 共模电压高、需要隔离 |
FOC最常用的是低侧采样。为什么?因为便宜、简单。你想想看,低侧采样电阻两端的电压就是采样电阻上的压降,共模电压接近0V,普通运放就能处理。
但低侧采样有个致命问题:只能在PWM下管导通时采样。如果PWM占空比接近100%,下管导通时间太短,采样窗口不够。这时候就需要「三电阻采样」或者「单电阻采样」的算法来补偿。
3.3.2 采样电阻选型
采样电阻的选型有几个关键参数:
- 阻值: 一般选5mΩ-50mΩ。阻值越大,信号越强,但功耗也越大。我一般按「满量程时压降50mV-100mV」来算。比如电机峰值电流10A,选10mΩ电阻,满量程压降100mV,功耗1W。
- 功率: 要留2倍裕量。上面例子1W功耗,选2W电阻。
- 温漂: 选±50ppm/°C以内的。温漂大了,电流采样会随温度漂移,FOC的PI参数就得跟着调——这谁受得了?
- 寄生电感: 选低电感型(比如金属箔电阻)。寄生电感会在PWM开关瞬间产生尖峰,干扰采样。
3.3.3 运放电路设计
采样电阻上的压降只有几十毫伏,需要放大到ADC的输入范围(一般是0-3.3V)。运放电路的设计要点:
- 增益: 根据采样电阻和ADC范围计算。比如采样电阻10mΩ,峰值电流10A,峰值压降100mV。ADC范围3.3V,增益设为33倍(3.3V/0.1V)。实际选30倍或40倍,留点裕量。
- 偏置: 电流是双向的(电机正转/反转),所以需要把信号偏置到ADC范围的中点。比如3.3V的ADC,偏置到1.65V。这样正向电流对应1.65V-3.3V,反向电流对应0V-1.65V。
- 滤波: 在运放输出端加RC低通滤波,截止频率设为PWM频率的1/10左右。比如PWM 20kHz,滤波截止频率2kHz。
我常用的运放电路是这样的:
// 差分放大 + 偏置电路
// 采样电阻 Rs = 10mΩ
// 运放增益 G = 40 (Rf=40k, Rin=1k)
// 偏置电压 Vref = 1.65V
// 输出电压 Vout = (I * Rs * G) + Vref
// 当 I = +10A 时,Vout = (10 * 0.01 * 40) + 1.65 = 5.65V (超出ADC范围)
// 当 I = +5A 时,Vout = (5 * 0.01 * 40) + 1.65 = 3.65V (接近满量程)
// 当 I = 0A 时,Vout = 1.65V
// 当 I = -5A 时,Vout = (-5 * 0.01 * 40) + 1.65 = -0.35V (超出ADC范围)
你看,增益40倍时,±5A的电流范围对应-0.35V到3.65V,超出了ADC的0-3.3V范围。所以实际增益要调低,或者换更小的采样电阻。我一般把满量程电流对应的输出电压控制在ADC范围的80%左右,留20%裕量防止过冲。
3.4 小结
硬件平台搭建,说白了就是三个选择:
- 主控芯片: 学习用STM32F103,产品用STM32G431,省钱用GD32F303
- 驱动芯片: 省心用DRV8301,省钱用IR2101
- 电流采样: 低侧采样+差分运放,采样电阻选低电感型,增益留裕量
我个人的习惯是:先拿STM32G431+DRV8301搭一套原型板,把算法调通。然后根据成本目标,再考虑要不要换成GD32+IR2101的方案。这样既保证了开发效率,又控制了量产成本。
下一章咱们聊PCB布局和电源设计。说实话,这部分比芯片选型还容易踩坑——你想想看,一个布局不合理,整个板子可能就成了一个「大天线」,噪声满天飞。到时候FOC算法再牛也救不了。