LSM303D磁力计数据读取实验

#LSM303D初始化

// 详细的寄存器说明请查看数据手册

#define LSM303D_SLAVE_ADDRESS   0x1E
#define LSM303D_WHO_AM_I        0x0F
#define CTRL1                   0x20
#define CTRL4                   0x23
#define CTRL5                   0x24
#define CTRL6                   0x25
#define CTRL7                   0x26
#define STATUS_A                0x27
#define INT_CTRL_M              0x12
// X
#define  OUT_X_L_M  0x08
#define  OUT_X_H_M  0x09
// Y
#define  OUT_Y_L_M  0x0A
#define  OUT_Y_H_M  0x0B
// Z
#define  OUT_Z_L_M  0x0C
#define  OUT_Z_H_M  0x0D
void LSM303D_Init()
{
	LSM303D_Write_Byte(LSM303D_SLAVE_ADDRESS, CTRL5, 0x14); // 在加计为power-down模式下时(默认情况下就是),频率100Hz
	delay_us(5);
	LSM303D_Write_Byte(LSM303D_SLAVE_ADDRESS, CTRL4, 0x04); // data_ready 信号
	delay_us(5);
	LSM303D_Write_Byte(LSM303D_SLAVE_ADDRESS, CTRL6, 0x20); // 测量范围 ±4gauss
	delay_us(5);
	LSM303D_Write_Byte(LSM303D_SLAVE_ADDRESS, CTRL7, 0x00); // 连续转换模式
	delay_us(5);
	LSM303D_Write_Byte(LSM303D_SLAVE_ADDRESS, INT_CTRL_M, 0xE1); // 中断信号为低电平
	delay_us(5);
}

#数据读取
// 读取LSM303D磁力计数据
// 注意这里读取的是原始数据,是数字量,还需要转化成真实的磁力计数据

buf[0] = MPU_Read_Byte(LSM303D_SLAVE_ADDRESS, OUT_X_L_M);
buf[1] = MPU_Read_Byte(LSM303D_SLAVE_ADDRESS, OUT_X_H_M);
buf[2] = MPU_Read_Byte(LSM303D_SLAVE_ADDRESS, OUT_Y_L_M);
buf[3] = MPU_Read_Byte(LSM303D_SLAVE_ADDRESS, OUT_Y_H_M);
buf[4] = MPU_Read_Byte(LSM303D_SLAVE_ADDRESS, OUT_Z_L_M);
buf[5] = MPU_Read_Byte(LSM303D_SLAVE_ADDRESS, OUT_Z_H_M)
g_magraw[0] = ((u16)buf[1]<<8)|buf[0];  // 原始X轴数据
g_magraw[1] = ((u16)buf[3]<<8)|buf[2];  // 原始Y轴数据
g_magraw[2] = ((u16)buf[5]<<8)|buf[4];  // 原始Z轴数据


// 数据转化    #SENSORS_Gause_PER_LSB_CFG        (double)((2 * 8) / 65536.0)
// 这里磁力计量程设置的是±4guss,该磁力计AD是16位的,2^16=65536, 所以转化关系为: 2*4 / 65536


g_mag[0] = (double)g_magraw[1] * SENSORS_Gause_PER_LSB_CFG; // 实际X轴数据
g_mag[1] = (double)g_magraw[0] * SENSORS_Gause_PER_LSB_CFG; // 实际Y轴数据
g_mag[2] = -(double)g_magraw[2] * SENSORS_Gause_PER_LSB_CFG; // 实际Z轴数据
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值