电子工程师技术服务社区
公告
登录
|
注册
首页
技术问答
厂商活动
正点原子
板卡试用
资源库
下载
文章
社区首页
文章
【电机矢量控制】BLDC方波电流环PID整定方案
分 享
扫描二维码分享
【电机矢量控制】BLDC方波电流环PID整定方案
电流环
PID
BLDC
KVIN
关注
发布时间: 2019-09-09
丨
阅读: 4314
# 前言 最开始做BLDC驱动器,用STM32F030,CUBEMX,第一阶段就用最简单的六步法开环控制电机,第一阶段的重点是各种保护,保证驱动器在各种恶略环境下不会坏,包括电压保护,电流保护,短路保护等等在这个阶段重点做了短路保护,也就是瞬时电流保护,最终的效果是:我们直接拿导线短路了一天电机,驱动器仍然没有坏,效果还是不错的。计划的第二阶段是做方波的双闭环,第三阶段是做FOC。老实说,之前是没有了解过电机三环的,果然不出所料,又卡壳了很久,在被总监指导(训斥)了一波之后,重新理一下思路与过程。 ------------ 首先是建立simlink模型,在建立simlink模型之前,首先要搞清楚模型对象,是BLDC电机,三相无刷直流电机,我最开始是以为照着三相电机的模型建,原谅我大学学的不好,当时只知道撸代码,自控这些啥都不会啊,只记得电机控制好像是电力传动控制那本书里面的,下了个电力传动控制的电子书,先复习(预习)一下,我下载的是陈伯时老师的《电力拖动自动控制系统》,在花了两天时间把这本书翻了一遍之后,发现里面并没有直接的BLDC的模型啊,这下子不就抄不了了吗?再仔细思考,结合我的驱动器电路,由于驱动器采样电阻只有总回路的电阻,而且我这个是六步法控制的BLDC,虽然是三相,但是每一步状态的CCR的值(PWM的值)是固定的,这可以按照直流电机的模型建立一个总回路的电流环。在问了总监的意见之后,似乎是可以的,然后就开始建模。 做这个时,simlink我是不了解的,之前只是听说过有这个东西,实际就看同学里面喜欢搞控制算法的人用过。额,,,再次原谅我的无知,那就开始simlink的熟悉吧,在看了网上一个100多页ppt的 simlink的基本操作之后,开始照着画模型了。参考的陈老师的模型是这样的(只能大概能看懂老师的思路): ![](https://cf04.ickimg.com/bbsimages/201909/bd2af145d13cf35b61793a0488d4debd.png) ![](https://cf04.ickimg.com/bbsimages/201909/b7016a10ef8dbf3de770c8ccba87c0c7.png) 这里,把电流内环单独拉出来,分析一波: ![](https://cf04.ickimg.com/bbsimages/201909/adf51bd6f47d09c180694e95cbe8a970.png) 忽略图中的一些参数变化,因为我换了电机,把电流环单独拉出来之后,首先要将闭环去掉,分析模型的开环特性,将波特图打印出来。 ![](https://cf04.ickimg.com/bbsimages/201909/2ec870cc70bfca090c15af3b740a9ba3.png) 在这里要说一下,我用的matlab版本是2016a,当时找波特图找了很久,在网上搜索simlink画波特图之类的,都找到的是2008左右版本matlab的方法,到2016位置都变了,当时终于是在一篇大佬的论文里面找到了怎么搞出来波特图,很尴尬。 第一步:保证模型书输入为In,输出为out,如图所示: ![](https://cf04.ickimg.com/bbsimages/201909/13db8cd6d994f86efe9a4048ffe81d4b.png) 第二步: ![](https://cf04.ickimg.com/bbsimages/201909/23f5699b44cd4009630311635ed6754c.png) 第三步: ![](https://cf04.ickimg.com/bbsimages/201909/42ae9e93276f0e2b266a3a431f76bb3e.png) 第四步: ![](https://cf04.ickimg.com/bbsimages/201909/0ce4714f734225aa927f6c53b64f93c0.png) 出来的波特图如下: ![](https://cf04.ickimg.com/bbsimages/201909/5da3d276b859bc7a103fbf563d8bd4a7.png) 最开始,我对于波特图分析也是一脸懵逼的,后面在总监的指导(这次真的是指导)下,明白,我们这个模型波特图走向,最开始是平的,后面在高频阶段,会朝下走,这是由于两个传递函数的影响,而我们加入PID调节器的作用,就是把开环模型的波特图修正为大概这个样子: ![](https://cf04.ickimg.com/bbsimages/201909/e37f2b1af5c78bbb126d0ed71fc7314e.png) 至于修正方法大约是这样子的,PID调节器里面,Ki的值会作用在低频段,也就是之前波形里面比较平的那一段,Kd的值会作用在高频的那一段,至于Kp,当然是作用在过零点那里,会控制整个波形上下平移,而过零点也就是带宽,要控制带宽频率跟实际驱动器的控制频率差不多,例如实际驱动器电流环的周期是4ms,那带宽就调到200多。 在建立PID模型的时候,我参考了https://www.cnblogs.com/cjq0301/p/5184808.html 这位大神的博客,这里直接截取出来吧: ![](https://cf04.ickimg.com/bbsimages/201909/61c44399156e568185f77fbd66e154c9.png) 实际我的模型之中加入PID环节,就变成了这个样子: ![](https://cf04.ickimg.com/bbsimages/201909/43f5fa3239da12de2cb3d09263fe2e99.png) 在调了一波参数之后,他的波特图就是这样的: ![](https://cf04.ickimg.com/bbsimages/201909/baf68051881fc14307e0e265795ef7ac.png) 在实际撸代码的时候,参考的依旧是上面那篇博客: ![](https://cf04.ickimg.com/bbsimages/201909/907871efbe416175c9aae3dd178e69ab.png) 在把实际STM32的代码撸出来之后,再把MATLAB仿真的参数填上,然后就是令人激动的时刻,没错,肯定是不行的。哈哈哈。当然,不是我们的步骤有问题(有大神指正当然更好)。是因为电流采样环节出了问题,控制BLDC(在没有上FOC的情况下),控制它实际还是取决于PWM,但是一个完整的PWM周期,有高电平,也有低电平,在高电平的时候进行采样,肯定是正确的,但是如果刚好就是在低电平的时候,触发了电流采样,那就有问题了,当然,也有一个原因是我们是要上电流闭环,因此电流采样的实时性要求高一些,因此就要考虑完整,把PWM也考虑进去。 考虑到这些之后,就要找解决办法啦,此时ADC就不能仅仅是DMA采集就行了,要配置触发模式,使用另外一个定时器去触发ADC功能,然后在PWM高电平的中间进行一次采样,我实际是用TIM1来进行PWM的产生,那么就可以用TIM15来跟TIM1进行同步,CCR寄存器的值一直保持跟TIM1的CCR成二分之一的关系就可以了,当然也要判断TIM1的CCR的值太小的话就给TIM15一个固定的值。这个同步信号可以使用COM事件,因为六步法本身就是使用COM事件来实现的,COM事件的定时器为TIM3,那么就把TIM15跟TIM3配置成主从模式就可以。 有关于电流采样的ADC配置问题,请参考我之前的文章,关于ADC电流采样会详细说明。 以上方案如有问题,欢迎指正,当然,也只是一个参考方案,具体项目具体分析,最终的PID参数还是靠调出来的。关于电流环,还有很多东西需要探究。
原创作品,未经权利人授权禁止转载。详情见
转载须知
。
举报文章
点赞
(
1
)
KVIN
关注
评论
(0)
登录后可评论,请
登录
或
注册
相关文章推荐
MK-米客方德推出工业级存储卡
Beetle ESP32 C3 蓝牙数据收发
Beetle ESP32 C3 wifi联网获取实时天气信息
开箱测评Beetle ESP32-C3 (RISC-V芯片)模块
正点原子数控电源DP100测评
DP100试用评测-----开箱+初体验
Beetle ESP32 C3环境搭建
【花雕体验】16 使用Beetle ESP32 C3控制8X32位WS2812硬屏之二
X
你的打赏是对原创作者最大的认可
请选择打赏IC币的数量,一经提交无法退回 !
100IC币
500IC币
1000IC币
自定义
IC币
确定
X
提交成功 ! 谢谢您的支持
返回
我要举报该内容理由
×
广告及垃圾信息
抄袭或未经授权
其它举报理由
请输入您举报的理由(50字以内)
取消
提交