Пример #1
0
void ANO_AK8975_Read_Mag_Data(void)
{
	int16_t mag_temp[3];
	u8 ak8975_buffer[6]; //接收数据缓存
	
	I2C_FastMode = 0;
	
	IIC_Read_1Byte(AK8975_ADDRESS,AK8975_HXL,&ak8975_buffer[0]); 
	IIC_Read_1Byte(AK8975_ADDRESS,AK8975_HXH,&ak8975_buffer[1]);
	mag_temp[1] = ((((int16_t)ak8975_buffer[1]) << 8) | ak8975_buffer[0]) ;  //磁力计X轴

	IIC_Read_1Byte(AK8975_ADDRESS,AK8975_HYL,&ak8975_buffer[2]);
	IIC_Read_1Byte(AK8975_ADDRESS,AK8975_HYH,&ak8975_buffer[3]);
	mag_temp[0] = ((((int16_t)ak8975_buffer[3]) << 8) | ak8975_buffer[2]) ;  //磁力计Y轴

	IIC_Read_1Byte(AK8975_ADDRESS,AK8975_HZL,&ak8975_buffer[4]);
	IIC_Read_1Byte(AK8975_ADDRESS,AK8975_HZH,&ak8975_buffer[5]);
	mag_temp[2] = -((((int16_t)ak8975_buffer[5]) << 8) | ak8975_buffer[4]) ;  //磁力计Z轴	
	
	ak8975.Mag_Adc.x = mag_temp[0];
	ak8975.Mag_Adc.y = mag_temp[1];
	ak8975.Mag_Adc.z = mag_temp[2];
	
	ak8975.Mag_Val.x = (ak8975.Mag_Adc.x - ak8975.Mag_Offset.x) ;
	ak8975.Mag_Val.y = (ak8975.Mag_Adc.y - ak8975.Mag_Offset.y) ;
	ak8975.Mag_Val.z = (ak8975.Mag_Adc.z - ak8975.Mag_Offset.z) ;
	//磁力计中点矫正	
	ANO_AK8975_CalOffset_Mag();
	
	//AK8975采样触发
	ANO_AK8975_Run();
}
Пример #2
0
void DST_MPU6050::Read_GYRO_Data(void)
{
	IIC_Read_1Byte(MPU6050_ADDRESS,MPU_RA_GYRO_XOUT_L,&mpu6050_buffer[6]); 
	IIC_Read_1Byte(MPU6050_ADDRESS,MPU_RA_GYRO_XOUT_H,&mpu6050_buffer[7]);
	gyro_temp[1] = -((((int16_t)mpu6050_buffer[7]) << 8) | mpu6050_buffer[6])- GYRO_Offset.y;//;	//陀螺仪X轴

	IIC_Read_1Byte(MPU6050_ADDRESS,MPU_RA_GYRO_YOUT_L,&mpu6050_buffer[8]);
	IIC_Read_1Byte(MPU6050_ADDRESS,MPU_RA_GYRO_YOUT_H,&mpu6050_buffer[9]);
	gyro_temp[0] = ((((int16_t)mpu6050_buffer[9]) << 8) | mpu6050_buffer[8])- GYRO_Offset.x;//;	//陀螺仪Y轴

	IIC_Read_1Byte(MPU6050_ADDRESS,MPU_RA_GYRO_ZOUT_L,&mpu6050_buffer[10]);
	IIC_Read_1Byte(MPU6050_ADDRESS,MPU_RA_GYRO_ZOUT_H,&mpu6050_buffer[11]);
	gyro_temp[2] = ((((int16_t)mpu6050_buffer[11]) << 8) | mpu6050_buffer[10])- GYRO_Offset.z;//;	  //陀螺仪Z轴		
	
	GYRO_ADC((float)gyro_temp[0], (float)gyro_temp[1], (float)gyro_temp[2]);

	Calibration_GYRO();	
}
Пример #3
0
void DST_MPU6050::Read_ACC_Data(void)
{	
	IIC_Read_1Byte(MPU6050_ADDRESS,MPU_RA_ACCEL_XOUT_L,&mpu6050_buffer[0]); 
	IIC_Read_1Byte(MPU6050_ADDRESS,MPU_RA_ACCEL_XOUT_H,&mpu6050_buffer[1]);
	acc_temp[1] = -((((int16_t)mpu6050_buffer[1]) << 8) | mpu6050_buffer[0])- ACC_Offset.y;//;  //加速度X轴

	IIC_Read_1Byte(MPU6050_ADDRESS,MPU_RA_ACCEL_YOUT_L,&mpu6050_buffer[2]);
	IIC_Read_1Byte(MPU6050_ADDRESS,MPU_RA_ACCEL_YOUT_H,&mpu6050_buffer[3]);
	acc_temp[0] = ((((int16_t)mpu6050_buffer[3]) << 8) | mpu6050_buffer[2])- ACC_Offset.x;//;  //加速度Y轴

	IIC_Read_1Byte(MPU6050_ADDRESS,MPU_RA_ACCEL_ZOUT_L,&mpu6050_buffer[4]);
	IIC_Read_1Byte(MPU6050_ADDRESS,MPU_RA_ACCEL_ZOUT_H,&mpu6050_buffer[5]);
	acc_temp[2] = ((((int16_t)mpu6050_buffer[5]) << 8) | mpu6050_buffer[4])- ACC_Offset.z;//;  //加速度Z轴
	
	ACC_ADC((float)acc_temp[0],(float)acc_temp[1],(float)acc_temp[2]);
	
	Calibration_ACC();
}