SimpleFOC(七)——STM32(Bluepill)的应用


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

说明

  本文较长,内容较多,几乎把前几节Arduino UNO的例程重新演示一遍,为缩小篇幅,各示例演示步骤写的稍微粗略,大家可先熟悉前几节的关于simpleFOC的操作后再看本节。新手可分多次学习,循序渐进。

本文于2021.11.20更新,针对最新版的SimpleFOC库2.2.0测试,变化不大,需要修改的地方本节都有讲解。

本文于2021.9.2更新,
增加对新设计的电路板的支持,修改各个演示程序的IO口,使得本节示例可以同时在bluepill和SimpleMotor上运行。
在这里插入图片描述
SimpleMotor 购买链接:某宝购买

本文于2022.9.9更新,
经客户反馈,本章最大的问题PWM低频噪声问题已经解决,是因为STM32的库安装不对,使用官方库,simpleFOC示例都可以顺利演示。稍后会详细说明库的安装,并对本文做较大修改。向这位客户表示感谢!
在这里插入图片描述

一、Bluepill介绍

1.1、最小系统板

  以前淘宝上十二三块钱一个,非常便宜,至于为什么叫Bluepill,谁给起的这个名字就不清楚了。
在这里插入图片描述

1.2、下载模式说明

  Arduino IDE编译STM32有好几种程序下载模式,本篇以串口下载为例。
  如下图,Boot1始终接低电平0,Boot0接0时为正常工作模式,接1时为串口下载模式。
在这里插入图片描述
  如下图,本人测试时发现虽然Boot0接高电平,但不能进入串口下载模式,检查后发现是电阻阻值不匹配,R3R4应该是串联在Boot0和Boot1引脚的限流电阻,阻值过大,导致上拉无效不能进入串口下载模式,可更换为1K-10K范围的电阻。
在这里插入图片描述
  

二、STM32库文件安装

  • Arduino IDE兼容STM32主要有两种方法实现:
  • 一种是使用RogerClark的库,下载安装都比较方便,但是已经停更,兼容性 差。
  • 另一种是使用官方库,兼容性肯定没问题,但是安装稍微麻烦。
  • simpleFOC的代码是以官方库为基础,所以必须安装官方库。

2.1、添加链接

2.1.1、RogerClark的库不好用,不要使用

  https://github.com/rogerclarkmelbourne ,下载Arduino_STM32,这个是支持STM32开发板的硬件文件。
在这里插入图片描述

2.1.2、官方链接

有官方的安装说明:https://github.com/stm32duino/wiki/wiki/Getting-Started,
点击Arduino的 文件——>首选项,输入网址:https://github.com/stm32duino/BoardManagerFiles/raw/main/package_stmicroelectronics_index.json
在这里插入图片描述
但是,这个网址完全打不开,我试了一周从来都没有链接上。
网上有很多替代的网址,我试了一些,能用的有这个:https://github.ocrobot.com/down/stm32duino/package_stmicroelectronics_index.json,
偶尔也会打不开,多试几次还是可以的。
在这里插入图片描述
  

2.2、安装库文件

  • 打开开发板管理器
    在这里插入图片描述
  • 输入STM32,安装。
    注意,如果刚才的链接连不上,输入“STM32”是不能显示下面的库的。
    用官方库显示的跟这个似乎不太一样,网络条件好的建议用官方链接。
    在这里插入图片描述
    用这个库,I2C接口不能用,I2C1和I2C2都不能使用,I2C问题暂时搁置,20020910。

2.3、重新打开IDE

  关闭Arduino IDE后重新打开,会发现开发板增加许多类型,选择STM32F103C系列,
在这里插入图片描述

  • 先选择103系列,再选择bulepill
    在这里插入图片描述

2.4、选择上传方式为串口,并选择端口

如果用STlink下载,选择对应的配置
在这里插入图片描述

2.5、安装STM32CubeProgrammer

上一步的下载方式选择,无论哪种接口都多了一个 STM32CubeProgrammer,所以还要再安装这个软件,如果不安装等会下载会提示错误。

  • 去ST官网下载软件:https://www.st.com/en/development-tools/stm32cubeprog.html
    如果没有注册,还需要输入邮箱,有时候不能下载,需要多尝试几次。
    在这里插入图片描述
  • 下载后解压,安装。安装完成后会在桌面生成图标。
    在这里插入图片描述
      STM32的库文件安装完毕。

三、点亮LED

3.1、硬件准备

◆3.1.1、硬件清单

序号名称数量
1Bluepill1
2USB转串口1
35V电源1

在这里插入图片描述
  也可以直接从USB转TTL取电5V,不过这样有时会不稳定,所以最好用手机充电器外部供电。

3.1.2、硬件连接
在这里插入图片描述
或者
在这里插入图片描述

  

3.2、示例演示

