Попытка понять узкое место частоты дискретизации датчика

Допустим, у меня есть датчик, подключенный к шине I2C Arduino Uno Rev3. Я считываю выходные данные датчика и использую Serial.print (), чтобы отправить показания датчика обратно на мой ноутбук.

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

Частота дискретизации датчика зависит от многих факторов. Предположим, что частота дискретизации датчиков не ограничена. Это означало бы, что я ограничен тем, сколько данных может нести каждая промежуточная шина, прежде чем она достигнет ноутбука. Например, я ограничен шиной I2C, которую atmega328p использует для считывания данных датчика. Я также ограничен шиной UART, которую atmega16u2 использует для отправки данных на мой ноутбук. Насколько я прав? Кроме того, по какой шине подключены atmega328p и atmega16u2?

, 👍2

Обсуждение

см. Техническое описание датчика, @jsotola

Вы используете быстрый режим I2C (400 кГц) (если датчик вообще способен на это)? Если нет, то интерфейс I2C, вероятно, является узким местом (при условии, что датчик пробует достаточно быстро)., @chrisl

@chrisl Я использую MPU6050 на I2C 400 кГц. По спецификации датчик может дискретизировать от 4 до 1 кГц, но я применяю цифровой фильтр нижних частот, который добавляет задержку 19 мс. Таким образом, частота дискретизации датчика уже слишком низкая. Но все же я пытаюсь понять промежуточные шаги, чтобы лучше понять аппаратное обеспечение., @Quazi Irfan


2 ответа


Лучший ответ:

3

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

Это означало бы, что я ограничен тем, сколько данных может нести каждая промежуточная шина, прежде чем она достигнет ноутбука

Да, в основном да. Пропускная способность всего интерфейса передачи, который включает в себя интерфейс I2C, ATMEGA328P, подключение к ATMEGA16U2 и интерфейс USB, будет учитывать теоретическую максимальную частоту дискретизации датчика.

В некоторых случаях вам может потребоваться учитывать задержку, а также пропускную способность среды передачи, которая будет включать интерфейс I2C, ATMEGA328P, ATMEGA16U2 и интерфейс USB. Датчик может потребовать некоторых вычислений, которые могут привести к некоторой задержке. Интерфейс I2C или интерфейс UART также могут привести к некоторой задержке, особенно если он управляется битовым стуком(хотя, вероятно, не с 328P).

Кроме того, с точки зрения 328P, он должен получать данные от датчика, делать вычисления из входящих необработанных данных, если это необходимо, и отправлять их по интерфейсу UART на 16U2. Большинство этих процессов будет происходить шаг за шагом, и если объединенное время обработки займет больше времени, чем задержка между каждым образцом, поступающим с датчика, то сам 328P теоретически тоже может стать узким местом.

,

Спасибо за подробный ответ. Это все прояснило., @Quazi Irfan


2

Кроме того, по какой шине подключены atmega328p и atmega16u2?

См.:

https://www.arduino.cc/en/uploads/Main/Arduino_Uno_Rev3-schematic.pdf

Они соединены TxD и RxD.

Не видя вашего кода (подсказки), это чрезвычайно трудно сказать. Возможно, поможет более высокая скорость передачи данных в бодах.

,

Спасибо, я просто хотел знать, что atmega16u2 и atmega328p подключены через UART. Устанавливает ли Serial.begin также скорость передачи данных этого соединения?, @Quazi Irfan

@QuaziIrfan, только там, @Juraj

@Juraj Извините, я не понимаю, что вы имеете в виду., @Quazi Irfan

@QuaziIrfan, USB-линия не использует эту скорость передачи данных, @Juraj

Итак, существует ли фиксированная скорость передачи данных в бодах, установленная в процессе производства?, @Quazi Irfan

USB не имеет скорости передачи данных в бодах. Все это довольно сложно, но протокол включает в себя NRZI (поиск материала об этом). Однако, когда вы делаете Serial.begin, вы устанавливаете скорость передачи данных чипа интерфейса USB. То есть скорость, с которой он ожидает данных от Atmega328p. Интерфейс USB сможет обрабатывать практически любую скорость передачи данных, которую вы выберете., @Nick Gammon