Accelerometer I2C采样率
我在尝试使用dsPIC33f微控制器采样I2C从设备时遇到问题 我正在使用PICs internal timer1定时器以定义的采样率“滴答”并获取必要的数据。不幸的是,结果没有得到足够快,我不知道为什么。我的一个从设备是ADXL345加速计,它的最大输出数据速率为3600Hz。我不需要这么高的频率,但我似乎没有成功地在50Hz以上的任何地方取样 I2C设置为400KHz的“快速模式”。我想在加速度计上采样的绝对最大值是1KHz,虽然这有点过分,但我对128Hz更感兴趣。我设置的加速计参数如下:Accelerometer I2C采样率,accelerometer,microcontroller,pic,i2c,mplab,Accelerometer,Microcontroller,Pic,I2c,Mplab,我在尝试使用dsPIC33f微控制器采样I2C从设备时遇到问题 我正在使用PICs internal timer1定时器以定义的采样率“滴答”并获取必要的数据。不幸的是,结果没有得到足够快,我不知道为什么。我的一个从设备是ADXL345加速计,它的最大输出数据速率为3600Hz。我不需要这么高的频率,但我似乎没有成功地在50Hz以上的任何地方取样 I2C设置为400KHz的“快速模式”。我想在加速度计上采样的绝对最大值是1KHz,虽然这有点过分,但我对128Hz更感兴趣。我设置的加速计参数如下:
- 数据格式(0x31)-自检关闭、中断反转关闭、全分辨率打开、对齐位关闭、范围位+/-16g李>
- 数据速率(0x2C)-低功率模式关闭(正常模式),输出数据速率模式400Hz(我在数据表中读到400KHz I2C仅支持高达800Hz,因此我使用400Hz是安全的)
- 电源控制(0x2D)-自动睡眠关闭、测量模式打开、睡眠位关闭、睡眠模式采样率8Hz(虽然未使用,但可以忽略)
- 中断(0x2E)-数据准备中断已启用,其他一切关闭
干杯 好的,这可能有很多方面:
- 在您的案例中,最简单的解释是som对用于触发轮询的计时器的错误配置。我需要知道您是如何使用它的,它是否触发了一个中断,您在其中设置了一个标志来触发加速计轮询?您是否手动轮询计时器以触发加速计轮询。在任何情况下,当这种情况发生时,切换输出引脚的高电平和低电平,并用示波器查看它将为您提供有价值的信息。是所有的投票周期都更长,还是只是其中一些投票周期比预期的要长得多
- 我经常看到的是一个缓慢的I2C处理例程。I2C可能设置为400KHz,这确实是字节位的读写速度,但字节之间有一些处理时间,这在很大程度上取决于代码的复杂性。在您的情况下,因为您使用的是多字节读取模式,所以这一次实际上不是在字节之间,而是在轮询周期之间。但奇怪的是,这将是您的问题,它不是如此频繁的轮询,也不是大规模的数据读取
- 在你的情况下(有一些测量设备,你似乎有),我要做的是检查所有的计时是否如你所期望的那样。不要假设任何事情,测量它并验证它是否在做你期望的事情。在这方面,我将从最简单的事情开始。时钟的频率是400kHz吗?读取六个字节时,它们之间是否没有延迟?轮询之间是否存在预期的空闲间隔?在轮询之间I2C总线是否卡滞(SDA和/或SCL长时间处于低位)?除了加速计以外,总线上是否有任何意外的通信或活动?这些是我会检查的一些东西,以了解可能出现的问题。这里的黄金法则是不要猜测,测量它强>
- 如果以上一切都是完美的,如预期的那样,只是在稳定的方式下,民意调查之间的时间间隔更长。我会开始检查软件的时间安排,以了解每个例程需要多少时间。我看到许多软件开发人员对一些看似简单的操作所需的时间感到惊讶。为此,请使用第一个项目符号中描述的输出引脚位切换。使用两个IO端口,使示波器的每个通道上都有两个标记,并更改代码中切换这些位的位置,只需使用它来检查代码中任何较慢的部分。如果你想在这方面获得另一条黄金法则,分而治之。让你妈妈