Comments 27
Применительно к тахометру, частота импульсов будет 166.6 Гц для 10 тысяч(!) об/мин. Для микроконтроллера даже с 1 MIPS просто много времени для обработки сигналов и подавления дребезга. Достаточно проверять состояние входа по прерыванию таймера раз в 1 мс. Сигнал с датчика через компаратор прогонять.
Для дребезга достаточно конденсатор поставить или LC фильтр лучше.
Есть готовые микросхемки, я интересовался, но по памяти не скажу прямо сейчас.
Я напоролся на дребезг с CDI Suzuki Djebel, там не просто искра горит какое-то время как на графике в статье, а идут подряд несколько вспышек с чётким интервалом. Прерывание успевало отработать.
Есть готовые микросхемки, я интересовался, но по памяти не скажу прямо сейчас.
Я напоролся на дребезг с CDI Suzuki Djebel, там не просто искра горит какое-то время как на графике в статье, а идут подряд несколько вспышек с чётким интервалом. Прерывание успевало отработать.
Я глушил подобранным RC/LC фильтром. Достаточным для исключения ложных сработок без специальной обработки дребезга.




Схемку можно?
Будет ли это универсальным решением?
Нет ли готовой схемки индукционного датчика, что от провода работает, намотанного на высоковольный?
Будет ли это универсальным решением?
Нет ли готовой схемки индукционного датчика, что от провода работает, намотанного на высоковольный?
О, прости, я брал не с индукционного. Хотя, думаю, подобными цепочками можно практически наглухо многое заглушить (благо делитель уже был с некоторой индукционностью, добавил 1 конденсатор тупо).
Я делал блинкер под Yamaha V-Max 1200 (на чем-то копеечном, типа tiny25/45), там есть отвод на тахометр, первый график как раз с него снят напрямую. Судя по графику — дублирует выход с CDI до силовой части (коммутатора) — типичные такие управляющие в 0.

Я делал блинкер под Yamaha V-Max 1200 (на чем-то копеечном, типа tiny25/45), там есть отвод на тахометр, первый график как раз с него снят напрямую. Судя по графику — дублирует выход с CDI до силовой части (коммутатора) — типичные такие управляющие в 0.

