#include "main.h"
#include "init_system.h"
#include "ADXL357_Device.h"
#include "ADXL357_Port.h"
#include "ADXL357.h"
uint32_t ADI_Sensor_Delay = 0x28000; //0x1000; //0x58000; //0x1000;//0x1F0;
void adsAPI_Delay(uint32_t value) {while(value--);}
uint32_t READ_T;
uint8_t uuid[4];
uint8_t ADXL357_Init(void)
{
uint8_t status;
ADXL3XX_DetectSensor(uuid);
ADXL3XX_rangeCfg(ACCE_RANGE_10G);
ADXL3XX_PwrCtl(BITM_POWERCTL_TEMPOFF);
status = ADXL3XX_readStatus();
return status;
}
void PwrDown_ADXL357(void)
{
SET_ADXL357_CS();
CLR_ADXL357_EN();
}
/*!
* @brief Detects the ADXL355 sensor mounted or not
*
* @return Status
* - #ADI_ADS_API_FAIL On failure to detect the sensor.
* - #ADI_ADS_API_SUCCESS On successfully detecting the sensor.
*
* Reads factory written device ID's from ADXL355 and verifies.
*/
void ADXL3XX_DetectSensor(uint8_t *devID)
{
*devID++ = ADXL357_SpiReadReg(ADI_ADXL355_ADI_DEVID);
*devID++ = ADXL357_SpiReadReg(ADI_ADXL355_MST_DEVID);
*devID++ = ADXL357_SpiReadReg(ADI_ADXL355_DEVID);
*devID++ = ADXL357_SpiReadReg(ADI_ADXL355_REVID);
}
/*
@brief void ADXL3XX_setOffset(uint16_t xOffset,uint16_t yOffset,uint16_t zOffset)
===========offset added to axis data in twos complement format
@param xOffset
- 16 bit twos complement offset
@param yOffset
@param zOffset
@return none
**/
void ADXL3XX_setOffset(uint16_t xOffset,uint16_t yOffset,uint16_t zOffset)
{
uint8_t offset_l,offset_h;
offset_l = xOffset>>8;
offset_h = (uint32_t)xOffset;
ADXL357_SpiWriteReg(ADI_ADXL355_OFFSET_X_H,offset_h);
ADXL357_SpiWriteReg(ADI_ADXL355_OFFSET_X_L,offset_l);
offset_l = yOffset>>8;
offset_h = (uint32_t)yOffset;
ADXL357_SpiWriteReg(ADI_ADYL355_OFFSET_Y_H,offset_h);
ADXL357_SpiWriteReg(ADI_ADYL355_OFFSET_Y_L,offset_l);
offset_l = zOffset>>8;
offset_h = (uint32_t)zOffset;
ADXL357_SpiWriteReg(ADI_ADZL355_OFFSET_Z_H,offset_h);
ADXL357_SpiWriteReg(ADI_ADZL355_OFFSET_Z_L,offset_l);
}
/*
@brief void ADXL3XX_fifoWaterMark(uint32_t samples)
=========== specify the number of samples to store in the FIFO
@param samples: {0~0x60}
@return none
**/
void ADXL3XX_fifoWaterMark(uint32_t samples)
{
ADXL357_SpiWriteReg(ADI_ADXL355_FIFO_SAMPLES,samples);
}
/*
@brief void ADXL3XX_activityCfg(uint16_t thresh, uint32_t count, uint32_t xyzEN)
===========
@param thresh: uisigned 16bit, magnitude above it will trigger the activity counter
@param xyzEN: {BTIM_ACTEN_ACTZ|BTIM_ACTEN_ACTZ|BTIM_ACTEN_ACTZ}
- 0, disable activity detection
- BTIM_ACTEN_ACTZ, enable z axis activity detection
- BTIM_ACTEN_ACTY, enable y axis activity detection
- BTIM_ACTEN_ACTX, enable x axis activity detection
@param count: number to assert activity
@return none
**/
void ADXL3XX_activityCfg(uint16_t thresh, uint32_t count, uint32_t xyzEN)
{
uint8_t thresh_l, thresh_h;
thresh_l = thresh>>8;
thresh_h = (uint8_t)thresh;
if(xyzEN)
{
ADXL357_SpiWriteReg(ADI_ADXL355_ACT_THRESH_H,thresh_h);
ADXL357_SpiWriteReg(ADI_ADXL355_ACT_THRESH_L,thresh_l);
ADXL357_SpiWriteReg(ADI_ADXL355_ACT_COUNT,count);
}
ADXL357_SpiWriteReg(ADI_ADXL355_ACT_EN, xyzEN);
}
/*
@brief void ADXL3XX_filterCfg(HPF_CORNER_Type hpfCorner,LPF_ODR_Type lpfOdr)
=========== configure internal high pass and low pass filter
@param hpfCorner: {HPF_CORNER_BYP,HPF_CORNER_247,HPF_CORNER_62
HPF_CORNER_15,HPF_CORNER_3_8,HPF_CORNER_0_9,
HPF_CORNER_0_2
@param lpfOdr: {LPF_ODR_4000_1000,LPF_ODR_2000_500,LPF_ODR_1000_250,
LPF_ODR_500_125,LPF_ODR_250_62,LPF_ODR_125_31,
LPF_ODR_31_7,LPF_ODR_15_3,LPF_ODR_7_1,LPF_ODR_3_0}
@return none
**/
void ADXL3XX_filterCfg(HPF_CORNER_Type hpfCorner,LPF_ODR_Type lpfOdr)
{
uint8_t filter;
filter = (hpfCorner<<4) | lpfOdr;
ADXL357_SpiWriteReg(ADI_ADXL355_FILTER,filter);
}
/*
@brief void ADXL3XX_intCfg(uint32_t intBitMask)
=========== choose which functions generate an interrupt on the INT1 and INT2 pins
@param intBitMask: {BITM_INTMAP_ACTEN2,BITM_INTMAP_OVREN2,BITM_INTMAP_FULLEN2,BITM_INTMAP_RDYEN2,
BITM_INTMAP_ACTEN1,BITM_INTMAP_OVREN1,BITM_INTMAP_FULLEN1,BITM_INTMAP_RDYEN1}
@return none
**/
void ADXL3XX_intCfg(uint32_t intBitMask)
{
ADXL357_SpiWriteReg(ADI_ADXL355_INT_MAP,intBitMask);
}
/*
@brief void ADXL3XX_rangeCfg(ACCE_RANGE_Type range)
=========== configure accelerate range
@param range: {ACCE_RANGE_10G,ACCE_RANGE_20G,ACCE_RANGE_40G}
@return none
**/
void ADXL3XX_rangeCfg(ACCE_RANGE_Type range)
{
uint8_t oldRange,newRange;
oldRange = ADXL357_SpiReadReg(ADI_ADXL355_RANGE);
newRange = (oldRange &(~0x03)) | range;
ADXL357_SpiWriteReg(ADI_ADXL355_RANGE,newRange);
}
/*
@brief void ADXL3XX_PwrCtl(uint32_t PwrCtlBitMask)
===========set POWER_CTL
@param PwrCtlBitMask: {BITM_POWERCTL_DRDYOFF,BITM_POWERCTL_TEMPOFF,BITM_POWERCTL_STANDBY}
- 0, power up all
@return none
**/
void ADXL3XX_PwrCtl(uint32_t PwrCtlBitMask)
{
ADXL357_SpiWriteReg(ADI_ADXL355_POWER_CTL,PwrCtlBitMask);
}
uint8_t ADXL3XX_GetPwrCtl()
{
return ADXL357_SpiReadReg(ADI_ADXL355_POWER_CTL);
}
/*
@brief void ADXL3XX_reset()
=========== reset device
@return none
**/
void ADXL3XX_reset()
{
ADXL357_SpiWriteReg(ADI_ADXL355_SRESET,0x52);
}
/*
@brief uint8_t ADXL3XX_readStatus()
=========== return status register
@return status
**/
uint8_t ADXL3XX_readStatus()
{
return ADXL357_SpiReadReg(ADI_ADXL355_STATUS);
}
/*
@brief uint32_t ADXL3XX_readTemp()
=========== read back temperature data
@return temperature data
**/
uint32_t ADXL3XX_readTemp()
{
uint32_t tempDat1,tempDat2;
tempDat2 = ADXL357_SpiReadReg(ADI_ADXL355_TEMP_DATA_2);
tempDat1 = ADXL357_SpiReadReg(ADI_ADXL355_TEMP_DATA_1);
tempDat2 = (tempDat2<<8) | tempDat1;
return tempDat2;
}
/*
@brief void ADXL3XX_readXYZ(uint32_t *xDat,uint32_t *yDat,uint32_t *zDat)
=========== read X,Y,Z axis data
@param xDat: pointer to store x data
@param yDat: pointer to store y data
@param zDat: pointer to store z data
@return none
AccleDat_in[0] = accel_x[i]; //顺线加速度值
AccleDat_in[1] = accel_y[i]; //水平加速度值
AccleDat_in[2] = accel_z[i]; //垂直加速度值
GyroData_in[0] = gro_x[i]; //顺线角速度值
GyroData_in[1] = gro_y[i]; //水平角速度值
GyroData_in[2] = gro_z[i]; //垂直角速度值
**/
uint32_t data3,data2,data1;
void ADXL3XX_readXYZ(int32_t *xDat,int32_t *yDat,int32_t *zDat)
{
// uint32_t data3,data2,data1;
//uint32_t tem = 0x80001;
switch(psystem_config->wave.Correct_coordinates)
{
case 0://-y顺线加速度值 -x水平加速度值 -z垂直加速度值
data3 = ADXL357_SpiReadReg(ADI_ADXL355_XDATA3);
data2 = ADXL357_SpiReadReg(ADI_ADXL355_XDATA2);
data1 = ADXL357_SpiReadReg(ADI_ADXL355_XDATA1);
data3 = ((data3<<16) | (data2<<8) |(data1))>>XYZ_DATA_RESERVE_LSB;
*yDat = convertDatToInt(data3);
//*yDat = -*yDat;
data3 = ADXL357_SpiReadReg(ADI_ADXL355_YDATA3);
data2 = ADXL357_SpiReadReg(ADI_ADXL355_YDATA2);
data1 = ADXL357_SpiReadReg(ADI_ADXL355_YDATA1);
data3 = ((data3<<16) | (data2<<8) |(data1))>>XYZ_DATA_RESERVE_LSB;
// yDat = data3;
*xDat = convertDatToInt(data3);
// *xDat = -*xDat;
data3 = ADXL357_SpiReadReg(ADI_ADXL355_ZDATA3);
data2 = ADXL357_SpiReadReg(ADI_ADXL355_ZDATA2);
data1 = ADXL357_SpiReadReg(ADI_ADXL355_ZDATA1);
data3 = ((data3<<16) | (data2<<8) |(data1))>>XYZ_DATA_RESERVE_LSB;
//zDat = data3;
*zDat = convertDatToInt(data3);
// *zDat = -*zDat;
break;
case 1://z顺线加速度�
基于STM32的ADXL375加速度位移传感器
需积分: 49 180 浏览量
2022-04-23
22:50:23
上传
评论 7
收藏 21KB RAR 举报
weixin_38542043
- 粉丝: 2
- 资源: 21
评论0