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

2023-11-10

目录


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

提供前四节的代码,欢迎下载:
链接:https://pan.baidu.com/s/1j9pDH5OiaMipq-v6H9NDrQ
提取码:rdh7

说明

  • 前面六节用STM32F103C8T6演示了电机的FOC控制,受制于单片机性能,电机所能达到的最大速度不超过1000RPM。本文采用STM32F405RGT6,单片机性能提高,电机最大转速可以达到3000RPM。
  • 前四个代码开放,网盘链接在每一小节的开始位置。
  • STM32F103C8T6和STM32F405RGT6,代码的应用部分基本相同,主要是底层驱动不同。
  • 本文的每一小节对应前面的每一篇教程,本文只是把F405的操作过程演示了下,技术细节都在前面六篇文章中讲解过,不再赘述,建议您演示每一节的操作时看下前面对应的教程。

在这里插入图片描述

在这里插入图片描述

     以上文章都在这个链接中,请点击

一、点亮LED

1.1、原理图

在这里插入图片描述

1.2、硬件准备

序号 名称 数量
1 mODrive 驱动板 1
2 12V电源 1
3 ST-link 1

在这里插入图片描述

注意:
1、ST-link跟单片机连接,建议只接三根线:SWDIO、SWCLK、GND。
2、如果驱动板接了外部供电,ST-link的3.3或者5V不要再跟单片机连接,
3、目前遇到的问题,有只接2根线不接GND,导致下载失败,
4、有接3.3V,导致ST-link和驱动板共电被烧坏,
5、如果是带隔离的ST-link,需要接3.3V,实现驱动板向ST-link下载接口供电的效果。

1.3、烧写

  • 直接在keil中下载,
    在这里插入图片描述

  • 如果提示连接失败,请检查接线,或者拔掉ST-link重启一次。

  • 使用ST-LINK Utility烧写
    在这里插入图片描述
    在这里插入图片描述


二、开环控制

你仍然可以阅读前面这篇文章,以获取更多详细的介绍,SimpleFOC移植STM32(二)—— 开环控制

开环控制的目的:
1、验证驱动板和电机没有问题,可以转动。
2、设置不同的voltage_limit参数,确保电机能够开环稳定转动(速度可设为T5或者T10),
这个最合适的值用于后面闭环控制的voltage_sensor_align。

2.1、硬件准备

序号 名称 数量
1 驱动板405 1
2 12V电源 1
3 ST-link 1
4 USB转串口 1
5 2804云台电机 1

在这里插入图片描述

驱动板405 购买链接:某宝购买
电机 购买链接:某宝购买

2.2、硬件连接

  • 电机三根线随便接,不用区分相序,
  • 代码中使用USART2与串口调试助手通信,也就是驱动板的GPIO 3为TXD2,4为RXD2,所以驱动板的GPIO3接串口的RXD,GPIO4接串口的TXD。

在这里插入图片描述

2.3、打开工程

在这里插入图片描述

2.4、修改参数

  • 开环控制中,最重要的参数就是voltage_limit,
  • 电机抖动转不起来把voltage_limit设置的大一点,
  • 电机发热严重的把voltage_limit设置的小一点,
  • 串口发送指令,比如“T10”,后面别忘了回车换行符。

2.5、编译下载,观察运行

  • 常用的串口调试软件,在发送区敲回车,对应的16进制数据为0D 0A,也就是回车换行;Arduino IDE自带的串口监视器,输入指令点发送,只有16进制的0A。所以不能用Arduino IDE的软件给当前代码发送指令。
  • 发送指令,从低速开始逐渐增加,速度设置过快电机容易失步变成振动。速度单位为rad/s,6.28表示一圈每秒。

在这里插入图片描述

三、角度读取

你仍然可以阅读前面这篇文章,获得单独读某一个编码器的代码,SimpleFOC移植STM32(三)—— 角度读取

3.1、硬件准备

序号 名称 数量
1 驱动板405 1
2 12V电源 1
3 ST-link 1
4 USB转串口 1
5 带编码器云台电机 2
6 杜邦线 若干

在这里插入图片描述

驱动板405 购买链接:某宝购买
电机 购买链接:某宝购买

3.2、硬件连接

在这里插入图片描述

3.3、接线说明

  • I2C接口用M0的A/B为SCL0/SDA0,M1的A/B为SCL1/SDA1,
  • 如果是SPI接口的编码器,GPIO1为M0的CS,GPIO2为M1的CS,

在这里插入图片描述

3.4、打开工程

  • 如果需要打印速度,可以把屏蔽打开。

