目录

  • 一、原理说明
    • 1.1、电流采样
      • 1.1.1、为什么要采样电流
      • 1.1.2、电流采样方式
        • 1.1.2.1、低侧电流采样
        • 1.1.2.2、高侧电流采样
        • 1.1.2.3、内置电流采样
    • 1.2、电流变换
      • 1.2.1、AD转换
      • 1.2.2、clark变换
      • 1.2.3、Park变换
      • 1.2.4、LPF运算
      • 1.2.5、PID运算
  • 二、电流采样参数设置
    • 2.1、INA240介绍
    • 2.2、电流实际波形
    • 2.3、SimpleFOC V2.0.3 的参数
    • 2.4、PowerShield V0.2 的参数
    • 2.5、SimpleMotor 的参数
  • 三、扭矩模式
    • 3.2.1、电压模式(Voltage mode)
    • 3.2.2、直流模式(DC current mode)
    • 3.2.3、FOC模式(FOC current mode)
    • 3.2.4、三种模式对比
  • 四、硬件介绍
    • 4.1、原理图
    • 4.2、SimpleMotor方案
      • 4.2.1、准备清单
      • 4.2.2、接线
    • 4.3、STM32方案
      • 4.3.1、准备清单
      • 4.3.2、接线
  • 五、程序演示
    • 5.1、力矩模式
    • 5.2、速度模式
    • 5.3、位置模式
  • 六、代码升级说明

SimpleFOC的教程比较多,总链接方便查找文档:SimpleFOC教程链接汇总

本文已于20211222更新,升级了代码,代码下载,本文最后有链接

一、原理说明

1.1、电流采样

1.1.1、为什么要采样电流

  FOC(Field-Oriented Control),即磁场定向控制,磁场大小与绕组中的电流成正比,所以对磁场的控制在程序上就是对电流的控制。前几节的程序并没有使用电流环,而是直接使用电压值,确实可以达到还行的效果。但是这样做有两个问题:

  • 1、不能保证i_d为零,i_q等于目标值,因此电机并不能工作在效率最高的状态,力矩控制也是不准确的。

  • 2、相电压施加在电感上产生相电流,电压和电流有相位差且并不恒定,低速运行时相位差对电机的影响不明显,但是当速度快了或者速度变化率高了以后,相位差的影响就会非常明显。

1.1.2、电流采样方式

  电流采样主要有三种方式:

  • 低侧电流采样
  • 高侧电流采样
  • 内置电流采样

1.1.2.1、低侧电流采样


  低侧电流检测可能是最常见的电流检测技术,主要是因为它既不需要高性能的PWM抑制运放(如内置),也不需要支持高压的运放(如高侧),采样电阻在低侧MOS和GND之间,确保了运放输入端的电压非常低。这种方法的缺点是,必须在下桥臂MOS打开时检测电流,PWM频率通常为20k~50khz,这意味着低侧MOS的开关频率为每秒20k~50k次,因此PWM设置与ADC采集之间的同步非常重要。

1.1.2.2、高侧电流采样


  高侧电流检测可能是最不常见的电流检测技术,因为它需要支持高压的运放,采样电阻在高侧MOS和直流电源电压之间,使放大器的输入端始终有高电压。 这种方法的另一个缺点和低侧电流采样一样,需要同步PWM和ADC。

1.1.2.3、内置电流采样


  内置电流检测(InlineCurrentSense)是使用起来最简单但是最精准的技术。 采样电阻串联在电机相线上,检测的电流始终都是电机相电流,因为电感中的电流不会突变,所以无论PWM占空比的状态如何,采样到的电流都是连续稳定的。

  这种方法非常适合Arduino,采样程序变得简单了,这应该是考虑到了MEGA328P微弱的性能以及跨平台时程序的适配。内置电流检测的缺点主要在于芯片,需要比常规放大器更好的PWM抑制功能的高精度双向运放,简单的说就是硬件成本高。

1.2、电流变换

本节增加电流环,主要增加了以下功能,

  • 1、AD转换获取电流值Ia和Ib,
  • 2、通过Clark变换得到Iα和Iβ ,
  • 3、获取电机角度,通过Park变换得到Id和Iq,
  • 4、Id、Iq不能突变,同时为减少干扰,做平滑滤波,
  • 5、Id、Iq与设定值比较,通过PID运算得到Vd 和Vq,

1.2.1、AD转换

  为了与官方代码保持一致,AD转换采用简单的单通道转换模式,主程序循环一次获取一次A/B相的电流。

1.2.2、clark变换

