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

news2024/11/16 3:43:27

目录

  • 说明
  • 一、点亮LED
    • 1.1、原理图
    • 1.2、硬件准备
    • 1.3、烧写
  • 二、开环控制
    • 2.1、硬件准备
    • 2.2、硬件连接
    • 2.3、打开工程
    • 2.4、修改参数
    • 2.5、编译下载,观察运行
  • 三、角度读取
    • 3.1、硬件准备
    • 3.2、硬件连接
    • 3.3、接线说明
    • 3.4、打开工程
    • 3.5、修改代码
    • 3.6、编译下载,观察运行
  • 四、闭环控制
    • 4.1、硬件准备
    • 4.2、硬件连接
    • 4.3、打开工程
    • 4.4、修改代码
    • 4.5、编译下载,观察运行
  • 五、电流采样
    • 5.1、硬件准备
    • 5.2、硬件连接
    • 5.3、打开工程
    • 5.4、修改代码
    • 5.5、编译下载,观察运行
    • 5.6、当前问题
  • 六、双电机控制
    • 6.1、他山之石
    • 6.2、硬件准备
    • 6.3、硬件连接
    • 6.5、打开工程
    • 6.5、修改代码
    • 6.6、编译下载,观察运行
    • 6.7、本节重点
  • 七、力矩反馈

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

说明

  • 前面六节用STM32F103C8T6演示了电机的FOC控制,受制于单片机性能,电机所能达到的最大速度不超过1000RPM。本文采用STM32F405RGT6,单片机性能提高,电机最大转速可以达到3000RPM。
  • 前四个代码开放,网盘链接在每一节的开始位置。
  • 和前面六章用STM32F103C8T6相比,移植后的代码,应用部分是完全相同的,主要是底层驱动不同。
  • 前面文章已经详细讲过的技术难点本文不再重复,如有不懂可看下前面几篇文章。

在这里插入图片描述

一、点亮LED

1.1、原理图

在这里插入图片描述

1.2、硬件准备

序号名称数量
1mODrive 驱动板1
212V电源1
3ST-link1

在这里插入图片描述

1.3、烧写

在这里插入图片描述

注意:
1、如果接了外部12V电源,ST-link的3.3或者5V电源就不要再跟单片机连接,
2、ST-link跟单片机连接,以前我都是只接三根线,现在发现RST信号接入后烧写更稳定了。

二、开环控制

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

2.1、硬件准备

序号名称数量
1mODrive 驱动板1
212V电源1
3ST-link1
4USB转串口1
52804云台电机1

在这里插入图片描述

mODrive 购买链接:某宝购买
电机 购买链接:某宝购买

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、硬件准备

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

在这里插入图片描述

mODrive 购买链接:某宝购买
电机 购买链接:某宝购买

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(四)—— 闭环控制

4.1、硬件准备

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

在这里插入图片描述

mODrive 购买链接:某宝购买
电机 购买链接:某宝购买

4.2、硬件连接

在这里插入图片描述

4.3、打开工程

在这里插入图片描述

4.4、修改代码

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

在这里插入图片描述

4.5、编译下载,观察运行

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

五、电流采样

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

5.1、硬件准备

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

在这里插入图片描述

mODrive 购买链接:某宝购买
电机 购买链接:某宝购买

5.2、硬件连接

在这里插入图片描述

5.3、打开工程

在这里插入图片描述

5.4、修改代码

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

在这里插入图片描述

5.5、编译下载,观察运行

在这里插入图片描述

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

5.6、当前问题

  • 电机转速超过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时的电压,做校准,

  • 下臂打开的时候,采集的电流做为有效电流值处理,
    在这里插入图片描述

  • 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时的电压,正常运行不做校准,
在这里插入图片描述

在这里插入图片描述

6.2、硬件准备

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

在这里插入图片描述

mODrive 购买链接:某宝购买
电机 购买链接:某宝购买

6.3、硬件连接

在这里插入图片描述

6.5、打开工程

在这里插入图片描述

6.5、修改代码

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

6.6、编译下载,观察运行

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

