智能车制作

标题: 舵机PD求助 ········· [打印本页]

作者: ☆孑与二    时间: 2014-6-7 21:10
标题: 舵机PD求助 ·········
D=error[0]-2*error[1]+error[2];
     P=error[0]-error[1];
     output=(int)(Kp*P+Kd*D);

    error[2]=error[1];//记录上上一次偏差
    error[1]=error[0]; //记录上一次偏差
     error[0]=result;  //读取当前偏差

   error[2];error[1];error[0];为什么这三个值老是相等啊
作者: xhyscqcssllw    时间: 2014-6-7 21:20
观摩中
作者: ☆孑与二    时间: 2014-6-7 21:26
xhyscqcssllw 发表于 2014-6-7 21:20
观摩中

求助啊···
作者: xhyscqcssllw    时间: 2014-6-7 21:30
☆孑与二 发表于 2014-6-7 21:26
求助啊···

这个  我也遇到了 这个  问题   带解决中

作者: 黎明之前    时间: 2014-6-7 21:34
这个貌似不是相等吧    等于是==
作者: 板正的    时间: 2014-6-7 21:35
楼主,你把三个连续赋值语句放到
D=error[0]-2*error[1]+error[2];
     P=error[0]-error[1];
     output=(int)(Kp*P+Kd*D);
上面试一下
作者: 板正的    时间: 2014-6-7 21:35
楼主,你把三个连续赋值语句放到
D=error[0]-2*error[1]+error[2];
     P=error[0]-error[1];
     output=(int)(Kp*P+Kd*D);
上面试一下


作者: ☆孑与二    时间: 2014-6-7 21:44
黎明之前 发表于 2014-6-7 21:34
这个貌似不是相等吧    等于是==

赋值是=啊

作者: ☆孑与二    时间: 2014-6-7 21:46
板正的 发表于 2014-6-7 21:35

还是一样····额

作者: ☆孑与二    时间: 2014-6-7 21:46
板正的 发表于 2014-6-7 21:35
楼主,你把三个连续赋值语句放到
D=error[0]-2*error[1]+error[2];
     P=error[0]-error[1];

还是一样····额

作者: lh_include    时间: 2014-6-7 21:48
差值没有更新
作者: ☆孑与二    时间: 2014-6-7 21:48
lh_include 发表于 2014-6-7 21:48
差值没有更新

哪个?result没更新~~~~?

作者: mengchen    时间: 2014-6-7 21:52
你确定公式每错?舵机PD是指当前error和error-last_error,希望有帮助。
作者: 板正的    时间: 2014-6-7 21:54
你确定三个值相等?
定义一个变量x.
x=error[2]=error[1];
你看看x是否变化  我估计应该是变化很小
作者: ☆孑与二    时间: 2014-6-7 21:55
mengchen 发表于 2014-6-7 21:52
你确定公式每错?舵机PD是指当前error和error-last_error,希望有帮助。

不是公式问题···是无法保存这个last_error
作者: 板正的    时间: 2014-6-7 21:55
错了  x=error[2]-error[1];
作者: ☆孑与二    时间: 2014-6-7 21:58
板正的 发表于 2014-6-7 21:55
错了  x=error[2]-error[1];

x=0

作者: mengchen    时间: 2014-6-7 22:01
☆孑与二 发表于 2014-6-7 21:55
不是公式问题···是无法保存这个last_error

无法保存?是一直为零?你在线调试或发数据出来,看看当前error,和last_error,多看看数据就能找到问题了。

作者: 板正的    时间: 2014-6-7 22:02
☆孑与二 发表于 2014-6-7 21:58
x=0

我靠   当真??你确定不是看错了?数据刷新是最快的?

作者: ☆孑与二    时间: 2014-6-7 22:05
板正的 发表于 2014-6-7 22:02
我靠   当真??你确定不是看错了?数据刷新是最快的?

恩,,我晃动车 result 一直在变 然后error三个就和result一样

作者: 板正的    时间: 2014-6-7 22:08
☆孑与二 发表于 2014-6-7 22:05
恩,,我晃动车 result 一直在变 然后error三个就和result一样

那x呢?你确定不是变化很小比如说1?

作者: ☆孑与二    时间: 2014-6-7 22:12
板正的 发表于 2014-6-7 22:08
那x呢?你确定不是变化很小比如说1?

x是0,1,-1变化

作者: 醒世恒言    时间: 2014-6-7 22:15
定义的是不是全局变量???这个 error[0]=result;  //读取当前偏差  应该放在pd前面才能使用这次的偏差
作者: qq1358381353    时间: 2014-6-7 22:24
变量类型定义错了了吧?整形的话,小于一就一直是零。
作者: ☆孑与二    时间: 2014-6-7 22:26
醒世恒言 发表于 2014-6-7 22:15
定义的是不是全局变量???这个 error[0]=result;  //读取当前偏差  应该放在pd前面才能使用这次的偏差

全局变量···放前也一样

作者: ☆孑与二    时间: 2014-6-7 22:27
qq1358381353 发表于 2014-6-7 22:24
变量类型定义错了了吧?整形的话,小于一就一直是零。

int  无符号 整形···

作者: qq1358381353    时间: 2014-6-7 22:33
感觉是变量类型的问题,你可以在你的kp数后面加个.0
作者: lh_include    时间: 2014-6-8 08:52
☆孑与二 发表于 2014-6-7 21:48
哪个?result没更新~~~~?

你说你的error都是同一个数,error是不是位置的偏移量,你用的作差还是?
作者: 板正的    时间: 2014-6-8 09:05
☆孑与二 发表于 2014-6-7 22:12
x是0,1,-1变化

我靠   变化就对啦   

作者: 板正的    时间: 2014-6-8 09:07
☆孑与二 发表于 2014-6-7 22:12
x是0,1,-1变化

其实数是变得  只是变得很快而已  而且不止是-1,0,1;变化范围其实是更大的。

作者: wsr_death    时间: 2014-6-8 09:34
静态仿真看一下吧,也许是你采集速度比处理速度要慢呢
作者: 板正的    时间: 2014-6-8 16:33
楼主  给不给分???




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