1.2.3、Park变换


  Park变换中的“θ”是电角度,由读出的编码器角度转变而来

1.2.4、LPF运算

  • dc_current模式只有 Iq 的LPF运算
  • foc_current模式有 Iq 和 Id 的LPF运算

1.2.5、PID运算

  • dc_current模式只有q轴电流的PID运算
  • foc_current模式有q轴电流和d轴电流两个变量的PID运算
  • 电流环使用 P、I 两个参数。

二、电流采样参数设置

2.1、INA240介绍

  • INA240有四个型号,INA240A1是20倍放大倍数,INA240A2是50倍放大倍数。
  • 电机的电流是正弦波,对于采样的差分信号来说,负半周期为负值,为方便处理,需要叠加上偏置电压以保证全周期的输出为正值。

2.2、电流实际波形

  • 下图为电机静止时A/B相运放输出端波形,VCC=3.3V,所以此时电压=1.65V,
  • 下图为电机转动时运放输出端波形

2.3、SimpleFOC V2.0.3 的参数

  • 采样电阻0.01 Ω
  • 运放为INA240A2,放大倍数50
  • 背面需分别短接A0/A2至输出
  • C1_OUT=INA_VCC/2 + 0.01 * I * 50
    • 如果INA_VCC=3.3V,C1_OUT=1.65 + 0.01 * I * 50,电流范围(-3.3A,3.3A)
    • 如果INA_VCC=5.0V,C1_OUT=2.50 + 0.01 * I * 50,电流范围(-5A,5A)
  • B相采样输入在PCB上为走线方便做了反向输入,所以放大倍数需乘以 -1(移植后的代码已经做了处理)。

2.4、PowerShield V0.2 的参数

  • 采样电阻0.001 Ω
  • 运放为INA240A2,放大倍数50
  • C1_OUT=1.65 + 0.001 * I * 50,电流范围(-33A,33A)

2.5、SimpleMotor 的参数

  • 采样电阻0.001 Ω
  • 运放为INA240A1,放大倍数20
  • C1_OUT=1.65 + 0.001 * I * 20,电流范围(-82.5A,82.5A)

三、扭矩模式

  SimpleFOC中有三种扭矩模式:

  • Voltage mode - the simplest one
  • DC current mode - 1xPID controller + 1xLPF
  • FOC current mode - 2xPID controller + 2xLPF filters

3.2.1、电压模式(Voltage mode)

  • 电压模式是之前示例中一直使用的模式,
  • 因为不用采样电流,所以硬件简洁,程序简单,执行速度快,
  • 适合低速电机控制

3.2.2、直流模式(DC current mode)

  • 检测电流大小,实现电流环控制
  • 只控制Iq,设置Vd=0,
  • 像控制直流电机一样控制无刷直流电机的电流

3.2.3、FOC模式(FOC current mode)

  • 控制Iq和Id,使转子中的磁力与永磁场精确偏移90度,从而确保最大转矩,
  • 唯一真正的转矩控制方法,
  • 保证电机始终工作在高效状态

3.2.4、三种模式对比


四、硬件介绍

4.1、原理图

4.2、SimpleMotor方案

4.2.1、准备清单

序号 名称 数量
1 SimpleMotor 1
2 带编码器云台电机 1
3 USB转串口 1
4 12V或24V电源 1

带编码器云台电机可以是AS5600,也可以是TLE5012B。

AS5600电机 购买链接:某宝购买
TLE5012B电机 购买链接:某宝购买
SimpleMotor 购买链接:某宝购买

4.2.2、接线

只展示M1的接线,M2的接线根据原理图自行连接。

4.3、STM32方案

4.3.1、准备清单

序号 名称 数量
1 STM32核心板 1
2 SimpleFOCShield V2.0.3 1
3 带编码器的云台电机 1
4 USB转串口 1
5 5V电源 1
6 12V电源 1
7 杜邦线 若干


带编码器云台电机可以是AS5600,也可以是TLE5012B。
AS5600电机 购买链接:某宝购买
TLE5012B电机 购买链接:某宝购买
simpleFOCShield V2.0.3购买链接:某宝购买

4.3.2、接线


Shield V2.0.3的背面按照上图短接

对照 Shield V2.0.3 的原理图:

STM32核心板 V2.0.3
PA0 5
PA1 9
PA2 6
PB9 8
PA3 A0
PA4 A2
3V3 3V3
GND GND

如果是AS5600编码器,如下

STM32核心板 AS5600电机
PB6 SCL
PB7 SDA
3V3 VCC
GND GND

