Тахометр с датчиком холла своими руками

Добавил пользователь Cypher
Обновлено: 19.09.2024

Понадобилось на работе контролировать обороты двигателя. Решили использовать датчик Холла. На муфту установленную на валу двигателя приклеили пару неодимовых магнитов. Для датчика Холла сделали схему на компараторе, чтобы фиксировать моменты прохождения магнита напротив датчика. Схема приведена на рис.1


Рис. 1 Принципиальная схема тахометра

Описание работы

Датчик Холла AHSS49 на каждый проход магнита, закрепленного на валу двигателя формирует импульс амплитудой около 1 вольта, со смещением относительно земляной шины на +2,5 В.

Полученный сигнал поступает на вход компаратора IC1 LM311, который формирует управляющие импульсы для выходной опто-развязки OC1 PC817, выход которой присоединяется ко входу контроллера, подтянутому через сопротивление 1-2 кОм к питанию контроллера. В промышленных контроллерах, такие резисторы предустановлены и требуется только конфигурирование входных цепей. Порог срабатывания компаратора IC1 настроен на напряжение 2,6 В. Настраивая компаратор на более высокое напряжение можно получить более узкие импульсы на выходе - это связано с тем, что импульсы на выходе датчика Холла имеют форму близкую к треугольной.

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

Схема была смакетирована на самодельной монтажной плате см. рис.2 Для публикации была подготовлена разводка печатной платы см. Приложения к статье.

Макет схемы усиления сигнала датчика Холла


Рис.2 Макет схемы усиления сигнала датчика Холла

Установка датчика около муфты вала двигателя см.рис.3 Датчик Холла был установлен таким образом, чтоб при прохождении магнитов установленных на муфте они оказывались на расстоянии пимерно 5 мм напротив датчика Холла. При установке на валу двух магнитов результирующая частота на выходе платы удваивается. При установке 4 магнитов возрастает в 4 раза. Большее число магнитов устанавливается для подсчета частоты вращения низко-оборотных двигателей. Соответственно, при измерении частоты вращения двигателя результат делится на число магнитов установленных на валу двигателя.

Установка датчика на кронштейне вблизи муфты на валу двигателя


Рис.3 Установка датчика на кронштейне вблизи муфты на валу двигателя

Выход тахометра может быть организован несколькими способами в зависимости от решаемых задач

Схема приведенная на рис. 1 при работе с промышленными контроллерами может не дать устойчивого срабатывания на каждый импульс поскольку 2 p-n перехода опто-развязки PC817 при полном открытии будут давать падение напряжения около 1 В. И , в этом случае, дискретные входы пром.контроллера выполненные на КМОП микросхемах будут срабатывать неустойчиво, в этом случае имеет смысл реализовать схему выхода на полевом N-канальном транзисторе. Вариант схемы с выходом на полевом N-канальном транзисторе приведен на рис.4 . Для управления полевым транзистором пришлось задействовать дополнительный вход контроллера (клемма Х1). В случае если входов контроллера для этого не хватает, можно использовать дополнительный источник питания + 5В, подключив его к клемме Х1. Рабочий вход (клемма Х2) замыкается полевым транзистором и сформированные импульсы поступают на вход контроллера Х2.

Вариант схемы с выходом на полевом N-канальном транзисторе с дополнительной гальванической развязкой


Рис.4 Вариант схемы с выходом на полевом N-канальном транзисторе с дополнительной гальванической развязкой

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

Вариант схемы с выходом на полевом N-канальном транзисторе без дополнительной опторазвязки


Рис.5 Вариант схемы с выходом на полевом N-канальном транзисторе без дополнительной опторазвязки

Основой настоящей лабораторной работы является датчик Холла. Датчик Холла – это полупроводниковый прибор, работающий на основе одноименного эффекта. Датчик подключается к внешнему источнику питания. При внесении датчика в магнитное поле на его выходе формируется логический сигнал низкого уровня. В отсутствие магнитного поля на выходе датчика наблюдается высокий уровень сигнала.

