完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本文较长,内容较多,几乎把前几节Arduino UNO的例程重新演示一遍,为缩小篇幅,各示例演示步骤写的稍微粗略,大家可先熟悉前几节的关于simpleFOC的操作后再看本节。新手可分多次学习,循序渐进。
一、Bluepill介绍 1.1、最小系统板 以前淘宝上十二三块钱一个,非常便宜,至于为什么叫Bluepill,谁给起的这个名字就不清楚了。 1.2、下载模式说明 Arduino IDE编译STM32有好几种程序下载模式,本篇以串口下载为例。 如下图,Boot1始终接低电平0,Boot0接0时为正常工作模式,接1时为串口下载模式。 如下图,本人测试时发现虽然Boot0接高电平,但不能进入串口下载模式,检查后发现是电阻阻值不匹配,R3R4应该是串联在Boot0和Boot1引脚的限流电阻,阻值过大,导致上拉无效不能进入串口下载模式,可更换为1K-10K范围的电阻。 二、软件安装 Arduino IDE兼容STM32有多种方法可以实现,以下为本人最熟悉的一种, 2.1、安装库文件和示例 下载Arduino_STM32,这个是支持STM32开发板的硬件文件。 2.2、放入安装文件夹 下载后解压,修改文件名为“Arduino_STM32”放到Arduino IDE的安装文件下, 2.3、重新打开IDE 关闭Arduino IDE后重新打开,会发现开发板增加许多类型,选择STM32F103C系列, 2.4、选择上传方式为串口 注意上面这两步的配置,本节之后的所有程序都会在这两个配置下演示。 2.5、安装编译器 以上安装好了示例和库文件,下面安装编译器。点击 工具—》开发板—》开发板管理器, 2.6、安装SAM 什么是SAM?SAM是Arduino上使用的微控制器的体系结构,为使用SAM体系结构微控制器的Arduino板提供支持的软件包称为“Arduino SAM板”。由下图可以看出SAM应该是支持Cortex-M3的软件包。 等待安装完毕,STM32的编译器和库文件就全部安装好了。 三、点亮LED 3.1、硬件准备 ◆3.1.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读取编码器 4.1、硬件准备 ◆4.1.2、硬件连接 本例程演示I2C_1读取AS5600角度, 编码器VCC接3.3V, 4.2、示例演示 ◆4.2.1、打开示例 ◆4.2.2、先确定 “工具—》开发板”为“Generic STM32F103C8T series”;编译后会报错,提示SDA和SCL没有定义,打开提示错误的文件“MagneticSensorI2C.h”(提示中包含这个文件的路径),简单修改如下: 修改后可永久保留,再编译Arduino UNO好像不受影响。 ◆4.2.3、再编译上传;复位重启;转动电机观察角度输出。此时串口显示为电机累计转动角度(单位rad)和瞬时速度。 五、双I2C读取编码器 5.1、硬件准备 ◆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延时,所以转动电机的时候速度不能太快,否则会导致角度累加错误。 六、SPI读取编码器 6.1、硬件准备 ◆6.1.1、硬件清单 ◆6.1.2、硬件连接 编码器VCC接3.3V, 6.2、示例演示 ◆6.2.1、打开示例 ◆6.2.2、修改程序 ◆6.2.3、编译上传;复位重启;转动电机观察角度输出。此时串口显示为电机累计转动角度(单位rad)和瞬时速度。 七、PWM输出 本人在调试Bluepill的过程中主要遇到两个问题: 第一是I2C_2读写AS5600角度的问题,查找资料后很简单的就解决了,上面第五节《双I2C读取编码器》; 第二是按照官方示例驱动电机时,电机会产生啸叫声并且控制精度非常低。查找原因发现PWM引脚输出频率只有550Hz,测试了几个示例都是同样的现象。通过对代码运行追踪,找到问题并修改底层驱动代码。 本节实验演示如何修改PWM输出频率。 7.1、硬件准备 ◆7.1.1、硬件清单 ◆7.1.2、硬件连接 7.2、示例演示 ◆7.2.1、打开示例 ◆7.2.2、参考程序 本节示例只是提供操作PWM的参考,并不能直接在此基础上修改,甚至编译都不能通过,所以只能理解代码后重写一个。 ◆7.2.3、新建项目,写代码 void setup() { pinMode(PC13, OUTPUT); pinMode(PB6, PWM); pinMode(PB7, PWM); pinMode(PB8, PWM); Timer4.pause(); Timer4.setPrescaleFactor(8); // 72/8=9MHz Timer4.setCompare(TIMER_CH1, 179); //%50 Timer4.setCompare(TIMER_CH2, 0); Timer4.setCompare(TIMER_CH3, 0); Timer4.setOverflow(359); //9M/360=25kHz Timer4.refresh(); Timer4.resume(); } void loop() { digitalWrite(PC13, HIGH);// Turn the LED from off to on, or on to off delay(1000); pwmWrite(PB7, 179); //50% digitalWrite(PC13, LOW);// delay(1000); pwmWrite(PB7, 35); //%10 ◆7.2.4、编译上传,示波器查看输出波形, 八、Bluepill+simpleFOCShield V2.0.3+AS5600+2804云台电机 8.1、硬件准备 8.1.1、硬件清单 ◆8.1.2、硬件连接 8.2、速度闭环模式 ◆8.2.1、修改底层代码 按照之前经验,直接在示例上修改为Bluepill应用,但是电机运行效果非常差,示波器查看PWM,频率只有550Hz(72M/2/65536);用示例bluepill_position_control,也是同样的问题;连专门针对bluepill的示例都有问题,我怀疑是文件版本不对,仔细看了创造者的文档,没有发现关于bluepill的特别说明。总之当前的问题应该在PWM操作上。 ⑴、在Arudino IDE中安装simpleFOC的标准库以后,库文件和示例默认安装在“文档”文件夹, ⑵、跟踪PWM的初始化函数“driver.init(); ”程序并没有按照预期的调用“stm32_mcu.cpp”中的子程序,而是调用了”generic_mcu.cpp”中的子程序,可以看到_configure3PWM函数中什么都没有做, 路径:此电脑文档ArduinolibrariesSimple_FOCsrcdrivershardware_specific ⑶、在“generic_mcu.cpp”修改这两个地方, pinMode(PB6, PWM); pinMode(PB7, PWM); pinMode(PB8, PWM); Timer4.pause(); Timer4.setPrescaleFactor(8); // 72/8=9MHz Timer4.setCompare(TIMER_CH1, 0); Timer4.setCompare(TIMER_CH2, 0); Timer4.setCompare(TIMER_CH3, 0); Timer4.setOverflow(359); //9M/360=25kHz Timer4.refresh(); Timer4.resume(); pwmWrite(pinA, 360.0*dc_a); pwmWrite(pinB, 360.0*dc_b); pwmWrite(pinC, 360.0*dc_c); ⑷、保存后关闭,底层代码修改完毕。 ⑸、电机控制应该是PWM中央对齐模式,但是找到最最底层也没有这个设置,所以暂且这样用着, ◆8.2.2、打开示例 ◆8.2.3、修改代码 ◆8.2.4、编译上传,设置电机速度,观察电机运转 8.3、位置闭环模式 ◆8.3.1、打开示例 ◆8.3.2、修改代码 ◆8.3.3、编译上传,设置电机角度,观察电机运转 九、Bluepill双电机控制 9.1、硬件准备 ◆9.1.1、硬件清单 ◆9.1.2、硬件连接 两个编码器AS5600接3.3V,Bluepill和驱动板之间要共地, 9.2、双电机速度闭环模式 ◆9.2.1、修改底层代码 void _configure3PWM(long pwm_frequency,const int pinA, const int pinB, const int pinC) { pinMode(PA0, PWM); pinMode(PA1, PWM); pinMode(PA2, PWM); Timer2.pause(); Timer2.setPrescaleFactor(8); // 72/8=9MHz Timer2.setCompare(TIMER_CH1, 0); Timer2.setCompare(TIMER_CH2, 0); Timer2.setCompare(TIMER_CH3, 0); Timer2.setOverflow(359); //9M/360=25kHz Timer2.refresh(); Timer2.resume(); pinMode(PA6, PWM); pinMode(PA7, PWM); pinMode(PB0, PWM); Timer3.pause(); Timer3.setPrescaleFactor(8); // 72/8=9MHz Timer3.setCompare(TIMER_CH1, 0); Timer3.setCompare(TIMER_CH2, 0); Timer3.setCompare(TIMER_CH3, 0); Timer3.setOverflow(359); //9M/360=25kHz Timer3.refresh(); Timer3.resume(); /* pinMode(PB6, PWM); pinMode(PB7, PWM); pinMode(PB8, PWM); Timer4.pause(); Timer4.setPrescaleFactor(8); // 72/8=9MHz Timer4.setCompare(TIMER_CH1, 0); Timer4.setCompare(TIMER_CH2, 0); Timer4.setCompare(TIMER_CH3, 0); Timer4.setOverflow(359); //9M/360=25kHz Timer4.refresh(); Timer4.resume(); */ return; } ◆9.2.2、打开示例 ◆9.2.3、修改代码 ◆9.2.4、编译上传,串口设置指令,观察电机运转。 指令“A”表示电机1,指令“B”表示电机2,比如设置电机1速度为10rad/s:A10,设置电机2速度为20rad/s:B20。 十、Bluepill+PowerShield V0.2+AS5047P+5010大电机 10.1硬件准备 ◆10.1.1、硬件清单 ◆10.1.2、硬件连接 ⑴AS5047P的VCC接3.3V, ⑵PB6/PB7/PB8分别接在PowerShield V0.2的9/5/6引脚, ⑶PB5做为使能控制,用1转3的排线接在PowerShield V0.2的4/7/8引脚, 关于PowerShield V0.2的详细介绍请看《SimpleFOC(六)—— PowerShield和AS5047P》, 10.2速度闭环模式 ◆10.2.1、修改底层代码 路径:此电脑文档ArduinolibrariesSimple_FOCsrcdrivershardware_specificgeneric_mcu.cpp 参考上面第八节的方法 ◆10.2.2、打开示例 ◆10.2.3、修改代码 ◆10.2.4、编译上传,设置电机转速,观察电机运行。 10.3位置闭环模式 ◆10.3.1、打开示例 ◆10.3.2、修改代码 ◆10.3.3、编译上传,设置角度,观察电机运转。 我感觉效果不是很好,有点转不到位的样子,不知道是PID参数设置的不合适还是因为PWM不能设置中央对齐模式。 写后感 这篇文章太长了,程序上还有难点,花费了将近一个月的时间。 有人觉得用keil就够了,用Arduino IDE调试STM32多此一举,而且从调试的过程来看,Arduino IDE对STM32的兼容做的也不够好。但是我觉得用C++编写单片机代码的理念很先进,应该是未来的发展方向。 ( |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1617 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1543 浏览 1 评论
977 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
683 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1595 浏览 2 评论
1863浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
644浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
515浏览 3评论
531浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
504浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 04:53 , Processed in 0.671870 second(s), Total 74, Slave 57 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号