◆3.2.1、选择STM32配置
在这里插入图片描述
◆3.2.2、打开示例
在这里插入图片描述
◆3.2.3、修改代码
在这里插入图片描述
◆3.2.4、连接最小系统板,boot0的跳线帽接高电平1,然后按下复位键,STM32进入串口下载模式,
在这里插入图片描述
◆3.2.5、验证上传
在这里插入图片描述
◆3.2.6、上传时留意是否上传成功。
在这里插入图片描述

◆3.2.7上传成功后,把boot0的跳线帽恢复到低电平0,然后按下复位键。观察LED是否每隔一秒亮灭一次,
在这里插入图片描述

四、I2C读取编码器

  
当前使用的库不支持I2C接口,不能读出角度,需要用STM32的官方库,以下演示为RogerClark的库实现。 20220910

4.1、硬件准备

◆4.1.1、硬件清单

序号名称数量
1Bluepill1
2USB转串口1
35V电源1
4带磁编码器的云台电机1

如下图所示:
在这里插入图片描述
带编码器电机购买链接:淘宝购买
  
◆4.1.2、硬件连接
本例程演示I2C_1读取AS5600角度,
在这里插入图片描述
编码器VCC接3.3V,
在这里插入图片描述
或者
在这里插入图片描述

  

4.2、示例演示

◆4.2.1、打开示例
在这里插入图片描述

◆4.2.2、编译上传;复位重启;转动电机观察角度输出。此时串口显示为电机累计转动角度(单位rad)和瞬时速度。
在这里插入图片描述

上面的这个截图是之前用RogerClark的库实现的,用当前库没有输出,经过反复确认是I2C初始化死机导致,调试了一天没能解决,还有下面的《双I2C读取编码器》,所有涉及I2C的地方都会死机,我推测大概还是库有问题,可能必须得用官方的。我测试了电机开环是可以转动的,并且确实没有低频噪声了,SPI编码器是正常的,ABZ接口没测试。问题暂时搁置 20220910

五、双I2C读取编码器

5.1、硬件准备

◆5.1.1、硬件清单

序号名称数量
1Bluepill1
2USB转串口1
35V电源1
4带磁编码器的云台电机2

如下图所示:
在这里插入图片描述

◆5.1.2、硬件连接
本例程演示两个硬件I2C的操作,I2C_1和I2C_2分别读取AS5600角度,
在这里插入图片描述

编码器VCC接3.3V,
在这里插入图片描述
或者
在这里插入图片描述

5.2、示例演示

◆5.2.1、打开示例
在这里插入图片描述

◆5.2.2、修改程序
直接用官方示例,下载运行后串口没有输出,并且板载LED一直闪烁,应该是程序跑飞了。官方程序不能直接用,也可能是创作者的版本和我的不一样。
在这里插入图片描述

◆5.2.3、编译上传;复位重启;分别转动两个电机观察角度输出。此时串口显示为两个电机的累计转动角度(单位rad)。
注意:主程序中有200ms延时,所以转动电机的时候速度不能太快,否则会导致角度累加错误。
在这里插入图片描述
  

六、Bluepill+V2.0.3+AS5600+2804云台电机


  本人在调试Bluepill的过程中主要遇到两个问题:
  ◆ 第一是I2C_2读写AS5600角度的问题,查找资料后很简单的就解决了,上面《双I2C读取编码器》;
  ◆ 第二是按照官方示例驱动电机时,电机会产生啸叫声并且控制精度非常低。查找原因发现PWM引脚输出频率只有550Hz,测试了几个示例都是同样的现象。通过对代码运行追踪,找到问题并修改底层驱动代码。
  本节实验涉及修改底层代码PWM输出。

6.1、硬件准备

◆6.1.1、硬件清单

序号名称数量
1Bluepill1
2SimpleFOCShield V2.0.31
3USB转串口1
4带磁编码器的云台电机1
55V电源1
612V电源1

如下图所示:
在这里插入图片描述

SimpleFOCShield V2.0.3购买链接:某宝购买
带编码器电机购买链接:某宝购买

◆6.1.2、硬件连接
在这里插入图片描述

在这里插入图片描述
或者
在这里插入图片描述

6.2、速度闭环模式

◆6.2.2、打开示例
在这里插入图片描述
◆6.2.3、修改代码
在这里插入图片描述
在这里插入图片描述

◆6.2.4、编译上传,设置电机速度,观察电机运转

6.3、位置闭环模式

◆6.3.1、打开示例
在这里插入图片描述
◆6.3.2、修改代码
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

◆6.3.3、编译上传,设置电机角度,观察电机运转。
电机初始化以后会突然转动一下,大概半圈或者一圈,这个是为了角度归零,这个问题已在《移植》中解决。

七、Bluepill双电机控制

7.1、硬件准备

◆7.1.1、硬件清单

序号名称数量
1Bluepill1
2SimpleFOCShield V2.0.32
3USB转串口1
4带磁编码器云台电机2
55V电源1
612V电源1

如下图所示:
在这里插入图片描述

SimpleFOCShield V2.0.3购买链接:淘宝购买
带编码器电机购买链接:淘宝购买
  
