SimpleFOC移植STM32(一)—— 简介

2023-05-16

目录

  • 一、代码移植说明
  • 二、控制原理
    • 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部分。掌握核心函数的应用意义重大(你可以不了解算法,只要知道大概原理,会用即可),可以帮你快速理解整个程序。(原版代码路径:此电脑\文档\Arduino\libraries\Simple_FOC\src\BLDCMotor.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(六)—— 双电机控制和力矩反馈

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SimpleFOC移植STM32(一)—— 简介 的相关文章

  • stm32的HAL库函数flash无法写入的问题

    记录一下对flash编程操作时出现的问题以及解决办法 问题 在使用HAL库中的HAL FLASH Program uint32 t TypeProgram uint32 t Address uint64 t Data 函数时发现总是没办法写
  • 如何更改闪存的起始地址?

    我正在使用 STM32F746ZG 和 FreeRTOS Flash的起始地址是0x08000000 但我想把它改成0x08040000 我通过谷歌搜索了这个问题 但没有找到解决方案 我更改了链接器脚本 如下所示 MEMORY RAM xr
  • 在没有 IDE 的情况下如何使用 CMSIS?

    我正在使用 STM32F103C8T6 并想使用 CMSIS 这本质上只是寄存器定义 没有代码 让我的生活更轻松 同时仍保持在较低水平 问题是我不知道如何安装该库以便在命令行上使用 Makefile 使用 所有文档似乎都与特定于供应商的 I
  • 在 MCU 内部 FLASH 中从一个固件跳转到另一个固件

    我目前正在开发针对 STM32F030C8 的引导加载程序固件应用程序 我在分散文件中指定引导加载程序应用程序将占用主内存位置 0x08000000 到 0x08002FFF 扇区 0 到扇区 2 我还编写了一个主固件应用程序 存储在0x0
  • CMSIS 库是否应该包含在版本控制中? [复制]

    这个问题在这里已经有答案了 通常 我曾经在版本控制中包含芯片供应商 ST 提供的设备特定标头和源以及 CMSIS Core 标头 数量不多 也没有更新的习惯 我使用STM32微控制器 但我不使用立方体框架 or the 标准外设库 最近 我
  • 134-基于stm32单片机矿井瓦斯天然气浓度温湿度检测自动通风系统Proteus仿真+源程序...

    资料编号 134 一 功能介绍 1 采用stm32单片机 LCD1602显示屏 独立按键 ds1302时钟 DHT11温湿度 电机 蜂鸣器 制作一个基于stm32单片机矿井瓦斯天然气浓度温湿度检测自动通风系统Proteus仿真 2 通过DH
  • 133-基于stm32单片机停车场车位管理系统Proteus仿真+源程序

    资料编号 133 一 功能介绍 1 采用stm32单片机 4位数码管 独立按键 制作一个基于stm32单片机停车场车位管理系统Proteus仿真 2 通过按键进行模拟车辆进出 并且通过程序计算出当前的剩余车位数量 3 将剩余的车位数量显示到
  • Push_back() 导致程序在进入 main() 之前停止

    我正在为我的 STM32F3 Discovery 板使用 C 进行开发 并使用 std deque 作为队列 在尝试调试我的代码 直接在带有 ST link 的设备上或在模拟器中 后 代码最终在 main 中输入我的代码之前在断点处停止 然
  • HAL库学习

    CMSIS简介 CMSIS Cortex Microcontroller Software Interface Standard 微控制器软件接口标准 由ARM和其合作的芯片厂商 ST NXP 软件工具厂商 KEIL IAR 共同制定的标准
  • SHT10温湿度传感器——STM32驱动

    实验效果 硬件外观 接线 3 3V供电 IIC通讯 代码获取 查看下方 END
  • 在 Atollic TrueStudio、STM32CubeMX 中导入 C 库

    我目前正在开发 STM32F767ZI Nucleo 板和一个小安全芯片 microchip atecc508a 通过 i2c 连接进行连接 该芯片有一个可用的库加密验证库 https github com MicrochipTech cr
  • 串口通讯第一次发送数据多了一字节

    先初始化IO再初始化串口 导致第一次发送时 多出一个字节数据 优化方案 先初始化串口再初始化IO 即可正常通讯
  • STM32的HAL中实现单按、长按和双按功能

    我正在尝试实现单击 双击和长按功能来执行不同的功能 到目前为止 我已经理解了单击和长按的逻辑 但我不知道如何检测双击 至于代码 我使用计数器实现了单击和长按 但代码仅停留在第一个 if 条件上 bool single press false
  • 毕设开题分享 单片机智能教室系统(智能照明+人数统计)

    1 简介 Hi 大家好 今天向大家介绍一个学长做的单片机项目 单片机智能教室系统 智能照明 人数统计 大家可用于 课程设计 或 毕业设计 项目分享 https gitee com feifei1122 simulation project
  • for循环延时时间计算

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 pandas是什么 二 使用步骤 1 引入库 2 读入数据 总结 前言 之前做led点亮的实验 好像是被delay函数影响了 因为delay参数设置的不对
  • systick定时器

    systick定时器 文章目录 前言 一 前期疑惑 二 解答 1 关于systick是阻塞的吗 2 非阻塞 三 软件编写 总结 前言 这边记录systick相关知识点 一 前期疑惑 在学习systick志气啊 其实对于systick还是一脸
  • STM32F0、ST-link v2、OpenOCD 0.9.0:打开失败

    我在用着发射台 http www ti com ww en launchpad about htmlgcc arm none eabi 4 9 2015q2 为 STM32F0 进行编译 现在我想使用该集合中的 arm none eabi
  • HAL_Delay() 陷入无限循环

    我被 HAL Delay 函数困住了 当我调用此函数 HAL Delay 时 控制陷入无限循环 在寻找问题的过程中 我发现了这个 http www openstm32 org forumthread2145 threadId2146 htt
  • 使用 STM32F0 ADC 单独读取不同的输入

    STM32F072CBU 微控制器 我有多个 ADC 输入 并且希望单独读取它们 STMcubeMX 生成样板代码 假设我希望按顺序读取所有输入 但我无法弄清楚如何纠正这个问题 这篇博文 http blog koepi info 2015
  • STM32 传输结束时,循环 DMA 外设到存储器的行为如何?

    我想问一下 在以下情况下 STM32 中的 DMA SPI rx 会如何表现 我有一个指定的 例如 96 字节数组 名为 A 用于存储从 SPI 接收到的数据 我打开循环 SPI DMA 它对每个字节进行操作 配置为 96 字节 是否有可能

随机推荐

  • 核心显卡,集成显卡,独立显卡

    目前显卡已经有好几种了 xff0c 比如独立显卡 核心显卡 以及集成显卡等 xff0c 不同显卡的定位不同 核心显卡 主板集成显卡和独立显卡的区别如下 xff1a 处理器集成显卡就是指集成在cpu内部的显卡 xff0c 通常称为核心显卡 x
  • 遍历JavaScript对象的所有属性

    用来遍历指定对象所有的属性名称和值 obj 需要遍历的对象 author Jet Mah website http www javatang com archives 2006 09 13 442864 html function allP
  • 在VS环境下使用SVN

    由于我和同事要合作做一个小程序 xff0c 所以需要一个源代码管理的工具 在工作的时候我们由于是VS进行 net开发所以一般是使用TFS进行项目管理 但是我们在不同的项目组 xff0c 工作地点不一样 xff0c 而且现有的TFS服务器都是
  • 12小时上线“新冠肺炎同程查询工具”,开发者这样狙击疫情

    阿里妹导读 xff1a 2020开年极为复杂 面对新型肺炎的疫情 xff0c 我们每一个人都与国家命运紧密相连 全社会的力量都凝聚在一起 xff0c 众志成城 xff0c 共克时艰 有这么一群热爱代码的人 xff0c 用自己的方式提升效率
  • 35 个你也许不知道的 Google 开源项目

    Google是支持开源运动的最大公司之一 xff0c 它们现在总共发布有超过500个的开源项目 xff08 大部分都是利用它们的API来完成 xff09 xff0c 本文将列举一些有趣的开源项目 xff0c 其中很可能有不少你不知道的哦 文
  • Ubuntu 清除缓存 apt-get命令参数

    整理了Ubuntu Linux操作系统下apt get命令的详细说明 分享给大家 常用的APT命令参数 xff1a apt cache search package 搜索包 apt cache show package 获取包的相关信息 x
  • [code]使Ext.DatePicker只显示年月选择界面

    Ext override Ext DatePicker onRender function container position var m 61 39 lt table cellspacing 61 34 0 34 gt 39 39 lt
  • The BASEDIR environment variable is not defined correctly This environment variable is needed to run this program

    今天配一台服务器的时候 xff0c 启动tomcat莫名其妙的报错说 xff1a The BASEDIR environment variable is not defined correctly This environment vari
  • BIRT Viewer 参数设置详解

    BIRT作为一款功能强大的开源报表工具 xff0c 其版本的升级更新速度也非常快 xff0c 从1 0到2 0 xff0c 一直到最新的2 2 1版本 xff0c 无论从功能上还是性能上都得到了极大的提高和扩充 BIRT也提供了一个标准的J
  • [code]将Ext.DatePicker年份调到左边,月份调到右边

    Ext override Ext DatePicker createMonthPicker function if this monthPicker dom firstChild var buf 61 39 lt table border
  • ibatis配置log4j输出sql语句等日志信息

    整了一上午的ibatis xff0c 记得自己以前配置过log4j可以输出sql语句 xff0c 但是这次不知道咋了 xff0c 就是不输出 xff0c 找以前的项目还找不到 了 xff0c 上网上搜索了半天 xff0c 都是差不多的配置l
  • Dreamweaver 代码配色方案 DIY

    Dreamweaver 代码配色方案 DIY 最近刚换上隐形眼镜 xff0c 电脑上满屏的白花花的颜色 xff0c 看得我眼泪鼻涕直流 xff0c 无奈 xff0c 代码还是要看滴 xff0c 改造了一下Dreamweaver代码配色方案
  • xampp的apache启动失败

    xampp xff08 apache 43 mysql 43 php 43 perl xff09 是一个功能强大的建站集成软件包 许多人通过他们自己的经验认识到安装 Apache 服务器是件不容易的事儿 如果您想添加 MySQL PHP 和
  • 降级论

    几乎一年没有写博客了 xff0c 说没时间那是借口 xff0c 唯一的原因是 xff0c 年纪越大越发觉自己肤浅 有些想法还没提笔 xff0c 就发现很幼稚 xff0c 就不敢发出来贻笑大方了 这次先给大家说个小故事 xff1a 从前有三个
  • 阿里传奇工程师多隆的程序世界

    阿里妹导读 xff1a 写代码写到入定 xff0c 是一种什么样的体验 xff1f 11月29日 xff08 本周三 xff09 xff0c 阿里技术人纪录片系列 将带大家走进大神多隆的代码世界 在此之前 xff0c 我们先来重温一篇关于多
  • 将Sublime Text2 加入右键菜单

    在googleread里面看有人推荐sublime text2 说开发很方便 就下载一个试试 写html还真的挺爽 于是按照vim加入鼠标右键的方法 果然可以 这里和大家分享 1 运行中输入 regedit 打开注册表 2 在HKEY CL
  • PIXHAWK飞控最新控制部分源码详解与分析(v 1.8.0)

    px4控制源码中文注释及解读 作 者 xff1a chen honglin时 间 xff1a 2018 9 27联系方式 QQ 260437028 写在前面 xff1a 关于本篇文章 作者经过两天的啃代码 发现新版本与旧版本相差不小 而网络
  • PX4应用程序编写

    PX4应用程序编写 本文将较为详细的阐述如何自己写一个程序 xff0c 并且将其添加到编译脚本中去 本文所需基础 多线程编程 第一部分 xff1a 写一个自己的程序 在Firmware src moudle下 xff0c 创建一个文件夹 x
  • 计算机操作系统之系统调用

    目录 x1f4a8 什么是系统调用 xff0c 有何作用 xff1f x1f4a8 系统调用与库函数的区别 x1f4a8 系统调用背后的过程 x1f4a8 总结 我们将带着以下问题去学习什么是系统调用 什么是系统调用 xff0c 有何作用
  • SimpleFOC移植STM32(一)—— 简介

    目录 一 代码移植说明二 控制原理2 1 有感FOC控制原理2 2 有感FOC 不带电流采样 控制原理2 3 FOC heart function 三 适配硬件3 1 Bluepill3 2 SimpleMotor 四 程序架构五 演示功能