Простейшая схема подключения датчика представлена на следующем рисунке. Она включает цифровой датчик A3144. Постоянный резистор и может содержать или не содержать конденсатор постоянной емкости. Резистор, номиналом 10 ком служит для надежной работы датчика в качестве ключевого элемента. Конденсатор фильтрует высокочастотные пульсации выходного сигнала. Если смотреть на переднюю сторону датчика (маркировка), то левый первый контакт соединяется с источником питания. Средний – с общим проводом, землей, правый – является выходным.


Используется готовый модуль датчика Холла А3144. Он имеет как цифровой выход D0, так и аналоговый A0, который не используется.

Схема подключения модуля датчика Холла к Ардуино UNO представлена на рис. 2. Датчик Холла подключается напрямую к плате ардуино своими тремя контактами D0, VCC и GND. VCC и GND соединяются с соответствующими контактами Ардуино. Цифровой выход D0 следует присоединить к одному из цифровых входов Ардуино, связанных с аппаратными прерываниями. Для ардуино Уно это D2 или D3. В нашей работе мы используем цифровой вход D3.


Кроме датчика Холла лабораторная установка включает цифровой жидкокристаллический дисплей LCD1602. Но может использоваться и любой другой. От формата дисплея будет зависеть код управляющей программы микроконтроллера и доступный объем выводимой информации.

Цифровой дисплей можно подключать к ардуино через имеющийся параллельный интерфейс, как у моего дисплея LCD2004, либо через последовательный интерфейс шины I2C, которым может быть дополнительно снабжен дисплей, как вы видите на моем дисплее LCD1602.

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

Для обмена данными по шине I2C линии последовательного интерфейса дисплея присоединяют к следующим выходам Ардуино: линию SDA к выходу А4, линию SCL к выходу А5, линии питания VCC и земли GND – к соответствующим линиям Ардуино.

Кроме того для регистрации сигнала и вывода индикации лабораторная установка содержит два светодиода, подключенных через резисторы сопротивлением 220 Ом к цифровым выходам D10 и D13.

Собираем лабораторную установку в соответствии со схемой.

Познакомимся с основными принципами измерения частоты цифровым способом.

Всего существует два принципа. Оба они основаны на сравнении периодов образцового и измерительного сигналов.

Первый способ иллюстрирует следующая схема.


Импульс входного сигнала (передним или задним фронтом), поступающий от датчика Холла, запускает аппаратное прерывание Ардуино. При срабатывании функции прерывания запускается подсчет количества импульсов n встроенного тактового генератора, период следования которых T0 заранее известен, и продолжается до следующего срабатывания прерывания.

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

Частота определяется как величина обратная периоду:

А частота вращения, выраженная в об/мин будет в 60 раз больше:

Для получения длительности импульсов образцового сигнала встроенного генератора пользователю Ардуино доступна функция Micros (). Она показывает текущее значение времени в микросекундах с начала запуска программы. Таким образом, обращаясь к ней в моменты срабатывания функции прерывания, можно получить количество микросекунд между двумя срабатываниями. Так как длительность одного образцового импульса T0 равна 1 мкс=1/1000000 с, тогда формула приобретает вид:

Если на валу вращающегося двигателя установлен не один магнит, а несколько (z), то время T между ближайшими срабатываниями функции прерывания сокращается в z раз, а частота входного сигнала возрастает в z раз, тогда формула примет вид:


Второй способ отличается от первого тем, что ведется прямой подсчет числа импульсов k, поступивших от датчика Холла за большой период времени Tm. Этот способ поясняется вторым рисунком. Согласно этому способу частота вращения вала будет равна:

А в минуту – в 60 раз больше:

Если принять Tm=1 c., то формула приобретает вид:

Для управления работой Ардуино необходимо разработать управляющую программу.

Для начала подключаем необходимые библиотеки:

LiquidCrystal_I2C lcd(0x27,16,2); — указываем i2c адрес (наиболее распространенное значение), а также параметры экрана

Объявляем переменные и константы:

const int RPM_PIN=3; — константа определяющая номер цифрового входа для подключения датчика Холла

volatile int rpm = 0; — частота импульсов (сразу обнуляем)

