前言
在网上关于MSP430F5529的资料还是比较少的,大部分都要从STM32里边移植,但是直接移植会遇到很多困难,最近在准备电赛,就把自己准备的成果分享出来,一方面想要填补网上资料的空缺可以帮助大家,另一方面是为了督促自己进步。
MPU6050
我觉得会用一个模块不一定需要了解它的全部,只要知道几个方面就够了。
1、功能
MPU6050具有三轴的加速度和陀螺仪
加速度计即测出实际在x,y,z轴的加速度
陀螺仪即测出x,y,z轴的角速度
建议到正点原子的文档库里边找MPU6050的资料,里边非常详细
MPU6050资料
2、接线
MSP430 | MPU6050 |
---|---|
SCL | SCL |
SDA | SDA |
RST | RST |
DC | DC |
VCC | VCC |
GND | GND |
注:MSP430的引脚为程序里设置的,需要对照程序接好引脚
3、程序配置
void MPU60xx_Init(void)
{
I2C_Init();
I2C_WriteByte(MPU60xx_ADDRESS,MPU60XX_PWR_MGMT_1, 0x00); //解除休眠状态
I2C_WriteByte(MPU60xx_ADDRESS,MPU60XX_SMPLRT_DIV, 0x07);
I2C_WriteByte(MPU60xx_ADDRESS,MPU60XX_CONFIG, 0x06);
I2C_WriteByte(MPU60xx_ADDRESS,MPU60XX_GYRO_CONFIG, 0x18);
I2C_WriteByte(MPU60xx_ADDRESS,MPU60XX_ACCEL_CONFIG, 0x01);
}
int16_t MPU60xx_Read(uint8_t Axis)
{
int16_t Data;
Data = I2C_ReadByte(MPU60xx_ADDRESS,Axis);
Data = Data << 8;
Data |= I2C_ReadByte(MPU60xx_ADDRESS,Axis+1);
return Data;
}
4、位姿解算
这里用到了互补滤波算法,即给传感器获得的值和预测值加权,当你更相信预测值或传感器计算值侧加大相应权重,如图:
我主要参考了这个