【从零开始实现stm32无刷电机FOC】【硬件】集成驱动芯片、编码芯片、电流采样芯片、电机的选型
为了承载和验证本文的FOC代码工程,本节设计了一个简易的三相无刷电机硬件套件,
- 主控采用非常常用的stm32f103c8t6单片机,
- 驱动电路采用集成驱动芯片MS8313/DRV8313,
- 电机编码器采用MT6701,电机采用22xx系列云台电机
- 电流传感器采用INA199A1在线采样。
- 电机选择,与驱动电路(DRV8313)有关。
由于驱动电流较小,选择线电阻大的电机(防止过流),云台舵机(而不是航模电机),KV值小于200。
该硬件套件使用无工具快拆装设计,到手即可直接快速手拧安装拆卸。
接下来对各个模块进行设计讲解:
一、MCU系统
PWM输出信号
用于输出FOC产生的PWM信号到电机驱动桥,直接引出即可(连接到DRV8313电机驱动芯片)。本文的硬件套件电路板将该三个信号引出方便接示波器,同时这里的PA9和PA10也是ISP烧录的引脚。

接入PWM的刹车引脚
ADC信号
用于电流采样信号采集,直接连线即可,注意ADC外设的通道是对应固定引脚的,不能随便接。

SPI信号
用于读取MT6701磁编码器

二、集成电机驱动芯片
为了方便学习验证FOC算法,本文选择集成驱动芯片MS8313/DRV8313,该芯片内部有3个半桥驱动以及保护电路,可以减少对驱动设计的要求以及防止损坏器件。
该芯片自带的过流保护和相线短路保护非常有用,如果使用MOS管搭建的驱动桥进行驱动,在刚开始学习验证FOC算法的时候,比较容易烧毁MOS管,我就烧毁过MOS管好几次。
但是该芯片驱动电流不是很高,每个电机相线最高峰值输出2.5A电流,对于学习验证阶段足够了。

三、磁编码器电路
本文使用MT6701磁编码器,该编码器价格比常用的AS5600稍贵,支持SPI角度读取。
经过我实测,stm32f1系列的I2C外设确实存在硬件bug,使用硬件I2C读取AS5600时,经常会陷入busy状态,因此本文使用支持SPI读取的MT6701。
MT6701供电电压可以是3.3V或者5V,这里使用了5V进行供电,因为MT6701数据手册中有写:要操作内部EEPROM时,供电电压在4.5V到5V之间。
不过一般也不操作内部EEPROM,操作内部EEPROM需要使用I2C方式,由于这里使用了SPI接口,万一要操作时请使用软件I2C。

四、电流采样电路
为了方便在定时器任意溢出时刻采样,将电流采集位置设计在电机相线上,采样时刻请查看前文(adc外设的高级用法)。
电流采样是放大采样电阻两端电压后输入单片机ADC引脚,再根据欧姆定律反算得到的。例如假设:
- 基准电压是1.65V,输出大于1.65V代表正向电流,小于1.65V代表负向电流。采样电阻实际电压 = (基准电压-ADC读取电压)/放大倍数
- INA199A1运算放大器放大倍数是50倍
- 采样电阻是0.02Ω(=20mΩ)
- 单片机ADC读到的电压是0.65V
那么流经该相线的电流为(1.65-0.65)/50/0.02=1A。
本文电流传感器选择INA199系列,该电流传感器相对于更常用INA240系列的价格低很多,INA240大约是10+元一片,INA199具有26V的共模电压,采集相线上的采样电阻两端电压没有问题,就是参考电压需要输入1.65V会麻烦一点。
五、电机选择
由于MS8313/DRV8313驱动电流有限,因此最好选择绕组电阻高一点(线电阻10Ω以上)的电机,不要使用航模电机,这里使用2208云台电机。云台电机与航模电机主要的区别就是绕组铜线匝数不一样,云台电机匝数多、绕组电阻大、磁感应强度大、扭矩大,大概小于200KV的航模电机也就能称为云台电机了。
经过我的测试,使用1000KV的2208航模电机在MS8313/DRV8313驱动下,
位置环的力矩比较微弱,速度环勉强能运行,总之不适合MS8313/DRV8313驱动,当然由于MS8313/DRV8313自带过流保护,因此使用很低绕组电阻的航模电机也不会烧毁驱动。
下图左边是2208云台电机,右边是2208航模电机:

本文示例硬件说明
为了学习验证本文的FOC算法,我按照上述电路设计了一个简单的集成了磁编码器、电机驱动、单片机的ALL-IN-ONE验证板。点此链接前往查看。

本文参考:
https://blog.csdn.net/qq570437459/article/details/142188225

浙公网安备 33010602011771号