ln08136207 发表于 2012-5-18 18:01:11

PID 控制 真真愁死我也

PID 控制舵机
最近在弄PID控制舵机,问题不断,响应曲线太差
请大家指教一下。先上图
如图1
1.黄色的响应曲线是我的目标曲线,蓝色的曲线是我目前调出的。
如果我要得到黄色的无超调响应曲线,那么我的Kp项就必须设的很小,这样一来,我的响应时间就太长了。
现在我没有 I 项,我把 P 项设的很小,虽然超调小,但是响应时间长,我加上 D 项,想以此提高响应速度,但是似乎没有效果,如图2.
2.因为规定(虽然在大家眼里是很简单的东西),我无法把程序贴出来给大家看。现在有个疑问:
   在用单片机实现微分时:
                        {
                                    derror = error - lasterror;
                                    lasterror = error;
                                    }
   但是也有人告诉我应该是这样:
                     {
                                     derror = error - 2 *lasterror + 上上次的误差值;
                     }
请问哪种是对的?
3. 调试中的图。
图3,图4,图5
4.最后想请教大家,分享一下你们的成功经验,帮我找出一条路来。
                                    

tiancaigao7 发表于 2012-5-18 18:35:38

那两个都是正确的路,第一个是位置式的PID,第二个是增量式PID

ln08136207 发表于 2012-5-18 19:46:32

tiancaigao7 发表于 2012-5-18 18:35 static/image/common/back.gif
那两个都是正确的路,第一个是位置式的PID,第二个是增量式PID

能不能指点我一下,我比较头大,调了一周了,结果相差很大

tangxh 发表于 2012-5-18 21:34:00

ln08136207 发表于 2012-5-18 19:46 static/image/common/back.gif
能不能指点我一下,我比较头大,调了一周了,结果相差很大

连续PID的输出方程为:u(t)=Kp*e(t)+Ki*∫e(t)dt+Kd*de(t)/dt------------------------(0)式

离散化后,为:
            u(k)=Kp*e(k)+Ki*(e(0)+e(1)+...+e(k))+Kd*(e(k)-e(k-1));--------------(1)式

k-1时刻,u(k-1)=Kp*e(k-1)+Ki*(e(0)+e(1)+...+e(k-1))+Kd*(e(k-1)-e(k-2)); --------------(2)式

(1)式减去(2)式,△u(k)=Kp*(e(k)-e(k-1))+Ki*e(k)+Kd*(e(k)-2e(k-1)+e(k-2))---------(3)式

(1)式就是位置式离散pid;(3)式就是增量式离散pid。

PS:(0)式中KP,KI,KD和(1)(2)(3)中的三个参数不相同。
                  

ln08136207 发表于 2012-5-19 10:18:26

tangxh 发表于 2012-5-18 21:34 static/image/common/back.gif
连续PID的输出方程为:u(t)=Kp*e(t)+Ki*∫e(t)dt+Kd*de(t)/dt------------------------(0)式

离散化后, ...

谢谢指教,能分享一下您的调试经验吗?

ln08136207 发表于 2012-5-19 11:18:07

我用增量式算法,我在 P 项基础上增加 D 项用以提高响应速度,但是好像全无作用,求各位指教。

tangxh 发表于 2012-5-19 12:15:13

ln08136207 发表于 2012-5-19 11:18 static/image/common/back.gif
我用增量式算法,我在 P 项基础上增加 D 项用以提高响应速度,但是好像全无作用,求各位指教。 ...

KP影响响应速度,KI可以消除静差,KD用于抑制超调波动。
主要多试多凑吧。。论坛里面有温度控制pid的调试过程,z-n法整定。你搜索看看。

ln08136207 发表于 2012-5-21 11:14:33

tiancaigao7 发表于 2012-5-18 18:35 static/image/common/back.gif
那两个都是正确的路,第一个是位置式的PID,第二个是增量式PID

你好,我用PID控制舵机,加上微分项用来加快响应速度,但是好像完全不起作用,微分系数大了的话会震荡,但是完全没有提高响应速度,能不能教我一下

junrong 发表于 2012-5-21 20:49:32

学习了。。。。

xue_xi_zhong 发表于 2012-5-22 09:38:06

我也在整的头大,学习了

ln08136207 发表于 2012-5-22 11:06:01

xue_xi_zhong 发表于 2012-5-22 09:38 static/image/common/back.gif
我也在整的头大,学习了

调出什么经验没?

