amoBBS 阿莫电子论坛

 找回密码
 注册
搜索
bottom↓
查看: 18811|回复: 84

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

  [复制链接]
发表于 2013-8-13 17:59:44 | 显示全部楼层 |阅读模式
本帖最后由 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相电流采样,处理方式是分时处理。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| 发表于 2013-8-13 18:04:12 | 显示全部楼层
本帖最后由 qq490455545 于 2013-8-13 18:09 编辑

还有示波器的波形分析

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| 发表于 2013-8-13 19:02:06 | 显示全部楼层
这张图上的电流明显看出在换相时刻出现异常,电流下降太快,原因是换相时刻有50~100us的下桥间隙,导致电流通过上桥续流二极管到达母线,对母线充电

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| 发表于 2013-8-13 19:04:22 | 显示全部楼层
本帖最后由 qq490455545 于 2013-8-13 19:05 编辑

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| 发表于 2013-8-13 19:06:24 | 显示全部楼层
没人来吗?  我在玩单机?
发表于 2013-8-13 20:46:13 | 显示全部楼层
qq490455545 发表于 2013-8-13 19:06
没人来吗?  我在玩单机?

楼主你的电机有转速传感器吗?
你用的电阻还是霍尔测的电流呢?
发表于 2013-8-13 21:55:20 | 显示全部楼层
楼主用的什么驱动电路?用的驱动芯片还是分立元件?
 楼主| 发表于 2013-8-13 22:01:51 | 显示全部楼层
kmani 发表于 2013-8-13 20:46
楼主你的电机有转速传感器吗?
你用的电阻还是霍尔测的电流呢?

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

用的是IPM模块驱动电机。
发表于 2013-8-13 22:07:12 | 显示全部楼层
qq490455545 发表于 2013-8-13 22:02
用的是IPM模块驱动电机。

呃,好高端。我还是用的IR2130。
 楼主| 发表于 2013-8-13 22:10:46 | 显示全部楼层
dxgdsx 发表于 2013-8-13 22:07
呃,好高端。我还是用的IR2130。

这也不见得就高端,只是产品设计角度考虑的
发表于 2013-8-13 22:15:41 | 显示全部楼层
楼主示波器不错
 楼主| 发表于 2013-8-13 22:17:38 | 显示全部楼层
wajlh 发表于 2013-8-13 22:15
楼主示波器不错

公司的,好用~
发表于 2013-8-13 22:19:11 | 显示全部楼层
本帖最后由 dxgdsx 于 2013-8-13 22:20 编辑


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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| 发表于 2013-8-13 22:27:49 | 显示全部楼层
dxgdsx 发表于 2013-8-13 22:19
请教楼主如何通过转速PID得到参考电流?实际中依据什么原则?

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

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

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

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

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

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

尼美根星球的大侠,地球生活还可以吧。等哪天地球不行了,你带我去你的星球..
我也觉得电流只做限幅就可以了。
发表于 2013-8-17 11:40:29 | 显示全部楼层
kmani 发表于 2013-8-16 23:07
尼美根星球的大侠,地球生活还可以吧。等哪天地球不行了,你带我去你的星球..
我也觉得电流只做限幅就可 ...

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

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

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

就是用一个电流传感器采样,经过分压电路直接接到单片机的AD脚。电流传感器内部有放大电路。
发表于 2013-8-19 12:17:01 | 显示全部楼层
你用的这种控制算法,不会有太好的控制性能。
发表于 2013-8-19 12:34:09 来自手机 | 显示全部楼层
kmani 发表于 2013-8-19 12:17
你用的这种控制算法,不会有太好的控制性能。

我觉得这个是简单实用的转速控制方法里面抗负载扰动最好的了啊
发表于 2013-8-19 12:38:55 | 显示全部楼层
K.O.Carnivist 发表于 2013-8-19 12:34
我觉得这个是简单实用的转速控制方法里面抗负载扰动最好的了啊

PID抗负载瞬间扰动主要依靠的是D,你能保证你的D参数调整的能瞬间补偿外界干扰吗?而且D对噪声很敏感。
发表于 2013-8-19 13:53:34 来自手机 | 显示全部楼层
kmani 发表于 2013-8-19 12:38
PID抗负载瞬间扰动主要依靠的是D,你能保证你的D参数调整的能瞬间补偿外界干扰吗?而且D对噪声很敏感。
...

