Разрешение micros() для Portenta H7

Есть ли способ узнать разрешение micros() для Arduino Portenta H7. Я проверил другие платы, например, Nano, которая упоминается как 4 uS. Однако я не смог найти ни одного для Portenta H7.

Есть ли какой-нибудь способ измерить или найти это

, 👍3

Обсуждение

Может быть, захватить значение в узком цикле и вычислить самую короткую разницу, которую вы найдете?, @PMF

@PMF: Это даст только верхнюю границу: разрешение может быть меньше времени, затраченного на итерацию цикла., @Edgar Bonet

Я согласен, но это был бы первый намек., @PMF

Protenta полностью отличается от стандартного AVR Arduino. Он построен с двухъядерным ARM mcu M7/M4, работающим на частоте 480/240 МГц. На плате также установлена ОС (mbed OS). Скетчи выполняются поверх этой ОС. Я не знаю фактического статуса, но ~2015 (?) Я следил за дискуссией об использовании разрешения 'millis()' 50μs Arduino_mbed core. Невероятно, я знаю, но причина была в следующем: ОС запускает задачи, а таймер irq с частотой вызова МГц замедляет работу планировщика и задач., @Peter Paul Kiefer

Таким образом, дискуссия была серьезно о разрешении 50 мкм, которое приводит к ИК-сигналам таймера 20 кГц. Я не уверен, что это все еще правда. Но если они все еще используют разрешение 50 мкм, вы можете следовать идее @PMF и посмотреть, можно ли разделить разницу между двумя вызовами micros () на 50, 30 или что-то еще., @Peter Paul Kiefer

Сегодня я сделал кое-какие замеры. Я использовал цифровые контакты платы для включения и выключения во время каждого аналогового вызова АЦП. Затем эти цифровые контакты подключаются к осциллографу. Кроме того, я использовал micro() до и после analogRead в своем скетче, чтобы измерить время с платы. Я получил примерно 4uS времени, которое требуется для выполнения одной analogRead (), используя осциллограф. Однако функция micros() платы не могла дать мне такого значения. Таким образом, он показывал одно и то же время до и после вызова analogRead., @Basit Ali

Затем я несколько раз вызывал analogRead, чтобы увеличить время выполнения, и обнаружил, что максимальное разрешение, которое я мог получить с помощью micros (), составляет около 32uS. Это уступает даже обычной плате Arduino., @Basit Ali

Вопрос был отправлен на форум Arduino, где пользователь sbhklr утверждал, что разрешение было 1uS без каких-либо аргументов или ссылок. https://forum.arduino.cc/t/micros-resolution-for-arduino-portenta-h7/697386, @RowanP

Вопрос был кросс - отправлен на форум Arduino for STM32 с некоторым успехом. https://www.stm32duino.com/viewtopic.php?t=934 Пользователь edogaldo процитировал Arduino doco в поддержку ответа 1uS. https://www.arduino.cc/reference/en/language/functions/time/micros/, @RowanP


1 ответ


1

Ссылка на язык micros() гласит: "[Функция micros ()] возвращает количество микросекунд с тех пор, как плата Arduino начала выполнять текущую программу. Это число переполнится (вернется к нулю) примерно через 70 минут. На платах семейства Arduino Portenta эта функция имеет разрешение в одну микросекунду на всех ядрах. На платах Arduino 16 МГц (например, Duemilanove и Nano) эта функция имеет разрешение четыре микросекунды (т. Е. возвращаемое значение всегда кратно четырем). На платах Arduino с частотой 8 МГц (например, LilyPad) эта функция имеет разрешение восемь микросекунд.

Вполне вероятно, что документ был обновлен через некоторое время после того, как ОП опубликовал этот вопрос.

,