(2) GY271模块

此模块为电子罗盘模块,可以获得被控对象的偏航角数据。关于GY271在STM32的使用,推荐博客

此模块固定了传感器以及I2C协议的配置,只提供对采样时间的配置,如若想自行设定相关配置,推荐使用通用模块I2C自行构建。

../../../_images/image141.png

我们已对模块进行了相关配置,以期获得良好的传感效果。我们设置GY271采用I2C1与目标机通信,并对I2C进行相关初始化,相关参数信息查看I2C.

I2C_InitInfoTypeDef initInfo;
initInfo.Mode = I2C_MODE_STANDARD_MODE;
initInfo.FastModeDutyCycle = I2C_FAST_MODE_DUTY_CYCLE_2_1;
initInfo.SCLRiseTime = 1000;
initInfo.isEnableClockStretching = true;
initInfo.isNeedI2C1PinRemap = true;
I2C_Init(I2C1, &initInfo);

GY271初始化设置:

I2C_WriteRegisterByte(I2C1, 0x3C, 0x00, 0x70);/*8 位的采样平均,15Hz的标准数据输出频率*/
I2C_WriteRegisterByte(I2C1, 0x3C, 0x02, 0x00);/*连续测量模式*/

数据获取:

I2C_WriteByte(I2C1, 0x3C, 0x03); /*数据获取*/
I2C_ReadBytes(I2C1, 0x3D, GY271_BUF, 6);

数据处理与融合:

GY271_Read_Multiple(GY271_BUF);
gy271.MagX=GY271_BUF[0] << 8 | GY271_BUF[1]; /*Combine MSB and LSB of X Data output register*/
gy271.MagZ=GY271_BUF[2] << 8 | GY271_BUF[3]; /*Combine MSB and LSB of Z Data output register*/
gy271.MagY=GY271_BUF[4] << 8 | GY271_BUF[5]; /*Combine MSB and LSB of Y Data output register*/

if(gy271.MagX>32767)
{
   gy271.MagX-= 65536;
}

if(gy271.MagY>32767)
{
   gy271.MagY-= 65536;
}

if(gy271.MagZ>32767)
{
   gy271.MagZ-= 65536;
}

GY271_Angle= atan2((double)gy271.MagY,(double)gy271.MagX)*(180/3.14159265);/*计算角度*/

对读取的数据进行拼接,并利用X 轴和Y 轴数据融合获取Yaw数据,单位弧度。