xue_xi_zhong 发表于 2012-5-22 15:37:35

ln08136207 发表于 2012-5-22 11:06 static/image/common/back.gif
调出什么经验没?

没有,要不调大了,要不就调小了

ln08136207 发表于 2012-5-23 10:32:21

现在,调出一个满意波形,但是又遇到一个问题,到达期望位置后,电机仍然在调,虽然看不出,但是能听到声音

ln08136207 发表于 2012-5-23 10:54:59

本帖最后由 ln08136207 于 2012-5-23 10:56 编辑

tangxh 发表于 2012-5-19 12:15 static/image/common/back.gif
KP影响响应速度,KI可以消除静差,KD用于抑制超调波动。
主要多试多凑吧。。论坛里面有温度控制pid的调 ...

你好,我现在遇到一问题,我可以调出如图6这样的波形,但是出现一个新问题,电机到达期望位置后 ,仍然会一直不断的调(还没有抖动),虽然看不出来,但是能听到声音,
请问能不能帮我理一下思路。

okARM 发表于 2012-5-23 10:58:22

数字舵机会一直有响声的

okARM 发表于 2012-5-23 11:00:13

KD你调到会震动,说明是有效果的吗,PID关键在多调试,KD还有一个滞后算法

okARM 发表于 2012-5-23 11:03:58

响声和你的分辨率有关系

ln08136207 发表于 2012-5-23 11:04:06

okARM 发表于 2012-5-23 10:58 static/image/common/back.gif
数字舵机会一直有响声的

我对比了一下,别的舵机同样的曲线,他们没有音,当然他们用塑料齿轮,会减小声音,但是我想差别不至于差这么大

okARM 发表于 2012-5-23 11:05:42

你想过分段设计系数吗?

okARM 发表于 2012-5-23 11:06:42

不同的误差值配置不同的系数

okARM 发表于 2012-5-23 11:07:04

说的够明白了吧

okARM 发表于 2012-5-23 11:11:39

还有一个问题就是舵机齿轮之间的间隙问题,影响是非常大的,如果是第一次调,建议用你刚才的成品的舵机试试你现在的程序,看效果,你就知道是结构的问题还是程序问题

marshallemon 发表于 2012-5-23 11:28:46

如果我要得到黄色的无超调响应曲线,那么我的Kp项就必须设的很小,这样一来,我的响应时间就太长了。

看来LZ都没有搞清楚PID中各个参数的作用,积分项是有助于你的曲线存在静差时,向目标曲线靠近的

tangxh 发表于 2012-5-23 11:44:35

ln08136207 发表于 2012-5-23 10:54 static/image/common/back.gif
你好,我现在遇到一问题,我可以调出如图6这样的波形,但是出现一个新问题,电机到达期望位置后 ,仍然会 ...

抖一点没事,你用手碰一下可能就不抖了。。。。

ln08136207 发表于 2012-5-23 11:51:39

okARM 发表于 2012-5-23 11:03 static/image/common/back.gif
响声和你的分辨率有关系

现在我如果不加微分项,那么,就没有声音(或者说非常小,听不到)。当我的微分系数加到0.3时就会有声音了。问题是我的微分系数加到6才会得到一个超调在3%以内的曲线。
不好意思回复慢了,他说我是新手,每小时只能发5帖,我只好再等一小时。

okARM 发表于 2012-5-23 11:54:41

在误差很小的时候不KD为0就是了

ln08136207 发表于 2012-5-23 11:58:43

okARM 发表于 2012-5-23 11:07 static/image/common/back.gif
说的够明白了吧

我试过,当初在超调和响应时间中取平衡的时候想过这个方法,也试过,但是后来结果不理想,就没用,我也知道这样理论上是可行的,实际也应该可行,但是我试过,效果不理想。不知能不能加你QQ,我是新手,每小时发帖不能超过5帖,不方便交流。

okARM 发表于 2012-5-23 12:02:44

查看我资料有联系方式

okARM 发表于 2012-5-23 12:08:00

坛规是不能直接贴联系方式的{:lol:}

ln08136207 发表于 2012-5-23 12:09:06

okARM 发表于 2012-5-23 12:02 static/image/common/back.gif
查看我资料有联系方式

我的积分不够,不能发消息,也不能加好友,

okARM 发表于 2012-5-23 12:10:37

吃饭先,回来再搞

ln08136207 发表于 2012-5-23 12:15:37

本帖最后由 ln08136207 于 2012-5-23 12:17 编辑

