qq490455545 发表于 2013-8-13 17:59:44

基于STM32的直流无刷电机(BLDC)双环(速度+电流)控制.

本帖最后由 qq490455545 于 2013-8-13 19:25 编辑

附件是我自己写的一个基于STM32的无刷电机驱动程序,现在遇到了一下问题,求助各位高手,我写的这个程序单速度环没有问题,完全能稳定转速在+-5转,但是电流环做的不好,在堵转电机时会出现要么超调震荡,要么PI调节太软容易堵死,始终不能调节到一个合适的PI。本程序也适合新手学习无刷电机,因为本身自己也是接触不久,写的不怎么地道。欢迎大家交流学习。并希望高手不吝赐教。
哦我的程序是基于IAR的,PWM载波频率为8K,方波控制。

程序中的文档介绍:
打开解压文件有三个文件夹:
1、EWARM文件夹。放的是工程文件以及工程输出文件,如:各种.o和.out等。
2、library文件夹。放的是IAR用到的库文件和库函数,使用3.5版的库函数。
3、usr文件夹。放的是自己写的程序文件。

在usr下有两个目录:
1、inc;放的是头文件。
2、src;.c文件

重点文件介绍:
inc中的com_ram.h是整个程序中的变量、宏定义等的定义文件,都能在这个文件找到。
src中的
1、filter_con.c是滤波模块函数,采样一个队列数据结构写的,属于滑窗滤波,基本上不要损耗时间能够达到平均滤波效果,而且可以多用。
2、motor_pwm.c是电机控制的主要文件,里面包含电机换相、电流采样、速度采样等。
3、PIDcon.c是PID算法,SPid是速度环结构体变量、CPid是电流环结构体变量
4、sys_hardware_ini.c是整个程序的初始化函数,包含RCC、TIM1、TIM2、TIM3、ADC+DMA、中断函数优先级设置等。
5、stm32f10x_it.c是中断处理函数。

本程序是使用TIM3定时器作为HOLL捕获,TIM3的3个输入配置为XOR门,当任意输入变化,就会被捕获产生中断。TIM3的1通道配置为输入捕获,2通道配置为PWM2模式,并选择OC2REF作为TRGO触发TIM1输出载波。
这是官方芯片手册上推荐使用的方法,但是考虑到换相延时,就只拿这种方式用来获取速度和位置量。
ADC是采样单次触发扫描方式,跟随载波软件触发采样,我使用的驱动板是3相电流采样,处理方式是分时处理。

qq490455545 发表于 2013-8-13 18:04:12

本帖最后由 qq490455545 于 2013-8-13 18:09 编辑

还有示波器的波形分析

qq490455545 发表于 2013-8-13 19:02:06

这张图上的电流明显看出在换相时刻出现异常,电流下降太快,原因是换相时刻有50~100us的下桥间隙,导致电流通过上桥续流二极管到达母线,对母线充电

qq490455545 发表于 2013-8-13 19:04:22

本帖最后由 qq490455545 于 2013-8-13 19:05 编辑

这是对上面问题的补充,可以看到实际测得的图像,确实在换相时刻有57us的空隙。绿色线是W相相电流,黄色和红色分别是U相和V相下桥载波。

qq490455545 发表于 2013-8-13 19:06:24

没人来吗?我在玩单机?

kmani 发表于 2013-8-13 20:46:13

qq490455545 发表于 2013-8-13 19:06 static/image/common/back.gif
没人来吗?我在玩单机?

楼主你的电机有转速传感器吗?
你用的电阻还是霍尔测的电流呢?

dxgdsx 发表于 2013-8-13 21:55:20

楼主用的什么驱动电路?用的驱动芯片还是分立元件?

qq490455545 发表于 2013-8-13 22:01:51

kmani 发表于 2013-8-13 20:46 static/image/common/back.gif
楼主你的电机有转速传感器吗?
你用的电阻还是霍尔测的电流呢?

电机是内部有位置传感器的,用的是电流传感器,电流传感器内部是霍尔实现的

qq490455545 发表于 2013-8-13 22:02:41

dxgdsx 发表于 2013-8-13 21:55 static/image/common/back.gif
楼主用的什么驱动电路?用的驱动芯片还是分立元件?

用的是IPM模块驱动电机。

dxgdsx 发表于 2013-8-13 22:07:12

