智能车制作

标题: 舵机控制 [打印本页]

作者: 时光小偷、、    时间: 2016-1-7 14:57
标题: 舵机控制
之前看过一句话,不限福的增量式pd相当于位置式pd
验证下:
           目前调车的时候,发现过弯道的时候后半段会发现打角不够~
写着写着:自己想到了怎么解决了,就是每一次不对pwm进行修改,将其赋给另一个变量,限幅输出,这样弯道后半期打角度就会足够,否则就会像第二幅图像后半期一样,输出为很不理想的~我low了,也许大家就是这样解决的~~~
      假设入弯道的偏差依次为piancha=[8 10 15 16 17 18 19 20 27 25 18 17 16 10 8];       %进弯道的时候
           位置式pd占空比结果用红线表示,增量式pd占空比结果用蓝点表示(这里只调了p)

matlab代码如下,直接进行,位置式pd调节,最后限幅输出,注意:增量式是没有限幅,但是画图时限幅了

%%左边打角865  中间780  右边695
%%进行限幅
%依照时间顺序的偏差
piancha=[8 10 15 16 17 18 19 20 27 25 18 17 16 10 8];   %进弯道的时候
zuo=865;
zhong=780;
you=695;

pwm=zeros(1,length(piancha));   %每时每刻的pwm信号
%%按照位置式pd  且限幅
%当前误差
error_pre=0;   %初始化为0
kp=5;
kd=0;
for i=1:length(piancha)
error_now=piancha(i);     %%当前偏差赋值
pwm(i)=zhong+kp*error_now+kd*(error_now-error_pre);
error_pre=error_now;
end

%%pwm进行限幅
pwm(pwm>865)=865;
pwm(pwm<695)=695;

plot(pwm,'r');
hold on;


%%增量式pd
error_pre=0;   %初始化为0
error_prepre=0;  
kp=5;
kd=0;
pwm(1)=zhong;
for i=2:length(piancha)
error_now=piancha(i);       %%当前偏差赋值
pwm(i)=pwm(i-1)+kp*(error_now-error_pre)+kd*(error_now-2*error_pre+error_prepre);
error_prepre=error_pre;
error_pre=error_now;
     %%pwm进行限幅
          % pwm(pwm>865)=865;     %第二个图像时 每一次增量式均有限幅      
           %pwm(pwm<695)=695;

end

%%pwm进行限幅
pwm(pwm>865)=865;        %第一个图像,增量式没有进行限幅
pwm(pwm<695)=695;

plot(pwm,'b*');
hold on;



作者: 时光小偷、、    时间: 2016-1-8 02:23
la9998372 发表于 2016-1-7 18:31
没懂什么意思。。。。不明觉厉。舵机PWM不限幅的话,不怕把舵机给烧了吗?

看头像,像是学长~比如说极限为30,我求出来35,我输出限幅,给了输出30但是算下次占空比的时候,是在35的基础上进行增量的,以前一直是在限幅后的极限30再进行增量,导致弯道过不去,
今天才知道写错了~~


作者: zss123    时间: 2016-1-11 19:20
66666666666大神 正好在做这个
作者: zss123    时间: 2016-1-11 19:23
大神知不知道matlab里面有个专门的PID调节怎么用??
作者: 时光小偷、、    时间: 2016-1-16 00:01
只知道如果你有准确的模型  可以用simulink仿真。
作者: 时光小偷、、    时间: 2016-1-16 00:02
zss123 发表于 2016-1-11 19:23
大神知不知道matlab里面有个专门的PID调节怎么用??

只知道如果你有准确的模型  可以用simulink仿真。


作者: 时光小偷、、    时间: 2016-1-16 00:03
zss123 发表于 2016-1-11 19:20
66666666666大神 正好在做这个

只是当初调舵机时候犯的错误~





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