Можно ли увеличить частоту дискретизации ADXL345 на Raspberry Pi с Python? - PullRequest
1 голос
/ 27 января 2020

У меня Raspberry Pi с 2 акселерометрами ADXL345, и я хочу максимизировать частоту дискретизации данных от них обоих. Когда я искал inte rnet, я был заинтригован тем, что на форуме Raspberry Pi (https://www.raspberrypi.org/forums/viewtopic.php?t=254552) кто-то отображает этот код, в котором он использует два акселерометра в этом примере:

import time
import Adafruit_ADXL345


accel1 = Adafruit_ADXL345.ADXL345()
accel2 = Adafruit_ADXL345.ADXL345(address=0x1d, busnum=1)


print('Printing X, Y, Z axis values, press Ctrl-C to quit...')
cordinates = []

import time
start_time = time.time()
NUM_OF_SEC_TO_RUN = 10 

while time.time()<=start_time+NUM_OF_SEC_TO_RUN:

    x1, y1, z1 = accel1.read()
    x2, y2, z2 = accel2.read()
    cordinates.append([x1,y1,z1,x2,y2,z2,time.time()])

import csv
with open('02.txt', 'a') as csvFile:
    writer = csv.writer(csvFile)
    writer.writerows(cordinates)

Позже в посте он говорит, что сегмент

x1, y1, z1 = accel1.read()
x2, y2, z2 = accel2.read()
cordinates.append([x1,y1,z1,x2,y2,z2,time.time()])

был наиболее вероятной причиной, по которой акселерометры понижают частоту дискретизации, тем самым снижая скорость чтения и задерживая сбор данных.

Он говорит:

Среднее время выполнения вышеуказанных трех строк кода составляет 0,002121 секунду. Означает ли это, что возможности чтения ограничены из-за i2 c и Raspberry pi, а не датчика? Или это из-за моего кода?

Мне тоже интересно тот же вопрос, но я собираюсь поставить его по-другому. Есть ли способ укоротить сегмент выше, чтобы он мог потенциально уменьшить задержку и увеличить частоту выборки данных? То есть есть ли способ сделать это в одну строку? Насколько я могу судить, не было ни ответа на этот вопрос этого парня, ни каких-либо убедительных, которые помогли мне.

Если нет способа ответить на этот вопрос, то я задаю этот вопрос: есть ли способ ускорить скорость выборки данных I2 C на Raspberry Pi 3 B +, или это так? можно тиражировать этот код для связи SPI? Я точно знаю, что SPI-связь быстрее, чем I2 C, но я не уверен, как реализовать это на Python в Raspberry Pi. Прошу прощения, если этот пост слишком длинный.

1 Ответ

1 голос
/ 27 января 2020

В листе данных ADXL345 говорится, что самая быстрая частота дискретизации с использованием быстрой i2 c составляет 800 Гц. SPI необходим для ускорения частоты дискретизации - до 3200 Гц.

Похоже, библиотека Adafruit_ADXL345 поддерживает только i2 c. И это устарело. Библиотека Adafruit Blinka поддерживает SPI, но вам придется развернуть свой собственный интерфейс ADXL345.

...