本帖最后由 Waihekor 于 2017-1-15 22:12 编辑
最近做一个项目,用 STM32单片机调试ADXL362,但是在网上发现几乎没有ADXL362的STM32驱动代码,已经做了ADXL362的STM32测试工作,有了一些进展。所以写下整个调试过程,希望能够帮助更多的人。
ADXL362加速度传感器是目前业界功耗最低的加速度传感器,主要表现在以下几个方面:
1.测量模式下电流1.8uA(2.0供电,400HZ ODR)
2.运动唤醒模式下270nA
3.待机电流10nA
4.FiFO寄存器降低系统级功耗
1. 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=0
CPHA=0
SCK最大为8MHZ,最小为2.4KHZ,推荐在1MHZ-8MHZ
我们在STM32的驱动代码中对SPI进行初始化的代码如下:
( 备注:ADXL362是ADI公司生产的一款超低功耗加速度传感器,ADI官网上提供了中英文的数据手册,这样也更加方便了我们的阅读,可以中英文对照着看。)
2. 下载官方驱动代码
ADXL362官网上提供了其驱动代码,我们可以在其基础上进行修改。 官方驱动包含四个文件,分别为:ADXL362.c、ADXL362.h、Communication.c,Communication.h。前两个文件放的是ADXL362驱动程序,后两个文件放的是SPI、IIC协议有关的空函数。
ADXL362驱动代码下载页:
https://wiki.analog.com/resources/tools-software/uc-drivers/renesas/adxl362下载页面如图所示:
3. 根据ADXL362数据手册SPI协议的说明移植代码
读或写单字节数据的SPI传输协议
读或写多个字节数据的SPI传输协议
读FiFO寄存器的SPI传输协议
ADXL362的写寄存器指令为0X0A,读寄存器的指令为0X0B,读FIFO寄存器的指令为0X0D,读取单字节时,先要通过SPI发送0X0B,再发送要要读取的寄存器的地址,再通过SPI接收数据,一共三步,其实很简单,其他的类似。
( 备注:在移植代码时,可以参考其他使用SPI协议的器件的SM32代码,我参考的是Flash器件W25X16的STM32代码,具体的可参考后面的代码)
4.测试
首先我们先要测试ADXL362的SPI协议是否正确,通过读取地址为0X02的寄存器的数据是否等于0xF2来测试读寄存器的SPI协议是否正确,同时这也是ADXL362初始化要做的事情。我们也可以通过写一个寄存器,接着再读这个寄存器,看数据是否一样,来验证SPI读和写是否都可以。只有在SPI协议没有问题的基础上,我们才可以做接下来的事情。
ADXL362有一个运动静止检测功能,在运动检测模式下,可以设定一个运动加速度阈值和一个时间值,系统只要检测到ADXL362一个轴的数据超过所设定的运动阈值,并持续该时间值,就可以触发运动;静止模式也是一样的,可以设定一个静止加速度阈值和一个时间值,系统要检测到ADXL362三个轴的数据都低于所设定的加速度静止阈值,并持续该时间值,就可以触发静止。
另外一点要注意:ADXL362写寄存器的要遵循一定的顺序。 更多的关于ADXL362的说明,可以查找数据手册和相关资料。
测试视频: http://v.youku.com/v_show/id_XMTgyNjA2MTc0MA==.html?from=y1.7-2&spm=a2hzp.%208253869%20.0.0.46QSku
4
|
|
|
|
谢谢楼主,能不能把程序发给我学习,我搞好久还搞不出来, 1962315579@qq.com,我的SPI正常,可以用于flash,芯片寄存器写读都不行,ID获取不到,请问是什么问题
|
|
|
|
|
我的SPI正常,可以用于flash,芯片寄存器写读都不行,ID获取不到,请问是什么问题
|
|
|
|
|
有没有使用的 运动静止检测 运动好检测 但是进入静止模式 好慢
|
|
-
-
1037092462
2018-8-15 10:53
我的进入不了,我的中断一直没输出,是不是我的初始化设置有问题,可以帮忙解答下不?
|
|
|