在这里插入图片描述

3.5、修改代码

  • “MyProject.h”文件中选择编码器型号,1表示使用,0表示不用。

在这里插入图片描述

3.6、编译下载,观察运行

在这里插入图片描述

四、闭环控制

如果对闭环控制的概念不了解,可以先看这篇文章 SimpleFOC移植STM32(四)—— 闭环控制

前四代码下载:
链接:https://pan.baidu.com/s/1j9pDH5OiaMipq-v6H9NDrQ
提取码:rdh7

4.1、硬件准备

序号 名称 数量
1 驱动板405 1
2 12V电源 1
3 ST-link 1
4 USB转串口 1
5 带编码器航模电机 1
6 杜邦线 若干

在这里插入图片描述

驱动板405 购买链接:某宝购买
电机 购买链接:某宝购买

4.2、硬件连接

在这里插入图片描述

4.3、打开工程

在这里插入图片描述

4.4、修改代码

  • 修改电机极对数和零点校准电压。关于零点校准的说明,有疑问的请看 SimpleFOC移植STM32(四)—— 闭环控制
  • 选择编码器型号,本节中用AB信号,当前代码不支持Z信号,下一节会增加对Z信号的支持。

在这里插入图片描述

4.5、编译下载,观察运行

在这里插入图片描述
最大转速可以达到T300(300 rad/s = 47.8圈/s = 2866)。

五、电流采样

low-side模式,需要在PWM打开下臂MOS的时候采样,具体来说就是:

  • 配置TIM1/TIM8为中央对齐模式,并把更新做为触发输出(TIM_TRGOSource_Update);
  • ADC开 转换完成中断(ADC_IT_EOC 和 ADC_IT_JEOC),被PWM触发采样,采样完成进入中断,在中断中取出采样值;
  • 第1路电机M0,ADC2注入组采样m0_B相,ADC3注入组采样m0_C相,由TIM1触发,
  • 第2路电机M1,ADC2规则组采样m1_B相,ADC3规则组采样m1_C相,由TIM8触发。

更多电流采样的介绍,请阅读前面这篇文章,SimpleFOC移植STM32(五)—— 电流采样及其变换

本小节先介绍M0的电机控制。

5.1、采样电路的设计

Low-side模式,电流采样电路的介绍,在 《SimpleFOC之ESP32(五)—— 电流闭环控制Lowside》 第1.3节有讲解,可对比阅读。
在这里插入图片描述

5.2、硬件准备

序号 名称 数量
1 驱动板405 1
2 12V电源 1
3 ST-link 1
4 USB转串口 1
5 带编码器航模电机 1
6 杜邦线 若干

在这里插入图片描述

驱动板405 购买链接:某宝购买
电机 购买链接:某宝购买

5.3、硬件连接

在这里插入图片描述

5.4、打开工程

在这里插入图片描述

5.5、修改代码

  • 极对数和voltage_sensor_align,根据实际使用电机确定,
  • PID参数仅供 参考,非最佳参数,
  • 编码器增加了对Z信号的支持,有详细注释说明。请充分理解Z信号的意义,请充分理解相对值和绝对值编码器的区别。

在这里插入图片描述

5.6、编译下载,观察运行

在这里插入图片描述

  • 同样是T300的转速,但是电流比上一节的电流要小,不知道是PID参数设置的好,还是电流环的加入让电机更加平稳,

5.7、当前问题

  • 电机转速超过T300,电流会急剧增大,并且在每次角度跨零时抖动一下,
  • 我对比了ODrive的处理方法,程序没有直接使用读取到的编码器角度,而是利用估算的角度计算,读取的编码器角度只用来校正估算角度,
  • 我觉得这个问题是影响电机转速继续提升的原因。
    在这里插入图片描述

六、双电机控制

更多详细的介绍,请阅读前面这篇文章,SimpleFOC移植STM32(六)—— 双电机控制和力矩反馈

6.1、他山之石

     在STM32F103C8T6的应用中,电流采样采用Inline模式,AD转换随用随取,不用考虑同步的问题;而在当前的Lowside采样模式下,只能在下臂打开的同时采样电流,需要配置AD转换为定时器触发模式,先来看下odrive的电流采样方法:

  • TIM1/TIM8的PWM频率配置为24KHz( 168M/(3500*2) ),
    在这里插入图片描述

  • 每个PWM周期包含两次更新,TIM_1_8_RCR为2,所以每3次触发一次定时器更新,更新频率为16KHz。

  • 下臂关闭时,采集的电流为0时的值(理论值2048=1.65V),采集值用做校准。odrive在整个运行期间都不停的校准,这与一般只在上电时校准一次的做法不同,

  • 下臂打开时,采样电流为有效值,

  • 例如,有效值1.75V - 校准值1.65V = 0.1V,实际电流=0.1/20倍运放/0.001R=5A。

