iohongwal 发表于 2014-4-13 12:32:38

平衡車求助!!

本帖最后由 iohongwal 于 2014-4-13 15:13 编辑

我自己了一個平衡車 我是用芯片厰家提拱的代碼來做的 車子可以根劇angle來向前走和向後走 但是不平衡 各位大神幫我看看是車子的結構問題 還是甚麼問題 圖片不夠的可以叫我上傳電機我是用田宮的70093 齒輪組是用高速的
這是我用的芯片


車子






unsigned char Re_buf,counter=0;
unsigned char sign=0;
int M11=5;
int M12=6;
int M21=9;
int M22=10;

float a,w,Angle,T;
short sAccelerat,sAngleVelocity,sAngle,sT;
void setup() {
// initialize serial:
Serial.begin(115200);
pinMode(M11,OUTPUT);analogWrite(M11,0);
pinMode(M12,OUTPUT);analogWrite(M12,0);
pinMode(M21,OUTPUT);analogWrite(M21,0);
pinMode(M22,OUTPUT);analogWrite(M22,0);
}
void SetMotor(float v1,float v2)
{
if (v1>255){v1=255;analogWrite(M11,0);analogWrite(M12,v1);}
else if (v1>0) {analogWrite(M11,0);analogWrite(M12,v1);}
else if (v1>-255) {analogWrite(M12,0);analogWrite(M11,-v1);}
else{v1=-255;analogWrite(M12,0);analogWrite(M11,-v1);}

if (v2>255){v2=255;analogWrite(M21,0);analogWrite(M22,v2);}
else if (v2>0) {analogWrite(M21,0);analogWrite(M22,v2);}
else if (v2>-255) {analogWrite(M22,0);analogWrite(M21,-v2);}
else {v2=-255;analogWrite(M22,0);analogWrite(M21,-v2);}
}

float PID1(float e,float kp,float ki,float kd)
{
static float es=0,sum=0;
float r;
sum+=e;
r = kp*e+ki*sum+kd*(e-es);
es=e;
return r;
}
float PID2(float e,float kp,float ki,float kd)
{
static float es=0,sum=0;
float r;
sum+=e;
r = kp*e+ki*sum+kd*(e-es);
es=e;
return r;
}
void loop() {
float kp=30,ki=0.0,kd=10,r1,r2;
if (sign==0) return;//sign为数据更新标志,每隔10ms更新一次,也就是说以下代码每隔10ms控制一次。
sign=0;
kd = (float)analogRead(0)/1024*200;
r1=PID1(Angle,kp,ki,kd);//PID1、PID2函数就是第四节的PID函数,为了区分左右轮,所以分成两个。
r2=PID2(Angle,kp,ki,kd);
SetMotor(r1,r2);//设置电机转速。
Serial.print("angle:");
Serial.print(Angle);Serial.print(" ");
Serial.print(r1);Serial.print(" ");
Serial.println(kd);Serial.print(" ");
}

void serialEvent() {
while (Serial.available()) {
   
    //char inChar = (char)Serial.read(); Serial.print(inChar); //Output Original Data, use this code

    Re_buf=(unsigned char)Serial.read();
    if(counter==0&&Re_buf!=0x55) return;      //第0号数据不是帧头            
    counter++;      
    if(counter==11)             //接收到11个数据
    {   
       counter=0;               //重新赋值,准备下一帧数据的接收
       switch(Re_buf )
        {
        case 0x51:
                a = float(short(Re_buf <<8| Re_buf ))/32768*16;
                a =float(short(Re_buf <<8| Re_buf ))/32768*16;
                a =float(short(Re_buf <<8| Re_buf ))/32768*16;               
                break;
        case 0x52:
                w =float(short(Re_buf <<8| Re_buf ))/32768*250;
                w =float(short(Re_buf <<8| Re_buf ))/32768*250;
                w =float(short(Re_buf <<8| Re_buf ))/32768*250;
                break;
        case 0x53:
              Angle =float(short(Re_buf <<8| Re_buf ))/32768*180;
                Angle =float(short(Re_buf <<8| Re_buf ))/32768*180;
                Angle =float(short(Re_buf <<8| Re_buf ))/32768*180;
                T =float(short(Re_buf <<8| Re_buf ));///340.0+36.25   
                sign=1;
                break;
        }
    }      
}
}

杨帅 发表于 2014-4-13 14:57:32

代码问题,代码呢,看下?

iohongwal 发表于 2014-4-13 15:10:50

杨帅 发表于 2014-4-13 14:57 static/image/common/back.gif
代码问题,代码呢,看下?

已添加代碼

杨帅 发表于 2014-4-13 18:21:33

iohongwal 发表于 2014-4-13 15:10 static/image/common/back.gif
已添加代碼

朋友,你这个程序调的是PID,我没弄过,我只简单的弄过陀螺仪和加速度计。你帖子的第一张图片那个传感器叫什么名字是IMU吗?

iohongwal 发表于 2014-4-13 19:55:50

杨帅 发表于 2014-4-13 18:21 static/image/common/back.gif
朋友,你这个程序调的是PID,我没弄过,我只简单的弄过陀螺仪和加速度计。你帖子的第一张图片那个传感器叫 ...

6軸陀螺仪MPU6050

ranqingfa 发表于 2014-4-14 09:13:23

你这车体, 有点奇葩:lol

iohongwal 发表于 2014-4-14 12:41:58

ranqingfa 发表于 2014-4-14 09:13 static/image/common/back.gif
你这车体, 有点奇葩

其實我知道 但我不知怎樣設計好

捡贝壳的孩子 发表于 2014-4-14 13:48:15

我现在也在用mpu6050做呢,只不过用的是stm32控制的,能互相交流学习下么

iohongwal 发表于 2014-4-14 19:08:56

捡贝壳的孩子 发表于 2014-4-14 13:48 static/image/common/back.gif
我现在也在用mpu6050做呢,只不过用的是stm32控制的,能互相交流学习下么

我不很懂PID算法那方面 我用了arduino pid library 但輸出只有0~255

ranqingfa 发表于 2014-4-14 22:25:00

iohongwal 发表于 2014-4-14 12:41 static/image/common/back.gif
其實我知道 但我不知怎樣設計好

你起码看看别人怎么设计的啊成功的案例

iohongwal 发表于 2014-4-14 23:03:19

ranqingfa 发表于 2014-4-14 22:25 static/image/common/back.gif
你起码看看别人怎么设计的啊成功的案例

我有看迥過 其實那輛車銅柱我還未裝完 其實高點是不是會更好

ranqingfa 发表于 2014-4-15 09:18:35

iohongwal 发表于 2014-4-14 23:03 static/image/common/back.gif
我有看迥過 其實那輛車銅柱我還未裝完 其實高點是不是會更好

最好是搞点,你的车轮距太宽

iohongwal 发表于 2014-4-15 10:52:14

ranqingfa 发表于 2014-4-15 09:18 static/image/common/back.gif
最好是搞点,你的车轮距太宽

重物放最上面嗎

ranqingfa 发表于 2014-4-15 20:07:05

不是啊车体结构改变

ranqingfa 发表于 2014-4-15 20:07:23

iohongwal 发表于 2014-4-15 10:52 static/image/common/back.gif
重物放最上面嗎

你看过我的车子么
页: [1] 2
查看完整版本: 平衡車求助!!