qq490455545 发表于 2013-8-13 22:02 static/image/common/back.gif
用的是IPM模块驱动电机。

呃,好高端。我还是用的IR2130。

qq490455545 发表于 2013-8-13 22:10:46

dxgdsx 发表于 2013-8-13 22:07 static/image/common/back.gif
呃,好高端。我还是用的IR2130。

这也不见得就高端,只是产品设计角度考虑的

wajlh 发表于 2013-8-13 22:15:41

楼主示波器不错

qq490455545 发表于 2013-8-13 22:17:38

wajlh 发表于 2013-8-13 22:15 static/image/common/back.gif
楼主示波器不错

公司的,好用~

dxgdsx 发表于 2013-8-13 22:19:11

本帖最后由 dxgdsx 于 2013-8-13 22:20 编辑


请教楼主如何通过转速PID得到参考电流?实际中依据什么原则?

qq490455545 发表于 2013-8-13 22:27:49

dxgdsx 发表于 2013-8-13 22:19 static/image/common/back.gif
请教楼主如何通过转速PID得到参考电流?实际中依据什么原则?

我其实也不懂。这个问题留待大神回答了,不过我是这么用的,速度环的输出,作为电流环的设定值,电流采样值作为电流环的采样值。

dxgdsx 发表于 2013-8-13 22:30:15

qq490455545 发表于 2013-8-13 22:27 static/image/common/back.gif
我其实也不懂。这个问题留待大神回答了,不过我是这么用的,速度环的输出,作为电流环的设定值,电流采样 ...

我之前是这样做的,转速做PI控制,电流只做限幅控制。

823032003 发表于 2013-8-13 22:38:57

dxgdsx 发表于 2013-8-13 22:19 static/image/common/back.gif
请教楼主如何通过转速PID得到参考电流?实际中依据什么原则?

调节转速,需要用加速度,即扭矩。
在BLDC中,扭矩和电流成正比
供参考

823032003 发表于 2013-8-13 22:40:15

LZ这种双环的系统,一般先调内环,想办法加负载,先把内环调好(动态,稳态)。

dxgdsx 发表于 2013-8-13 22:41:44

823032003 发表于 2013-8-13 22:38 static/image/common/back.gif
调节转速,需要用加速度,即扭矩。
在BLDC中,扭矩和电流成正比
供参考

也就是说电流和转子的加速度相关。怪不得在堵转的电流很大,发烫。

qq490455545 发表于 2013-8-14 08:34:23

823032003 发表于 2013-8-13 22:40 static/image/common/back.gif
LZ这种双环的系统,一般先调内环,想办法加负载,先把内环调好(动态,稳态)。 ...

我也尝试做了单电流环,只是没负载,用手堵转电机这样做的,发现不论怎么调都不能起到很好的效果,要么PI大了现象就是一捏捏不死,但是捏死了就出现震荡,一冲一冲,不能稳定输出电流。要么就是PI小了,一捏就死,从示波器上看电流波形就是阶梯减小。郁闷的很。

K.O.Carnivist 发表于 2013-8-16 18:49:10

qq490455545 发表于 2013-8-14 08:34 static/image/common/back.gif
我也尝试做了单电流环,只是没负载,用手堵转电机这样做的,发现不论怎么调都不能起到很好的效果,要么P ...

内环还是要单独调好的,哪怕单一个P调节也行,不然就干脆不要电流环了直接单闭环。如果把电机捏死都不能出平稳的电流的话,可以看一下这时候的电流波形,看看是不是PWM频率太低了。

kmani 发表于 2013-8-16 23:07:23

823032003 发表于 2013-8-13 22:40 static/image/common/back.gif
LZ这种双环的系统,一般先调内环,想办法加负载,先把内环调好(动态,稳态)。 ...

尼美根星球的大侠,地球生活还可以吧。等哪天地球不行了,你带我去你的星球..
我也觉得电流只做限幅就可以了。

K.O.Carnivist 发表于 2013-8-17 11:40:29

kmani 发表于 2013-8-16 23:07 static/image/common/back.gif
尼美根星球的大侠,地球生活还可以吧。等哪天地球不行了,你带我去你的星球..
我也觉得电流只做限幅就可 ...

不做电流环的话,带动态负载的情况下转速控制性能相对会差一点,也还好