6.7、本节重点

  • 两个电机同时控制,电机的最大转速不能达到上节的T300。表现为电机转速比如A250,观察电流会发现电流随角度变化而变化。这个问题应该不是单片机性能不够,而是代码架构需要调整。像odrive一样,设定周期读取角度,处理电机转动。
  • 两个电机同时转动,容易互相干扰,表现为电机转速高了后电机振动,转速上不去,比如在上一节单电机控制中,电机最大转速为T300,而在有干扰的情况下,最大转速到200就振动得几乎失控。参考odrive的做法,设置两个PWM波形一定的相位差,

在这里插入图片描述

在这里插入图片描述

在实际控制中,参考了odrive的做法,同时根据使用的MOS管特性,调整了偏移值以获得最佳效果。
在这里插入图片描述

七、力矩反馈

自从两个月前改进了力矩反馈的代码后,电机三相线可以随便接,只要电机参数设置好,力矩反馈并无难点,不再赘述!

(完)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/108111.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

超1800万累计观看,多次占据热榜前列……“无障碍字幕直播间”带来的远不止这些!

截至12月6日,世界杯无障碍字幕直播间已累计观看超1800万,多次占据热榜前列……但TA带来的远不止这些。 “过去觉得世界杯距离我太远了,熬夜看球却听不懂、听不清只能紧紧盯着屏幕;但今年无障碍字幕直播间一出,似乎一下…

Talk预告 | 腾讯AI Lab研究员童湛南京大学谈婧:基于注意力机制的视频自监督表示学习和时序动作检测

本期为TechBeat人工智能社区第465期线上Talk! 北京时间12月22日(周四)20:00,腾讯AI Lab研究员——童湛&南京大学计算机科学与技术系硕士研究生——谈婧的Talk将准时在TechBeat人工智能社区开播! 他们与大家分享的主题是: “基于注意力机制…

在华为云桌面Workspace上,启泰智能工业设计效率翻倍

中国汽车的产销总量已经连续13年稳居全球第一,在一款新车开发中,大约有2万个汽车零部件,这些零部件的研发与制造,需要大量的工厂与各行业的协作,其中模具的需求量最大。 模具行业是一个非标、离散型的行业&#xff0c…

JavaSE笔记——泛型

文章目录前言一、简单泛型1.一个元组类库2.一个堆栈类二、泛型接口三、泛型方法1.变长参数和泛型方法2.一个泛型的 Supplier3.简化元组的使用4.一个 Set 工具四、构建复杂模型五、泛型擦除1.迁移兼容性2.擦除的问题3.边界处的动作六、补偿擦除1.创建类型的实例七、边界八、通配…

【学习打卡05】可解释机器学习笔记之CAM+Captum代码实战

可解释机器学习笔记之CAMCaptum代码实战 文章目录可解释机器学习笔记之CAMCaptum代码实战代码实战介绍torch-cam工具包可视化CAM类激活热力图预训练ImageNet-1000图像分类-单张图像视频以及摄像头预测pytorch-grad-cam工具包Grad-CAM热力图可解释性分析基于Guided Grad-CAM的高…

MySql 根据中文拼音首字母排序、 分组排序

如地域表信息: 如果我们想根据NAME 字段 的值, 按照中文拼音首字母排序 : sql SELECT CODE, NAME FROM district_info ORDER BY CONVERT(name USING gbk) COLLATE gbk_chinese_ci ASC 效果很OK: 那么如果我要整成想电话簿那样&am…

【正版软件】Navicat for Oracle 数据库数管理和开发工具

前言 Navicat for Oracle 透过精简的工作环境,提高 Oracle 开发人员和管理员的效率和效率。 Navicat for Oracle 透过精简的工作环境,提高 Oracle 开发人员和管理员的效率和效率。专业化 Oracle 的开发-快速安全地创建、组织、访问和共享信息…

微信小程序自定义顶部状态栏

因为工作需要,要在微信小程序中自定义顶部导航栏,通过这篇文章来记录一下自己所得~ 第一步: 需要在json文件中配置"navigation" : "custom",完成自定义导航栏,只保留胶囊按钮,效果如下图&#x…

养殖废水生化后氨氮400mg/L做到15mg/L,有什么降氨氮的工艺?

水产养殖过程中,鱼的排泄物和没有被消耗的饲料降解均会使水中的氨氮剧增,当氨氮浓度大于0.2mg/L时,鱼类摄食就会受到严重影响,造成生长不良或停止生长;达到 2mg/L时,则会造成生物的死亡,严重影响水产的养殖…

