我的系统具体是这样子的:使用光电编码器,电机转动的时候,会带动码盘旋转,因为一黑一白条纹的关系,所以码盘会
引起A,B两个光电器件产生波形。MCU根据A,B反馈的两个波形,就可以知道电机转动的位置。我目标是需要在指定的位置
下停止电机转动。
这是外国多年前的方案,我们是参考它的设计。电机控制我看过很多资料,本来想用三环控制,但外国公司的电路设计没有电压反馈,所以我估计不需要电流环,只是用速度环和位置环。在调整速度环的时候,采样时间使用1ms,然后PWM是用最大占空比,可以检测到系统最大速度是每1ms走70多个编码器反馈的信号。
参考多方面资料,我需要先整定速度环,将给定速度值设置为50,
意思就是每1ms的速度是50,这样从而可以保证每采样一次就使用一次PID调整。
在速度环调整时,我参考网上的资料,先使用纯比例模式,
下面是我详细的调试过程:
(1)KP=60, KI=0,KD=0时,检测到的速度数值在44和45上摆动;
(2)KP=80, KI=0,KD=0时,检测到的速度数值是以45为中心振荡,振荡区间是【44,47】
(3)KP=100,KI=0,KD=0时,检测到的速度数值也是以46为中心振荡,震荡区间是【44,49】;
(4)KP=150,KI=0,KD=0时,检测到的速度震荡区间是【43,50】;
(5)KP=180,KI=0,KD=0时,检测到的速度震荡区间是【43,51】;
(6)KP=250,KI=0,KD=0时,检测到的速度震荡区间还是【43,51】,但震荡曲线没有(5)那么正规了
后面我继续调试,KP=400,1000,10000,发现震荡很没规律了。
而后,我继续添加积分项,KP=66,KI=0.47,KD=0的时候,感觉好像最好了,但系统的也不能稳定在给定值50。
结论:
在纯比例模式下,发现,无论设置KP值多大,都无法得到以给定值50为中心的震荡曲线,而且也不会最后稳定在给定的速
度值;增大KP值,也不能加快由静止起动到达给定速度50的响应时间。
有几个问题:
1、对于这个系统,我只用速度环和位置环行不行呢?
2、纯比例模式下,是不是必须调整到已给定值为中心的振荡的曲线呢?
如果不是,那么我上面的调试过程,哪个值算是比较合适呢?
3、为什么我看很多资料,好像都说纯比例模式下,运行一段时间后,都会稳定在给定值,但我无论怎么设置KP值,系统都
在振荡。在PI模式下,KP,KI的值无论怎么变化,系统也还在振荡,是不是我哪里调不好呢?想不通啊!!!
第一次接触PID自动控制,完全没经验,已经调试了很长时间了,希望有好心人指点,万分感激。
回复内容:
对:欣欣向荣关于位置控制需三环,位置环、速度环及电流环。转速控制需二环,速度环、电流环,过去晶闸管作为主电路控制元件有低速续流问题还需考虑用三环的。缺乏电流环控制系统是不稳定的,使之功率输出至电机端的电压不能得到迅速的控制,而电流环的响应要比速度环快非常的多,使电机端电压迅速的得到稳定。转速控制的经典PID串行控制方式上世纪四十年代末就给确定下来了。经典的控制在教科书里有明确的演示。 内容的回复:
感谢你的回复,开始的时候,我也认为需要三环控制。
但电流环不是需要相应的电路支持吗?而系统没有电路采样电流电压,那么就没有电压电流的反馈。
没有电流反馈,如何进行电流环控制呢?
此方案是外国公司的,而且也有现成的产品,所以我猜想是没有电流环,
或者电流环在控制芯片上已经做了处理。
我现在是直接用速度环的输出作为PWM信号控制电机。
所以就有疑惑了,没有电流环,到底行不行呢?
我现在用速度环直接控制输出PWM,是不是因为没有电流环的关系,导致速度无法达到稳定呢?
结论:在纯比例模式下,发现,无论设置KP值多大,都无法得到以给定值50为中心的震荡曲线,而且也不会最后稳定在给定的速度值
任何一本将PID控制的书上都会有这样的说法,纯比例控制不可能消除静差,所以需要引入积分。
增大KP值,也不能加快由静止起动到达给定速度50的响应时间。
任何系统都会有自己的极限响应能力,当然是不可能靠单纯调整控制参数超越这个条件。就算你不进行计算,直接给出最大阶跃输出,电机的实际速度也不可能真的阶跃变化。
1、对于这个系统,我只用速度环和位置环行不行呢?
无所谓行不行,只有好不好。或者说,针对特定的要求标准来讨论行与不行。对于常见的三层闭环控制,省掉速度环的见过不少,省掉电流环的不常见。
回复内容:
对:欣欣向荣关于我现在用速度环直接控制输出PWM,是不是因为没有电流环的关系,导致速度无法达到稳定呢?问题很明了恒速控制就是因为没有电流环。但可以作为恒扭矩控制,或者叫恒功率控制。对稳速没有很大的要求。内容的回复:
你好,你说得没错,正常情况下,是三环控制。但此方案是外国公司的,机械,电子电路都是外国公司的,
已经有成功案例,可以精确控制电机。唯一不知道的就是软件怎么做。
所以我一直也很矛盾。如果有电流环,那必然有电路反馈,你觉得是不是呢?
使用的驱动芯片是这个http://www.icpdf.com/PartnoView.asp?id=7929564_834672
我看了很多遍datasheet,芯片里面有个参考电压RNF1S,有个采样电阻,
我估计芯片本身已经做了电流的控制,但我没什么经验,我不敢太肯定。
而我现在控制的是直接从MCU发送PWM给该芯片来控制电机。
我的理解是,假如PWM需要自己发出,那么芯片应该没有电流环吧?!
所以我一直都有点矛盾。
现在我也只能不管电流环了,直接从速度环输出作为控制PWM,
但这样控制我又控制不了电机匀速,只能说是接近匀速。
我不知道我哪个环节出现问题,希望大神们可以帮帮小弟,万分感激...
回复内容:
对:刘岩利关于结论:在纯比例模式下,发现,无论设置KP值多大,都无法得到以给定值50为中心的震荡曲线,而且也不会最后稳定在给定的速度值任何一本将PID控制的书上都会有这样的说法,纯比例控制不可能消除静差,所以需要引入积分。 增大KP值,也不能加快由静止起动到达给定速度50的响应时间。任何系统都会有自己的极限响应能力,当然是不可能靠单纯调整控制参数超越这个条件。就算你不进行计算,直接给出最大阶跃输出,电机的实际速度也不可能真的阶跃变化。 1、对于这个系统,我只用速度环和位置环行不行呢?无所谓行不行,只有好不好。或者说,针对特定的要求标准来讨论行与不行。对于常见的三层闭环控制,省掉速度环的见过不少,省掉电流环的不常见。内容的回复:
你好!谢谢你的热心回复!
“任何一本将PID控制的书上都会有这样的说法,纯比例控制不可能消除静差,所以需要引入积分。”
我也试过加入积分了,但调整的后果也不好,系统还是会在给定值上下震荡。
调试效果是这样的:给定值50,KP=66,KI=0.47,KD=0的时候,效果好像算是比较好,速度变化如下:
000 001 001 006 009 009 012 014 016 018 019 022 024 026 027 030
031 033 035 036 039 040 042 044 046 048 050 051 050 049 048 049
049 050 049 050 049 050 050 049 049 050 050 050 050 048 049 049(后面数据省略)
之后的数据,会一直稳定在49,50,51这三个值中,其中值50相对多一点。后面省略的数据间中会稍微出现48或者52。
假定当这几个参数值满足,我修改给定值为70的时候,开始由静止加速的时候出现超调了。
所以假当这个几个值在给定值50下成立,但给定值70就不成立了。
什么原因呢???
我的代码:
初始化pid如下:
Spid.sp = 50; //sp是给定速度值
Spid.pv = 0; //pv是实际速度值
Spid.lp = 0; //lp是前一个PID输出值
Spid.KP = 0; //比例
Spid.KI = 0; //积分
Spid.KD = 0; //微分
Spid.error【0】 = 0; //当前偏差
Spid.error【1】 = 0; //上次偏差
Spid.error【2】 = 0; //上上次偏差
采样时间是1ms,每1ms就中断一次,下面的pid处理是在中断函数里。
Spid.pv = TIME0; //TIME0是MCU定时器计数外部编码器波形的数目
Spid.error【0】 = Spid.sp - Spid.pv; //计算偏差
output = Spid.KP * (Spid.error【0】 - Spid.error【1】); //output最后保存pid输出值。
output += Spid.KI * Spid.error【0】;
output += Spid.KD * (Spid.error【0】 - (Spid.error【1】 * 2) + Spid.error【2】);
output += Spid.lp; //这里是采用增量式PID
Spid.lp = output; //保存,作为下一次PID调整使用
if(output > 1000) output = 1000; //PWM值允许的区间是【0,1000】
else if(output < 0) output = 0;
PWM = output; //PWM是MCU的一个定时器,用于输出PWM控制电机。
Spid.error【2】 = Spid.error【1】;
Spid.error【1】 = Spid.error【0】;
说明:
直接将速度环经过PID转换后的值作为PWM的值,来控制直流电机。
而PWM是MCU定时器产生的,PWM会固定一个频率,
所以占空比0%对应定时器的值是0,占空比100%对应的值是1000。
也就是说PWM的值允许区间是【0,1000】
例如给定速度值是50,实际测出的速度值是10,
纯比例作用下,假如取KP值100,
那么此时PID的转换后的值就是(50-10)*100=4000。
但4000超出PWM的区间,所以这个时候取PWM最大值1000作为输出。
我的这个设计有没有问题呢??谢谢大家了》。。