目录

  • 说明
  • 一、点亮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相关推荐

  1. SimpleFOC移植STM32(八)—— 霍尔电机

    目录 说明 一.霍尔电机 1.1.电机的种类 1.2.霍尔传感器 1.3.SimpleFOC的霍尔电机控制原理 二.电机驱动板103 2.1.读取霍尔角度 2.2.驱动霍尔电机M1 2.3.驱动霍尔电 ...

  2. SimpleFOC移植STM32(二)—— 开环控制

    目录 注意事项 一.硬件介绍 1.1.硬件准备 1.1.1.SimpleMotor方案 1.1.2.SimpleFOCShield V2.0.3方案 1.2.硬件连接 1.2.1.原理图 1.2.2. ...

  3. SimpleFOC移植STM32(六)—— 双电机控制和力矩反馈

    目录 一.说明 二.硬件介绍 2.1.原理图 2.2.准备清单 2.3.接线 三.程序演示 3.1.设置参数 3.2.编译下载 3.3.根据设置的控制模式操作 四.双电机控制总结 五.力矩反馈 5.1 ...

  4. SimpleFOC移植STM32(九)—— ABZ编码器电机

    目录 说明 一.ABZ编码器介绍 1.1.ABZ信号 1.2.光电式编码器 1.3.磁编码器 1.4.差分信号 二.电机驱动板103 2.1.读ABZ信号的cpr 2.1.1.接线 2.1.2.编译, ...

  5. 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.代码解 ...

  6. SimpleFOC移植STM32(五)—— 电流采样及其变换

    目录 一.原理说明 1.1.电流采样 1.1.1.为什么要采样电流 1.1.2.电流采样方式 1.1.2.1.低侧电流采样 1.1.2.2.高侧电流采样 1.1.2.3.内置电流采样 1.2.电流变换 ...

  7. cebemax hal库 stm32 OLED移植 解析

    cebemax hal库 stm32 OLED移植 序言: 这是一篇对于作者对于将OLED的驱动代码移植成hal库的文章,会有完整的过程,后面自然也会有完整的代码,希望能够帮到大家,同时也是做一个记录 ...

  8. ucOS_II移植:Stm32启动代码分析

    用的编译工具是keil,在用keil建立stm32工程时,一般会产生一个启动文件,STM32F10x.s,在st提供的库函数里,用cortexm3_macro.s和stm32f10x_vector.s ...

  9. stm32移植paho_如何在STM32上移植Linux?超详细的实操经验分享

    原标题:如何在STM32上移植Linux?超详细的实操经验分享 刚从硬件跳槽为嵌软时,没有任何一丝的准备.一入职,领导就交代了一项特难的任务--在stm32上移植linux! 瞬间我就懵了,没办法硬着 ...

最新文章

  1. 为什么我的Button文本被迫在Lollipop上全部大写?
  2. 开源开放是人工智能发展主要趋势之一
  3. Linux的Nginx六:源码|安装
  4. 自定义Java annotation及解析和使用
  5. 在JVM中记录世界停顿
  6. c++实现顺序表的相关操作
  7. C++中堆和栈的完全解析
  8. Java实现视频网站的视频上传、视频转码、视频关键帧抽图, 及视频播放功能
  9. 04-12 常见接口安全问题及解决方案
  10. 韩信点兵php,说说大脑的“同时性信息加工功能”
  11. CS61A第一章笔记
  12. 师范类大学计算机排名,2018中国师范类大学排行榜,北京师范大学第一
  13. 三堆竹子两棵树一个门
  14. 模块度(Modularity)与Fast Newman算法讲解与代码实现
  15. 人无自信当废人无自信而不立
  16. 【魔方攻略】镜面魔方教程(原创)
  17. 嵌入式硬件Linux,嵌入式linux硬件什么要求
  18. 面向6G的去中心化的人工智能理论与技术
  19. Android 卡顿优化 3 布局优化 工具 Hierarchy Viewer
  20. 现代通信原理A.2:FIR低通滤波器设计

热门文章

  1. 工业云厚积薄发还缺什么?
  2. matlab车牌识别 复杂环境,基于MATLAB复杂背景车牌识别检测系统
  3. public static void main 参数解析
  4. 全国中小学教师计算机水平考试,全国中小学教师教育技术水平考试网
  5. LED灯具发光体电磁兼容EMC检测通过方法
  6. 解决苹果CMS采集后没有显示图片的问题
  7. 人工智能或重塑区域经济发展格局
  8. 学计算机比较出名的技校,中国最出名的8大技校 蓝翔技校仅排第三
  9. 3.3V与5V单片机通讯电路原理图
  10. C#+Midi 模拟各种乐器演奏