【Maven实战技巧】「插件使用专题」Maven-Archetype插件创建自定义maven项目骨架

技术推荐 自定义Archetype Maven骨架/以当前项目为模板创建maven骨架,可以参考http://maven.apache.org/archetype/maven-archetype-plugin/advanced-usage.html,详细介绍了如何快速创建和使用Archetype。 技术背景 在工作过程中必然会遇到创建项目的蛋…

最新版Crack:Xceed Ultimate Suite

Xceed Ultimate Suite 包括 160 多个适用于所有 Windows 平台的自适应、可靠和高性能控件和库的重要集合。程序前端的 UI 控件和后端的数据处理库。经常更新,并得到反应支持和开发人员的认可。 适用于所有 Windows 平台的 160 个自适应、可靠和高性能控件和库的重要…

vue-elementUI后台管理系统,已实现用户管理、菜单管理、角色管理、公司管理、权限管理、支付管理等

vue搭建后台管理界面模版(PC端) 完整代码下载地址:vue-elementUI后台管理系统 技术栈 vue2 vuex vue-router webpack ES6/7 axios elementUI 阿里图标iconfont 项目预览 http://nmgwap.gitee.io/vueproject/#/login 说明 本项目主…

Python使用pandas导入csv文件内容

使用pandas导入csv文件内容使用pandas导入csv文件内容1. 默认导入2. 指定分隔符3. 指定读取行数4. 指定编码格式5. 列标题与数据对齐使用pandas导入csv文件内容 1. 默认导入 在Python中导入.csv文件用的方法是read_csv()。 使用read_csv()进行导入时,指定文件名即…

jQuery 过滤方法

文章目录jQuery 过滤方法hasClass() 类名过滤eq() 下标过滤is() 判断过滤not() 反向过滤filter() 表达式过滤has() 表达式过滤后代元素jQuery 过滤方法 过滤方法说明hasClass()类名过滤eq()下标过滤is()判断过滤not()反向过滤filter()表达式过滤has()表达式过滤后代元素 hasCl…

微软发现macOS漏洞可让恶意软件绕过安全检查

©网络研究院 苹果修复了一个漏洞,攻击者可以利用该漏洞通过能够绕过 Gatekeeper 应用程序执行限制的不受信任的应用程序;在易受攻击的 macOS 设备上部署恶意软件。 由微软首席安全研究员发现并报告的安全漏洞(称为Achilles&#xff09…

前端基础_矩阵变换

矩阵变换 在介绍矩阵变换之前,首先要介绍一下变换矩阵,这个矩阵是专门用来实现图形变形的,它与坐标一起配合使用,以达到变形的目的。当图形上下文被创建完毕时,事实上也创建了一个默认的变换矩阵,如果不对…

腾讯T4熬夜硬肝的全套微服务学习笔记,Github万星只是开始

写在前面 微服务架构被认为是 IT 软件架构的未来方向。热度虽高,但对于很多中小公司来说微服务却是遥不可及,因为团队规模和能力又反过来制约了他们采用新技术的步伐。很多人对于微服务技术也都有着一些疑虑,比如:微服务这技术虽然…

编译器原理简介(以Cortex-M3为例)

在"keil根目录\ARM\ARMCC\bin"下可以找到如下文件: 他们就是编译器内核,将工程代码转换成二进制文件,烧写进MCU中执行。 目录 C与汇编 典型的开发流程 编译工具报错举例 C与汇编 在CM3上编程,开发人员既可以使用C也…

CANoe-新型通信模式(SOA面向服务架构)

传统的以ECU为单元的整车通信架构,是面向信号的以CAN/LIN等总线为代表的经典通信模式。而以车载以太网为总线,SOME/IP或DDS等为中间件的SOA面向服务的新型通信模式,在以域控为单元的整车通信架构中被越来越多的使用 CANoe作为仿真和测试环境提供了统一的跨网络通信概念。这…

字符设备驱动_3:register_chrdev_region() 简单字符设备驱动的实现

概述&#xff1a;利用regist_chrdev_region() 函数接口注册同一类字符设备的多个子设备。 上一节一起整理了一遍注册一个简单字符设备的流程&#xff0c;接下来就来实现一个同一类字符设备的多个子设备驱动程序。 1. Demo 程序 #include <linux/module.h> #include <…