收藏官网,优惠快人一步
您可以尝试通过快捷键 CTRL + D 加入收藏夹
“盛思锐传感器”第九届立创电子设计开源大赛火热报名中,现在点击报名立创电赛赢2万现金大奖,报名后全阶段可触发福利!
大赛网址:DIY.SZLCSC.COM
为了给大家些创作灵感,今天带来第八届立创电赛优胜奖项目-《基于stm32G431CBU6的轻量FOC》案例分享!本文作者:瑞萨MCU杯第八届立创电子设计开源大赛选手@常乐唯一驾专,禁止商用,未经许可禁止转载。
一直想写一套FOC控制电机,就借这个比赛的机会做了一版。虽然网上有很多FOC的开源项目了,但自己还是想学完原理自己写一个FOC驱动库.电机用的KV值小的云台电机,毕竟重点在学习FOC算法上。完成了位置,速度,电流闭环。同时完整推导了,svpwm发波。但工程并不完善,因为时间仓促,我们lcd那块有问题没有修,电机第二路也没有来得及写。然后就是算法上,电机运行起来和我想的有一些出入,这属于是理论欠缺了,后面再好好学一下自控再回头来解决。
项目为首次公开。硬件参考了samplefoc。
该项目软硬件完全开源。
请在竞赛阶段填写 ↓
注意:这个lcd屏幕虽然画了,当调的时候没用。因为焊上屏幕,给板子一供电就过流了。这也是这个工程不完整的地方(真的是准备时间不足啊)。
驱动板
用这块芯片做主控主要是因为它是QFN封装比较好看,而且比起同性能的来说更加便宜。
无线串口用的是逐飞的串口。打过智能车的友友应该都知道。
编码器板
用磁编码器检测电机转子位置需要在电机底部加径向磁铁,然后我们是做了3d打印座子(见附件)的,用来固定电机。
核心其实是合成360°任意位置的磁场去控制无刷电机。
最好的情况就是上面的,合成磁场与转子垂直,这样就是磁场都用来拖动电机了.假如没有垂直,必然在转子上有分量,这个就会使得电机发热.所以说,我们就是需要不停去检测转子的实时位置,然后后生成超前90度的磁场去拖动电机.改变磁场大小就能控制电机的速度了.
那么既然要合成向量就不得不说两个变换,park变换和clark变换.这部分可以参考我之前写的一篇博客.
首先拿到硬件最重要的就是先给他开环转起来。验证硬件是否有问题。我开始是用三相SPWM波去强拖的,具体用法就是开定时器,在定时器中断里修改pwm的crr来改变占空比。ccr按正弦变化,这个正弦波是每次在中断里更新的,就是你设定角频率欧米伽,中断里每次计算sin(wt)。t是逐渐累加上去的,就是每次进中断t+=Ts(定时器中期)。
当然我们FOC肯定是用svpwm波来控制的了.它其实但从生成上来说就是你生成360°任意一个角度,大小的向量.这部分我参考了下面up的视频.
Simple_FOC教程 一、原理部分_哔哩哔哩_bilibili
有了svpwm生成,我们就能开环运行了.还是和上面一样,在定时器中断里去更新时间t,然后wt就是现在的角度了.我们改变w就能调速.至于力矩,也就是期望的q轴电压直接程序去设定一个.改变它可以改变力矩.调的时候会发现,修改速度和力矩可以让电机较好的运行,而且比spwm开环要顺滑很多.
这里测速我们需要磁编码器去读角度,同时svpwm也需要一个角度.这里说一下电机极对数判断,以及计算磁编码器偏置.我们在程序中设定合成向量的角度为0.然后运行电机,电机就会转到0位置,然后旋转电机,它会在几个位置停留.停留几次就是几极对.然后选择一个0位置读出编码器的值就是偏置了。
然后速度闭环的话是pi控制器。pi控制器误差为期望速度与当前速度作差,输出q轴电压,然后送去svpwm发波。
位置闭环是p控制器,运行就是位置误差过p控制器输出速度环参考量,然后就和速度闭环一样了。我调的时候开始是位置环给了i,结果电机会来回震荡,这属于是自控的知识了。后面会深入学习一下。
首先我们要知道,三相电流正弦波是很难去直接控制的。所以我们就使用那两个变换去把三相正弦转换到dq坐标系下。理论上,d轴为0,q轴有电流,那么我们产生的这个向量就是只控制电机旋转的,而如果d不为0那么久有一部分能量去让电机发热了。这也是闭电流环的一个重要原因。
电流环是pi控制器。就是把三相电流做变换得到dq分量,然后dq分别做误差过pi控制器的到q轴和d轴的电压参考值。(注意,这里pi控制器输出的是电压)。
除了cubemx生成的几个文件夹外,我还加了driver和user文件夹。就是一个放驱动,一个放应用文件。
open_loop里放的是spwm开环的相关函数。isr_callback里放中断回调函数.my_main里是系统初始化,与系统运行函数.就是下面在主函数调用的两个。
帧头:“$” (u8)
指令位(发送方地址):2个u8 0-99个指令
数据:任意长度
如:
角度设定$04360\n 04代表这个指令是控制角度的,360就是设定电机转到360度。
我用的VOFA+,软件大家去官网下就行.配置json在下面的附件里。
添加table.json
在命令区域鼠标右键,添加命令组.起名FOC
在命令组里右键载入另一个json。
在命令控件右键绑定命令组.就按如下绑定。
编码器
驱动
【第八届立创电赛】基于stm32的简易foc_哔哩哔哩_bilibili
更多详情:https://diy.szlcsc.com/posts/15a52db9fd7d40c492eb505280278e45
TPS5430DDAR/DC-DC电源芯片 | 1.17 | |
DS18B20+/温度传感器 | 4.54 | |
AD623ARZ-R7/仪表放大器 | 13.54 | |
STM32F030F4P6TR/单片机(MCU/MPU/SOC) | 2.21 | |
ULN2003ADR/达林顿晶体管阵列 | 0.3762 | |
STM32F103C8T6/单片机(MCU/MPU/SOC) | 4.24 | |
STM32F103VCT6/单片机(MCU/MPU/SOC) | 7.8 | |
STM32F103CBT6/单片机(MCU/MPU/SOC) | 6.27 | |
OP07CDR/精密运放 | 0.4075 | |
STM32G030F6P6TR/单片机(MCU/MPU/SOC) | 2.3 |
56万现货SKU
品类不断扩充中
科技智能大仓储
最快4小时发货
正品有保障
物料可追溯
明码标价节省时间
一站式采购元器件
您确定要删除此收货地址的吗?
您确定删除此收货地址吗?
content
content