智能车制作

标题: 电机PID攻破~~~~~~~~~~ [打印本页]

作者: yyyzrxh    时间: 2014-4-19 21:54
标题: 电机PID攻破~~~~~~~~~~
附上我的电机PID程序,小伙伴们看看哪儿出问题了。我的PWM范围0-255,Kp暂时给1,Ki和Kd给0

cch1=setpoint;  cch2=feedback;

if(cch1-cch2<=3&&cch1-cch2>=3)     //当偏差很小时,认为没有误差、设置调节死区
          cch2=cch1;   
        M_E0=cch1-cch2; //增量计算
        M_Error0=M_E0-M_E1;
        M_Error1=M_E1-M_E2;
        M_Inc_PID=(signed int)((M_Kp*M_Error0)+(M_Ki*M_E0)+(M_Kd*(M_Error0-M_Error1))); //修改的公式,

        M_E2=M_E1;            //存储误差,用于下次计算
        M_E1=M_E0;

        PID_Duty+=M_Inc_PID;  //speed=speed+iiIncpid
        if(PID_Duty>=PWM_MAX) //对电机PWM限幅
          PID_Duty=PWM_MAX;
        if(PID_Duty<=-PWM_MAX)
          PID_Duty=-PWM_MAX;

         PWMDTY45=PID_Duty;


作者: yyyzrxh    时间: 2014-4-19 21:55
现在给速度80,返回的一直在35左右,直接怒了,是不是公式错了
作者: yyyzrxh    时间: 2014-4-19 22:11
会不会是我把P当I了?????
作者: 两座山_-在路上    时间: 2014-4-20 00:18
明显p小了
作者: 两座山_-在路上    时间: 2014-4-20 00:21
你增大p就会发现反馈值变大了,直到目标值左右震荡
作者: Jyoun    时间: 2014-4-20 00:30
if(cch1-cch2<=3&&cch1-cch2>=3) 是不是等于if(1)?
作者: 工大飞虎队007    时间: 2014-4-20 00:36
Jyoun 发表于 2014-4-20 00:30
if(cch1-cch2=3) 是不是等于if(1)?

哈哈

作者: Jyoun    时间: 2014-4-20 00:39
本帖最后由 Jyoun 于 2014-4-20 00:40 编辑
工大飞虎队007 发表于 2014-4-20 00:36
哈哈

还真不是,是if(cch1-cch2<=3&&cch1-cch2>=3) 等于if(cch1-cch2==3)

作者: 工大飞虎队007    时间: 2014-4-20 00:43
Jyoun 发表于 2014-4-20 00:39
还真不是,是if(cch1-cch2=3) 等于if(cch1-cch2==3)



作者: Jyoun    时间: 2014-4-20 00:46
式子没问题,也没看出来哪里有问题。
作者: 黯伤人    时间: 2014-4-20 03:01
if(cch1-cch2<=3&&cch1-cch2>=3) ,cch1-cch2小于等于3并且大于等于3,也就是cch1-cch2等于3才是死区
作者: czr27    时间: 2014-4-20 07:54
i要给一个比较小的值才会消除err
作者: 若苦似甜    时间: 2014-4-20 09:05
没看出来
作者: 蛋蛋不孤单    时间: 2014-4-20 16:17
你们编码器测到的值准不准?我用DMA测的,右轮比较稳定,左轮数据一在跳,还没找到原因
作者: wuguangnan110    时间: 2014-4-20 17:37

作者: 1215328729    时间: 2014-4-20 17:55
kanbu dong

作者: yyyzrxh    时间: 2014-4-21 11:12
标题: RE: 电机PID攻破~~~~~~~~~~
Jyoun 发表于 2014-4-20 00:30
if(cch1-cch2=3) 是不是等于if(1)?

粘错了,是-3和3,哈哈,讨论的真有意思了,其实是我的手误,刚才我换调Ki,居然很好用????Kp和Kd给的0,这不科学!
作者: 回忆的沙漏    时间: 2014-4-24 16:00
yyyzrxh 发表于 2014-4-21 11:12
粘错了,是-3和3,哈哈,讨论的真有意思了,其实是我的手误,刚才我换调Ki,居然很好用????Kp和Kd给的 ...

我是新手,请问死区是什么?有什么作用?     谢谢
作者: △ABC≌△DEF    时间: 2014-4-24 22:24
那个p的值要是稍微调小一点呢,能否更稳定一点啊
作者: yyyzrxh    时间: 2014-4-24 22:29
好了,跟随的不错了
作者: 密┽雨恬颜    时间: 2014-6-15 11:01
yyyzrxh 发表于 2014-4-24 22:29
好了,跟随的不错了

我们调电机pid的时候也是这样,难道增量式的pid里面的i才是p?可是最后输出是位置式的输出啊!无法理解!能给讲讲吗?大神!

作者: an~    时间: 2014-6-15 11:04
为什么我们调节PID的时候,先调P不能给带小数点的数啊,只能给整数。当给了小数点的数,脉冲值就一直向上加。。。超过设定值。。。
作者: zhou1994    时间: 2014-6-15 11:56
你用的增量式的,p是这次和上次的差,不管你怎么调p  只要没有差就不会有输出变化,你要调i  就是本次的差,这才能让你的输出保持在目标值附近。你看看3个参数的作用,而不要看到别人说先调p就只会先给p值
作者: yyyzrxh    时间: 2014-6-16 09:13
密┽雨恬颜 发表于 2014-6-15 11:01
我们调电机pid的时候也是这样,难道增量式的pid里面的i才是p?可是最后输出是位置式的输出啊!无法理解! ...

P就是P,I就是I,先调个P,大约跟随到目标值的80%左右,加上I就能跟随到目标值了[attach]60880[/attach]

作者: 密┽雨恬颜    时间: 2014-6-16 10:57
yyyzrxh 发表于 2014-6-16 09:13
P就是P,I就是I,先调个P,大约跟随到目标值的80%左右,加上I就能跟随到目标值了

,谢谢!
作者: WU_WANG_WO    时间: 2014-6-27 16:26
你的cch指的是什么




欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2