amobbs.com 阿莫电子技术论坛

标题: 基于STM32的直流无刷电机(BLDC)双环(速度+电流)控制. [打印本页]

作者: qq490455545    时间: 2013-8-13 17:59
标题: 基于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
本帖最后由 qq490455545 于 2013-8-13 18:09 编辑

还有示波器的波形分析
作者: qq490455545    时间: 2013-8-13 19:02
这张图上的电流明显看出在换相时刻出现异常,电流下降太快,原因是换相时刻有50~100us的下桥间隙,导致电流通过上桥续流二极管到达母线,对母线充电
作者: qq490455545    时间: 2013-8-13 19:04
本帖最后由 qq490455545 于 2013-8-13 19:05 编辑

这是对上面问题的补充,可以看到实际测得的图像,确实在换相时刻有57us的空隙。绿色线是W相相电流,黄色和红色分别是U相和V相下桥载波。
作者: qq490455545    时间: 2013-8-13 19:06
没人来吗?  我在玩单机?
作者: kmani    时间: 2013-8-13 20:46
qq490455545 发表于 2013-8-13 19:06
没人来吗?  我在玩单机?

楼主你的电机有转速传感器吗?
你用的电阻还是霍尔测的电流呢?
作者: dxgdsx    时间: 2013-8-13 21:55
楼主用的什么驱动电路?用的驱动芯片还是分立元件?
作者: qq490455545    时间: 2013-8-13 22:01
kmani 发表于 2013-8-13 20:46
楼主你的电机有转速传感器吗?
你用的电阻还是霍尔测的电流呢?

电机是内部有位置传感器的,用的是电流传感器,电流传感器内部是霍尔实现的
作者: qq490455545    时间: 2013-8-13 22:02
dxgdsx 发表于 2013-8-13 21:55
楼主用的什么驱动电路?用的驱动芯片还是分立元件?

用的是IPM模块驱动电机。
作者: dxgdsx    时间: 2013-8-13 22:07
qq490455545 发表于 2013-8-13 22:02
用的是IPM模块驱动电机。

呃,好高端。我还是用的IR2130。
作者: qq490455545    时间: 2013-8-13 22:10
dxgdsx 发表于 2013-8-13 22:07
呃,好高端。我还是用的IR2130。

这也不见得就高端,只是产品设计角度考虑的
作者: wajlh    时间: 2013-8-13 22:15
楼主示波器不错
作者: qq490455545    时间: 2013-8-13 22:17
wajlh 发表于 2013-8-13 22:15
楼主示波器不错

公司的,好用~
作者: dxgdsx    时间: 2013-8-13 22:19
本帖最后由 dxgdsx 于 2013-8-13 22:20 编辑

[attach]131778[/attach]
请教楼主如何通过转速PID得到参考电流?实际中依据什么原则?
作者: qq490455545    时间: 2013-8-13 22:27
dxgdsx 发表于 2013-8-13 22:19
请教楼主如何通过转速PID得到参考电流?实际中依据什么原则?

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

我之前是这样做的,转速做PI控制,电流只做限幅控制。
作者: 823032003    时间: 2013-8-13 22:38
dxgdsx 发表于 2013-8-13 22:19
请教楼主如何通过转速PID得到参考电流?实际中依据什么原则?

调节转速,需要用加速度,即扭矩。
在BLDC中,扭矩和电流成正比
供参考
作者: 823032003    时间: 2013-8-13 22:40
LZ这种双环的系统,一般先调内环,想办法加负载,先把内环调好(动态,稳态)。
作者: dxgdsx    时间: 2013-8-13 22:41
823032003 发表于 2013-8-13 22:38
调节转速,需要用加速度,即扭矩。
在BLDC中,扭矩和电流成正比
供参考

也就是说电流和转子的加速度相关。怪不得在堵转的电流很大,发烫。
作者: qq490455545    时间: 2013-8-14 08:34
823032003 发表于 2013-8-13 22:40
LZ这种双环的系统,一般先调内环,想办法加负载,先把内环调好(动态,稳态)。 ...

