|
//输出端口初始化
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的参数调节放向
坐等~~~ |
阿莫论坛20周年了!感谢大家的支持与爱护!!
月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!
|