欢迎来到比一比商城请登录免费注册
0   购物车  
首页>方案超市>方案详情
B1B
#

STM32应用:透过SPI连结STM AIS3624DQ G-Sensor检测加速度

人气
413
相关芯片型号:
AIS3624DQ
跳转到...
温馨提示:如需了解更多信息,请通过在线咨询联系!
方案简介 性能参数
AIS3624DQ为一款通过AEQ-100验证的车用G Sensor,特色是具有高达±24g的量测范围,12-bit解析度和高达1000Hz的更新率,工作温度范围为-40°C ~ 105°C。
以下是利用STM32 HAL library撰写的AIS3624DQ范例程式码,原则上可通用在STM32全系列的MCU。
先定义一组G Sensor structure
typedef struct
{
uint8_t id;
uint16_t odr;
int16_t raw_x;
int16_t raw_y;
int16_t raw_z;
} GSENSORSTATUS_t;
GSENSORSTATUS_t gsensorstatus;

// GSENSOR
#define READBIT (1 << 7)
#define MULTIBYTE (1 << 6)
 
读取Sensor ID,并将结果放到ID栏位,可以从比对Sensor ID来确认sensor是否接线正常。
// Read ID
SPITxData[0] = 0x0F | READBIT;
HAL_GPIO_WritePin(GSENSOR_CS_GPIO_Port, GSENSOR_CS_Pin, GPIO_PIN_RESET);
HAL_SPI_TransmitReceive(&hspi1, SPITxData, SPIRxData, 2, 5000);
HAL_GPIO_WritePin(GSENSOR_CS_GPIO_Port, GSENSOR_CS_Pin, GPIO_PIN_SET);
gsensorstatus.id = SPIRxData[1];
 
设定Sensor,启动X, Y, Z三轴量测,100Hz更新率,并且开始工作。
// Power ON @ 100Hz ODR, XYZ axis enable
SPITxData[0] = 0x20;
SPITxData[1] = 0x2F;
HAL_GPIO_WritePin(GSENSOR_CS_GPIO_Port, GSENSOR_CS_Pin, GPIO_PIN_RESET);
HAL_SPI_Transmit(&hspi1, SPITxData, 2, 5000);
HAL_GPIO_WritePin(GSENSOR_CS_GPIO_Port, GSENSOR_CS_Pin, GPIO_PIN_SET);
gsensorstatus.odr = 100;
 
设定Sensor从INT1 pin脚输出DATA READY触发讯号,非必需。
// Set INT1 output DATA READY, Active Low Push-Pull
SPITxData[0] = 0x22;
SPITxData[1] = 0x82;
HAL_GPIO_WritePin(GSENSOR_CS_GPIO_Port, GSENSOR_CS_Pin, GPIO_PIN_RESET);
HAL_SPI_Transmit(&hspi1, SPITxData, 2, 5000);
HAL_GPIO_WritePin(GSENSOR_CS_GPIO_Port, GSENSOR_CS_Pin, GPIO_PIN_SET);
 
设定Sensor量测范围和工作模式,并且採用4线SPI和MCU沟通。
// Set full scale @ +-24G, continous update, 4-Wire
SPITxData[0] = 0x23;
SPITxData[1] = 0x30;
HAL_GPIO_WritePin(GSENSOR_CS_GPIO_Port, GSENSOR_CS_Pin, GPIO_PIN_RESET);
HAL_SPI_Transmit(&hspi1, SPITxData, 2, 5000);
HAL_GPIO_WritePin(GSENSOR_CS_GPIO_Port, GSENSOR_CS_Pin, GPIO_PIN_SET);
 
取得三轴量测值,并且换算为g值
// Get Data
GSENSOR_SPITxData[0] = 0x28 | READBIT | MULTIBYTE;
HAL_GPIO_WritePin(GSENSOR_CS_GPIO_Port, GSENSOR_CS_Pin, GPIO_PIN_RESET);
HAL_SPI_TransmitReceive(&hspi1, GSENSOR_SPITxData, GSENSOR_SPIRxData, 7, 1000);
HAL_GPIO_WritePin(GSENSOR_CS_GPIO_Port, GSENSOR_CS_Pin, GPIO_PIN_SET);
gsensorstatus.raw_x = (int16_t)((GSENSOR_SPIRxData[2] << 8) | GSENSOR_SPIRxData[1]) / 16;
gsensorstatus.raw_y = (int16_t)((GSENSOR_SPIRxData[4] << 8) | GSENSOR_SPIRxData[3]) / 16;
gsensorstatus.raw_z = (int16_t)((GSENSOR_SPIRxData[6] << 8) | GSENSOR_SPIRxData[5]) / 16;
runtime_data.GX = gsensorstatus.raw_x * 11.7f;
runtime_data.GY = gsensorstatus.raw_y * 11.7f;
runtime_data.GZ = gsensorstatus.raw_z * 11.7f;
 
其中换算参数根据datasheet,得知在设定为±24g时,读取得到数字,需要再乘上11.7,才是mg值,故上面的程式码将得到的三轴RAW data乘上11.7转为mg
以上既完成了AIS3624DQ的驱动和工作所需的程式码。
 
  • 行业分类 : 软件开发
  • 开发平台 :
  • 交付形式 :
  • 性能参数 :
  • 应用场景 :

方案发布商

B1B

B1B

相关方案

  • 稳定可靠防死机的低功耗小体积显示主板I3399适用于工控医疗健康(4G&16G含屏幕)

    应用领域: 工业电子

     

    ¥ 1465/每件

正品保障 假一赔十
品类齐全 一站购齐
闪电发货 极速物流
现货特价 期货钜惠
客服
电话
购物车
订单