Accelerometer I2C采样率

Accelerometer I2C采样率,accelerometer,microcontroller,pic,i2c,mplab,Accelerometer,Microcontroller,Pic,I2c,Mplab,我在尝试使用dsPIC33f微控制器采样I2C从设备时遇到问题 我正在使用PICs internal timer1定时器以定义的采样率“滴答”并获取必要的数据。不幸的是,结果没有得到足够快,我不知道为什么。我的一个从设备是ADXL345加速计,它的最大输出数据速率为3600Hz。我不需要这么高的频率,但我似乎没有成功地在50Hz以上的任何地方取样 I2C设置为400KHz的“快速模式”。我想在加速度计上采样的绝对最大值是1KHz,虽然这有点过分,但我对128Hz更感兴趣。我设置的加速计参数如下:

我在尝试使用dsPIC33f微控制器采样I2C从设备时遇到问题

我正在使用PICs internal timer1定时器以定义的采样率“滴答”并获取必要的数据。不幸的是,结果没有得到足够快,我不知道为什么。我的一个从设备是ADXL345加速计,它的最大输出数据速率为3600Hz。我不需要这么高的频率,但我似乎没有成功地在50Hz以上的任何地方取样

I2C设置为400KHz的“快速模式”。我想在加速度计上采样的绝对最大值是1KHz,虽然这有点过分,但我对128Hz更感兴趣。我设置的加速计参数如下:

  • 数据格式(0x31)-自检关闭、中断反转关闭、全分辨率打开、对齐位关闭、范围位+/-16g
  • 数据速率(0x2C)-低功率模式关闭(正常模式),输出数据速率模式400Hz(我在数据表中读到400KHz I2C仅支持高达800Hz,因此我使用400Hz是安全的)
  • 电源控制(0x2D)-自动睡眠关闭、测量模式打开、睡眠位关闭、睡眠模式采样率8Hz(虽然未使用,但可以忽略)
  • 中断(0x2E)-数据准备中断已启用,其他一切关闭
我使用定时器1以指定的采样率进行采样,我知道采样率工作充分,因为我有一个计数器,计数器达到一分钟后输出消息;我用秒表来确定它是对的。例如,在100Hz采样率下,我等待计数器计数到6000(100*60)并显示一条消息,如果秒表在1分钟后看到该消息,我知道它至少在一定程度上采样

当我尝试仅从加速计采样时(I2C多字节读取模式,一次调用读取所有六个字节),它的执行速度不够快。使用我的秒表方法,完成一项工作似乎需要大约1分15秒,而这项工作应该需要1分钟(以100Hz的频率采样),也就是说,它处理I2C命令的速度不够快。较高的采样率会增加更多的延迟

我觉得这与I2C时钟和计时器1不同步有关,因此在我调用加速计数据时,不需要等待。我无法想象I2C的400KHz时钟是不够的,但如果我错了,请纠正我

我应该如何正确地从I2C从设备读取数据?我还有一个陀螺仪和磁强计,我想以足够高的采样率读取,磁强计有160Hz的极限,所以我说,128Hz的采样率对所有K三个设备都是合适的。试图同时读取所有三个设备的数据显然会导致采样速度比预期慢

我还将同时从4个引脚(ADC 10位)收集模拟数据。这段代码已经实现了,我可以在1KHz的频率下读取模拟数据,采样率达到预期,只是I2C设备动作缓慢

我希望加速度计在尝试以100Hz采样时会很好,当我可以以3600Hz(I2C的最大输出频率为800Hz)输出时,但它真的很困难,我不知道还能尝试什么


干杯

好的,这可能有很多方面:

  • 在您的案例中,最简单的解释是som对用于触发轮询的计时器的错误配置。我需要知道您是如何使用它的,它是否触发了一个中断,您在其中设置了一个标志来触发加速计轮询?您是否手动轮询计时器以触发加速计轮询。在任何情况下,当这种情况发生时,切换输出引脚的高电平和低电平,并用示波器查看它将为您提供有价值的信息。是所有的投票周期都更长,还是只是其中一些投票周期比预期的要长得多

  • 我经常看到的是一个缓慢的I2C处理例程。I2C可能设置为400KHz,这确实是字节位的读写速度,但字节之间有一些处理时间,这在很大程度上取决于代码的复杂性。在您的情况下,因为您使用的是多字节读取模式,所以这一次实际上不是在字节之间,而是在轮询周期之间。但奇怪的是,这将是您的问题,它不是如此频繁的轮询,也不是大规模的数据读取

  • 在你的情况下(有一些测量设备,你似乎有),我要做的是检查所有的计时是否如你所期望的那样。不要假设任何事情,测量它并验证它是否在做你期望的事情。在这方面,我将从最简单的事情开始。时钟的频率是400kHz吗?读取六个字节时,它们之间是否没有延迟?轮询之间是否存在预期的空闲间隔?在轮询之间I2C总线是否卡滞(SDA和/或SCL长时间处于低位)?除了加速计以外,总线上是否有任何意外的通信或活动?这些是我会检查的一些东西,以了解可能出现的问题。这里的黄金法则是不要猜测,测量它

  • 如果以上一切都是完美的,如预期的那样,只是在稳定的方式下,民意调查之间的时间间隔更长。我会开始检查软件的时间安排,以了解每个例程需要多少时间。我看到许多软件开发人员对一些看似简单的操作所需的时间感到惊讶。为此,请使用第一个项目符号中描述的输出引脚位切换。使用两个IO端口,使示波器的每个通道上都有两个标记,并更改代码中切换这些位的位置,只需使用它来检查代码中任何较慢的部分。如果你想在这方面获得另一条黄金法则,分而治之。让你妈妈