SimpleFOC移植STM32(一)—— 简介_simple foc-程序员宅基地

技术标签: 电机驱动  STM32  simpleFOC  


SimpleFOC的教程比较多,做了一个总的链接,欢迎点击阅读:SimpleFOC教程链接汇总

本系列教程包含以下文章,欢迎阅读:
SimpleFOC移植STM32(二)—— 开环控制
SimpleFOC移植STM32(三)—— 角度读取
SimpleFOC移植STM32(四)—— 闭环控制
SimpleFOC移植STM32(五)—— 电流采样及其变换
SimpleFOC移植STM32(六)—— 双电机控制和力矩反馈

一、代码移植说明

  多年前第一次听说“开源”这个事儿的时候非常不理解,自己辛苦写的代码让别人随意下载研究多吃亏呀,后来见的多了,发现开源也有它自身的一套商业逻辑。但是无论如何开源促进了技术的进步,避免大家重复造轮子,所以这是一件好事!

  网上很多文章讲FOC都是以无感电机为例,讲一堆诸如观测器,磁链方程,滑模观测器,FAST观测器,反正切等等深奥的理论,导致大家觉得FOC非常难。实际对于有感电机来说,通过编码器直接读取角度θ,所有跟位置相关的算法全都不用,甚至电机的电感电阻这些参数也可以不用。创作者从有感电机入手,避开了无感电机复杂的算法,我觉得这个项目是学习FOC的最佳切入点。

  原版代码要兼容多平台,所以在结构上会有更多的抽象层,移植后的代码只针对STM32,所以一些不必要的中间层会被省略掉,这是结构上的优化,但在程序上尽可能的保留了原版风貌,只对严重影响性能和功能的部分代码做了优化,方便大家学习对比。本次只移植了磁编码器云台电机的对应代码,其它类型的电机(比如步进电机、hall电机和ABZ编码器)本次没有移植,请知悉!

  在上一个系列文章中,一直没有演示电流采集部分的功能,本次移植把这部分的功能也添加了上来。另外创作者的代码还在不断更新中,本次代码是在Simple FOC V2.1.1的基础上移植。20211222升级了代码,在simpleFOC V2.2.0基础上移植。

二、控制原理

2.1、有感FOC控制原理

  本次移植对应如下原理框图,其中核心函数的功能对应图中方框部分,输入的三个参数也在图中标记,setPhaseVoltage(float Uq, float Ud, float angle_el)。
在这里插入图片描述

2.2、有感FOC(不带电流采样)控制原理

  去掉电流采样及变换公式,这样看起来是不是更加简单了。实际上这样做也可以控制电机,simpleFOC(一)——(八)系列就是对应下图原理,本系列的前几节也都围绕这个原理图来讲,请大家认真看图。
在这里插入图片描述

2.3、FOC heart function

  原版代码包含了FOC的四种模式:Trapezoid_120、Trapezoid_150、SPWM和SVPWM,本次只移植了大家最关心的SVPWM部分。掌握核心函数的应用意义重大(你可以不了解算法,只要知道大概原理,会用即可),可以帮你快速理解整个程序。(原版代码路径:此电脑\文档\Arduino\libraries\Simple_FOC\src\BLDCMotor.cpp)
在这里插入图片描述
  下图为移植后的代码,
在这里插入图片描述

三、适配硬件

3.1、Bluepill

  本次移植的代码支持Bluepill,单电机控制和双电机控制,按照教程接线,编译后下载运行。
在这里插入图片描述
在这里插入图片描述

3.2、SimpleMotor

  为了减少跳线,让大家能够更专注于代码学习,本人开发了SimpleMotor驱动板,STM32F103C8T6单片机,支持大功率双电机驱动,兼容《SimpleFOC(七)——STM32(Bluepill)的应用》演示的大部分代码,本次移植的所有代码都将在这个驱动器上运行。
在这里插入图片描述

驱动板103 购买链接:https://item.taobao.com/item.htm?ft=t&id=656368067494,图锐科技
电机 购买链接:https://item.taobao.com/item.htm?ft=t&id=643573104607,图锐科技

四、程序架构

  原版代码中几乎不用中断(必须赞叹下创作者高超的软件写作能力),我猜测是为了提高跨平台时的兼容性,本次移植只增加了一个中断,TIMER4的1ms中断(已有串口接收中断),通过中断累加计时,在主循环中控制LED指示灯或者打印需要的数据,主要为调试方便,20211222升级了代码,《SimpleFOC移植STM32(五)—— 电流采样及其变换》对应的代码已经取消了1ms中断,通过嘀嗒时钟累加计时

在这里插入图片描述

五、演示功能

  总体与SimpleFOC(一)——(八)系列教程的示例一致,增加了电流采样和更多大电机的控制演示。
  1、SimpleFOC移植STM32(一)—— 简介
  2、SimpleFOC移植STM32(二)—— 开环控制
  3、SimpleFOC移植STM32(三)—— 角度读取
  4、SimpleFOC移植STM32(四)—— 闭环控制
  5、SimpleFOC移植STM32(五)—— 电流采样及其变换
  6、SimpleFOC移植STM32(六)—— 双电机控制