◆7.1.2、硬件连接
操作之前建议先看下《SimpleFOC(五)—— 双电机控制》这篇文章,
(1)、两个驱动板堆叠连接,背面跳线,M1接9、5、6、8,M2接3、10、11、7。
在这里插入图片描述

(2)、驱动板引脚定义
在这里插入图片描述

(3)、Bluepill接线
在这里插入图片描述
(4)、接线
两个编码器AS5600接3.3V,Bluepill和驱动板之间要共地,
在这里插入图片描述
或者
在这里插入图片描述

7.2、双电机速度闭环模式

◆7.2.1、打开示例
在这里插入图片描述
◆7.2.2、修改代码
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
◆7.2.3、编译上传,串口设置指令,观察电机运转。
指令“A”表示电机1,指令“B”表示电机2,比如设置电机1速度为10rad/s:A10,设置电机2速度为20rad/s:B20。

双电机控制演示视频(bluepill):https://www.bilibili.com/video/BV1Wy4y1g7Ly/
双电机控制演示视频(SimpleMotor):https://www.bilibili.com/video/BV1Mh411s7oY/
双电机控制演示视频(不修改底层代码,电机有啸叫声):https://www.bilibili.com/video/BV1ab4y117nT/

八、SPI读取编码器

8.1、硬件准备

◆8.1.1、硬件清单

序号名称数量
1Bluepill1
2USB转串口1
35V电源1
4带AS5047P的云台电机1

如下图所示:
在这里插入图片描述

◆8.1.2、AS5047P介绍
- 14bit精度
- ABI接口输出最高1000ppr
- 最高支持28Krpm转速
在这里插入图片描述

◆8.1.3、硬件连接
在这里插入图片描述

编码器VCC接3.3V,
在这里插入图片描述

8.2、示例演示

◆8.2.1、打开示例
在这里插入图片描述
◆8.2.2、修改程序
在这里插入图片描述
◆8.2.3、编译上传;复位重启;转动电机观察角度输出。
此时串口显示为电机累计转动角度(单位rad)和瞬时速度。
在这里插入图片描述
实际测试,AS5047P读出角度波动比较大,性能与价格非常不匹配,在当前芯片紧缺的背景下,这很有可能是A货,用这款芯片一定要保证货源

九、Bluepill+PowerShield V0.2+AS5047P+5010大电机

9.1硬件准备

◆9.1.1、硬件清单

序号名称数量
1Bluepill1
2PowerShield V0.21
3USB转串口1
4AS5047P电机1
55V电源1
624V电源1

如下图所示:
在这里插入图片描述
带编码器电机购买链接:淘宝购买

◆9.1.2、硬件连接
⑴AS5047P的VCC接3.3V,
⑵PB6/PB7/PB8分别接在PowerShield V0.2的5/9/6引脚,
⑶PB5做为使能控制,用1转3的排线接在PowerShield V0.2的4/7/8引脚,
关于PowerShield V0.2的详细介绍请看《SimpleFOC(六)—— PowerShield和AS5047P》,
在这里插入图片描述
在这里插入图片描述

先不要着急给24V上电,使用大功率电机,一定要非常小心!

9.2速度闭环模式

◆9.2.1、打开示例
在这里插入图片描述
◆9.2.2、修改代码
在这里插入图片描述
在这里插入图片描述
◆9.2.3、编译上传,设置电机转速,观察电机运行。

速度闭环模式的演示视频:https://www.bilibili.com/video/BV1ow411d76a/

9.3位置闭环模式

◆9.3.1、打开示例
在这里插入图片描述
◆9.3.2、修改代码
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
◆9.3.3、编译上传,设置角度,观察电机运转。

位置闭环模式的演示视频:https://www.bilibili.com/video/BV1XU4y157kV/

我感觉效果不是很好,有点转不到位的样子,不知道是PID参数设置的不合适还是因为PWM不能设置中央对齐模式。

写后感

这篇文章太长了,程序上还有难点,花费了将近一个月的时间。
有人觉得用keil就够了,用Arduino IDE调试STM32多此一举,而且从调试的过程来看,Arduino IDE对STM32的兼容做的也不够好。但是我觉得用C++编写单片机代码的理念很先进,应该是未来的发展方向。

(完)


欢迎加入simpleFOC技术交流群:923734429 群已满根据提示添加新群 (入群申请写:CSDN)

请继续阅读相关文章:
SimpleFOC(一)—— 简介(附有文件下载链接)
SimpleFOC(二)—— 快速入门 (开环控制)
SimpleFOC(三)—— AS5600角度读取
SimpleFOC(四)—— 闭环控制
SimpleFOC(五)—— 双电机控制
SimpleFOC(六)—— PowerShield和AS5047P
SimpleFOC(七)——STM32(Bluepill)的应用
SimpleFOC(八)—— 理论+实践 深度分析SVPWM
SimpleFOC(九)—— 霍尔电机控制

评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值