Arduino, генерирующий меньшую частоту, чем 31 Гц

Я управляю приборной панелью автомобиля с помощью Arduino с помощью функции tone (), однако с минимальной частотой 31 Гц Arduino Uno я могу установить спидометр только на ~12 миль в час или более. Я хотел бы иметь возможность установить скорость от 0, что, по-моему, потребует около 10 Гц. Есть ли какие-нибудь кодовые трюки, которые я мог бы использовать? Может быть, мне следует использовать аппаратный таймер или другую плату?

, 👍0

Обсуждение

Какой частотный диапазон вы хотели бы охватить?, @Edgar Bonet

Скажем, 10-400 Гц, у меня нет точного числа, потому что каждая комбинация приборов отличается, но 10-400 Гц должны охватывать большинство из них, @Piotr

разве вы не можете включать и выключать штифт в loop (), чтобы снизить частоту импульсов в секунду с 30? Это может быть не так точно, но ваш медленно реагирующий спидометр не будет возражать против дрожания 200us., @dandavis

попробуйте библиотеку Timer1, @Juraj


1 ответ


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

2

Для этого я бы рассмотрел возможность использования таймера 1 в режиме 14 (быстрая ШИМ, с максимальным значением, контролируемым ICR1), с настройкой прескалера на 64. Затем таймер будет настроен на частоту 250 кГц, что даст вам следующие характеристики:

  • частота таймера: 250 кГц (разрешение по времени = 4 мкс)
  • минимальная частота: 3,81 Гц (точный период = 218 мкс = 262 144 мс)
  • максимальная частота: 125 кГц (период = 8 мкс)

Поскольку разрешение по времени остается постоянным, разрешение по частоте ухудшается по мере увеличения частоты. При частоте 400 Гц разрешение составляет около 0,16%, или 0,64 Гц.

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

Проверьте таблицу данных, чтобы узнать, как установить биты конфигурации (в основном: неинвертирующая ШИМ на OC1A или OC1B, режим генерации сигналов = 14, прескалер = 64). Возможно, вы сможете найти библиотеки для этого, если вы предпочитаете такой подход, я не проверял эту возможность.

,