djkc 发表于 2013-8-17 21:50:15

能否共享原理图啊?谢谢楼主了!

john78 发表于 2013-8-17 22:27:26

对电流采样电路很感兴趣。
用什么运放,怎么隔离?

qq490455545 发表于 2013-8-19 09:42:22

K.O.Carnivist 发表于 2013-8-16 18:49 static/image/common/back.gif
内环还是要单独调好的,哪怕单一个P调节也行,不然就干脆不要电流环了直接单闭环。如果把电机捏死都不能 ...

单电流环现在已经调好了,开始是由于理解错误,以为调节不好。双环也能达到限幅的效果,只是响应太慢了点

qq490455545 发表于 2013-8-19 09:43:15

djkc 发表于 2013-8-17 21:50 static/image/common/back.gif
能否共享原理图啊?谢谢楼主了!

由于这个是公司的一个正式产品,原理图不方便给出,不好意思~

qq490455545 发表于 2013-8-19 09:44:51

john78 发表于 2013-8-17 22:27 static/image/common/back.gif
对电流采样电路很感兴趣。
用什么运放,怎么隔离?

就是用一个电流传感器采样,经过分压电路直接接到单片机的AD脚。电流传感器内部有放大电路。

kmani 发表于 2013-8-19 12:17:01

你用的这种控制算法,不会有太好的控制性能。

K.O.Carnivist 发表于 2013-8-19 12:34:09

kmani 发表于 2013-8-19 12:17
你用的这种控制算法,不会有太好的控制性能。

我觉得这个是简单实用的转速控制方法里面抗负载扰动最好的了啊

kmani 发表于 2013-8-19 12:38:55

K.O.Carnivist 发表于 2013-8-19 12:34 static/image/common/back.gif
我觉得这个是简单实用的转速控制方法里面抗负载扰动最好的了啊

PID抗负载瞬间扰动主要依靠的是D,你能保证你的D参数调整的能瞬间补偿外界干扰吗?而且D对噪声很敏感。

K.O.Carnivist 发表于 2013-8-19 13:53:34

kmani 发表于 2013-8-19 12:38
PID抗负载瞬间扰动主要依靠的是D,你能保证你的D参数调整的能瞬间补偿外界干扰吗?而且D对噪声很敏感。
...

呃咱俩说的是一回事不……我以为您说的lz的算法指的是电流PI加转速PI,相对于电流只做限幅来说,抗负载扰动要好一些

wast23hyfn 发表于 2013-9-13 16:23:35

我想请教一下楼主如何在示波器上看PI值调的好不好的?你有关PI太大和太小的那两张图是沟的哪个位置测出来的?

g22261846 发表于 2013-9-13 20:16:07

示波器很好,好几万的家伙啊。很好用

luozhongchao123 发表于 2013-9-13 23:50:52

漂亮的示波器!!

LearningASM 发表于 2013-9-14 10:53:41

我也是觉得的示波器牛

v0932313 发表于 2013-9-15 14:16:20

楼主,能加个好友吗?

v0932313 发表于 2013-9-15 14:24:02

我QQ6824832,做电机控制的,想请教一下你的电流环的问题
对PID还是懵懂,因为我的应用问题,我想在重载的时候能最大扭矩输出,1、当我负载很小的时候,相电流没达到限流值,PID应该是怎么设置目标值?2、当我负载达到,相电流进入限流值,PID是怎么设置?同时这个时候为了得到最大扭矩,我开管子方式是否有变化?3、当我负载很重,速度降到几十转的时候,如何能在保证电流限制不变的情况下,使电机扭矩达到很大?

416446891 发表于 2013-9-24 23:16:40

楼主,我也在做BLDC电机控制,然后现在做的事开环控制,遇到了一个问题,因为我拖动时一个400w的 带1:10减速箱的电机,然后现在使用hall6步换向,一直正转或者一直反转,电机调速什么的都很好,但是一旦发生正反转切换就会有卡顿,减速箱就发出咔的一声,请问一下这个问题您遇到过没有,可能是什么原因造成的?

sz_works 发表于 2013-11-2 14:11:00

来支持下楼主

lingjun1015 发表于 2013-12-12 15:15:02

自己的电机还处于第一步,希望一切顺利!!!!!!!!!!!!!