=============================================

六、2021.9.3更新

6.1、当前的问题

  一个月前写的这篇文章,当时代码已经移植完并测试了大部分功能,只剩电流采样和电流环的测试,原计划很快就可以调试完然后开始写教程,中间却出了问题,硬件设计和电流PID调参的问题混在一起,找到问题重新设计PCB,再测试就到现在了。

  硬件的问题主要是第一版PCB把电流运放芯片和模拟电路放到了一起,虽然电源是分开的但还是干扰明显,第二版中把运放和数字电路放到一起干扰问题解决了。(VESC就是把运放和模拟电路放到了一起,但是也很稳定,第一版PCB参考了它的设计但是却不行,我所说的这个问题只针对我这个PCB。)

  电流环PID的问题调试了几天没有解决,暂时不调了。电流采样的AD值总会有波动,如果PI参数过大,就会放大这个波动,如果PI参数过小,运行时达不到设定值,这挺矛盾的。网上有个说法FOC不一定非得电流环,也可以把电流检测作为电流限制,这个说法我暂时接受,而且实际测试使用电压方式也还行。这个问题等我以后找到更好的方法后再来解决,或者代码开源后有热心网友能解决那就更好了。20211222升级了代码,所有问题已经解决,升级内容在《SimpleFOC移植STM32(五)—— 电流采样及其变换》中有说明。

  电流环这个问题只针对SimpleMotor这样的大电流驱动,官方的V2.0.3最大电流只有5A,是不存在这个问题的,因为放大倍数小,AD值的微小波动转为电流值以后仍然很小,对系统稳定性几乎没有影响。
在这里插入图片描述

6.2、驱动器性能

  有同学问到STM32F103C8T6控制两个电机并且还要跑浮点数,能跑的动吗?103C8跑浮点数确实很吃力。
  实际测试只带一个电机,
    I2C的编码器AS5600(硬件I2C,400KhZ),主循环,voltage模式1885Hz,foc_current模式1110Hz。
    SPI的编码器TLE5012B(硬件SPI2,9MhZ),主循环,voltage模式3180Hz,dc_current模式1990Hz,foc_current模式1460Hz。
  如果是双电机,估计还要一半。这和主流的10kHz的速度差太远了。
  提升速度的方式有两种,一个是用带浮点运算的单片机,比如STM32F407,方法简单,但是由此会导致成本的上升,另一个办法是把浮点数转换为定点数来运算,效率也会成倍提升,但是归一化后的代码会非常难以理解,不利于代码的学习。所以这是一个取舍,创作者既然把它命名为SimpleFOC,还要让代码运行在MEGA328这样的芯片上,我觉得包含了把它定位为入门学习的这样一个目的。
在这里插入图片描述

6.3、电源选择

  1、锂电池最好,电机减速时会进入发电模式,发电的电压高低跟电机的功率和转速有关,电池可以吸收发电,保证母线电压不会超过电池电压,
在这里插入图片描述

  2、可调电源,本质上是开关电源,增加了电压和电流显示,操作起来更直观,
在这里插入图片描述

  3、适配器,属于小功率开关电源,小功率电机可以用用,
在这里插入图片描述

  4、大功率开关电源,
在这里插入图片描述

6.4、sublime

  代码查看我用的是这个软件,如果你有自己习惯的编辑器也可以,
官网下载:https://www.sublimetext.com/。可以免费也可以付费,免费的每次打开软件都提示付费,不用管就行。可以单独打开C文件查看代码,也可以把整个文件夹拖入,查找关键字非常方便,具体用法可以百度。
在这里插入图片描述


(完)


keil工程:点亮LED
链接:https://pan.baidu.com/s/11ye8sKlJjhnTJRZB_9tHTA
提取码:c9nu


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


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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/loop222/article/details/119220638

智能推荐

字符串大小写互换(函数)_把字符串下标从小到大交换成从大到小-程序员宅基地

文章浏览阅读837次。#include#includechar a(char b){ int i; if(b>='a'&&b { b-=32; } else if(b>='A'&&b { b+=32; } return b;}int main(){ int l,n_把字符串下标从小到大交换成从大到小

数据结构与算法-8数组的分割_多组数据,每组数据两行。第一行为一个整数n,代表数组中有n个元素。第二行为数组中-程序员宅基地

文章浏览阅读4.9k次,点赞15次,收藏42次。Description已知由n(n≥2)个正整数构成的集合A={ak}(0≤k<n),将其划分为两个不相交的子集A1和A2,元素个数分别是n1和n2,A1和A2中元素之和分别为S1和S2。设计一个尽可能高效的划分算法,满足|n1-n2|最小且|S1-S2|最大。Input多组数据,每组数据两行。第一行为一个整数n,代表数组中有n个元素。第二行为数组中的n个元素(元素之间用空格分隔)。当..._多组数据,每组数据两行。第一行为一个整数n,代表数组中有n个元素。第二行为数组中

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version_you have an error in your sql syntax; check the ma-程序员宅基地

