hoking91 发表于 2013-4-13 10:23:58

自平衡小车一点意外,坐等

//输出端口初始化
void PORT_initial(void)
{
        DDRA=0B00000000;//AD输入
        PINA=0X00;
        PORTA=0XFF;
       
        DDRB=0B00000000;
        PINB=0X00;
        PORTB=0X00;
       
        DDRC=0B11111111;
        PINC=0X00;
        PORTC=0X00;
       
        DDRD=0B00110010;
        PIND=0X00;
        PORTD=0X00;
}






//ADport采样:10位,采样基准电压Aref
//-------------------------------------------------------
static int AD_data;
float adc_v;
//-------------------------------------------------------
int ADport(unsigned char port)
{
        ADMUX=port;
        ADCSRA|=(1<<ADEN)|(1<<ADSC)|(1<<ADPS1)|(1<<ADPS0);                        //采样频率为8分频;
        while(!(ADCSRA&(BIT(ADIF))));
        AD_data=ADCL;
        AD_data+=ADCH*256;
//        AD_data-=512;
        return (AD_data);
}

.
.
.
.
       acceler=ADport(0);                //AD的加速度计原始数据        //角度校正
        gyro=ADport(1);                //AD得陀螺仪原始数据

        acceler*=0.004062;//系数换算:4.16/1024);此处得到了芯片处输出电压
        acceler-=1.65;
        acceler=acceler/0.8;
        acceler=asin(acceler);//这个是以rad做单位的
       
        ///acceler=180/3.1415*asin(acceler);        //asin得出来的是rad还是reg??应该是rad、这。。。
        gyro*=0.004062;//4.16*2.5;                //系数换算:4.16/1024);此处得到了芯片处输出电压
        gyro-=1.35;
        gyro=gyro/0.00067;//得到度每秒
        gyro=gyro*0.0174;//乘以3.14/180得到rad每秒
        //w=(gyro-1178)/0.67;//1169   ?????????这是何如????应该是减去多少?反正这里得到的是reg。
        //gyro=w;
        Kalman_Filter(acceler,gyro);


俺的小车不知道怎么回事,加速度计在插到pa0上之前是正常的以1.6v为中心变化,但是插上之后就基本保持在3.8v不变了,而且pa0不查那个的时候万用表测得高电平,但是陀螺仪的端口就很正常。
另外我的加速度计用的7361,陀螺仪用的enc03
另外跪求PID的参数调节放向
坐等~~~

kaishow 发表于 2013-4-13 19:05:31

别初始为上拉。

hoking91 发表于 2013-4-15 00:47:04

kaishow 发表于 2013-4-13 19:05 static/image/common/back.gif
别初始为上拉。

初始不上拉也不行,
页: [1]
查看完整版本: 自平衡小车一点意外,坐等