mu-zi

ADXL362的STM32驱动代码测试

mu-zi 在 2017-5-22 建立的討論區
最後回覆由EmmaChen於2017-5-27提供

最新在学习ADXL362,网上找资料时看到一个不错的分享,顺手分享下~希望用过这款芯片的大牛们分享实用经验,给菜鸟们学习学习

 

ADXL362加速度传感器是目前业界功耗最低的加速度传感器,主要表现在以下几个方面:

1、测量模式下电流1.8uA(2.0供电,400HZ ODR)

2、运动唤醒模式下270nA

3、待机电流10nA4.FiFO寄存器降低系统级功耗

 

一、 SPI协议时钟频率相关的三个重要参数
首先大多数开源加速度传感器如MPU6050,ADXL345都是IIC协议驱动的,但是ADXL362仅支持SPI协议。在SPI协议中,有三个重要的参数:

1、时钟极性(CPOL)时钟极性是指SPI通信设备处于空闲状态时,SCK信号线的电平信号。CPOL=0时,SCK在空闲状态时为低电平,CPOL=1时则相反。

2、时钟相位(CPHA)如果CPHA=0,在SCK的第一个跳变沿(上升或下降)数据被采样;如果CPHA=1,在SCK的第二个跳变沿(上升或者下降)数据被采样。

3、时钟频率(SCK)有上面的介绍可以看到:这三个参数都是关于时钟频率的,ADXL362的SPI协议中的这三个参数需要查找数据手册而获得,STM32有SPI,在ADXL362_SPI初始化时需要对这三个数据进行配置。

 

ADXL362数据手册的下载页:http://www.analog.com/en/products/mems/accelerometers/adxl362.html#product-evaluationkit下载页面如图所示:

 

数据手册中要求:CPOL=0CPHA=0SCK最大为8MHZ,最小为2.4KHZ,推荐在1MHZ-8MHZ

 

我们在STM32的驱动代码中对SPI进行初始化的代码如下:

 

(备注:ADI官网上提供了中英文的数据手册,这样也更加方便了阅读,可以中英文对照着看。)

 

 

二、下载官方驱动代码ADXL362官网上提供了其驱动代码,可以在其基础上进行修改。官方驱动包含四个文件,分别为:ADXL362.c、ADXL362.h、Communication.c,Communication.h。前两个文件放的是ADXL362驱动程序,后两个文件放的是SPI、IIC协议有关的空函数。


ADXL362驱动代码下载页:https://wiki.analog.com/resources/tools-software/uc-drivers/renesas/adxl362下载页面如图所示:

 

三、 根据ADXL362数据手册SPI协议的说明移植代码

读或写单字节数据的SPI传输协议

 

读或写多个字节数据的SPI传输协议

 

读FiFO寄存器的SPI传输协议

 

ADXL362的写寄存器指令为0X0A,读寄存器的指令为0X0B,读FIFO寄存器的指令为0X0D,读取单字节时,先要通过SPI发送0X0B,再发送要要读取的寄存器的地址,再通过SPI接收数据,一共三步,其实很简单,其他的类似。(备注:在移植代码时,可以参考其他使用SPI协议的器件的SM32代码,参考的是Flash器件W25X16的STM32代码,具体的可参考后面的代码)

 

四、测试     

首先要测试ADXL362的SPI协议是否正确,通过读取地址为0X02的寄存器的数据是否等于0xF2来测试读寄存器的SPI协议是否正确,同时这也是ADXL362初始化要做的事情。我们也可以通过写一个寄存器,接着再读这个寄存器,看数据是否一样,来验证SPI读和写是否都可以。只有在SPI协议没有问题的基础上,我们才可以做接下来的事情。     

 

ADXL362有一个运动静止检测功能,在运动检测模式下,可以设定一个运动加速度阈值和一个时间值,系统只要检测到ADXL362一个轴的数据超过所设定的运动阈值,并持续该时间值,就可以触发运动;静止模式也是一样的,可以设定一个静止加速度阈值和一个时间值,系统要检测到ADXL362三个轴的数据都低于所设定的加速度静止阈值,并持续该时间值,就可以触发静止。    

 

另外一点要注意:ADXL362写寄存器的要遵循一定的顺序。

結果