我也尝试做了单电流环,只是没负载,用手堵转电机这样做的,发现不论怎么调都不能起到很好的效果,要么PI大了现象就是一捏捏不死,但是捏死了就出现震荡,一冲一冲,不能稳定输出电流。要么就是PI小了,一捏就死,从示波器上看电流波形就是阶梯减小。郁闷的很。
作者: K.O.Carnivist    时间: 2013-8-16 18:49
qq490455545 发表于 2013-8-14 08:34
我也尝试做了单电流环,只是没负载,用手堵转电机这样做的,发现不论怎么调都不能起到很好的效果,要么P ...

内环还是要单独调好的,哪怕单一个P调节也行,不然就干脆不要电流环了直接单闭环。如果把电机捏死都不能出平稳的电流的话,可以看一下这时候的电流波形,看看是不是PWM频率太低了。
作者: kmani    时间: 2013-8-16 23:07
823032003 发表于 2013-8-13 22:40
LZ这种双环的系统,一般先调内环,想办法加负载,先把内环调好(动态,稳态)。 ...

尼美根星球的大侠,地球生活还可以吧。等哪天地球不行了,你带我去你的星球..
我也觉得电流只做限幅就可以了。
作者: K.O.Carnivist    时间: 2013-8-17 11:40
kmani 发表于 2013-8-16 23:07
尼美根星球的大侠,地球生活还可以吧。等哪天地球不行了,你带我去你的星球..
我也觉得电流只做限幅就可 ...

不做电流环的话,带动态负载的情况下转速控制性能相对会差一点,也还好
作者: djkc    时间: 2013-8-17 21:50
能否共享原理图啊?谢谢楼主了!
作者: john78    时间: 2013-8-17 22:27
对电流采样电路很感兴趣。
用什么运放,怎么隔离?
作者: qq490455545    时间: 2013-8-19 09:42
K.O.Carnivist 发表于 2013-8-16 18:49
内环还是要单独调好的,哪怕单一个P调节也行,不然就干脆不要电流环了直接单闭环。如果把电机捏死都不能 ...

单电流环现在已经调好了,开始是由于理解错误,以为调节不好。双环也能达到限幅的效果,只是响应太慢了点
作者: qq490455545    时间: 2013-8-19 09:43
djkc 发表于 2013-8-17 21:50
能否共享原理图啊?谢谢楼主了!

由于这个是公司的一个正式产品,原理图不方便给出,不好意思~
作者: qq490455545    时间: 2013-8-19 09:44
john78 发表于 2013-8-17 22:27
对电流采样电路很感兴趣。
用什么运放,怎么隔离?

就是用一个电流传感器采样,经过分压电路直接接到单片机的AD脚。电流传感器内部有放大电路。
作者: kmani    时间: 2013-8-19 12:17
你用的这种控制算法,不会有太好的控制性能。
作者: K.O.Carnivist    时间: 2013-8-19 12:34
kmani 发表于 2013-8-19 12:17
你用的这种控制算法,不会有太好的控制性能。

我觉得这个是简单实用的转速控制方法里面抗负载扰动最好的了啊
作者: kmani    时间: 2013-8-19 12:38
K.O.Carnivist 发表于 2013-8-19 12:34
我觉得这个是简单实用的转速控制方法里面抗负载扰动最好的了啊

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

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

呃咱俩说的是一回事不……我以为您说的lz的算法指的是电流PI加转速PI,相对于电流只做限幅来说,抗负载扰动要好一些
作者: wast23hyfn    时间: 2013-9-13 16:23
我想请教一下楼主如何在示波器上看PI值调的好不好的?你有关PI太大和太小的那两张图是沟的哪个位置测出来的?
作者: g22261846    时间: 2013-9-13 20:16
示波器很好,好几万的家伙啊。很好用