呃咱俩说的是一回事不……我以为您说的lz的算法指的是电流PI加转速PI,相对于电流只做限幅来说,抗负载扰动要好一些
发表于 2013-9-13 16:23:35 | 显示全部楼层
我想请教一下楼主如何在示波器上看PI值调的好不好的?你有关PI太大和太小的那两张图是沟的哪个位置测出来的?
发表于 2013-9-13 20:16:07 | 显示全部楼层
示波器很好,好几万的家伙啊。很好用
发表于 2013-9-13 23:50:52 | 显示全部楼层
漂亮的示波器!!
发表于 2013-9-14 10:53:41 | 显示全部楼层
我也是觉得的示波器牛
发表于 2013-9-15 14:16:20 | 显示全部楼层
楼主,能加个好友吗?
发表于 2013-9-15 14:24:02 | 显示全部楼层
我QQ6824832,做电机控制的,想请教一下你的电流环的问题
对PID还是懵懂,因为我的应用问题,我想在重载的时候能最大扭矩输出,1、当我负载很小的时候,相电流没达到限流值,PID应该是怎么设置目标值?2、当我负载达到,相电流进入限流值,PID是怎么设置?同时这个时候为了得到最大扭矩,我开管子方式是否有变化?3、当我负载很重,速度降到几十转的时候,如何能在保证电流限制不变的情况下,使电机扭矩达到很大?
发表于 2013-9-24 23:16:40 | 显示全部楼层
楼主,我也在做BLDC电机控制,然后现在做的事开环控制,遇到了一个问题,因为我拖动时一个400w的 带1:10减速箱的电机,然后现在使用hall6步换向,一直正转或者一直反转,电机调速什么的都很好,但是一旦发生正反转切换就会有卡顿,减速箱就发出咔的一声,请问一下这个问题您遇到过没有,可能是什么原因造成的?
发表于 2013-11-2 14:11:00 | 显示全部楼层
来支持下楼主
发表于 2013-12-12 15:15:02 | 显示全部楼层
自己的电机还处于第一步,希望一切顺利!!!!!!!!!!!!!
发表于 2013-12-22 19:16:53 | 显示全部楼层
这种示波器用起来很爽
发表于 2013-12-22 20:45:42 来自手机 | 显示全部楼层
这个要用多段pid,就是pid参数有几组,堵转时p调小,平时p可以大一些,另外,启动器也可以分几个段,刚开始p大一些,快到设定转速时把p调小!
发表于 2013-12-22 21:37:08 | 显示全部楼层
LZ示波器什么型号
发表于 2013-12-27 17:58:58 | 显示全部楼层
好东西   学习了
发表于 2014-1-2 16:32:33 | 显示全部楼层
示波器很特别……
发表于 2014-1-23 15:21:51 | 显示全部楼层
谢谢,学习中
发表于 2014-2-7 11:45:24 | 显示全部楼层
MARK:无刷电机 速度环+电流环
发表于 2014-2-17 16:12:46 | 显示全部楼层
示波器不错。
发表于 2014-7-11 19:43:16 | 显示全部楼层
不知道楼主双闭环的问题解决没?求教中!
发表于 2014-7-20 09:41:56 | 显示全部楼层
求楼主调节好的电流、速度环波形,以供参考
发表于 2014-7-20 21:16:49 | 显示全部楼层
你这个方波控制还做双环?而且电流补偿应该没做,每次换相电流向下掉那么多,还是用FOC控制吧
发表于 2014-7-20 21:19:22 | 显示全部楼层
8k的频率太低,普遍BLDC控制频率为16~12K,单片机速度够的话都是做16k
发表于 2014-8-25 23:13:52 | 显示全部楼层
发表于 2014-8-26 00:16:17 | 显示全部楼层
最近要研究一下。
发表于 2014-10-21 09:33:01 | 显示全部楼层
qq490455545 发表于 2013-8-19 09:42
单电流环现在已经调好了,开始是由于理解错误,以为调节不好。双环也能达到限幅的效果,只是响应太慢了点 ...

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

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

从你反电动势的波形来看的话,你这个电机用FOC驱动会更好,FOC做成电流转速双闭环效果是比较好的。
做成6步换相的方波驱动,做成单转速环就行了,电流环做成抑制的,默认转速环调节,一旦负载加大使电流环输出小于转速环时,转速环接管,这样既有很好的调速效果又可以有效抑制过大的电流。
发表于 2016-8-16 15:41:49 | 显示全部楼层
不错,图片很详细哈
发表于 2016-8-16 18:17:08 | 显示全部楼层
挺好的资料的,顶一下
发表于 2016-8-16 23:11:09 | 显示全部楼层
mark 标记
发表于 2016-12-13 18:57:55 | 显示全部楼层
谢谢!现在也是学习BLDC
发表于 2016-12-30 12:50:47 | 显示全部楼层
感谢楼主分享,请教您一个问题,请问电机绕组电流波形中那个0 平台是因为什么原因存在的?
如果这两个0平台不对称(一边有,一边没有,)请问可能是什么原因导致的,谢谢
1071393201@qq.com

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2017-1-1 17:12:23 | 显示全部楼层
本帖最后由 marshallemon 于 2017-1-1 17:15 编辑

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2017-1-16 12:39:56 | 显示全部楼层
好东西                 
发表于 2017-1-16 12:54:21 | 显示全部楼层
qq490455545 发表于 2013-8-13 19:04
这是对上面问题的补充,可以看到实际测得的图像,确实在换相时刻有57us的空隙。绿色线是W相相电流,黄色和 ...

示波器 不错嘛
发表于 2017-1-20 11:04:28 | 显示全部楼层
非常好的资料,下载下来参考,感谢!
发表于 2017-2-21 22:19:18 | 显示全部楼层
好东西,mark了
发表于 2017-2-22 15:03:37 来自手机 | 显示全部楼层
顶,作参考
发表于 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中断,希望楼主或各位高手能指点迷津 非常感谢

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2017-3-29 21:42:01 | 显示全部楼层
困惑于优先保证转速,还是转矩,直接调节PWM占空比能否达到闭环的要求?
发表于 2017-6-7 18:03:33 | 显示全部楼层
MAKE,BLDC控制!
发表于 2017-8-3 14:52:28 | 显示全部楼层
BLDC控制!
发表于 2017-8-15 12:12:51 来自手机 | 显示全部楼层
很不错的参考程序
发表于 2017-8-24 17:09:20 | 显示全部楼层
总觉得横河的示波器很有设计感,楼主的是什么型号
发表于 2017-11-1 10:39:07 | 显示全部楼层
MAKE,学习了
友情提示:标题不合格、重复发帖,将会被封锁ID。详情请参考:论坛通告:封锁ID、获得注册邀请码、恢复被封ID、投诉必读
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|阿莫电子论坛(原ourAVR/ourDEV) ( 粤ICP备09047143号 )

GMT+8, 2017-11-18 21:54

阿莫电子论坛, 原"中国电子开发网"

© 2004-2016 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表