SC7A20获取三轴数据实现过程

Posted 瑞奇Ricky

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SC7A20获取三轴数据实现过程相关的知识,希望对你有一定的参考价值。

近期,笔者在进行环境监测设备技术研发,环境监测设备能对周边环境进行监测,如温湿度、光照等。
在这里插入图片描述
比如冷链运输行业,他们在进行货物运输时,运输车辆的需要有某个特定的储存环境,如车厢。当需要冷藏的货物在运输车辆上,为保障货物质量,存放温度较低,货车司机在前面开车,也无法实时关注后面车厢的温度情况。为了防止后面车厢出现断电或温度上升的情况,环境监测设备就派上了用场。
在这里插入图片描述
在进行研发时我们需要用到一款芯片:SC7A20。SC7A20 是一款高精度 12bit 数字三轴加速度传感器芯片,因为功耗低,体积也小。

芯片通过 IC²/SPI 接口与 MCU 通信,加速度测量数据以中断方式或 查询方式获取。芯片内置产品倾斜校准功能,对贴片和板卡安装导致的倾斜进 行补偿,不占系统资源,系统文件升级不影响传感器参数。
在这里插入图片描述
SC7A20作为国产G_Sensor,除了作为是否运动检测以外,同时可以通过三轴数据来判定设备当前角度。当前设备所处位置环境。以下为SC7A20获取三轴数据实现过程。

void G_Sensor_GetInfo(G_SensorInfo_t *G_SensorInfo)

{

//获取三轴数据

G_SensorInfo->accd_x = G_Sensor_Get_ACCD(x);

G_SensorInfo->accd_y = G_Sensor_Get_ACCD(y);

G_SensorInfo->accd_z = G_Sensor_Get_ACCD(z);

}

//获取加速度 返回值:float 加速度 单位:g

float G_Sensor_Get_ACCD(ACCD_ChannelEnum_t channel)

{

int16_t accd_lsb,accd_msb;

int16_t accd_value;

int16_t accd_l,accd_m;

float accd_f;

if(channel == x)

{

accd_lsb = SC7A20_REG_ACCD_X_LSB;

accd_msb = SC7A20_REG_ACCD_X_HSB;

}

else if(channel == y)

{

accd_lsb = SC7A20_REG_ACCD_Y_LSB;

accd_msb = SC7A20_REG_ACCD_Y_HSB;

}

else if(channel == z)

{

accd_lsb = SC7A20_REG_ACCD_Z_LSB;

accd_msb = SC7A20_REG_ACCD_Z_HSB;

}

accd_l = (G_Sensor_ReadByte(accd_lsb)>>2);

accd_m = G_Sensor_ReadByte(accd_msb);

accd_value = (accd_l>>6) + (accd_m<<2);

accd_value &= 0x03ff;

if(accd_value >> 9)//负数

{

accd_value &= 0x01ff;

accd_value = ~accd_value;

accd_value += 1;

accd_value &= 0x01ff;

accd_value = - accd_value;

accd_f = (accd_value*SC7A20_MeasureRange/1024.0);

}

else//整数

{

accd_value = accd_value;

accd_f = (accd_value*SC7A20_MeasureRange/1024.0);

}

return accd_f;

}
在这里插入图片描述

以上是关于SC7A20获取三轴数据实现过程的主要内容,如果未能解决你的问题,请参考以下文章

资产监测设备中G-sensor芯片SC7A20 sleep耗流问题原因总结

云息技术科普三轴传感器SC7A20硬件图以及IIC和SPI选择方式的选择

LIS3DH三轴加速度计-实现欧拉角(俯仰角,横滚角)

资产跟踪设备中BMA250E获取三轴加速度数值驱动代码

合宙Luat | 三轴加速度传感器——稀饭放姜LuaTask驱动手把手教程

三轴加速度传感器原理及应用