如果是TLE5012B编码器,如下

STM32核心板 TLE5012电机
PB15 MOSI
PB14 MISO
PB13 SCK
PB8 CSQ
GND GND
3V3 VCC


只展示M1的接线,M2的接线根据原理图自行连接。

五、程序演示


注意:
1、voltage_limit最大只能设置为供电电压的 1/√3(12V限制为6.9,24V限制为13.8),
2、如果检测到的极对数与实际不符,停止继续操作,否则电机会堵转。

5.1、力矩模式

5.2、速度模式

5.3、位置模式

5.1、5.2、5.3不再写教程,请根据上一篇文章操作

六、代码升级说明

本文已于20211222第一次升级了代码:

1、优化PID子程序。之前代码把位置PID、速度PID和电流PID_q_d 各自做为独立的函数调用,本次升级只写一个函数,把PID相关参数定义为结构体,与官方代码保持一致。

2、优化LPF子程序。与PID的做法相同,只写一个函数,把相关参数定义为结构体,与官方代码保持一致。

3、增加了对AS5047P、MA730编码器的支持(目前共支持AS5600、TLE5012B、AS5047P、MA730四种磁编),使用代码时只需在 MyProject.h 中把使用的型号设置为1即可。

4、官方最新的SimpleFOC库V2.2.0(2021年12月14日)版本新增加了sensor->update()函数,并因此对角度处理做了大改。
之前调试代码的时候,就发现官方代码中角度读取处理的不太好,特别是速度模式上电的时候电机会突然转一下然后停止,当时按照我的理解改进了这部分代码,最新版本中官方修补了这个问题,我本来是打算把这个部分升级到官方一致,但是修改了一天后发现官方的代码仍然很混乱(相信这部分代码官方以后还会再升级),所以此次放弃了这部分的升级,仍保持之前的设计思路,只做简单优化。

5、升级零点检测,在已知电机参数的情况下,通过设置 零点偏移角度和方向,可以跳过检测。与官方代码保持一致。

6、优化了while主循环中的计时方式,由原来的timer4中断累加修改为systick查询。当前代码中只有一个串口接收中断。与官方代码保持一致。

7、电流采样修改为三相采样。之前只写了两相采样,觉得两相就可以三相似乎浪费,调试ESP32drive的时候仔细看了下代码,发现三相多了一个平均处理,应该会比两相更可靠一点点,所以这次升级为第三相可选择,与官方代码保持一致。

8、升级后的代码可以很好的实现电流闭环,解决了之前发现的所有问题,所有功能都经过了本人的实际测试,当前代码在本人看来已无懈可击,虽为开源但也要认真负责。

9、这个系列的代码开放到这一章为止,之后的双电机控制不再开放,只提供给购买SimpleMotor的客户,本人其实是很想把所有代码完全开放,至少可以扩大我的影响力,但这会影响到付费客户的体验,如果花了钱和不花钱得到的资料一样多。

(完)


升级后源码下载:
链接:https://pan.baidu.com/s/1gex-l-KQbw-hRLxzE-ptPg
提取码:g921

欢迎加入simpleFOC技术交流群:923734429 群已满根据提示添加新群 (入群申请写:CSDN)


请继续阅读相关文章:
SimpleFOC移植STM32(一)—— 简介
SimpleFOC移植STM32(二)—— 开环控制
SimpleFOC移植STM32(三)—— 角度读取
SimpleFOC移植STM32(四)—— 闭环控制
SimpleFOC移植STM32(五)—— 电流采样及其变换
SimpleFOC移植STM32(六)—— 双电机控制和力矩反馈