marshallemon 发表于 2012-5-23 11:28 static/image/common/back.gif
如果我要得到黄色的无超调响应曲线,那么我的Kp项就必须设的很小,这样一来,我的响应时间就太长了。

看来 ...

我是新手,但是基本概念我还是理解的,就像您说的,如果我要得到无超调响应曲线,Kp就要设的很小,这样我的响应时间就长了。
现在我设的Kp能够满足我对响应时间的要求(有15%的超调),我加上微分项 D 会慢慢的减小超调,直至达到我的要求,这时候问题就来了
虽然超调小了,但是电机一直在调,虽然不抖,但是,一直会有声音。请教一下前辈,能否指点一下。

okARM 发表于 2012-5-23 13:01:23

吃饭回来了,把你的联系方式发出来

ln08136207 发表于 2012-5-23 13:03:52

okARM 发表于 2012-5-23 13:01 static/image/common/back.gif
吃饭回来了,把你的联系方式发出来

linanwuxi123@gmail.com

okARM 发表于 2012-5-23 13:07:47

还是我说的那个问题,这个细微的问题结构影响很大,如过间隙大那么总是在小范围里波动,这也就是为什么微分在这里产生了副作用

ln08136207 发表于 2012-5-23 13:24:12

okARM 发表于 2012-5-23 13:07 static/image/common/back.gif
还是我说的那个问题,这个细微的问题结构影响很大,如过间隙大那么总是在小范围里波动,这也就是为什么微分 ...

如果是你说的机械部分的问题,那么怎样解决呢?

okARM 发表于 2012-5-23 13:28:12

结构谁负责的?这种问题就是拿好的成品结构调试

ln08136207 发表于 2012-5-23 13:30:44

okARM 发表于 2012-5-23 13:28 static/image/common/back.gif
结构谁负责的?这种问题就是拿好的成品结构调试

改结构的成本太大了,我想问问电子部分有什么办法吗?

okARM 发表于 2012-5-23 13:34:16

如果确定是结构的差异,那基本软件就无能为力了,那结构必须改,这东西不可能一次开好的

okARM 发表于 2012-5-23 13:34:33

如果确定是结构的差异,那基本软件就无能为力了,那结构必须改,这东西不可能一次开好的

ln08136207 发表于 2012-5-23 15:28:28

刚刚有一个工程师说,发出的噪声是过零点噪声,但他没讲解决方法,不知哪位高工知道方法

whh7733 发表于 2012-5-23 15:50:03

???? 噪声和pid有什么关系???

ln08136207 发表于 2012-5-23 15:58:23

whh7733 发表于 2012-5-23 15:50 static/image/common/back.gif
???? 噪声和pid有什么关系???

这里的“噪声”是指电机到达期望值之后会不停的调,机械就会发出“吱吱”的声音,当然我表述为噪声,可能大家还有不同的说法,但重点是,教教我怎么解决吧。

ifare 发表于 2012-5-23 16:12:42

飞过。。。。。。

whh7733 发表于 2012-5-23 16:51:38

ln08136207 发表于 2012-5-23 15:58 static/image/common/back.gif
这里的“噪声”是指电机到达期望值之后会不停的调,机械就会发出“吱吱”的声音,当然我表述为噪声,可能 ...

那种类型的pid? 你自己写的还是? 反馈的是什么? 位置还是其他物理量?采样速率如何?

ln08136207 发表于 2012-5-23 16:53:55

whh7733 发表于 2012-5-23 16:51 static/image/common/back.gif
那种类型的pid? 你自己写的还是? 反馈的是什么? 位置还是其他物理量?采样速率如何? ...

增量式,自己写,采样速率可调,但是2MS最合适,没其他物理量

okARM 发表于 2012-5-23 17:12:57

核心问题是你这个一直在调整锁不到0,什么叫过0点噪声?

whh7733 发表于 2012-5-23 17:38:55

其实可以分个段

ln08136207 发表于 2012-5-23 20:48:17

whh7733 发表于 2012-5-23 17:38 static/image/common/back.gif
其实可以分个段

现在先不管声音的问题,又有了一个新问题:带负载时静差偏大,如果增大积分项,不带负载时又抖动,呵呵,看来总是在矛盾中求平衡。

okARM 发表于 2012-5-23 22:14:51

矛盾中求平衡,PID就是这样,带负载静差增大,这就是我让你试扭力的原因

okARM 发表于 2012-5-23 22:16:34