volatile int rpm_k = 0; — счетчик импульсов входного сигнала (обнуляем)

volatile boolean kontrol;

volatile int rpm_array[3] = ; — массив промежуточных значений частоты вращения (не менее трёх значений) для усреднения (сразу обнуляем)

volatile int rpm_result = 0; — расчётная частота вращения вала (обнуляем)

Объявляем функцию прерывания, которая при срабатывании будет подсчитывать количество импульсов входного сигнала

digitalWrite(13, HIGH); — на долю секунды выводим сигнал на красный сетодиод при каждом поступившем импульсе входного сигнала (для контроля работы схемы и датчика)

delayMicroseconds(500); — длительность свечения красного светодиода

digitalWrite(13, LOW); — выключение красного светодиода

Объявляем функцию сохранения значения частоты вращения при каждом новом цикле измерения и ее обнуления для последующего счета импульсов

rpm = rpm_k; rpm_k = 0; записываем подсчитанное число импульсов с датчика Холла в переменную частоты вращения, а счетчик обнуляем

digitalWrite(10, HIGH); — на долю секунды выводим сигнал на зеленый сетодиод при каждом отсчете образцового сигнала (для контроля работы)

delayMicroseconds(500); digitalWrite(10, LOW);

Объявляем основную процедуру Ардуино

lcd.begin(); — инициализируем дисплей

pinMode(RPM_PIN,INPUT); — устанавливаем режим работы входной линии ардуино на ввод

attachInterrupt(digitalPinToInterrupt(RPM_PIN), rpm_count, RISING); — настраиваем функцию прерывания, срабатывание по переднему фронту

Timer1.attachInterrupt(SensorData); — настраиваем срабатывание прерывания по таймеру

Timer1.initialize(1000000); — указываем период работы таймера – 1 с.

pinMode(10, OUTPUT); — устанавливаем режим работы цифрового выхода 10 и 13 на вывод

Объявляем основной цикл программы

rpm_result = 0; — обнуляем итоговый результат

rpm_array[2] = 60*rpm/2; — вычисляем текущее значение частоты вращения вала и записываем в последний элемент массива

rpm_result = rpm_result/3; — вычисляем среднее значение частоты вращения

lcd.setCursor(0, 0); — указываем положение курсора на экране дисплея

lcd.setCursor(0, 0); — указываем положение курсора на экране дисплея

lcd.print(«N(ob/min): «);lcd.print(rpm_result); — выводим частоту вращения в об/мин

delay(500); — делаем паузу между обновлениями экрана, чтобы он не мигал

Разработанную программу загружаем в память Ардуино. Подключив Ардуино к шине USB ПК, не забываем выбрать правильный порт в меню Системы программирования Ардуино, а также правильно указываем модель платы Ардуино.

К авторской схеме были добавлены входные узлы для согласования с различными цепями съема сигнала, был введен входной формирователь, генератор для проверки и калибровки тахометра, несколько изменены цепи питания. В соответствии с модификацией схемы была разработана новая печатная плата.

В результате модификации тахометр приобрел несколько большую универсальность в виде трех входов для работы: с датчиком Холла, с индуктивным датчиком, с выходным ключом коммутатора катушки зажигания. Наличие разных входных узлов предохранит вход МК от случайного попадания импульсов большой амплитуды и позволит без проблем произвести необходимое подключение. Введенный в схему тахометра узел формирования импульса, уменьшает вероятность дребезга на входе МК и повышает качество счета МК на высоких оборотах.

Принципиальная схема изображена на рис.1

Принципиальная схема тахометра

Рис.1 Принципиальная схема тахометра

Режимы работы тахометра, выбираемые в меню, следующие (при использовании резонатора 8МГц):

Количество цилиндров - количество катушек зажигания - тактность