huhang 发表于 2013-12-22 19:16:53

这种示波器用起来很爽

mtswz.213 发表于 2013-12-22 20:45:42

这个要用多段pid,就是pid参数有几组,堵转时p调小,平时p可以大一些,另外,启动器也可以分几个段,刚开始p大一些,快到设定转速时把p调小!

bigZ 发表于 2013-12-22 21:37:08

LZ示波器什么型号

ljh407055315 发表于 2013-12-27 17:58:58

好东西   学习了

mhw 发表于 2014-1-2 16:32:33

示波器很特别……

nishuizhou 发表于 2014-1-23 15:21:51

谢谢,学习中

zpwkxg 发表于 2014-2-7 11:45:24

MARK:无刷电机 速度环+电流环

LCRPN 发表于 2014-2-17 16:12:46

示波器不错。

ljh407055315 发表于 2014-7-11 19:43:16

不知道楼主双闭环的问题解决没?求教中!

s20120907 发表于 2014-7-20 09:41:56

求楼主调节好的电流、速度环波形,以供参考

zhan278047442 发表于 2014-7-20 21:16:49

你这个方波控制还做双环?而且电流补偿应该没做,每次换相电流向下掉那么多,还是用FOC控制吧

zhan278047442 发表于 2014-7-20 21:19:22

8k的频率太低,普遍BLDC控制频率为16~12K,单片机速度够的话都是做16k

棠木风子 发表于 2014-8-25 23:13:52

{:victory:}

鱼尾之恋 发表于 2014-8-26 00:16:17

最近要研究一下。

tim4146 发表于 2014-10-21 09:33:01

qq490455545 发表于 2013-8-19 09:42
单电流环现在已经调好了,开始是由于理解错误,以为调节不好。双环也能达到限幅的效果,只是响应太慢了点 ...

对电流环很感兴趣呀,能不能分享一下调节电流环的过程啊

王二狗子 发表于 2015-8-29 10:49:21

最近在学习这个,现在需要用位置控制位置,也不知道应该用什么算法

jamesdeep 发表于 2015-8-30 12:02:13

普通的PI是解决不了这个问题的,要用分段PI或者是模糊PI

wind2100 发表于 2015-8-30 18:43:58

qq490455545 发表于 2013-8-13 19:02
这张图上的电流明显看出在换相时刻出现异常,电流下降太快,原因是换相时刻有50~100us的下桥间隙,导致电流 ...

我的电流波形 也像这样,下桥怎么会有间隙?

yaxiaoyu 发表于 2015-11-3 16:09:04

楼主这个是驱动多大电机,转速 和功率

huangqi412 发表于 2015-11-5 21:58:26

这个示波器感觉好高级

yanzhiwei 发表于 2015-12-27 22:48:51

收藏参考一下

retome 发表于 2016-6-12 20:42:54

有代码下载的帖子都会火啊这是必然错对

lqb7733 发表于 2016-6-22 15:09:05

MARK:无刷电机 速度环+电流环

CoolRain828 发表于 2016-8-14 22:49:53

感谢分享

ycping 发表于 2016-8-15 09:03:22

谢谢分享。

guzhongqi 发表于 2016-8-15 09:17:47

qq490455545 发表于 2013-8-13 18:04
还有示波器的波形分析

从你反电动势的波形来看的话,你这个电机用FOC驱动会更好,FOC做成电流转速双闭环效果是比较好的。
做成6步换相的方波驱动,做成单转速环就行了,电流环做成抑制的,默认转速环调节,一旦负载加大使电流环输出小于转速环时,转速环接管,这样既有很好的调速效果又可以有效抑制过大的电流。

CoolRain828 发表于 2016-8-16 15:41:49

不错,图片很详细哈

honami520 发表于 2016-8-16 18:17:08

挺好的资料的,顶一下

nuncle 发表于 2016-8-16 23:11:09

mark 标记

eddia2012 发表于 2016-12-13 18:57:55

{:smile:}谢谢!现在也是学习BLDC

yanglei920509@ 发表于 2016-12-30 12:50:47

感谢楼主分享,请教您一个问题,请问电机绕组电流波形中那个0 平台是因为什么原因存在的?
如果这两个0平台不对称(一边有,一边没有,)请问可能是什么原因导致的,谢谢
1071393201@qq.com

