完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
嗨,我正在使用LIS3DSH,我想定期(比如每50毫秒一次)获得加速度计的最新X,Y,Z位置并执行计算。
我目前的做法是在我的MCU上设置一个定时器,每50毫秒中断一次。在此中断例程中,我只需查询LIS3DSH的OUT_X,OUT_Y和OUT_Z寄存器,然后立即执行计算。 我已将LIS3DSH上的块数据更新值(在寄存器CTRL_REG4中)配置为“连续”,并且我也没有使用FIFO功能(FIFO_CTRL ='旁路模式:FIFO关闭')。另外,我已经配置了输出数据速率( 在寄存器CTRL_REG4)到100赫兹。 我是否正确相信这会导致OUT_X,OUT_Y和OUT_Z寄存器值每10毫秒不断更新最新的加速度计位置数据? 如果是这样,那么在执行我的计算时,这将使X,Y,Z位置数据的最坏情况为10毫秒,这符合我的要求。 我非常感谢任何关于我的上述方法的反馈都是错误的或不是最优的。谢谢。 -Terence #lis3dsh 以上来自于谷歌翻译 以下为原文 Hi, I'm using an LIS3DSH in a case where I want to periodically (say once every 50 milliseconds) get the most recent X,Y,Z position of the accelerometer and perform a calculation. My current approach is to just set a timer on my MCU to interrupt every 50 milliseconds. During this interrupt routine I simply query the OUT_X, OUT_Y and OUT_Z registers of the LIS3DSH and then immediately perform my calculations. I've configured the block data update value (in register CTRL_REG4) on the LIS3DSH to 'continuous' and I'm not using the FIFO feature either (FIFO_CTRL = 'Bypass mode: FIFO turned off'). Additionally, I've configured the output data rate ( in register CTRL_REG4) to 100 Hz. Am I correct to believe this will result in the OUT_X, OUT_Y and OUT_Z register values continually being updated with the very latest accelerometer position data every 10 milliseconds? If so, this would make a worst case scenario of the X, Y, Z position data being 10 milliseconds old when performing my calculation, which is within my requirements. I'd very much appreciate any feedback on my above approach being incorrect or less than optimal in any way. Thanks. -Terence #lis3dsh |
|
相关推荐
3个回答
|
|
|
|
|
|
Miroslav - 感谢您的反馈。一个问题:因为我有
LIS3DSH的块数据更新值(在寄存器CTRL_REG4中)设置为'连续' 我想当我读取OUT_X_L和OUT_X_H值时,它们可能来自两个不同的读数吗? 我一个接一个地读取这些寄存器(首先是OUT_X_L然后是OUT_H_L)并且我正在使用I2C“快速模式”(400 kHz),但是可能会按照给定的顺序发生以下情况: 我检索OUT_X_L的值(寄存器0x28) LIS3DSH在内部使用新读数更新OUT_X_L和OUT_H_L寄存器 我检索OUT_X_H的值(寄存器0x29) 换句话说,对于我的16位X值(由OUT_X_L和OUT_X_H组成),我使用了最新更新的高位和前一次更新的低位。 你是否同意这是可能的? 以上来自于谷歌翻译 以下为原文 Miroslav - Thank you for the feedback. One concern: Since I have the block data update value (in register CTRL_REG4) of the LIS3DSH set to 'continuous' I suppose it's possible when I read the OUT_X_L and OUT_X_H values they could be from two different readings right? I read these registers immediately one after another (OUT_X_L first then OUT_H_L) and I'm using I2C 'fast mode' (400 kHz) but it's possible the following could happen in the given order:
So, in other words, for my 16 bit X value (comprised of both OUT_X_L and OUT_X_H), I'm using the high bits from the most recent update and the low bits from the previous update. Do you agree this is a possibility? |
|
|
|
是的,我同意你的看法。
对不起,我在第一篇文章中遗漏了这一点,你应该在CTRL_REG4中将BDU设置为1,以避免出现差异。 您也可以使用DRDY信号,以便MCU在新数据可用时收到中断,在这种情况下,您可以以最小延迟读取实际数据。 以上来自于谷歌翻译 以下为原文 Yes, I agree with you. I'm sorry, I miss that point in your first post, you should set the BDU to 1 in CTRL_REG4 to avoid the discrepancy. You could also use the DRDY signal so the MCU you receive an interrupt when new data are available, in this case you could read actual data with minimum delay. |
|
|
|
只有小组成员才能发言,加入小组>>
请教:在使用UDE STK时,单片机使用SPC560D30L1,在配置文件怎么设置或选择?里面只有SPC560D40的选项
2821 浏览 1 评论
3262 浏览 1 评论
请问是否有通过UART连接的两个微处理器之间实现双向值交换的方法?
1838 浏览 1 评论
3687 浏览 6 评论
6091 浏览 21 评论
对H747I-DISCO写程序时将CN2的st-link复用为usart1,再次烧录时无法检测到stlink怎么解决?
390浏览 2评论
STM32G474RE芯片只是串口发个数据就发烫严重是怎么回事?
480浏览 2评论
STM32处理增量式编码器Z信号如何判断中断是正转的还是反向转的?
309浏览 2评论
使用STM32F407VET6的USB2.0功能,发现ctl后芯片无数据返回,是什么原因可能导致的呢?
227浏览 2评论
用STM32G431开发工程,1.50版本的Package包文件无法输出项目工程
332浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-31 16:58 , Processed in 0.919096 second(s), Total 48, Slave 43 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号