可以说舵机里应该没有用积分,你可以试一下成品,你用力掰是不会电流一直增大的

marshallemon 发表于 2012-5-23 23:34:18

积分作用有助于你的比例小的时候向设定值的接近速度,因为积分是一个累加的过程,如果当前实际值相对上一控制周期采集的值变化不大,积分的累加值会增大输出

whh7733 发表于 2012-5-24 00:20:26

ln08136207 发表于 2012-5-23 20:48 static/image/common/back.gif
现在先不管声音的问题,又有了一个新问题:带负载时静差偏大,如果增大积分项,不带负载时又抖动,呵呵, ...

自适应pid·

ln08136207 发表于 2012-5-24 09:18:04

whh7733 发表于 2012-5-24 00:20 static/image/common/back.gif
自适应pid·

能不能给一个自适应PID的实现程序,我加上积分项效果也不好,而且没法进行浮点数运算

ln08136207 发表于 2012-5-24 13:50:59

okARM 发表于 2012-5-23 17:12 static/image/common/back.gif
核心问题是你这个一直在调整锁不到0,什么叫过0点噪声?

好像是你说的问题,无法锁定零点

okARM 发表于 2012-5-24 14:46:30

你再分析一下是什么原因导致的

okARM 发表于 2012-5-24 14:49:03

分析来分析去,要达到你现在的静差要求,你最后发现结构让你没法达到

whh7733 发表于 2012-5-24 23:29:04

ln08136207 发表于 2012-5-24 09:18 static/image/common/back.gif
能不能给一个自适应PID的实现程序,我加上积分项效果也不好,而且没法进行浮点数运算 ...

自适应也是我想完成的东西啊。我现在是想办法在整定过程中自动修改积分相,比例项和微分项~
我qq:286741140,咱们多交流(加德时候说ourdev·pid)

ln08136207 发表于 2012-5-28 15:55:25

whh7733 发表于 2012-5-24 23:29 static/image/common/back.gif
自适应也是我想完成的东西啊。我现在是想办法在整定过程中自动修改积分相,比例项和微分项~
我qq:286741 ...

我的脑袋要成浆糊了,现在舵机总是不停的调,加死区效果也不明显。虽然不抖,但是总有“吱吱”的声音。你进行的怎么样了。。。。。。。。。。。。。。

whh7733 发表于 2012-5-29 13:57:20

ln08136207 发表于 2012-5-28 15:55 static/image/common/back.gif
我的脑袋要成浆糊了,现在舵机总是不停的调,加死区效果也不明显。虽然不抖,但是总有“吱吱”的声音。你 ...

我这个还将就,我这个主要是采样速度不够。
你可以试一下这样: 比如要到30这个值,那么就在27~29和31~33这个区间吧积分项清零

ln08136207 发表于 2012-5-29 14:50:20

whh7733 发表于 2012-5-29 13:57 static/image/common/back.gif
我这个还将就,我这个主要是采样速度不够。
你可以试一下这样: 比如要到30这个值,那么就在27~29和31~33 ...

你起码知道你的问题出在哪里,我这里没有思路,有点无奈

whh7733 发表于 2012-5-29 15:06:37

ln08136207 发表于 2012-5-29 14:50 static/image/common/back.gif
你起码知道你的问题出在哪里,我这里没有思路,有点无奈

各种实验啊···

ln08136207 发表于 2012-5-29 15:11:48

whh7733 发表于 2012-5-29 15:06 static/image/common/back.gif
各种实验啊···

当初觉得原理不难,谁知到越简单的东西越难啊

jiabin1024 发表于 2012-5-29 15:34:53

驱动频率提高点试试看

ln08136207 发表于 2012-5-29 16:23:10

jiabin1024 发表于 2012-5-29 15:34 static/image/common/back.gif
驱动频率提高点试试看

频率提高过,但是几乎没有效果没有。
如图1.是到达期望值后单片机的输出波形,应该是全低的,结果仍然有。我很受伤啊。
图2.是我的阶跃响应曲线。
还请各位不吝赐教。

ln08136207 发表于 2012-12-19 10:33:00

问题解决,还是PID参数调节问题,谢谢各位的帮忙,如果大家也在搞舵机控制,建议大家看看<<自抗扰控制技术>>,我就是在这里找到方法的。

halcyo 发表于 2013-3-21 15:05:15

顶一下~~

jz701209李 发表于 2014-3-29 11:00:08

路过,看看               
页: [1]
查看完整版本: PID 控制 真真愁死我也