SimpleFOC移植STM32(七)—— 移植STM32F405RGT6
目录
- 说明
- 一、点亮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教程链接汇总
说明
- 前面六节用STM32F103C8T6演示了电机的FOC控制,受制于单片机性能,电机所能达到的最大速度不超过1000RPM。本文采用STM32F405RGT6,单片机性能提高,电机最大转速可以达到3000RPM。
- 前四个代码开放,网盘链接在每一小节的开始位置。
- STM32F103C8T6和STM32F405RGT6,代码的应用部分基本相同,主要是底层驱动不同。
- 本文的每一小节对应前面的每一篇教程,本文只是把F405的操作过程演示了下,技术细节都在前面六篇文章中讲解过,不再赘述,建议您演示每一节的操作时看下前面对应的教程。
以上文章都在这个链接中,请点击
一、点亮LED
链接:https://pan.baidu.com/s/17qQ46F0iCBFMCMNmwC0gnA
提取码:k11o
1.1、原理图
1.2、硬件准备
序号 | 名称 | 数量 |
---|---|---|
1 | mODrive 驱动板 | 1 |
2 | 12V电源 | 1 |
3 | ST-link | 1 |
1.3、烧写
注意:
1、如果接了外部12V电源,ST-link的3.3或者5V电源就不要再跟单片机连接,
2、ST-link跟单片机连接,以前我都是只接三根线,现在发现RST信号接入后烧写更稳定了。
二、开环控制
你仍然可以阅读前面这篇文章,以获取更多详细的介绍,SimpleFOC移植STM32(二)—— 开环控制
本节代码下载:
链接:https://pan.baidu.com/s/1fIbr9iOqa6o2bjtmxomItg
提取码:s032
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(三)—— 角度读取
本节代码下载:
链接:https://pan.baidu.com/s/1H8QXir5xHRSATaT8x-CYJA
提取码:px5a
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/1GPAv8a7tvXiU7k94stga_A
提取码:4foc
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管特性调整偏移值,电机之间的干扰消失,转动平稳。
七、力矩反馈
- 力矩反馈的原理,配置两个电机为力矩模式,分别读取两个电机的角度,把角度差做为力矩目标值,所以只要有角度差就有运动,直到两个电机的角度一致。
- 自从两个月前改进了力矩反馈的代码后,电机三相线可以随便接,只要电机参数设置好,力矩反馈并无难点,不再赘述!
(完)
SimpleFOC移植STM32(七)—— 移植STM32F405RGT6相关推荐
- SimpleFOC移植STM32(八)—— 霍尔电机
目录 说明 一.霍尔电机 1.1.电机的种类 1.2.霍尔传感器 1.3.SimpleFOC的霍尔电机控制原理 二.电机驱动板103 2.1.读取霍尔角度 2.2.驱动霍尔电机M1 2.3.驱动霍尔电 ...
- SimpleFOC移植STM32(二)—— 开环控制
目录 注意事项 一.硬件介绍 1.1.硬件准备 1.1.1.SimpleMotor方案 1.1.2.SimpleFOCShield V2.0.3方案 1.2.硬件连接 1.2.1.原理图 1.2.2. ...
- SimpleFOC移植STM32(六)—— 双电机控制和力矩反馈
目录 一.说明 二.硬件介绍 2.1.原理图 2.2.准备清单 2.3.接线 三.程序演示 3.1.设置参数 3.2.编译下载 3.3.根据设置的控制模式操作 四.双电机控制总结 五.力矩反馈 5.1 ...
- SimpleFOC移植STM32(九)—— ABZ编码器电机
目录 说明 一.ABZ编码器介绍 1.1.ABZ信号 1.2.光电式编码器 1.3.磁编码器 1.4.差分信号 二.电机驱动板103 2.1.读ABZ信号的cpr 2.1.1.接线 2.1.2.编译, ...
- SimpleFOC移植STM32(三)—— 角度读取 (AS5600、AS5047P、TLE5012B、MA730、MT6701、ABZ)
目录 说明 一.硬件介绍 1.1.硬件准备 1.1.1.SimpleMotor方案 1.1.2.STM32方案 1.2.硬件连接 1.2.1.原理图 1.2.2.接线 二.代码编译下载 2.1.代码解 ...
- SimpleFOC移植STM32(五)—— 电流采样及其变换
目录 一.原理说明 1.1.电流采样 1.1.1.为什么要采样电流 1.1.2.电流采样方式 1.1.2.1.低侧电流采样 1.1.2.2.高侧电流采样 1.1.2.3.内置电流采样 1.2.电流变换 ...
- cebemax hal库 stm32 OLED移植 解析
cebemax hal库 stm32 OLED移植 序言: 这是一篇对于作者对于将OLED的驱动代码移植成hal库的文章,会有完整的过程,后面自然也会有完整的代码,希望能够帮到大家,同时也是做一个记录 ...
- ucOS_II移植:Stm32启动代码分析
用的编译工具是keil,在用keil建立stm32工程时,一般会产生一个启动文件,STM32F10x.s,在st提供的库函数里,用cortexm3_macro.s和stm32f10x_vector.s ...
- stm32移植paho_如何在STM32上移植Linux?超详细的实操经验分享
原标题:如何在STM32上移植Linux?超详细的实操经验分享 刚从硬件跳槽为嵌软时,没有任何一丝的准备.一入职,领导就交代了一项特难的任务--在stm32上移植linux! 瞬间我就懵了,没办法硬着 ...
最新文章
- 为什么我的Button文本被迫在Lollipop上全部大写?
- 开源开放是人工智能发展主要趋势之一
- Linux的Nginx六:源码|安装
- 自定义Java annotation及解析和使用
- 在JVM中记录世界停顿
- c++实现顺序表的相关操作
- C++中堆和栈的完全解析
- Java实现视频网站的视频上传、视频转码、视频关键帧抽图, 及视频播放功能
- 04-12 常见接口安全问题及解决方案
- 韩信点兵php,说说大脑的“同时性信息加工功能”
- CS61A第一章笔记
- 师范类大学计算机排名,2018中国师范类大学排行榜,北京师范大学第一
- 三堆竹子两棵树一个门
- 模块度(Modularity)与Fast Newman算法讲解与代码实现
- 人无自信当废人无自信而不立
- 【魔方攻略】镜面魔方教程(原创)
- 嵌入式硬件Linux,嵌入式linux硬件什么要求
- 面向6G的去中心化的人工智能理论与技术
- Android 卡顿优化 3 布局优化 工具 Hierarchy Viewer
- 现代通信原理A.2:FIR低通滤波器设计