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选择方式的选择