資源簡介
利用AVR單片機讀取mpu6050的加速度計的加速度值和陀螺儀的角度值。用加速度值求出X和Y軸上的傾斜角;用陀螺儀的角度值積分出旋轉角度。然后融合兩者的數據,最后濾波以獲得更好的效果。

代碼片段和文件信息
#include?
#include?
#include????
#include?
#include?“mpu6050.h“
#include?“uart0.h“
#define?coff?11
#define?Gyr_Gain?0.0076???
#define?K?0.715
#define?dt?0.005
int?shud[1800];
unsigned?int?counter=0;
unsigned?char?flag?=?0;
int?ax_offset=0ay_offset=0az_offset=0;
int?gx_offset=0gy_offset=0gz_offset=0;
float?x_theta=0.0y_theta=0.0z_theta=0.0;
float?old_value_x=0.0old_value_y=0.0old_value_z=0.0;
void?timer0_init(void)
{
?MCUCR?=?0x00;
?
?TCCR0?=?0x00;?//stop
?ASSR??=?0x00;?//set?async?mode
?TCNT0?=?0xc7;?//set?count??D9
?OCR0??=?0x27;
?TCCR0?=?0x07;?//start?timer
?
?TIMSK?|=?BIT(0);?//timer?interrupt?sources
}
//**************************************
//在1602上顯示10位數據
//**************************************
void?Display10BitData(int?value)
{??
????unsigned?char?i;
unsigned?char?dis[6]; //顯示數字(-511至512)的字符數組
int_to_ascii(dis?value);
for(i=0;i<6;i++)
{
??????uart0_send(dis[i]);
????}
uart0_send(‘?‘);
}
void?mpu_check(void)
{
??unsigned?char?i=0;
??double?ax_offset1=0ay_offset1=0az_offset1=0;
??double?gx_offset1=0gy_offset1=0gz_offset1=0;
??for(i=0;i<250;i++)
??{
????/*ax_offset1?+=?ACCEL_XOUT;
????ay_offset1?+=?ACCEL_YOUT;
????az_offset1?+=?ACCEL_ZOUT;*/
gx_offset1?+=?GYRO_XOUT;
gy_offset1?+=?GYRO_XOUT;
gz_offset1?+=?GYRO_XOUT;
??}
??//ax_offset1?/=?250;ay_offset1?/=?250;az_offset1?/=?250;
??gx_offset1?/=?250;gy_offset1?/=?250;gz_offset1?/=?250;
??
??ax_offset?=?(int)ax_offset1;gx_offset?=?(int)gx_offset1;
??ay_offset?=?(int)ay_offset1;gy_offset?=?(int)gy_offset1;
??az_offset?=?(int)az_offset1;gz_offset?=?(int)gz_offset1;
??old_value_x?=?GYRO_XOUT?-?gx_offset;
??old_value_y?=?GYRO_YOUT?-?gy_offset;
??old_value_z?=?GYRO_ZOUT?-?gz_offset;?
}
//*********************************************************
//主程序
//*********************************************************
int?main()
{?
????signed?char?value=0;
unsigned?int?j=0;
unsigned?char?i=0;
signed?int?sum?=?0;
????DDRA?=?0XFF;
PORTA?=?0X00;
????uart0_init();?
????timer0_init();
delay_ms(200);
????while(0?==?InitMPU6050())
????{
????????uart0_send(‘E‘);
????}
????delay_ms(150);
mpu_check();
PORTA?=?0XFF;
????SREG?|=?BIT(7);
????while(1)
????{?
??if(flag?==?0xff)
??{
????SREG?&=?~BIT(7);
????PORTA?=?0X00;?
????for(counter=0;counter<1800;counter=counter+2)
{
???????????Display10BitData(shud[counter]);
???Display10BitData(shud[counter+1]);
???uart0_send(0x0d);?
???????????uart0_send(0x0a);//換行,回車?
}
flag?=?0x00;while(1);
??}
??
????}
}
#pragma?interrupt_handler?timer0_ovf_isr:iv_TIM0_OVF
void?timer0_ovf_isr(void)
{?
??unsigned?char?i=0;
??int?sum_x=0sum_y=0;
??static?unsigned?char?count=0;
??float?X_a=0.0Y_a=0.0Z_a=0.0;
??float?pre_value_x=0.0pre_value_y=0.0pre_value_z=0.0;
??float?acc_angle_x=0.0acc_angle_y=0.0acc_angle_z=0.0;
??float?gyr_x=0.0gyr_y=0.0gyr_z=0.0;
??float?buf_x[
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2013-08-23?01:09??mpu6050\
?????目錄???????????0??2013-08-23?01:09??mpu6050\code\
?????目錄???????????0??2013-08-23?01:09??mpu6050\code\IIC\
?????文件????????2886??2013-08-21?15:52??mpu6050\code\IIC\sccb.c
?????文件?????????921??2013-08-21?16:02??mpu6050\code\IIC\sccb.h
?????文件????????5273??2013-08-22?22:46??mpu6050\code\main.c
?????文件???????????1??2013-08-16?13:50??mpu6050\code\mat.c
?????目錄???????????0??2013-08-23?01:09??mpu6050\code\mpu6065_sensor\
?????文件????????2720??2013-08-21?18:04??mpu6050\code\mpu6065_sensor\mpu6050.c
?????文件????????2369??2013-08-20?21:46??mpu6050\code\mpu6065_sensor\mpu6050.h
?????目錄???????????0??2013-08-23?01:09??mpu6050\code\uart0\
?????文件????????1415??2013-08-16?12:47??mpu6050\code\uart0\uart0.c
?????文件?????????179??2013-07-22?12:40??mpu6050\code\uart0\uart0.h
?????目錄???????????0??2013-08-23?01:09??mpu6050\project\
?????目錄???????????0??2013-08-23?01:09??mpu6050\project\BACKUP\
?????文件????????5275??2013-08-22?22:40??mpu6050\project\BACKUP\main._c
?????文件???????????1??2013-08-15?16:09??mpu6050\project\BACKUP\main.c.130815160902
?????文件???????????0??2013-08-15?16:10??mpu6050\project\BACKUP\main.c.130815161054
?????文件????????6548??2013-08-15?16:11??mpu6050\project\BACKUP\main.c.130815161102
?????文件????????1282??2013-08-15?16:32??mpu6050\project\BACKUP\main.c.130815163224
?????文件????????1245??2013-08-15?16:35??mpu6050\project\BACKUP\main.c.130815163520
?????文件????????1219??2013-08-15?16:35??mpu6050\project\BACKUP\main.c.130815163546
?????文件????????1267??2013-08-15?16:36??mpu6050\project\BACKUP\main.c.130815163622
?????文件????????1287??2013-08-15?16:36??mpu6050\project\BACKUP\main.c.130815163648
?????文件????????1267??2013-08-15?16:37??mpu6050\project\BACKUP\main.c.130815163702
?????文件????????1268??2013-08-15?16:37??mpu6050\project\BACKUP\main.c.130815163718
?????文件????????1281??2013-08-15?16:52??mpu6050\project\BACKUP\main.c.130815165236
?????文件????????1300??2013-08-15?16:58??mpu6050\project\BACKUP\main.c.130815165822
?????文件????????1321??2013-08-15?17:18??mpu6050\project\BACKUP\main.c.130815171822
?????文件????????1294??2013-08-15?18:03??mpu6050\project\BACKUP\main.c.130815180322
?????文件????????1342??2013-08-15?19:34??mpu6050\project\BACKUP\main.c.130815193428
............此處省略515個文件信息
- 上一篇:opengl頭文件glext.h
- 下一篇:微機原理 8259中斷控制實驗 實驗報告
評論
共有 條評論