在这里插入图片描述

  • TIM1更新触发
    ADC1注入转换channel_6/Vbus,
    ADC2注入转换channel_10/m0_phB,
    ADC3注入转换channel_11/m0_phC,
  • TIM8更新触发
    ADC2规则转换channel_13/m1_phB,
    ADC3规则转换channel_12/m1_phC,


本文代码只在上电时,采样一次Vbus(电源电压),正常运行不对ADC1触发采样,
本文代码只在上电时,校准电流为0时的电压(理论值1.65V),正常运行不做校准,
在这里插入图片描述

在这里插入图片描述

6.2、硬件准备

序号 名称 数量
1 驱动板405 1
2 12V电源 1
3 ST-link 1
4 USB转串口 1
5 带编码器航模电机 2
6 杜邦线 若干

在这里插入图片描述

驱动板405 购买链接:某宝购买
电机 购买链接:某宝购买

6.3、硬件连接

在这里插入图片描述

6.5、打开工程

在这里插入图片描述

6.5、修改代码

根据编码器类型选择
在这里插入图片描述

6.6、编译下载,观察运行

A指令控制M0电机,B指令控制M1电机。
在这里插入图片描述

6.7、本节重点

  • 同时控制两个电机,电机最大转速不能达到单个电机控制的最大速度T300。这个问题应该不是单片机性能不够,而是代码架构需要调整。比如像odrive一样,设定周期读取角度,处理电机转动。
  • 同时控制两个电机,容易互相干扰,比如一个电机设定速度为0,另一个电机T20转动,静止的电机会发生抖动;或者电机转速设置稍微高一点有明显振动现象。参考odrive的做法,设置两个PWM波形90°相位差,

在这里插入图片描述

在这里插入图片描述

在实际控制中,参考了odrive的做法,同时根据使用的MOS管特性调整偏移值,电机之间的干扰消失,转动平稳。
在这里插入图片描述

七、力矩反馈

  • 力矩反馈的原理,配置两个电机为力矩模式,分别读取两个电机的角度,把角度差做为力矩目标值,所以只要有角度差就有运动,直到两个电机的角度一致。
  • 自从两个月前改进了力矩反馈的代码后,电机三相线可以随便接,只要电机参数设置好,力矩反馈并无难点,不再赘述!
    在这里插入图片描述



(完)

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

SimpleFOC移植STM32(七)—— 移植STM32F405RGT6 的相关文章

