我的订单购物车(0)联系客服 帮助中心供应商合作 嘉立创产业服务群
领券中心备货找料立推专区爆款推荐TI订货PLUS会员BOM配单PCB/SMT工业品面板定制

立创电赛展:《基于stm32G431CBU6的轻量FOC》,参赛赢2万现金!

2024-10-15 15:22:27阅读量:831

“盛思锐传感器”第九届立创电子设计开源大赛火热报名中,现在点击报名立创电赛赢2万现金大奖,报名后全阶段可触发福利!

  大赛网址:DIY.SZLCSC.COM

 

为了给大家些创作灵感,今天带来第八届立创电赛优胜奖项目-《基于stm32G431CBU6的轻量FOC》案例分享!本文作者:瑞萨MCU杯第八届立创电子设计开源大赛选手@常乐唯一驾专,禁止商用,未经许可禁止转载。

 

* 1、项目功能介绍


一直想写一套FOC控制电机,就借这个比赛的机会做了一版。虽然网上有很多FOC的开源项目了,但自己还是想学完原理自己写一个FOC驱动库.电机用的KV值小的云台电机,毕竟重点在学习FOC算法上。完成了位置,速度,电流闭环。同时完整推导了,svpwm发波。但工程并不完善,因为时间仓促,我们lcd那块有问题没有修,电机第二路也没有来得及写。然后就是算法上,电机运行起来和我想的有一些出入,这属于是理论欠缺了,后面再好好学一下自控再回头来解决。

 

*2、项目属性


项目为首次公开。硬件参考了samplefoc。

 

* 3、开源协议


该项目软硬件完全开源。

 

请在竞赛阶段填写 ↓

 

*4、硬件部分


注意:这个lcd屏幕虽然画了,当调的时候没用。因为焊上屏幕,给板子一供电就过流了。这也是这个工程不完整的地方(真的是准备时间不足啊)。

驱动板

 

LCD硬件原理图

 

用这块芯片做主控主要是因为它是QFN封装比较好看,而且比起同性能的来说更加便宜。

无线串口用的是逐飞的串口。打过智能车的友友应该都知道。

编码器板

 

编码器板原理图

 

用磁编码器检测电机转子位置需要在电机底部加径向磁铁,然后我们是做了3d打印座子(见附件)的,用来固定电机。

 

*5、软件部分


核心其实是合成360°任意位置的磁场去控制无刷电机。

 

磁场控制无刷电机

 

最好的情况就是上面的,合成磁场与转子垂直,这样就是磁场都用来拖动电机了.假如没有垂直,必然在转子上有分量,这个就会使得电机发热.所以说,我们就是需要不停去检测转子的实时位置,然后后生成超前90度的磁场去拖动电机.改变磁场大小就能控制电机的速度了.

那么既然要合成向量就不得不说两个变换,park变换和clark变换.这部分可以参考我之前写的一篇博客.

[电赛电力电子方向]基于DQ坐标系的锁相环-CSDN博客

 

1)spwm开环

首先拿到硬件最重要的就是先给他开环转起来。验证硬件是否有问题。我开始是用三相SPWM波去强拖的,具体用法就是开定时器,在定时器中断里修改pwm的crr来改变占空比。ccr按正弦变化,这个正弦波是每次在中断里更新的,就是你设定角频率欧米伽,中断里每次计算sin(wt)。t是逐渐累加上去的,就是每次进中断t+=Ts(定时器中期)。

 

SPWM

 

 

2)svpwm开环

当然我们FOC肯定是用svpwm波来控制的了.它其实但从生成上来说就是你生成360°任意一个角度,大小的向量.这部分我参考了下面up的视频.

Simple_FOC教程 一、原理部分_哔哩哔哩_bilibili

有了svpwm生成,我们就能开环运行了.还是和上面一样,在定时器中断里去更新时间t,然后wt就是现在的角度了.我们改变w就能调速.至于力矩,也就是期望的q轴电压直接程序去设定一个.改变它可以改变力矩.调的时候会发现,修改速度和力矩可以让电机较好的运行,而且比spwm开环要顺滑很多.

 

3)速度闭环

这里测速我们需要磁编码器去读角度,同时svpwm也需要一个角度.这里说一下电机极对数判断,以及计算磁编码器偏置.我们在程序中设定合成向量的角度为0.然后运行电机,电机就会转到0位置,然后旋转电机,它会在几个位置停留.停留几次就是几极对.然后选择一个0位置读出编码器的值就是偏置了。

然后速度闭环的话是pi控制器。pi控制器误差为期望速度与当前速度作差,输出q轴电压,然后送去svpwm发波。

 

4)位置闭环

位置闭环是p控制器,运行就是位置误差过p控制器输出速度环参考量,然后就和速度闭环一样了。我调的时候开始是位置环给了i,结果电机会来回震荡,这属于是自控的知识了。后面会深入学习一下。

 

5)电流闭环

首先我们要知道,三相电流正弦波是很难去直接控制的。所以我们就使用那两个变换去把三相正弦转换到dq坐标系下。理论上,d轴为0,q轴有电流,那么我们产生的这个向量就是只控制电机旋转的,而如果d不为0那么久有一部分能量去让电机发热了。这也是闭电流环的一个重要原因。

电流环是pi控制器。就是把三相电流做变换得到dq分量,然后dq分别做误差过pi控制器的到q轴和d轴的电压参考值。(注意,这里pi控制器输出的是电压)。

 

6)代码结构介绍

 

代码结构介绍

 

了cubemx生成的几个文件夹外,我还加了driver和user文件夹。就是一个放驱动,一个放应用文件。

open_loop里放的是spwm开环的相关函数。isr_callback里放中断回调函数.my_main里是系统初始化,与系统运行函数.就是下面在主函数调用的两个。

 

代码结构介绍

 

7)串口通信规范

  • 帧头:“$” (u8)

  • 指令位(发送方地址):2个u8 0-99个指令

  • 数据:任意长度

帧尾:"\n"(u8)

 如:

角度设定$04360\n    04代表这个指令是控制角度的,360就是设定电机转到360度。

 

8)上位机

我用的VOFA+,软件大家去官网下就行.配置json在下面的附件里。

上位机

 

上位机

 

 

上位机

 

添加table.json

 

上位机

 

在命令区域鼠标右键,添加命令组.起名FOC

 

 

上位机

 

在命令组里右键载入另一个json。

 

上位机

 

在命令控件右键绑定命令组.就按如下绑定。

 

 

上位机

 

 

*6、BOM清单


编码器

 

BOM清单

 

驱动

 

BOM清单

 

*7、大赛LOGO验证


 

大赛logo验证

 

 

* 8、演示您的项目并录制成视频上传


【第八届立创电赛】基于stm32的简易foc_哔哩哔哩_bilibili

更多详情:https://diy.szlcsc.com/posts/15a52db9fd7d40c492eb505280278e45

广告图片