Ага, ясно.
Хорошо, когда есть источник нормальных данных (более-менее).
Хорошо, когда есть источник нормальных данных (более-менее).
в принципе с низковольтного выхода катушки можно снимать через сопротивление в 60-100кОм, чтобы не спалить вход, у приборок с высоковольтным (12вольт, Открытый коллектор) и низковольтным (с эбу, 5Вольт) входами связь через этот резистор. (вот схемы с драйва, первая с фазы генератора, вторая с катушки и эбу)
далее просто RC цепочка в виде ФНЧ (т.е. к этому резистору достаточно небольшую емкость, получим интегрирующую цепочку) с частотой среза около 500 гц — 15тыс. оборотов :) или около 83м/сек — более чем достаточно для учёта.
потом, т.к. на нижних скоростях 1-2 кмч, или оборотах ниже 200 об/мин будет неустойчивая работа — можно просто организовать по подсчёту импульсов. будет надежно считать высокие скорости, погрешность появится при малых скоростях и маленьком же окне счета, и на нижних частотах. жена как отдаст комп — скину ods или скорректирую в xls.
далее просто RC цепочка в виде ФНЧ (т.е. к этому резистору достаточно небольшую емкость, получим интегрирующую цепочку) с частотой среза около 500 гц — 15тыс. оборотов :) или около 83м/сек — более чем достаточно для учёта.
потом, т.к. на нижних скоростях 1-2 кмч, или оборотах ниже 200 об/мин будет неустойчивая работа — можно просто организовать по подсчёту импульсов. будет надежно считать высокие скорости, погрешность появится при малых скоростях и маленьком же окне счета, и на нижних частотах. жена как отдаст комп — скину ods или скорректирую в xls.
Все дело в том, что Ардуино это среда разработки.
А измеряет частоту (или период и ли еще что-то) конкретный контроллер.
И если мы занимаемся подобными вещами, нужно понимать как это делается в железе.
То есть совершенно четко представлять как это делается на конкретных таймерах/счетчиках (прерывания) конкретной Меги (скорее всего Меги).
И тогда сразу становится все ясно и никаких заморочек.
Есть отличная книга Евстифеева «Микроконтроллеры семейства Mega»
А измеряет частоту (или период и ли еще что-то) конкретный контроллер.
И если мы занимаемся подобными вещами, нужно понимать как это делается в железе.
То есть совершенно четко представлять как это делается на конкретных таймерах/счетчиках (прерывания) конкретной Меги (скорее всего Меги).
И тогда сразу становится все ясно и никаких заморочек.
Есть отличная книга Евстифеева «Микроконтроллеры семейства Mega»
Для тахометра достаточно ATTiny на самом деле. Как видно, здесь нет вычислительных задач.
Ну худой конец, ATmega32 более чем годится.
Если мы будем рассуждать о производстве, то не надо там атмегу совсем, есть варианты. Я же статейку писал для очумелых ручек, что делают что-то своими руками и с программированием знакомы чуть лишь.
Ну худой конец, ATmega32 более чем годится.
Если мы будем рассуждать о производстве, то не надо там атмегу совсем, есть варианты. Я же статейку писал для очумелых ручек, что делают что-то своими руками и с программированием знакомы чуть лишь.
более того, если использовать аналоговое, стрелочное отображение — достаточно любой одновибратор, например 555 и милиамперметр.
Амперметры слишком нежные. В боевых приборках давно уже сервы стоят.
что? милиамперметры в индустриальных приборах живут десятилетиями — что им станет?
сервы как раз изнашиваются быстро — обычно для хоть какой-либо плавности лепят с понижающим редуктором — чтобы не усложнять bldc двигатель количеством полюсов — в итоге при колебаниях в основных точках (в районе хх и основных рабочих частот) — изнашиваются в этих местах и клинят.
сервы ставят из-за того что сервоуказатели проще программировать, т.е. повторяемость показаний.
т.е. даешь количество шагов до верхнего упора и потом на нулевое положение определенное количество шагов, так же как и на шаговиге РХХ.
а есть другой подход, моментные рхх и указатели — когда именно соотношением токов производят показания и управление. но показания изнутри никак не калибруются.
сервы как раз изнашиваются быстро — обычно для хоть какой-либо плавности лепят с понижающим редуктором — чтобы не усложнять bldc двигатель количеством полюсов — в итоге при колебаниях в основных точках (в районе хх и основных рабочих частот) — изнашиваются в этих местах и клинят.
сервы ставят из-за того что сервоуказатели проще программировать, т.е. повторяемость показаний.
т.е. даешь количество шагов до верхнего упора и потом на нулевое положение определенное количество шагов, так же как и на шаговиге РХХ.
а есть другой подход, моментные рхх и указатели — когда именно соотношением токов производят показания и управление. но показания изнутри никак не калибруются.
Проще взять PSoC там есть модули для подавления дребезга:
www.cypress.com/documentation/component-datasheets/debouncer
подщета импульсов
www.cypress.com/documentation/component-datasheets/quadrature-decoder-quaddec
и много интересного.(ядро Cortex M0, 48 MHz).
Arduino уже давно пора оставить истории.
www.cypress.com/documentation/component-datasheets/debouncer
подщета импульсов
www.cypress.com/documentation/component-datasheets/quadrature-decoder-quaddec
и много интересного.(ядро Cortex M0, 48 MHz).
Arduino уже давно пора оставить истории.
Ардуино очень хорошо для тех, кто только начинает. Там всё просто, уютно и готово.
Мопробуйте PSoC и больше никогда не захотите работать с Arduino (90% всего настраиваеться через GUI, пєнормальная IDE, а не блокнот). PSoC и для начинающих подходить (не копипастеров кода)
немного не понятно.
в комбинированном методе счётчик оборотов будет константа, в пределах квантования.
в комбинированном методе счётчик оборотов будет константа, в пределах квантования.
Эх, вспомнил молодость, как делал цифровой спидометр + тахометр на девятку. Тогда ж еще и ардуины не было — писалось все под PIC16F873 на ассемблере.
Скорость на 3-символьном 7-сегментном LED дисплее. Тахометр — линейная шкала (1 диод — 200 об/мин вроде бы)
Датчик скорости выдает 6 имп/1 метр. Рассчеты показали, что скорость в км/ч равна количеству импульсов за период 0.6 секунд. Кстати очень удачная частота для обновления скорости на цифровом дисплее.
А вот тахометр я сделал иначе — считал время (такты) между импульсами на входе. От чего он получился более «живой».
Однако проект не пошел под двум причинам:
1. Не успел я сотворить хороший конвертер 12-5в (ну не было зарядок для телефонов и прочих импульсных преобразователей в таком количестве, как сейчас)
2. Низкая яркость LED индикаторов — на солнце не видно + надо было как-то решать вопрос яркости ночью.
3. не успел сделать человеческое сохранение одометра в NVM.
Скорость на 3-символьном 7-сегментном LED дисплее. Тахометр — линейная шкала (1 диод — 200 об/мин вроде бы)
Датчик скорости выдает 6 имп/1 метр. Рассчеты показали, что скорость в км/ч равна количеству импульсов за период 0.6 секунд. Кстати очень удачная частота для обновления скорости на цифровом дисплее.
А вот тахометр я сделал иначе — считал время (такты) между импульсами на входе. От чего он получился более «живой».
Однако проект не пошел под двум причинам:
1. Не успел я сотворить хороший конвертер 12-5в (ну не было зарядок для телефонов и прочих импульсных преобразователей в таком количестве, как сейчас)
2. Низкая яркость LED индикаторов — на солнце не видно + надо было как-то решать вопрос яркости ночью.
3. не успел сделать человеческое сохранение одометра в NVM.
Считать импульсы хорошо, но вдруг у тебя окажется 6.123 импульса на метр? Или 6 импульсов на 98см? Это всё же гадания.
А так — у тебя первый вариант получился.
Кстати, если больше ничего не делать — так нормально. Но если требуется ещё что-то считать/рисовать, оно не работает тк не угадаешь, сколько времени займут другие задачи и время уплывает неконтролируемо.
А так — у тебя первый вариант получился.
Кстати, если больше ничего не делать — так нормально. Но если требуется ещё что-то считать/рисовать, оно не работает тк не угадаешь, сколько времени займут другие задачи и время уплывает неконтролируемо.
habrahabr.ru/post/319336 я открыл для себя FRAM.
А дисплеи OLED нынче стали дешевле заметно и они для машины самое то.
А дисплеи OLED нынче стали дешевле заметно и они для машины самое то.
unsigned long cnt = counter;
counter = 0;
unsigned long tmr = mks;
interrupts();
// Выводим частоту в оборотах в секунду
if (cnt > 0) {
rpm = 1000000UL / ((tmr — oldTime) /counter) / K;
Однако деление на 0…
counter=0 != cnt…
counter = 0;
unsigned long tmr = mks;
interrupts();
// Выводим частоту в оборотах в секунду
if (cnt > 0) {
rpm = 1000000UL / ((tmr — oldTime) /counter) / K;
Однако деление на 0…
counter=0 != cnt…
Sign up to leave a comment.
Тахометр или спидометр: Поток мыслей про измерение частоты в Arduino