SimpleFOC移植STM32(五)—— 电流采样及其变换相关推荐

  1. SimpleFOC移植STM32(二)—— 开环控制

    目录 注意事项 一.硬件介绍 1.1.硬件准备 1.1.1.SimpleMotor方案 1.1.2.SimpleFOCShield V2.0.3方案 1.2.硬件连接 1.2.1.原理图 1.2.2. ...

  2. SimpleFOC移植STM32(六)—— 双电机控制和力矩反馈

    目录 一.说明 二.硬件介绍 2.1.原理图 2.2.准备清单 2.3.接线 三.程序演示 3.1.设置参数 3.2.编译下载 3.3.根据设置的控制模式操作 四.双电机控制总结 五.力矩反馈 5.1 ...

  3. SimpleFOC移植STM32(七)—— 移植STM32F405RGT6

    目录 说明 一.点亮LED 1.1.原理图 1.2.硬件准备 1.3.烧写 二.开环控制 2.1.硬件准备 2.2.硬件连接 2.3.打开工程 2.4.修改参数 2.5.编译下载,观察运行 三.角度读 ...

  4. SimpleFOC移植STM32(三)—— 角度读取 (AS5600、AS5047P、TLE5012B、MA730、MT6701、ABZ)

    目录 说明 一.硬件介绍 1.1.硬件准备 1.1.1.SimpleMotor方案 1.1.2.STM32方案 1.2.硬件连接 1.2.1.原理图 1.2.2.接线 二.代码编译下载 2.1.代码解 ...

  5. SimpleFOC移植STM32(九)—— ABZ编码器电机

    目录 说明 一.ABZ编码器介绍 1.1.ABZ信号 1.2.光电式编码器 1.3.磁编码器 1.4.差分信号 二.电机驱动板103 2.1.读ABZ信号的cpr 2.1.1.接线 2.1.2.编译, ...

  6. SimpleFOC移植STM32(八)—— 霍尔电机

    目录 说明 一.霍尔电机 1.1.电机的种类 1.2.霍尔传感器 1.3.SimpleFOC的霍尔电机控制原理 二.电机驱动板103 2.1.读取霍尔角度 2.2.驱动霍尔电机M1 2.3.驱动霍尔电 ...

  7. 【FOC控制】英飞凌TC264无刷驱动方案simplefoc移植(6)- foc速度闭环控制

    [FOC控制]英飞凌TC264无刷驱动方案simplefoc移植(6)- foc速度闭环控制 [FOC控制]英飞凌TC264无刷驱动方案simplefoc移植(6)- foc速度闭环控制 一.电机选择 ...

  8. 【FOC控制】英飞凌TC264无刷驱动方案simplefoc移植(2)-SVPWM波实现

    [FOC控制]英飞凌TC264无刷驱动方案simplefoc移植(2)-SVPWM波实现 SVPWM波实现就是无数电机foc控制的核心,所以这一节就如何在英飞凌无刷驱动上时间互补pwm波形做讲解 [F ...

  9. 【FOC控制】英飞凌TC264无刷驱动方案simplefoc移植(3)-FOC控制原理矢量控制

    英飞凌TC264无刷驱动方案simplefoc移植(3)-FOC控制原理矢量控制 无刷电机是矢量控制,是交流电机调速的核心,也是Foc控制的核心 以下内容学习自[自制FOC驱动器]深入浅出讲解FOC算 ...

最新文章

  1. python安装方法32位_Python-3.9.0 安装教程【64位/32位】
  2. python处理视频动漫化_用Python实现抖音上的“人像动漫化”特效,原来这么简单...
  3. 解决复制虚拟机时候网络不从eth0开始问题
  4. 【jquery】select下拉框赋值
  5. Dalvik Vm架构
  6. 一个有趣的问题 : 如何设计一个线程池
  7. c#用控制台程序安装启动停止卸载服务
  8. 杂谈:Molehill API 的体现
  9. Atitit.软件开发的最终的设计 dsl化,ast化(建立ast, 解析执行ast)
  10. 联想9439微型计算机拆机,e43a 拆解文章.docx
  11. 细说ConcurrentHashMap扩容规则
  12. 苹果计算机怎么隐藏应用,苹果电脑怎么隐藏界面图标
  13. vivado添加设计源文件
  14. matlab中abs函数,Matlab中的abs函数是什么意思
  15. Unity - Timeline 之 Timeline Setting(Timeline的设置)
  16. psql -d temp 时候的txid_current!
  17. 工业4.0时代 个性化定制掀起制造业新篇章
  18. 我的世界服务器怎么使用无限附魔bug,我的世界惊现全新无限刷物品bug 服主大大都要注意了...
  19. 记一次计通项目(网元设计)(更新中)
  20. delphi生成一个随机序列号

热门文章

  1. oracle over的用法;
  2. ASP.NET毕业设计 C#高校档案数字化管理系统的设计与实现-王翔-专题视频课程
  3. 【PyTorch】RuntimeError: CUDA error: CUBLAS_STATUS_INVALID_VALUE when calling cublasSgemm()
  4. java 接口超时控制_Java接口请求响应超时的解决办法
  5. Android 最完整的五指棋代码示例
  6. 沉香与宋代八雅的关系
  7. 各式各样的极品程序员,你属于哪一种
  8. 保底掉落装备matlab,强化保底上线?这些增加强化几率的道具也别忘记使用
  9. Flipper_模拟和栈
  10. UDS protocol - 周期报文 periodical message 多字节通信 multi-byte message