Так, например, если счет в режиме 1 (Р.1.0/4-14) соответствует 4200об/м, то в режиме 2 (Р.1.5/6-1-4) количество об/м составит 2800; для режима Р.2.0 – 2100; для Р.2.5 – 1680 и т.д. С одним датчиком на валу выбирается режим Р.1.0 – 4-1-4. При использовании кварцевого резонатора на 4МГц результат измеренных тахометром показаний возрастает вдвое. Итак, всего 16 режимов, из которых первые 4 довольно часто бывают востребованными, остальные же из указанных являются достаточно редкими, не указанные – экзотическими и явно ни количество тактов, ни количество цилиндров, ни количество КЗ к этим режимам не отображены.

Тахометр собран на печатной плате, изображенной на рис.2

Печатная плата тахометра в сборе

Рис.2 Печатная плата тахометра в сборе

Дисплей может быть применен любой 4-разрядный с общим анодом и располагается вне печатной платы. Для проверки и демонстрации работы платы тахометра на макетной плате был собран адаптер для однотипных (по цоколевке) достаточно популярных 0,36-, 0,56-дюймовых дисплеев. Адаптер стыкуется с разъемами, расположенными на плате тахометра, что может стать одним из способов расположения дисплея относительно платы (показано на рис.3).

Вид платы с дисплеями

Рис.3 Вид платы с дисплеями

Предварительна настройка тахометра (перед встраиванием в панель авто, например) может быть выполнена с помощью встроенного генератора (что очень удобно) и подключенного внешнего осциллографа или частотомера. При подаче сигнала (кнопка S1) на вход тахометра, измеряется частота сигнала, сопоставляемая с показаниями на дисплее тахометра. Частота генератора выставляется при необходимости с помощью потенциометра PR1. Длительность импульсов на выходе формирователя необходимо установить в пределах 1,5-3мс для предотвращения сбоев счета при высоких оборотах коленчатого вала.

Выбор подходящего режима для конкретной конфигурации ДВС можно произвести по формуле: F=N*I/30*U*G, где F - частота Гц, U - тактность, G - число катушек зажигания, N - обороты в минуту, I - число цилиндров. Сопоставимые показаниям измерения показаны на рис.4.


При питания от бортовой сети автомобиля потребление прибора с четырех-разрядным светодиодным дисплеем 0,56" ток потребления прибора, при указанных на схеме номиналах резисторов в цепи питания дисплея, не превышает 50мА. Погрешность показаний тахометра не превышает +/-50об/м.

Резисторы R15, R16 предназначены для альтернативной версии схемы формирователя и не используются в схеме.

Предлагаю вариант тахометра на AVR микроконтроллере с большими цифрами на символьном дисплее. Цифры выстраиваются из отдельных сегментов на всю высоту дисплея, что делает показания прибора более читабельными. Рассчитывался на диапазон измерения от 300 до 9999 оборотов в минуту. Но получилось так, что при более высоких (от 10000) об/мин, младший разряд сдвигается за пределы экрана и прибор показывает количество оборотов в минуту, делённое на 10, что тоже неплохо.

Схема построена на микроконтроллере ATmega8. Для вывода показаний тахометра используется распространённый дисплей WH1602 на базе контроллера HD44780 (KS0066).

Схема тахометра на МК

Для более точного подсчета частоты вращения коленчатого вала, микроконтроллер тактируется от внешнего кварцевого резонатора на 8 MHz. Фьюзы выставляются соответствующие:


Если высокая точность измерения не сильно важна, то можно обойтись без внешнего кварца, при этом фьюзы нужно будет выставить на тактирование от внутреннего RC генератора на 8 МГц. Так как печатная плата разведена для МК в корпусе TQFP-32, на ней, для удобства, предусмотрен ISP разъём для внутрисхемного программирования. В прикрепленном архиве находятся несколько прошивок с различными временными интервалами обновления показаний тахометра на дисплее: 50, 100, 150, 200, 250, 333 и 500 мс (период указан в имени файла прошивки), а также для сигналов входа 1 импульс на оборот и 2 импульса на оборот. Также в архиве находятся файл печатной платы и проект Proteus. После сборки схемы и прошивки микроконтроллера получается такое вот устройство:


На видео показана работа тахометра с прошивкой 1 импульс на оборот и периодом обновления показаний дисплея 50 мс

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

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

Картинка для привлечения внимания

Немного физики

