完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本帖最后由 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 |
|
相关推荐
|
|
帮顶
|
|
|
|
|
|
谢谢楼主,能不能把程序发给我学习,我搞好久还搞不出来,1962315579@qq.com,我的SPI正常,可以用于flash,芯片寄存器写读都不行,ID获取不到,请问是什么问题
|
|
|
|
|
|
我的SPI正常,可以用于flash,芯片寄存器写读都不行,ID获取不到,请问是什么问题
|
|
|
|
|
|
楼主,我移植SPI正常,但是在读取ADXL362数据的情况下一直读取不出来,能对比下你的代码吗?lsz19921001@163.com
|
|
|
|
|
|
erhu19623155 发表于 2017-3-20 00:29 1905252717@qq.com |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
有没有使用的 运动静止检测 运动好检测 但是进入静止模式 好慢
|
|
|
|
|
|
哪位大神有MGC3130的STM32 i2C驱动例程分享一下,感谢感谢
3217 浏览 1 评论
stm32f103c8t6用中断采出来的数来回跳?怎么样才能稳定下来?
1350 浏览 1 评论
基于STM32F103C8T6控制多路VL53L0X激光测距传感器
1598 浏览 4 评论
STM32F103RCT6采集不同采样率传感器数据发送到位机数据不完整
1823 浏览 2 评论
3432 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-5-7 20:29 , Processed in 0.969422 second(s), Total 73, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191