marshallemon 发表于 2017-1-1 17:12:23

本帖最后由 marshallemon 于 2017-1-1 17:15 编辑

也玩了一下直流电机的速度闭环,PI控制,稳态误差+ - 3个脉冲以内,100线的光栅码盘

Xiyuhexuan 发表于 2017-1-16 12:39:56

好东西               

Xiyuhexuan 发表于 2017-1-16 12:54:21

qq490455545 发表于 2013-8-13 19:04
这是对上面问题的补充,可以看到实际测得的图像,确实在换相时刻有57us的空隙。绿色线是W相相电流,黄色和 ...

示波器 不错嘛

CoolRain828 发表于 2017-1-20 11:04:28

非常好的资料,下载下来参考,感谢!

Seven-007 发表于 2017-2-21 22:19:18

好东西,mark了

tangguotaizi 发表于 2017-2-22 15:03:37

顶,作参考

wwkfisker1983 发表于 2017-3-28 15:28:02

本帖最后由 wwkfisker1983 于 2017-3-28 15:33 编辑

非常感谢楼主的分享,有个简单的问题我想请教下各位高手,在楼主霍尔捕获初始化程序中 我发现楼主开启了捕获定时器TIM3的3种中断类型

TIM_ITConfig(TIM3, TIM_IT_CC1|TIM_IT_CC2|TIM_IT_Update, ENABLE);//开启通道1的捕获中断,和通道2的比较匹配中断

在有的程序中 我发现很多只开启通道1 TIM_IT_CC1及TIM_IT_Update两个,我想请教下楼主开启TIM_IT_CC2 这个中断主要作用是什么?
我看楼主后续中断服务程序中 好像是接收到BKN 停车信号后匀速降低 PWM脉宽停车
//比较匹配处理,换相
if(TIM_GetITStatus(TIM3, TIM_IT_CC2) != RESET)
{
    TIM_ClearITPendingBit(TIM3, TIM_IT_CC2);
    //tim2_cnt++;
    if(m_fo){stop_motor(); return;}
         //m_phasechange = 1;
    //change_direction(holl_value,motor_dir);//换相
   
}

我不太明白是 满足什么条件会触发这个TIM_IT_CC2中断,希望楼主或各位高手能指点迷津 非常感谢

upli 发表于 2017-3-29 21:42:01

困惑于优先保证转速,还是转矩,直接调节PWM占空比能否达到闭环的要求?

余主任 发表于 2017-6-7 18:03:33

MAKE,BLDC控制!

sunmy 发表于 2017-8-3 14:52:28

BLDC控制!

凌晨一点 发表于 2017-8-15 12:12:51

很不错的参考程序

menglongfc 发表于 2017-8-24 17:09:20

总觉得横河的示波器很有设计感,楼主的是什么型号

茂实科技 发表于 2017-11-1 10:39:07

MAKE,学习了

M_ark 发表于 2018-2-7 16:05:31

Mark 学习

wilderujs 发表于 2018-4-18 07:42:09

好东西,学习了

flyzouyao 发表于 2018-4-18 08:55:52

正在学习,谢谢楼主分享!

wilderujs 发表于 2018-4-30 11:17:02

波形很漂亮

amin100490 发表于 2018-4-30 22:33:50

回楼上我这个电流波形很糟糕

LoveDeathgod 发表于 2018-5-2 11:41:19

示波器很6

nijiawen 发表于 2018-7-23 19:55:29

BLDC电流环真的不容易

zhangzif 发表于 2018-10-16 10:15:35

谢谢分享!!!!

zzage 发表于 2018-10-23 16:18:03

学习一下

thyewfty 发表于 2018-11-3 22:04:21

我也下来调调看

thyewfty 发表于 2018-11-3 22:14:22

用单电阻采集电流试试

CarverZhang 发表于 2019-1-8 14:35:59

这个帖子还在持续着,好贴。 有没有人玩无位置传感器的驱动?

hong_hong 发表于 2019-1-16 15:11:24

不明觉厉

cena30989315 发表于 2019-2-25 14:29:32

MARK:无刷电机 速度环+电流环

like6766256 发表于 2019-7-12 19:36:29

我就看了下波形图{:biggrin:}
页: [1] 2
查看完整版本: 基于STM32的直流无刷电机(BLDC)双环(速度+电流)控制.