随机推荐

  • 构建领域驱动的Java应用

    引言 在现代软件开发中 设计和构建复杂的应用程序是一项充满挑战的任务 为了更好地满足业务需求和提供可维护的代码 软件开发者需要采用一些强大的工具和技术 领域驱动设计 Domain Driven Design 简称DDD 是一种优秀的方法 它
  • Codeforces 1210 D Konrad and Company Evaluation —— 暴力

    This way 题意 现在有n个人 第i个人的工资一开始是i 现在有一些人相互讨厌 然后如果第x个人和第y个人相互讨厌 并且x的工资比y高 那么x就会向y炫耀 x y z这三个人的组合是危险的 当x会向y炫耀 y会向z炫耀 每次修改一个人
  • 用户消费行为分析

    消费品用户行为分析 根据CDNOW的一段用户订单数据进行消费行为分析 CDNow是一家在线音乐零售平台 后被德国波泰尔斯曼娱乐集团公司出资收购 其资产总价值在最辉煌时曾超过10亿美元 下面主要通过分析CDNow网站的用户购买明细来分析该网站
  • Kafka拉取某一个时间段內的消息

    一般来说我们都使用Kafka来记录用户的操作记录以便后续分析 但是通常使用的时候需要按天来统计每天的去重用户数 点击量之类的 这个时候如果直接拉某个topic的数据的话 就需要判断每个消息的时间戳 还要兼顾把所有的Partition都拉完才
  • 考试系统服务器考试机,考试系统

    考试系统为 B S 结构 考试中心需具备 Win2000 服务器且安装 IIS5 0 的软件环境和一定规模的局域网硬件环境 视参加考试的学员人数决定 客户端须安装 IE5 0 或以上浏览器版本 本系统从技术上充分考虑了考试过程的完整性和安全
  • 为自己量身打造一个 Rust 项目模板/脚手架

    摘要 quick start rs quick start a rust project 是用于快速创建一个 rust 项目的脚手架 模板 标题 为自己量身打造一个 Rust 项目模板 脚手架 深度参考 Rust Code Quick St
  • 【运维工程师笔试试题】

    一 选择题 1 下列系统默认端口号错误的是 A SSH端口22 B mysql端口3306 C Telnet端口20 D Https端口443 2 linux系统中查看ip地址的命令是 A ipconig B ifconfig C icmp
  • java编写es搜索程序

    开发环境 java8 springboot pom文件导入依赖
  • 前端HTML网页之间传递数据多种办法,附代码案例

    先看效果 目前常用的有三种办法 session传递 cookie传递 url传递 url会暴露参数 其余的两个是保存在服务端和浏览器中 不会暴露在地址栏里面 使用url 下面依次介绍 一 session传递 index html h1 We
  • 微服务连接云端Sentinel 控制台失败及连接成功后出现链路空白问题(已解决)

    sentinel控制台服务器部署在云端 首先打算在本地启动微服务连接云上的sentinel 发现仅能注册进服务 却不能显示监控信息和链路信息 查询日志后发现 云上的sentinel只能从注册中心拿到微服务 但是还是没有真正的连上8179端口
  • CSS—— @keyframes 动画关键帧

    disc 动画名 可自定义 keyframes disc from transform rotate 0deg to transform rotate 360deg 说明 keyframes 1 from to 用于简单动画 只有起始和结束
  • 我是如何从不知道怎么写,到完成二十万字书稿的?

    一 去年过年的时候 父母从乡下来到我在洛阳的家 晚上陪他们看完新闻联播后 我忍不住激动的心情 特意把北航出版社给我签的书稿 Web全栈开发进阶之路 合同捧出来给他们看 并郑重其事地介绍了一番 我以为他们会大吃一惊 像孙权对吕蒙那样对我刮目相
  • 双层双向长短期记忆神经网络(bi-LSTM)的多输入时间序列回归预测——附代码

    目录 摘要 研究背景 滑动时间窗口的构建 双层双向长短期记忆神经网络构造 程序计算结果 本文Matlab代码分享 摘要 为了充分挖掘电力负荷与多维特征因素的非线性关系 提高负荷预测精度 提出了一种基于随机森林和双向长短期记忆 Bi LSTM
  • hp服务器显示完logo就黑屏,惠普电脑开机出现惠普标志后 便黑屏了是为什么

    惠普电脑开机出现惠普标志后黑屏的原因及解决办法 一 原因 1 内存条 显示器 显卡等硬件设备接触不良 2 电脑灰尘比较多使得散热不良致使CPU或显卡芯片温度过高而死机 3 恶意病毒入侵 破坏系统 4 系统文件损坏 二 解决办法 1 检查显示
  • 数据传输-零拷贝机制

    传统 IO 在开始谈零拷贝之前 首先要对传统的 IO 方式有一个概念 基于传统的 IO 方式 底层实际上通过调用read 和write 来实现 通过read 把数据从硬盘读取到内核缓冲区 再复制到用户缓冲区 然后再通过write 写入到so
  • Tensorflow新手通过PlayGround可视化初识神经网络

    北京 上海巡回站 NVIDIA DLI深度学习培训 2018年1月26 1月12日 NVIDIA 深度学习学院 带你快速进入火热的DL领域 阅读全文 gt
  • 【网络基础】通俗易懂的搞明白什么是IP地址(小白向)

    目录 前言 IP协议 IP地址 查看IP地址的方法 公有IP地址与私有IP地址 IP地址的分类 网络路由传输流程简化版 IP地址过去的分类 过去分类带来的问题 前言 由于博主是一个刚转行没多久的前端 所以本次的文章也是面向像我一样的小白 内
  • ADS1220调试

    最近在调试ADS1220已经调试成功 后续补全此文 有问题联系我qq625895734
  • 电子病历与HIS的区别以及发展前途

    电子病历与HIS的区别以及发展前途 袁永福 http www xdesigner cn 2006 12 16 以下是我个人观点 可能有不足或错误 基本介绍 医院信息管理系统 History Information System 简称HIS
  • SimpleFOC移植STM32(七)—— 移植STM32F405RGT6

    目录 说明 一 点亮LED 1 1 原理图 1 2 硬件准备 1 3 烧写 二 开环控制 2 1 硬件准备 2 2 硬件连接 2 3 打开工程 2 4 修改参数 2 5 编译下载 观察运行 三 角度读取 3 1 硬件准备 3 2 硬件连接