Для измерения частоты вращения нам понадобится датчик положения колеса/вала/круга/итп. Датчик ставится как правило один. Возможно, что он будет срабатывать не один раз на каждый оборот. Например, у вас датчик Холла и 4 магнита на колесе. Таким образом, для правильного вычисления частоты нужно знать:

  • количество срабатываний датчика на один оборот К;
  • минимальная ожидаемая частота Мин.
  • максимальная ожидаемая частота Макс.

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

С количеством срабатываний понятно, но зачем ещё эти мины и максы? Давайте рассмотрим сначала варианты расчёта частоты.

Со скоростью всё проще, достаточно знать число π, диаметр колеса, а частоту вращения мы уже знаем.

Болванка для кода

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

Обратите внимание на модификатор volatile у переменной counter. Все переменные, которые будут изменяться в обработчике прерывания (ISR) должны быть volatile. Это слово говорит компилятору, что переменная может изменяться неожиданно и доступ к ней нельзя оптимизировать.

Функция ISR() вызывается каждый раз, когда появляется единица на ноге fqPin. Мы эту функцию не вызываем, это делает сам контроллер. Он это делает, даже когда основная программа стоит в ступоре на функции delay(). Считайте, что ISR() обслуживает событие, от вас не зависящее и данное вам свыше как setup() и loop(). Контроллер прерывает выполнение вашей программы, выполняет ISR() и возвращается обратно в ту же точку, где прерывал.

Тело функции ISR() должно быть максимально коротким, точнее, сама функция должна выполняться максимально быстро. Это важно, так как прерывается выполнение вашего кода, который может оказаться чувствительным к непредвиденным задержкам. Некоторые библиотеки отключают прерывания для выполнения чувствительных с задержкам операций, например для управления светодиодной лентой WS2812.

Считаем обороты за единицу времени.

Первое, что приходит в голову, это взять интервал времени и посчитать количество измерений.

Как и у многих простых решений, у этого есть неочевидные минусы. Для повышения точности измерений вам необходим довольно большой интервал времени. Принцип тот же, что и у Шума квантования. При времени оборота колеса сравнимом с временем подсчёта, существенные изменения скорости вращения не будут замечены. Показания такого частотомера будут различаться до двух раз на каждый отсчёт.

Для повышени точности на малой скорости можно увеличить число К, как это сделано, скажем, в автомобильной технике для датчика ABS. Можно увеличить время подсчёта. Делая и то и другое мы подходим ко второй проблеме — переполнению счётчика. Да, переполнение легко лечится увеличением количества бит, но арифметика процессора Arduino не умеет считать 64-битные числа столь быстро, как хотелось бы и как она это делает с 16-разрядными.

Увеличение времени расчёта тоже не очень хорошо тк нам надо знать частоту прямо сейчас, вот при нажатии на газ, а не через пару секунд. Да и через пару секунд мы получим скорее некое среднее значение. За это время можно несколько раз сделать врумм-врумм.

Есть другой метод. Он лишён вышеописанных недостатков, но, как водится, имеет свои.

Считаем интервал между отсчётами

Мы можем засечь время одного отсчёта и другого, вычислить разницу. Величина, обратная вычисленному интервалу и есть частота. Круто! Но есть минусы.

Что делать, если наше колесо крутится еле-еле и измеренный интервал превышает разумные пределы? Выше я предложил считать частоты ниже разумного минимума за ноль.

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

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

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

Комбинированный метод

Можно попробовать объединить достоинства обоих методов.

То есть, мы засекаем время не просто между отсчётами, а время между проверками данных и делим на количество отсчётов за это время. Получается усреднённый интервал между отсчётами, обратная величина от которого есть частота. Предоставим компилятору оптимизировать вычисления.

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

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

Если использовать кооперативную многозадачнось, то можно сделать подсчёт, скажем раз 100мс, а вывод на дисплей раз в 250мс. Очень короткий интервал опроса снизит чувствительность к низким частотам.

Как говорят в рекламе, "но это ещё не всё".

Ошибки дребезга