作者: luozhongchao123    时间: 2013-9-13 23:50
漂亮的示波器!!
作者: LearningASM    时间: 2013-9-14 10:53
我也是觉得的示波器牛
作者: v0932313    时间: 2013-9-15 14:16
楼主,能加个好友吗?
作者: v0932313    时间: 2013-9-15 14:24
我QQ6824832,做电机控制的,想请教一下你的电流环的问题
对PID还是懵懂,因为我的应用问题,我想在重载的时候能最大扭矩输出,1、当我负载很小的时候,相电流没达到限流值,PID应该是怎么设置目标值?2、当我负载达到,相电流进入限流值,PID是怎么设置?同时这个时候为了得到最大扭矩,我开管子方式是否有变化?3、当我负载很重,速度降到几十转的时候,如何能在保证电流限制不变的情况下,使电机扭矩达到很大?
作者: 416446891    时间: 2013-9-24 23:16
楼主,我也在做BLDC电机控制,然后现在做的事开环控制,遇到了一个问题,因为我拖动时一个400w的 带1:10减速箱的电机,然后现在使用hall6步换向,一直正转或者一直反转,电机调速什么的都很好,但是一旦发生正反转切换就会有卡顿,减速箱就发出咔的一声,请问一下这个问题您遇到过没有,可能是什么原因造成的?
作者: sz_works    时间: 2013-11-2 14:11
来支持下楼主
作者: lingjun1015    时间: 2013-12-12 15:15
自己的电机还处于第一步,希望一切顺利!!!!!!!!!!!!!
作者: huhang    时间: 2013-12-22 19:16
这种示波器用起来很爽
作者: mtswz.213    时间: 2013-12-22 20:45
这个要用多段pid,就是pid参数有几组,堵转时p调小,平时p可以大一些,另外,启动器也可以分几个段,刚开始p大一些,快到设定转速时把p调小!
作者: bigZ    时间: 2013-12-22 21:37
LZ示波器什么型号
作者: ljh407055315    时间: 2013-12-27 17:58
好东西   学习了
作者: mhw    时间: 2014-1-2 16:32
示波器很特别……
作者: nishuizhou    时间: 2014-1-23 15:21
谢谢,学习中
作者: zpwkxg    时间: 2014-2-7 11:45
MARK:无刷电机 速度环+电流环
作者: LCRPN    时间: 2014-2-17 16:12
示波器不错。
作者: ljh407055315    时间: 2014-7-11 19:43
不知道楼主双闭环的问题解决没?求教中!
作者: s20120907    时间: 2014-7-20 09:41
求楼主调节好的电流、速度环波形,以供参考
作者: zhan278047442    时间: 2014-7-20 21:16
你这个方波控制还做双环?而且电流补偿应该没做,每次换相电流向下掉那么多,还是用FOC控制吧
作者: zhan278047442    时间: 2014-7-20 21:19
8k的频率太低,普遍BLDC控制频率为16~12K,单片机速度够的话都是做16k
作者: 棠木风子    时间: 2014-8-25 23:13

作者: 鱼尾之恋    时间: 2014-8-26 00:16
最近要研究一下。
作者: tim4146    时间: 2014-10-21 09:33
qq490455545 发表于 2013-8-19 09:42
单电流环现在已经调好了,开始是由于理解错误,以为调节不好。双环也能达到限幅的效果,只是响应太慢了点 ...

对电流环很感兴趣呀,能不能分享一下调节电流环的过程啊
作者: 王二狗子    时间: 2015-8-29 10:49
最近在学习这个,现在需要用位置控制位置,也不知道应该用什么算法
作者: jamesdeep    时间: 2015-8-30 12:02
普通的PI是解决不了这个问题的,要用分段PI或者是模糊PI
作者: wind2100    时间: 2015-8-30 18:43
qq490455545 发表于 2013-8-13 19:02
这张图上的电流明显看出在换相时刻出现异常,电流下降太快,原因是换相时刻有50~100us的下桥间隙,导致电流 ...

我的电流波形 也像这样,下桥怎么会有间隙?
作者: yaxiaoyu    时间: 2015-11-3 16:09
楼主这个是驱动多大电机,转速 和功率
作者: huangqi412    时间: 2015-11-5 21:58
这个示波器感觉好高级
作者: yanzhiwei    时间: 2015-12-27 22:48
收藏参考一下
作者: retome    时间: 2016-6-12 20:42
有代码下载的帖子都会火啊这是必然错对
作者: lqb7733    时间: 2016-6-22 15:09
MARK:无刷电机 速度环+电流环
作者: CoolRain828    时间: 2016-8-14 22:49
感谢分享
作者: ycping    时间: 2016-8-15 09:03
谢谢分享。
作者: guzhongqi    时间: 2016-8-15 09:17
qq490455545 发表于 2013-8-13 18:04
还有示波器的波形分析