文章浏览阅读734次。这种错,除了sql语法错误,还有可能是用了mysql关键字导致的,比如这次就是表名用了mysql关键字order,改下表名即可。_you have an error in your sql syntax; check the manual that corresponds to your mysql server version for the right syntax to use near 'the manual that corresponds to your mysql server version for the right syntax to' at line 1

android paint style,android绘图之Paint(1)-程序员宅基地

文章浏览阅读226次。Android 绘图学习Paint 讲解开篇android Paint,Canvasandroid中绘制特定图案类似显示中的绘画需要画笔和画纸,为此android提供了Paint和Canvas。Paint和Canvas分别代表画笔和画布。The Paint class holds the style and color information about how to draw geometrie..._android cap round butt square

USB产品(FX3、CCG3PA)的调试方法_ez-usb cx3-程序员宅基地

文章浏览阅读1.1k次。英飞凌的USB产品线,主要来自过去Cypress的FX3和CCG3PA产品,在此基础上进行了扩展和产品系列的细分,比如以FX3为基础又分出了CX3、HX3、SD3等,这个系列主要是实现接口,比如USB2.0、USB3.2Gen1、USB3.2Gen2等,同样的CCG3之后又有了CCG4、CCG5、CCG6、CCG7以及PMG1等,有些是整合DC-DC有些则是新增主控MCU功能,主要实现的是PD3.0、PD3.1的充电接口,这也是目前的热点,就是C口+PD充电。..._ez-usb cx3

R语言之多重共线性的判别以及解决方法_r语言共线性分析-程序员宅基地

文章浏览阅读3.6w次,点赞17次,收藏106次。多重共线性(Multicollinearity)是指线性回归模型中的解释变量之间由于存在精确相关关系或高度相关关系而使模型估计失真或难以估计准确。 1.可以计算X矩阵的秩qr(X)$rank,如果不是满秩的,说明其中有Xi可以用其他的X的线性组合表示;(完全的线性表示,此方法不能作为判别是否有共线性的标准,因为有可能存在共线性但不是完全线性相关)2.也可以计算条件数kapp_r语言共线性分析

随便推点

ASP.NET—002:GridView手动增加一行_asp.net的gridview增加一行-程序员宅基地

文章浏览阅读1.5w次,点赞3次,收藏7次。ASP.NET中的gridview如何增加一行呢,下面介绍一种最简单的方式。只使用后台的数据,在后台的datatable或者list增加一项,然后重新绑定gridview。直接看代码效果:实体类public class PersonModel { private int personIndex; public int PersonIndex_asp.net的gridview增加一行

unity3d接入有米广告SDK----android_ubity 接有米广告-程序员宅基地

文章浏览阅读8.1k次。个人开发者发布开发应用想接入广告SDK,个人jie'c_ubity 接有米广告

python hasattr函数_Python3 hasattr()、getattr()、setattr()函数简介-程序员宅基地

文章浏览阅读509次。Python3 hasattr()、getattr()、setattr()函数简介一、hasattr(object, name)判断object对象中是否存在name属性,当然对于python的对象而言,属性包含变量和方法;有则返回True,没有则返回False;需要注意的是name参数是string类型,所以不管是要判断变量还是方法,其名称都以字符串形式传参;getattr和setattr也同样..._python3 hasattr

阶乘求和(高精)_阶乘分母的级数求和-程序员宅基地

文章浏览阅读1.8k次。用高精度计算出S=1!+2!+3!+…+n!(n ≤ 50)其中“!”表示阶乘,例如:5!=54321。输入描述:输入正整数N输出描述:输出计算结果S示例1输入3输出9思路:高精度的加法和乘法,还是利用n!=n*(n-1)!,然后就是高精加和高精乘的模板#include<bits/stdc++.h>using namespace std;#define ios ios::sync_with_stdio(0)typedef long long ll;const int_阶乘分母的级数求和

「建议收藏」我想进阿里,我该怎么做?_想进阿里巴巴当软件工程师该怎么做-程序员宅基地

文章浏览阅读464次。阿里巴巴,作为一家知名的互联网公司,是我们程序员心仪公司之一,想得到一份阿里的offer,得通过层层关卡在这里我想分享一些我的经验,送给那些跟我一样,没大厂背景,但是想进阿里(或其他大厂,比如我面过的字节跳过),又有点迷茫不知该如何前进的人。之前没有去过,我一直很迷茫,内心有一些谜团一直困扰着我,比如阿里招人标准是什么?,自己距离这个标准有多少差距?那时候一直不知道,就好像置身于沙漠之中,却..._想进阿里巴巴当软件工程师该怎么做

推荐文章

热门文章

相关标签