首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐
2025年6月20日 星期五 10:31am

SimpleFOC移植STM32(一)—— 简介

  • 23-09-28 03:42
  • 4604
  • 14015
blog.csdn.net

目录

  • 一、代码移植说明
  • 二、控制原理
    • 2.1、有感FOC控制原理
    • 2.2、有感FOC(不带电流采样)控制原理
    • 2.3、FOC heart function
  • 三、适配硬件
    • 3.1、Bluepill
    • 3.2、SimpleMotor
  • 四、程序架构
  • 五、演示功能
  • 六、2021.9.3更新
    • 6.1、当前的问题
    • 6.2、驱动器性能
    • 6.3、电源选择
    • 6.4、sublime

 
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部分。掌握核心函数的应用意义重大(你可以不了解算法,只要知道大概原理,会用即可),可以帮你快速理解整个程序。(原版代码路径:此电脑文档ArduinolibrariesSimple_FOCsrcBLDCMotor.cpp)
在这里插入图片描述
  下图为移植后的代码,
在这里插入图片描述
 

三、适配硬件

3.1、Bluepill

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

3.2、SimpleMotor

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

 

四、程序架构

  原版代码中几乎不用中断(必须赞叹下创作者高超的软件写作能力),我猜测是为了提高跨平台时的兼容性,本次移植只增加了一个中断,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(六)—— 双电机控制和力矩反馈

注:本文转载自blog.csdn.net的loop222的文章"https://blog.csdn.net/loop222/article/details/119220638"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top