首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

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

  • 23-09-28 03:42
  • 3578
  • 7374
blog.csdn.net

目录

  • 说明
  • 一、点亮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、编译下载,观察运行
    • 5.7、当前问题
  • 六、双电机控制
    • 6.1、他山之石
    • 6.2、硬件准备
    • 6.3、硬件连接
    • 6.5、打开工程
    • 6.5、修改代码
    • 6.6、编译下载,观察运行
    • 6.7、本节重点
  • 七、力矩反馈

 

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

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

说明

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

在这里插入图片描述

在这里插入图片描述

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

 

一、点亮LED

1.1、原理图

在这里插入图片描述

1.2、硬件准备

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

在这里插入图片描述

注意:
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驱动板4051
212V电源1
3ST-link1
4USB转串口1
52804云台电机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驱动板4051
212V电源1
3ST-link1
4USB转串口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驱动板4051
212V电源1
3ST-link1
4USB转串口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驱动板4051
212V电源1
3ST-link1
4USB转串口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驱动板4051
212V电源1
3ST-link1
4USB转串口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管特性调整偏移值,电机之间的干扰消失,转动平稳。
在这里插入图片描述

 

七、力矩反馈

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

 
 
(完)
 

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

/ 登录

评论记录:

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

分类栏目

后端 (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