Попытка понять узкое место частоты дискретизации датчика
Допустим, у меня есть датчик, подключенный к шине I2C Arduino Uno Rev3. Я считываю выходные данные датчика и использую Serial.print (), чтобы отправить показания датчика обратно на мой ноутбук.
Я пытаюсь понять узкие места, которые ограничивают частоту дискретизации датчика, полученную на ноутбуке.
Частота дискретизации датчика зависит от многих факторов. Предположим, что частота дискретизации датчиков не ограничена. Это означало бы, что я ограничен тем, сколько данных может нести каждая промежуточная шина, прежде чем она достигнет ноутбука. Например, я ограничен шиной I2C, которую atmega328p использует для считывания данных датчика. Я также ограничен шиной UART, которую atmega16u2 использует для отправки данных на мой ноутбук. Насколько я прав? Кроме того, по какой шине подключены atmega328p и atmega16u2?
@Quazi Irfan, 👍2
Обсуждение2 ответа
Лучший ответ:
Если бы вы рассматривали какой-то конкретный сценарий, то могли бы поделиться им. Есть о чем подумать, если исходить только из теоретических предположений.
Это означало бы, что я ограничен тем, сколько данных может нести каждая промежуточная шина, прежде чем она достигнет ноутбука
Да, в основном да. Пропускная способность всего интерфейса передачи, который включает в себя интерфейс I2C, ATMEGA328P, подключение к ATMEGA16U2 и интерфейс USB, будет учитывать теоретическую максимальную частоту дискретизации датчика.
В некоторых случаях вам может потребоваться учитывать задержку, а также пропускную способность среды передачи, которая будет включать интерфейс I2C, ATMEGA328P, ATMEGA16U2 и интерфейс USB. Датчик может потребовать некоторых вычислений, которые могут привести к некоторой задержке. Интерфейс I2C или интерфейс UART также могут привести к некоторой задержке, особенно если он управляется битовым стуком(хотя, вероятно, не с 328P).
Кроме того, с точки зрения 328P, он должен получать данные от датчика, делать вычисления из входящих необработанных данных, если это необходимо, и отправлять их по интерфейсу UART на 16U2. Большинство этих процессов будет происходить шаг за шагом, и если объединенное время обработки займет больше времени, чем задержка между каждым образцом, поступающим с датчика, то сам 328P теоретически тоже может стать узким местом.
Спасибо за подробный ответ. Это все прояснило., @Quazi Irfan
Кроме того, по какой шине подключены 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
- Последовательная связь между несколькими устройствами (или ардуино)
- I2C связь между Arduino Uno и Nodemcu32-s (ESP32)
- PCF8583 с задержкой Arduino в одну секунду?
- Альтернатива LCD-дисплеям UART/I2C?
- Arduino UARTS Автоматическая адресация ведомых устройств
- Плата управления реле I2C от двух Arduino Uno
- Мой Arduino UNO включает светодиод навсегда когда я подключаю его к своему ноутбуку
- Не могу загрузить скетч на Arduino Uno с помощью avrdude
см. Техническое описание датчика, @jsotola
Вы используете быстрый режим I2C (400 кГц) (если датчик вообще способен на это)? Если нет, то интерфейс I2C, вероятно, является узким местом (при условии, что датчик пробует достаточно быстро)., @chrisl
@chrisl Я использую MPU6050 на I2C 400 кГц. По спецификации датчик может дискретизировать от 4 до 1 кГц, но я применяю цифровой фильтр нижних частот, который добавляет задержку 19 мс. Таким образом, частота дискретизации датчика уже слишком низкая. Но все же я пытаюсь понять промежуточные шаги, чтобы лучше понять аппаратное обеспечение., @Quazi Irfan