基于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:09 编辑
还有示波器的波形分析 这张图上的电流明显看出在换相时刻出现异常,电流下降太快,原因是换相时刻有50~100us的下桥间隙,导致电流通过上桥续流二极管到达母线,对母线充电 本帖最后由 qq490455545 于 2013-8-13 19:05 编辑
这是对上面问题的补充,可以看到实际测得的图像,确实在换相时刻有57us的空隙。绿色线是W相相电流,黄色和红色分别是U相和V相下桥载波。 没人来吗?我在玩单机? qq490455545 发表于 2013-8-13 19:06 static/image/common/back.gif
没人来吗?我在玩单机?
楼主你的电机有转速传感器吗?
你用的电阻还是霍尔测的电流呢? 楼主用的什么驱动电路?用的驱动芯片还是分立元件? kmani 发表于 2013-8-13 20:46 static/image/common/back.gif
楼主你的电机有转速传感器吗?
你用的电阻还是霍尔测的电流呢?
电机是内部有位置传感器的,用的是电流传感器,电流传感器内部是霍尔实现的 dxgdsx 发表于 2013-8-13 21:55 static/image/common/back.gif
楼主用的什么驱动电路?用的驱动芯片还是分立元件?
用的是IPM模块驱动电机。 qq490455545 发表于 2013-8-13 22:02 static/image/common/back.gif
用的是IPM模块驱动电机。
呃,好高端。我还是用的IR2130。 dxgdsx 发表于 2013-8-13 22:07 static/image/common/back.gif
呃,好高端。我还是用的IR2130。
这也不见得就高端,只是产品设计角度考虑的 楼主示波器不错 wajlh 发表于 2013-8-13 22:15 static/image/common/back.gif
楼主示波器不错
公司的,好用~ 本帖最后由 dxgdsx 于 2013-8-13 22:20 编辑
请教楼主如何通过转速PID得到参考电流?实际中依据什么原则? dxgdsx 发表于 2013-8-13 22:19 static/image/common/back.gif
请教楼主如何通过转速PID得到参考电流?实际中依据什么原则?
我其实也不懂。这个问题留待大神回答了,不过我是这么用的,速度环的输出,作为电流环的设定值,电流采样值作为电流环的采样值。 qq490455545 发表于 2013-8-13 22:27 static/image/common/back.gif
我其实也不懂。这个问题留待大神回答了,不过我是这么用的,速度环的输出,作为电流环的设定值,电流采样 ...
我之前是这样做的,转速做PI控制,电流只做限幅控制。 dxgdsx 发表于 2013-8-13 22:19 static/image/common/back.gif
请教楼主如何通过转速PID得到参考电流?实际中依据什么原则?
调节转速,需要用加速度,即扭矩。
在BLDC中,扭矩和电流成正比
供参考 LZ这种双环的系统,一般先调内环,想办法加负载,先把内环调好(动态,稳态)。 823032003 发表于 2013-8-13 22:38 static/image/common/back.gif
调节转速,需要用加速度,即扭矩。
在BLDC中,扭矩和电流成正比
供参考
也就是说电流和转子的加速度相关。怪不得在堵转的电流很大,发烫。 823032003 发表于 2013-8-13 22:40 static/image/common/back.gif
LZ这种双环的系统,一般先调内环,想办法加负载,先把内环调好(动态,稳态)。 ...
我也尝试做了单电流环,只是没负载,用手堵转电机这样做的,发现不论怎么调都不能起到很好的效果,要么PI大了现象就是一捏捏不死,但是捏死了就出现震荡,一冲一冲,不能稳定输出电流。要么就是PI小了,一捏就死,从示波器上看电流波形就是阶梯减小。郁闷的很。 qq490455545 发表于 2013-8-14 08:34 static/image/common/back.gif
我也尝试做了单电流环,只是没负载,用手堵转电机这样做的,发现不论怎么调都不能起到很好的效果,要么P ...
内环还是要单独调好的,哪怕单一个P调节也行,不然就干脆不要电流环了直接单闭环。如果把电机捏死都不能出平稳的电流的话,可以看一下这时候的电流波形,看看是不是PWM频率太低了。 823032003 发表于 2013-8-13 22:40 static/image/common/back.gif
LZ这种双环的系统,一般先调内环,想办法加负载,先把内环调好(动态,稳态)。 ...
尼美根星球的大侠,地球生活还可以吧。等哪天地球不行了,你带我去你的星球..
我也觉得电流只做限幅就可以了。 kmani 发表于 2013-8-16 23:07 static/image/common/back.gif
尼美根星球的大侠,地球生活还可以吧。等哪天地球不行了,你带我去你的星球..
我也觉得电流只做限幅就可 ...
不做电流环的话,带动态负载的情况下转速控制性能相对会差一点,也还好 能否共享原理图啊?谢谢楼主了! 对电流采样电路很感兴趣。
用什么运放,怎么隔离? K.O.Carnivist 发表于 2013-8-16 18:49 static/image/common/back.gif
内环还是要单独调好的,哪怕单一个P调节也行,不然就干脆不要电流环了直接单闭环。如果把电机捏死都不能 ...
单电流环现在已经调好了,开始是由于理解错误,以为调节不好。双环也能达到限幅的效果,只是响应太慢了点 djkc 发表于 2013-8-17 21:50 static/image/common/back.gif
能否共享原理图啊?谢谢楼主了!
由于这个是公司的一个正式产品,原理图不方便给出,不好意思~ john78 发表于 2013-8-17 22:27 static/image/common/back.gif
对电流采样电路很感兴趣。
用什么运放,怎么隔离?
就是用一个电流传感器采样,经过分压电路直接接到单片机的AD脚。电流传感器内部有放大电路。 你用的这种控制算法,不会有太好的控制性能。 kmani 发表于 2013-8-19 12:17
你用的这种控制算法,不会有太好的控制性能。
我觉得这个是简单实用的转速控制方法里面抗负载扰动最好的了啊 K.O.Carnivist 发表于 2013-8-19 12:34 static/image/common/back.gif
我觉得这个是简单实用的转速控制方法里面抗负载扰动最好的了啊
PID抗负载瞬间扰动主要依靠的是D,你能保证你的D参数调整的能瞬间补偿外界干扰吗?而且D对噪声很敏感。
kmani 发表于 2013-8-19 12:38
PID抗负载瞬间扰动主要依靠的是D,你能保证你的D参数调整的能瞬间补偿外界干扰吗?而且D对噪声很敏感。
...
呃咱俩说的是一回事不……我以为您说的lz的算法指的是电流PI加转速PI,相对于电流只做限幅来说,抗负载扰动要好一些 我想请教一下楼主如何在示波器上看PI值调的好不好的?你有关PI太大和太小的那两张图是沟的哪个位置测出来的? 示波器很好,好几万的家伙啊。很好用
漂亮的示波器!! 我也是觉得的示波器牛 楼主,能加个好友吗? 我QQ6824832,做电机控制的,想请教一下你的电流环的问题
对PID还是懵懂,因为我的应用问题,我想在重载的时候能最大扭矩输出,1、当我负载很小的时候,相电流没达到限流值,PID应该是怎么设置目标值?2、当我负载达到,相电流进入限流值,PID是怎么设置?同时这个时候为了得到最大扭矩,我开管子方式是否有变化?3、当我负载很重,速度降到几十转的时候,如何能在保证电流限制不变的情况下,使电机扭矩达到很大? 楼主,我也在做BLDC电机控制,然后现在做的事开环控制,遇到了一个问题,因为我拖动时一个400w的 带1:10减速箱的电机,然后现在使用hall6步换向,一直正转或者一直反转,电机调速什么的都很好,但是一旦发生正反转切换就会有卡顿,减速箱就发出咔的一声,请问一下这个问题您遇到过没有,可能是什么原因造成的? 来支持下楼主 自己的电机还处于第一步,希望一切顺利!!!!!!!!!!!!! 这种示波器用起来很爽 这个要用多段pid,就是pid参数有几组,堵转时p调小,平时p可以大一些,另外,启动器也可以分几个段,刚开始p大一些,快到设定转速时把p调小! LZ示波器什么型号 好东西 学习了 示波器很特别…… 谢谢,学习中 MARK:无刷电机 速度环+电流环 示波器不错。 不知道楼主双闭环的问题解决没?求教中! 求楼主调节好的电流、速度环波形,以供参考 你这个方波控制还做双环?而且电流补偿应该没做,每次换相电流向下掉那么多,还是用FOC控制吧 8k的频率太低,普遍BLDC控制频率为16~12K,单片机速度够的话都是做16k {:victory:} 最近要研究一下。 qq490455545 发表于 2013-8-19 09:42
单电流环现在已经调好了,开始是由于理解错误,以为调节不好。双环也能达到限幅的效果,只是响应太慢了点 ...
对电流环很感兴趣呀,能不能分享一下调节电流环的过程啊 最近在学习这个,现在需要用位置控制位置,也不知道应该用什么算法 普通的PI是解决不了这个问题的,要用分段PI或者是模糊PI qq490455545 发表于 2013-8-13 19:02
这张图上的电流明显看出在换相时刻出现异常,电流下降太快,原因是换相时刻有50~100us的下桥间隙,导致电流 ...
我的电流波形 也像这样,下桥怎么会有间隙? 楼主这个是驱动多大电机,转速 和功率 这个示波器感觉好高级 收藏参考一下 有代码下载的帖子都会火啊这是必然错对 MARK:无刷电机 速度环+电流环 感谢分享 谢谢分享。 qq490455545 发表于 2013-8-13 18:04
还有示波器的波形分析
从你反电动势的波形来看的话,你这个电机用FOC驱动会更好,FOC做成电流转速双闭环效果是比较好的。
做成6步换相的方波驱动,做成单转速环就行了,电流环做成抑制的,默认转速环调节,一旦负载加大使电流环输出小于转速环时,转速环接管,这样既有很好的调速效果又可以有效抑制过大的电流。 不错,图片很详细哈 挺好的资料的,顶一下 mark 标记 {:smile:}谢谢!现在也是学习BLDC
感谢楼主分享,请教您一个问题,请问电机绕组电流波形中那个0 平台是因为什么原因存在的?
如果这两个0平台不对称(一边有,一边没有,)请问可能是什么原因导致的,谢谢
1071393201@qq.com 本帖最后由 marshallemon 于 2017-1-1 17:15 编辑
也玩了一下直流电机的速度闭环,PI控制,稳态误差+ - 3个脉冲以内,100线的光栅码盘
好东西 qq490455545 发表于 2013-8-13 19:04
这是对上面问题的补充,可以看到实际测得的图像,确实在换相时刻有57us的空隙。绿色线是W相相电流,黄色和 ...
示波器 不错嘛 非常好的资料,下载下来参考,感谢! 好东西,mark了
顶,作参考 本帖最后由 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中断,希望楼主或各位高手能指点迷津 非常感谢 困惑于优先保证转速,还是转矩,直接调节PWM占空比能否达到闭环的要求? MAKE,BLDC控制! BLDC控制! 很不错的参考程序 总觉得横河的示波器很有设计感,楼主的是什么型号 MAKE,学习了 Mark 学习 好东西,学习了 正在学习,谢谢楼主分享! 波形很漂亮 回楼上我这个电流波形很糟糕 示波器很6 BLDC电流环真的不容易 谢谢分享!!!! 学习一下 我也下来调调看 用单电阻采集电流试试 这个帖子还在持续着,好贴。 有没有人玩无位置传感器的驱动? 不明觉厉 MARK:无刷电机 速度环+电流环 我就看了下波形图{:biggrin:}
页:
[1]
2