当前位置: 首页 > news >正文

SimpleFOC01|基于STM32F103+CubeMX,移植核心的common代码

导言


在这里插入图片描述
如上图所示,进入SimpleFOC官网,点击Github下载源代码。
在这里插入图片描述
如上图所示,找到仓库。
在这里插入图片描述
comom代码的移植后,simpleFOC的移植算是完成一大半。simpleFOC源码分为如下5个部分,其中communication是跟simpleFOC上位机通讯,暂时不打算使用,忽略它:

  1. common(数学工具、关键类)
  2. communication(simpleFOC上位机):simpleFOC上位机通讯,暂时不打算使用,没必要移植。
  3. current_sensor(电流传感器)simpleFOC官方使用过的开发板,一般我们都要根据自己的开发板重新写,重新调。
  4. drivers(驱动器,三相逆变电路):simpleFOC官方使用过的开发板,一般我们都要根据自己的开发板重新写,重新调。
  5. sensors(位置编码器):simpleFOC官方使用过的编码器驱动程序,一般我们都要根据自己的项目重新写,重新调。
  6. BLDCMotor.cpp与BLDCMotor.h:核心的FOC算法(如帕克变换、SVPWM算法等)

项目源码:https://github.com/q164129345/MCU_Develop/tree/main/simplefoc01_stm32f103

一、移植


1.1、Arduino-FOC/src/common

在这里插入图片描述
如上所示,simpleFOC源码一共包含上述这些模块。
在这里插入图片描述
如上所示,将simplefoc源码的src/common的代码移植到stm32f103项目上。

1.2、SEGGER_RTT

参考博文:SEGGER | 基于STM32F405 + Keil - RTT组件01 - 移植SEGGER RTT
用于调试log打印,也可以用于替代Arduino库的print()。

1.3、DWT计时器

在这里插入图片描述
如上图所示,dwt_timer.c是我自己编写的DWT定时器驱动代码,目的:

  1. 提供us级的延时(替代Arduino提供的delayMicroseconds())
  2. 提供us级的时间戳(完成time_utils.cpp里的_micro())

1.4、C++环境

在这里插入图片描述
simpleFOC使用C++语言编写,然后,.c代码不能调用.cpp代码里的函数。创建user_main.cpp与user_main.h的目的是实现C++环境的跳转。
有空的小伙伴可以试试,在main.c里调用time_tuils.cpp的_micros()函数试试,会出现编译错误。其原因就是.c代码不能调用.cpp的代码。

二、Keil


在这里插入图片描述
在这里插入图片描述

三、代码


3.1、main.h

在这里插入图片描述

3.2、main.c

在这里插入图片描述

3.3、user_main.cpp

在这里插入图片描述
代替main.c的while(1)死循环。

3.4、user_main.h

在这里插入图片描述

3.5、foc_utils.h

在这里插入图片描述

3.6、foc_utils.cpp

在这里插入图片描述

3.7、FOCMotor.h

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.8、FOCMotor.cpp

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.9、BLDCDriver.h

在这里插入图片描述

3.10、Sensor.h

在这里插入图片描述

3.11、time_utils.cpp

在这里插入图片描述

四、调试代码


到目前为止,暂时只能调试time_utils.cpp的功能,time_utils.cpp为simpleFOC提供精确的时间戳与时间延时,非常重要。

4.1、编译

在这里插入图片描述
通过第三章节的处理,解决所有代码的报错,最终编译成功。

4.2、使用RTT Viwer调试

在这里插入图片描述
在这里插入图片描述

http://www.lryc.cn/news/520998.html

相关文章:

  • web.xml常用配置
  • 代码随想录刷题day07|(数组篇)58.区间和
  • 【Linux】进程结束和进程等待
  • 可编辑精品PPT | 城投集团(行业)数字化解决方案
  • 统计学习算法——决策树
  • 基于网络爬虫技术的网络新闻分析
  • 51_Lua面向对象编程
  • 关于在 Kotlin DSL 中,ndk 的配置方式
  • 【论文阅读+复现】High-fidelity Person-centric Subject-to-Image Synthesis
  • Spring Boot 应用开发入门
  • 【C语言】字符串函数详解
  • 【Vim Masterclass 笔记14】S07L29 + L30:练习课08 —— Vim 文本对象同步练习(含点评课内容)
  • 非PHP开源内容管理系统(CMS)一览
  • WEB 攻防-通用漏-XSS 跨站脚本攻击-反射型/存储型/DOMBEEF-XSS
  • SQLAlchemy -批量插入时忽略重复
  • 1月13日学习
  • Steam个人开发者注册备记
  • django在线考试系统
  • Laravel 中 Cache::remember 的基本用途
  • 前端进程和线程及介绍
  • OpenGL —— 基于Qt的视频播放器 - ffmpeg硬解码,QOpenGL渲染yuv420p或nv12视频(附源码)
  • Vue Router
  • 【黑灰产】人工查档业务产业链
  • 114周二复盘 (178)
  • day10_Structured Steaming
  • Python的秘密基地--[章节11] Python 性能优化与多线程编程
  • drawDB docker部属
  • 探索图像编辑的无限可能——Adobe Photoshop全解析
  • 【Vim Masterclass 笔记13】第 7 章:Vim 核心操作之——文本对象与宏操作 + S07L28:Vim 文本对象
  • Spring Boot教程之五十五:Spring Boot Kafka 消费者示例