智能车制作

标题: 直立车的速度控制 [打印本页]

作者: ppdm    时间: 2014-3-3 21:43
标题: 直立车的速度控制
现在情况是轻轻推能稳定住  稍微用点力速度打起来就停不下来了什么情况  能帮我看看程序有没有问题么


float speed_P=1;
float speed_I=0.5;
float speed_D=0;

#define SPEED_CONTROL_PERIOD 35
#define CNT_TO_SPEED 0.02046   //16.5*10*25/24/28/300  //编码器到距离 cm/s

static unsigned char  speed_Count=0;
unsigned int motor_cntL=0,motor_cntR=0;//左右编码器计数值
float speed_Set=0;              //预期的速度 单位:cm/s
float speed_Now=0;              //实际的速度
float speed_L=0,speed_R=0;      //左右轮的实际速度

float speed_pwm_New=0;            
float speed_pwm_Old=0;
float speed_pwm_Out=0;          //速度的PWM输出

unsigned int speed_finish_Count=0;
float test_speed=0;

static float e0=0;              //本次系统存在偏差
static float e1=0;              //上次系统偏差
static float e2=0;              //前次系统偏差
static float u1=0;              //本次系统输出值
static float u_add=0;           //系统增量   


void SpeedControl(void)
{
   if(speed_Count==0)
{
   speed_Now =(float)(motor_cntL*CNT_TO_SPEED);
   if(pwm_out_New>0) speed_Now=-speed_Now;     //---判断速度正负---
   motor_cntL=0;
   motor_cntR=0;
   e0=speed_Set-speed_Now;    //速度差
//-------增量式-------   
      //*
   u_add=speed_P*(e0-e1)+speed_I*e0+speed_D*(e0-2*e1+e2);
   test_speed+=e0;///====test
     //    OutData[2]=test_speed;       
   e2=e1;
   e1=e0;         
   u1+=u_add;   //u1表示PWM的占空比
   speed_pwm_Old=speed_pwm_New;
   speed_pwm_New=u1;
}
   speed_pwm_Out =(speed_pwm_New-speed_pwm_Old)*(speed_Count+1)/SPEED_CONTROL_PERIOD+speed_pwm_Old;
   speed_Count++;
   if(speed_Count>=SPEED_CONTROL_PERIOD) speed_Count=0;
}


作者: wraith    时间: 2014-3-3 22:50
速度控制没问题,但是,没有根据加速度传感器信号的加减速控制算法。
作者: ppdm    时间: 2014-3-4 09:45
wraith 发表于 2014-3-3 22:50
速度控制没问题,但是,没有根据加速度传感器信号的加减速控制算法。

角度那边的输出的PWM直接加上这个速度PWM等于最后的输出PWM(方向的还没加)

作者: 轻舞飞扬王来了    时间: 2014-3-6 23:06
你的程序现在成功了吗
作者: 呼呼呼    时间: 2014-4-13 20:30
LZ 我想问一下
u1+=u_add;   //u1表示PWM的占空比
这句话  为什么是 +=
作者: ppdm    时间: 2014-4-14 18:23
呼呼呼 发表于 2014-4-13 20:30
LZ 我想问一下
u1+=u_add;   //u1表示PWM的占空比
这句话  为什么是 +=

增量式的就是一直加

作者: 鸟人    时间: 2014-5-11 20:41
楼主请问小车走得忽快忽慢是该怎么解决?
作者: QIANG243454356    时间: 2014-5-11 22:01
wraith 发表于 2014-3-3 22:50
速度控制没问题,但是,没有根据加速度传感器信号的加减速控制算法。

为什么要根据加速度计的值加减速呢?不懂,能不能详细说明哈,谢谢了!

作者: ppdm    时间: 2014-5-12 09:34
鸟人 发表于 2014-5-11 20:41
楼主请问小车走得忽快忽慢是该怎么解决?

应该是你速度控制参数的问题,重新调调参
作者: 鸟人    时间: 2014-5-12 13:37
你们一般是怎么调的 我试了很多参数 静态效果很好 但是走起来就由问题 是不是结构有问题啊?
作者: ppdm    时间: 2014-5-13 10:00
鸟人 发表于 2014-5-12 13:37
你们一般是怎么调的 我试了很多参数 静态效果很好 但是走起来就由问题 是不是结构有问题啊?

你把速度波形发到上位机看下  调PI还是好调的

作者: 黑珍珠    时间: 2015-5-28 18:37
现在的小车跑的怎么样
作者: Nic堃    时间: 2015-6-2 21:27
SpeedControl: 速度控制函数中#define CAR_SPEED_CONSTANT中的1000是什么意思?怎么得到的值?
作者: 单色    时间: 2016-1-16 10:55
ppdm 发表于 2014-5-12 09:34
应该是你速度控制参数的问题,重新调调参

具体要怎么调?可不可以细说一下,我把速度环的P和I都由小到大的调试过了,但是效果依然不好,当p和i都比较小的时候,车一直保持直立不往前走,调大了的话又会来回振荡。


作者: wyyy08211    时间: 2016-5-25 19:13
这程序减速不太好吧




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