完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我是用ADXL350,2个月了。现在还搞不好终端的设置。
我的测量目的是利用350的中断检测外部的敲击震动,计算这个震动持续的时间。然后由这个时间内取得的加速度值计算震动产生的位移。 现在寄存器设置进入迷茫了。请各位高手看看 这是我的初始化程序: { WriteToADXL345ViaSpi(0X31, 1, 0X6b); // DATA FORMAT +-8G 右对齐 中断低电平有效 0110 1011 WriteToADXL345ViaSpi(0X2D, 1, 0X08); // POWER WriteToADXL345ViaSpi(0X2C, 1, 0X0a); // 100Hz // WriteToADXL345ViaSpi(0X1D, 1, 0X02); // THERSH_TAP 敲击时产生加速度的幅值超过2*31.2mg=0.062g时有效。 // WriteToADXL345ViaSpi(0X21, 1, 0X01); // DUR 625us/LSB 敲击时间阀值625us 敲击时间必须大于此值 WriteToADXL345ViaSpi(0X24, 1, 0X02); // THRESH_ACT 活动检测阀值 加速度大于2*31.2mg=0.062g 有效 WriteToADXL345ViaSpi(0X25, 1, 0X01); // THERSH_INACT 静止检测阀值 加速度小于 1*31.2mg=0.0312g 有效 WriteToADXL345ViaSpi(0X26, 1, 0X02); // tiME_INACT 静止持续时间 1sec/LSB 2S WriteToADXL345ViaSpi(0X27, 1, 0X2A); // ACT_INACT_CTL Y-ACT-DC, INACT-AC // WriteToADXL345ViaSpi(0X2a, 1, 0X0A); // Y 敲击检测使能 WriteToADXL345ViaSpi(0X2E, 1, 0X48); // 单击 静止 中断允许 INT_ENABLE // WriteToADXL345ViaSpi(0X2f, 1, 0X00); // 活动中断送至INT1, 静止中断送到INT2 } 我现在使用的情况是:Y轴输出0.000g;X轴输出0.046g;Z轴输出0.863g。这是我经过换算得到的,没有错。 可就是不知道中断寄存器0x28 0x30 的中断位怎么判断。默认的中断位我从示波器上看也和手册的不一样。 怎么办啊? |
|
相关推荐
11个回答
|
|
您好,您的问题已经提交给ADI相关专家,将邀请专家尽快回答您的问题。谢谢!
|
|
|
|
您好。
从寄存配置看,使能了单击检测,但是敲击的阈值没有设置。 请先尝试活动和静止中断是否可以正常检测。建议在传感器standby的模式下配置寄存器,配置好传感器后再把measure位置高,使能测量。 0x28不是中断寄存器,0x30是中断源寄存器。检测到中断,对应的中断标志会置位。data ready, watermark,和overrun三个标志和是否使能对应中断没有关系。不使能相应的中断,这三个标志也会随相关事件的发生置位 |
|
|
|
st94wo 发表于 2018-12-12 14:20 敲击的两句话: WriteToADXL345ViaSpi(0X1D, 1, 0X02); WriteToADXL345ViaSpi(0X21, 1, 0X01); 这两句话是注释掉的,我只在后面用了运动和静止检测,想先试试看看运动和静止的中断能不能产生, 您说需要在standby模式下进行寄存器设置,我正在试。 请问:我读取0x2B寄存器能判断运动发生么?我依靠这个控制计数器计数。 |
|
|
|
cnh24 发表于 2018-12-12 14:31 在四线制SPI中,输入地址的时候也有一样的数据从SDO端输出,这是怎么回事? 和手册上的时序图不一样啊。 |
|
|
|
|
|
|
|
您好,您的问题已提交,会尽快回复您,谢谢!! |
|
|
|
和您电话联系过 |
|
|
|
我想问一下:传感器检测运动时,加速度大于阀值时,要维持至少多长时间,我估计是维持的时间太短了,不足以满足内部的比较? |
|
|
|
我现在按照电话沟通的结果,程序改为如下内容:
#include #include"reg350.h" #include"350.C" #include"delay.h" void main(void) { WriteToADXL345ViaSpi(0X2D, 1, 0X00); // POWER off standby WriteToADXL345ViaSpi(0X24, 1, 0X05); // THRESH_ACT 活动检测阀值 加速度大于 5*31.2mg=0.1560 g 有效 WriteToADXL345ViaSpi(0X25, 1, 0X04); // THERSH_INACT 静止检测阀值 加速度小于 4*31.2mg=0.1248 g 有效 WriteToADXL345ViaSpi(0X26, 1, 0X0A); // TIME_INACT 静止持续时间 1sec/LSB 10s WriteToADXL345ViaSpi(0X27, 1, 0X44); // ACT_INACT_CTL X:ACT-DC, INACT-DC WriteToADXL345ViaSpi(0X2E, 1, 0X80); // data_ready enable 1000 0000 WriteToADXL345ViaSpi(0X2f, 1, 0X00); // data_ready中断送至INT1 WriteToADXL345ViaSpi(0X31, 1, 0X2b); // +-8G 右对齐 中断0电平有效 四线SPI 0010 1011 WriteToADXL345ViaSpi(0X2C, 1, 0X0a); // 3200Hz WriteToADXL345ViaSpi(0X2D, 1, 0X08); // POWER while(1) { ReadFromADXL345ViaSpi(0x2D,1); // 单片机输出地址数据正确;传感器输出数据为0000 0000 } } 现在调试的结果是: (1)不管怎么改,DATA READY 中断无法产生。在INT1中断管脚一直高电平,无中断电平。 (2)while(1)循环里读0X2D的内容读不出,示波器显示0X00; (3)SDO端不管是三线制还是四线制,输出为0X2F。 怎么办?还有哪里不正确?ADI高工们帮忙看看吧。 |
|
|
|
|
|
|
|
cnh24 发表于 2018-12-12 16:02 您好。根据数据手册"A value of 0 in the INT_INVERT bit sets the interrupts to active high, and a value of 1 sets the interrupts to active low." INT_INVERT位置1,中断引脚active low。请检查对应连接的控制器引脚的设置,和中断引脚的连接,是否是控制器没有响应中断。data ready的中断是通过读取数据寄存器清除的 while中读取请看一下时序上tCS,DIS等时间是否满足要求 |
|
|
|
只有小组成员才能发言,加入小组>>
829 浏览 2 评论
给ADUM4223 增加信号驱动15V电压就不正常, 波动很大会被烧是什么情况?
1301 浏览 2 评论
ADP5092 SYS端口为2.09V,但是REG_OUT为0是什么原因?
1900 浏览 1 评论
ad7193差分输入ain1与ain2差是正值时,读到电压与实际值误差小,但为负值值,误差就变的很大
4241 浏览 2 评论
9002 浏览 1 评论
ADC3442采集,分析数据出现有规则毛刺,请问是哪方面的问题啊?
1426浏览 3评论
AD7190状态寄存器一直是0x80,连续转换模式下RDY不拉低
1646浏览 2评论
831浏览 2评论
1624浏览 2评论
给ADUM4223 增加信号驱动15V电压就不正常, 波动很大会被烧是什么情况?
1301浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-26 19:16 , Processed in 1.246202 second(s), Total 96, Slave 80 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号