智能车制作

标题: 重要的问题 [打印本页]

作者: 潜力变实力    时间: 2012-4-11 11:55
标题: 重要的问题
转向舵机右左转向均很不到位,基本是舵机不听使唤,我不知道是不是控制问题,我是新手,我用的是PD,求大神们帮帮忙。
void car_angle1(void)
{
  angle_Kd=150;
  e_angle_k0=laser1_now-laser_Mid; //偏移量
  e_angle_k0=absolute(e_angle_k0);//取绝对值
  e_angle_k2=e_angle_k0-e_angle_k1;//偏移量之差
  switch (e_angle_k0)//选取angle_Kp 参数
  {
    case 1: angle_Kp=10;break;
    case 2: angle_Kp=15;break;
    case 3: angle_Kp=20;break;
  }
  if(laser1_now>=3)//大于中心位置
  {
   
   angle_pwm1=angle_center1+e_angle_k0*angle_Kp+e_angle_k2*angle_Kd;
  }
   
  else//小于中心位置
angle_pwm1=angle_center1-e_angle_k0*angle_Kp-e_angle_k2*angle_Kd;

if(angle_pwm1>LEFT) angle_pwm1=LEFT;  
  else if(angle_pwm1<RIGHT) angle_pwm1=RIGHT;
  else angle_pwm1=angle_pwm1;
  PWMDTY01=angle_pwm;  
  e_angle_k1=e_angle_k0;//存取偏移量
  
}


作者: s614857575    时间: 2012-4-11 12:02
e_angle_k0=laser1_now-laser_Mid; //偏移量
  e_angle_k0=absolute(e_angle_k0);//取绝对值
?????
作者: 潜力变实力    时间: 2012-4-11 13:01
s614857575 发表于 2012-4-11 12:02
e_angle_k0=laser1_now-laser_Mid; //偏移量
  e_angle_k0=absolute(e_angle_k0);//取绝对值
?????

laser1_now 是我采集到的值,然后与laser-Mid(中间值)相减得到偏移量,
我六个激光,把激光编号为0、1、2、3、4、5,laser-Mid=3

作者: xufang    时间: 2012-4-12 13:41
不说什么了,一看这种控制就很差,先不说你的参数设的好不好,这种PD控制肯定不行。还有你的PWM怎么只用了八位的,考虑用十六位的。适当多加点激光头吧。
作者: icitydesk    时间: 2012-10-15 00:38

作者: 赵彤山东    时间: 2012-10-15 20:06
表示都看不懂




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