从你反电动势的波形来看的话,你这个电机用FOC驱动会更好,FOC做成电流转速双闭环效果是比较好的。
做成6步换相的方波驱动,做成单转速环就行了,电流环做成抑制的,默认转速环调节,一旦负载加大使电流环输出小于转速环时,转速环接管,这样既有很好的调速效果又可以有效抑制过大的电流。
作者: CoolRain828    时间: 2016-8-16 15:41
不错,图片很详细哈
作者: honami520    时间: 2016-8-16 18:17
挺好的资料的,顶一下
作者: nuncle    时间: 2016-8-16 23:11
mark 标记
作者: eddia2012    时间: 2016-12-13 18:57
谢谢!现在也是学习BLDC

作者: yanglei920509@    时间: 2016-12-30 12:50
感谢楼主分享,请教您一个问题,请问电机绕组电流波形中那个0 平台是因为什么原因存在的?
如果这两个0平台不对称(一边有,一边没有,)请问可能是什么原因导致的,谢谢
1071393201@qq.com
作者: marshallemon    时间: 2017-1-1 17:12
本帖最后由 marshallemon 于 2017-1-1 17:15 编辑

也玩了一下直流电机的速度闭环,PI控制,稳态误差+ - 3个脉冲以内,100线的光栅码盘
[attach]356848[/attach]
作者: Xiyuhexuan    时间: 2017-1-16 12:39
好东西                 
作者: Xiyuhexuan    时间: 2017-1-16 12:54
qq490455545 发表于 2013-8-13 19:04
这是对上面问题的补充,可以看到实际测得的图像,确实在换相时刻有57us的空隙。绿色线是W相相电流,黄色和 ...

示波器 不错嘛
作者: CoolRain828    时间: 2017-1-20 11:04
非常好的资料,下载下来参考,感谢!
作者: Seven-007    时间: 2017-2-21 22:19
好东西,mark了

作者: tangguotaizi    时间: 2017-2-22 15:03
顶,作参考
作者: wwkfisker1983    时间: 2017-3-28 15:28
本帖最后由 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
困惑于优先保证转速,还是转矩,直接调节PWM占空比能否达到闭环的要求?
作者: 余主任    时间: 2017-6-7 18:03
MAKE,BLDC控制!
作者: sunmy    时间: 2017-8-3 14:52
BLDC控制!
作者: 凌晨一点    时间: 2017-8-15 12:12
很不错的参考程序
作者: menglongfc    时间: 2017-8-24 17:09
总觉得横河的示波器很有设计感,楼主的是什么型号
作者: 茂实科技    时间: 2017-11-1 10:39
MAKE,学习了
作者: M_ark    时间: 2018-2-7 16:05
Mark 学习
作者: wilderujs    时间: 2018-4-18 07:42
好东西,学习了
作者: flyzouyao    时间: 2018-4-18 08:55
正在学习,谢谢楼主分享!
作者: wilderujs    时间: 2018-4-30 11:17
波形很漂亮
作者: amin100490    时间: 2018-4-30 22:33
回楼上我这个电流波形很糟糕
作者: LoveDeathgod    时间: 2018-5-2 11:41
示波器很6
作者: nijiawen    时间: 2018-7-23 19:55
BLDC电流环真的不容易
作者: zhangzif    时间: 2018-10-16 10:15
谢谢分享!!!!
作者: zzage    时间: 2018-10-23 16:18
学习一下
作者: thyewfty    时间: 2018-11-3 22:04
我也下来调调看
作者: thyewfty    时间: 2018-11-3 22:14
用单电阻采集电流试试
作者: CarverZhang    时间: 2019-1-8 14:35
这个帖子还在持续着,好贴。 有没有人玩无位置传感器的驱动?
作者: hong_hong    时间: 2019-1-16 15:11
不明觉厉
作者: cena30989315    时间: 2019-2-25 14:29
MARK:无刷电机 速度环+电流环
作者: like6766256    时间: 2019-7-12 19:36
我就看了下波形图




欢迎光临 amobbs.com 阿莫电子技术论坛 (https://www.amobbs.com/) Powered by Discuz! X3.4