Для устрашения вас предположу, что измеряем частоту вращения двигателя от индуктивного датчика зажигания. То есть, грубо говоря, на высоковольтный провод намотан кусок кабеля и мы измеряем индукцию в нём. Это довольно распространённый метод, не правда ли? Что же здесь сложного может быть? Самая главная проблема — современные системы зажигания, они дают не один импульс, а сразу пачку.




Но даже обычная система зажигания даёт переходные процессы:




Старинные же кулачковые контактные вообще показывают замечательные картинки.

Как с этим бороться? Частота вращения не может вырасти мгновенно, не даст инерция. Кроме того, в начале статьи я предложил ограничить частоту сверху разумными рамками. Отсчёты, что происходят слишком часто можно просто игнорировать.

Другой вид помех — это пропадание отсчётов. Из-за той же инерции у вас не может измениться частота в два раза за одну миллисекунду. Понятно, что это зависит от того, что вы собственно измеряете. Частота биения крыльев комара может, вероятно и за миллисекунду упасть до нуля.

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

Особенности измерения скорости движения и скорости вращения.

При измерении скорости вращения бензинового двигателя надо обязательно учесть величину К, которая совсем не очевидна. Например, вы намотали провод на кабель свечи и ожидаете, что там будет одна искра на один оборот. Это совсем не так. Во-первых, у 4-тактного двигателя вспышка происходит один раз на два оборота, у 2-тактного один раз на оборот коленвала. Во-вторых, для упрощения системы зажигания коммутатор подаёт искру на неработающие в данный момент цилиндры, типа на выпуске. Для получения правильного К надо почитать документацию на двигатель или подсмотреть показания эталонного тахометра.

При измерении скорости движения частота обновления дисплея не имеет большого значения, особенно, если вы рисуете цифры, а не двигаете стрелку. Даже обновление информации раз в секунду не вызовет отторжения. С оборотами двигателя всё наоборот, индикатор должен откликаться гораздо быстрее на изменение оборотов.

Вывод информации

Типичная обида начинающего разработчика автомобильной и мотоциклетной электроники "стрелки дёргаются, цифры нечитабельны" лечится простым способом — надо обманывать клиента. Вы что думаете, автомобильный тахометр всегда показывает вам правду? Конечно же нет! Хотя вам этот обман нравится и вы хотите, чтобы ваш прибор дурил голову так же.

Стрелки

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

Итак, нам надо учитывать максимальную скорость стрелки на увеличение и максимальную на уменьшение показаний. Совсем хорошо сделать эти скорости нелинейными, чтобы стрелка сначала двигалась быстрее, а потом чуть помедленнее приближалась к заданному значению.

Вот пример с нелинейным выводом показаний:

Вы можете поиграть с коэффициентами. Этот же принцип используется при выводе громкости сигнала, например, у любого аналогового индикатора: стрелки, полоски, яркость, цвет, размер итп. Приведённый пример самый простой, но и не самый красивый. Предлагайте ваши варианты в комментариях.

Цифры

С цифрами всё намного сложнее. Быстрые изменения показаний приводят к тому, что несколько порядков сливаются в мутное пятно. Для скорости, как и писал выше, можно задать интервал раз в секунду и глаз успеет прочитать три цифры.

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

Я предлагаю менять частоту вывода информации на дисплей в зависимости от степени изменения величины. Если обороты меняются, скажем, на 5% от последнего подсчёта, а не показа — можно затупить и показывать раз в 300-500мс. Если на 20%, то показывать раз в 100мс.

Можно огрубить шкалу и показывать только две значащие цифры

С учётом мототематики, можно довольно точно показывать обороты холостого хода как описано чуть выше и огрублять вывод на оборотах от двух холостых. На высоких оборотах для гонщиков важнее делать блинкеры типа "передачу вниз", "передачу вверх" и "ты спалишь движок". То есть держать двигатель около максимального крутящего момента и не дать ему крутиться выше максимальных разрешённых оборотов. Блинкеры замечательно делаются с помощью SmartDelay когда можно унаследовать от этого класса свой с заданной ногой контроллера и частотой мигания, там есть методы для переопределения и они вызываются раз в заданное время.

Читайте также: