Разыскиваю варианты программной реализации тахометра с диапазоном измерений от 1 до 60000 об/мин из рассчета 1 импульс на оборот, но с минимальным временем реагирования на изменение частоты но при этом с усреднением частоты при некотором плавании фазы прихода иппульса. Желательно с переключением времени усреднения от частоты автоматически - тоесть на малых частотах (1-60 имп/мин) измерение от импульса к импульсу , при 60-600 уже с усреднением. Выбор предела речной в виде 0-100 100-1000 1000-60000 или автомат.
Просто фронты сигнала с датчика дрожат. На малух скоростях не видно, а на больших актуально. Нужно обновление показаний не менее 3х в секунду.
На AVR желательно, вывод любой. (Теоретически 1-2-4-8-10-20-40-80.....)
С исходниками, на ассемблере желательно.
Желательно с возхможностью коррекции тактового сигнала - стабильность высокая нужна - видимо будет термокомпенсированный или термостатированный опорник. Ну естественно доступный в хламовнике и с неровной, увы частотой.
Хочется многого - но интересны серьезные решения, просто "я таймером пользоваться в режиме захвата научился и скетч на ардуине набросал" - не очень интересны.
можешь от этого оттолкнуться: код С принцип работы - замер времени между импульсами (количество импульсов подбирается автоматически чтобы обеспечить наилучшую точность при допустимом быстродействии) (в протеусовском файле от прошлого проекта клавиатура осталась - тут она не используется) кнопкой диапазон переключается скорость хода Т1 - и смещается диапазон измерения (прямо во время работы устройства). диапазон, правда меньше твоего, но это поправимо.
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Не лучший выбор с его примитивными таймерами. Лучше STM32 с работой таймера с режиме ШИМ захвата с одним из каналов сравнения для таймаута. Если высокая точность не нужна достаточно 16-ти битного таймера (будет грубо измерять на высоких оборотах). Если важна точность, берите МК с 32-ух битным таймером.
Просто фронты сигнала с датчика дрожат. На малух скоростях не видно, а на больших актуально. Нужно обновление показаний не менее 3х в секунду.
Так пропустите их через элементарный фильтр:
Код:
int speed = 0; int f(int newSpeed) { enum {SPEED_FILTER = 8}; //подобрать оптимальное значение порядка фильтра int i = speed; speed = i += newSpeed - (i >> SPEED_FILTER); return i >> SPEED_FILTER; }
Не лучший выбор с его примитивными таймерами. Лучше STM32 с работой таймера с режиме ШИМ захвата с одним из каналов сравнения для таймаута. Если высокая точность не нужна достаточно 16-ти битного таймера (будет грубо измерять на высоких оборотах). Если важна точность, берите МК с 32-ух битным таймером.
STM зело сложный для меня процессор - слишком много слишком сложной и навёрнутой перефирии, так что AVR на крайняк PIC или 8051
И увы СИ лишком пока сложен и слабо воспринимаем для меня - на AVR еще как-то понятно -но перефрия других требует зело вдумчивого осмысления.
Задача - стабильные показания при дрожании фазы и периодическом пропуске импульсов на больших скоростях - датчик сильно колбасит.
При счете за 1 сек - показания относительно стабильные - но реакция медленноватая.
Очень много буков - понятно немногое - при беглом просмотре не нашел даже main.c , но нашел какие-то макроопрделения для ассемблера. Буду разбираться - в любом случае спасибо.
SPL в помощь. Немного о ШИМ захвате. http://we.easyelectronics.ru/STM32/ir-u ... ast-1.html Сравните с тем что аппаратно могут таймеры PIC и AVR. Кажущаяся простота 8-ми битников, из-за из примитивности создает сложности при разработке программ и приходится думать как сделать программно то что в современных МК можно сделать полностью аппаратно, а это не только уменьшит нагрузку на ядро МК, но и повысит точность измерения тахометра, особенно на высоких оборотах.
Wladimir_TS, попробую объяснить принцип на картинках Спойлер Замер производится обратным методом (считается не количество импульсов на ед. времени, а наоборот - период следования импульсов) недостатки метода: 1) требование к стабильности следования импульсов 2) с повышением частоты снижается точность измерения (увеличивается дискретность, т.к. шаг таймера растёт по отношению к измеряемому периоду) 3) невозможность определения останова решения, помогающие избавится от этих недостатков: 1, 2) если считать период не одного импульса а нескольких, то эти 2 проблемы нивелируются 3) решается добавлением принудительного прерывания ожидания импульса (по таймеру). реализация: 1, 2) удобнее всего применить кольцевой буфер, заполнять который по событию прихода импульса, а читать и высчитывать скорость - по требованию (складывать периоды нужно от последнего записанного к предпоследнему и дальше, до тех пор, пока не наберётся период, обеспечивающий требуемую точность или пока не кончится буфер) 3) обеспечивает тот-же таймер, что считает периоды следования импульсов (либо переполнением либо по регистру совпадения, в зависимости от того, как реализован его ход - со сбросом накопления после каждого импульса или по кольцу без сброса). ______________ на последнем рисунке показано, что набрать требуемое число периодов можно в любой момент (не обязательно ждать заполнения буфера по новой)
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Wladimir_TS, попробую объяснить принцип на картинках
Вы правы - именно так - надо при низких частотах измерять период, но приросте автоматически переходить на измерение - количества импульсов за период или как вы предложили период нескольких импульсов. Желательно как-то это автопереключать, но по скудоумию сам я не сдюжу программу таковую, потому-б на чужие деяния посмотреть, авось что и соберется в кучку.
Грубо говоря есть тахометр исходный - там используется некая схема умножения частоты при низких частотах и прямое измерение за 1 сек при высоких - корпусов 60 где-то без схем. Но основная претензия это смена показаний 1 раз в секунду, а надо быстрее. 3 раза где-то в секунду или 4.
Соответственно вместо всего этого поставить один ОМК AVR (какой знаю) и с него на индикацию в формате 1-2-4-8-10-20-40-80-....
Диапазон да - широкий - но в 4х поддиапазонах
Ясно дело готового не будет - потому варианты смотрю как да куда да откуда.
если 1 импульс в минуту, это минимум 1 минуту ждать, когда скорость измерится.
Да - необходимо обеспечить такой диапазон измерений. 1-60000 об/мин Потому время измерения естественно не менее периода следования импульсов, но не менее при то 0,3 сек.
вообще-то, за полноценным проектом следует обращаться в раздел "Работа". там за свои деньги получишь всё, что пожелаешь.
Если-бы мне нужно было именно так - поверьте, именно ТАК я-бы и сделал !!! Слов "прошу сделать для меня" не было - а коли заметили - Укажите - поправлю ! Я-ж прошу лишь ссылки на проекты в открытом доступе для набора информации.
стабильность высокая нужна - видимо будет термокомпенсированный или термостатированный опорник.
ну, и зачем нужна такая офигенная точность? и сколько десятичных знаков тебе нужно в результате?
Но именно так и нужно - стабильности простого кварцевого генератора недостаточно . Но это второй вопрос скорее относящейся к возможности в алгоритме корректировать его в зависимости от частоты такового.
Уход обычного генератора по сравнению с термостатированным я вижу при всего 5 разрядах индикации (из 6 доступных). Грубо говоря имеющимся тахометром измеряю частоту (деленную) от термостатированного опорника.
Но основная претензия это смена показаний 1 раз в секунду, а надо быстрее. 3 раза где-то в секунду или 4.
А вы не боитесь что с такой частотой смены показаний цифры будут нечитаемые/невоспринимаемые или просто будут "смазываться" в кашу(в зависимости от дисплея)?
_________________ Глупый не задает вопросы. Глупый и так все знает.
Потому ограничиваю смену в 3 раза в секунду. Не быстрее. Подсмотрено на суровых тахометрах. У совсем суровых есть выбор 1-0,5-0,3-0,25 сек Но в данной реализации не актуально. Естественно при периоде более 0,3 сек - время измерение желательно что-б автоматически увеличивалось. Нет лишних органов управления на панели.
Метод обратного счета для тахометров, которые, по сути, являются низкочастотными частотомерами хорошо работает. Для Вашего случая при тактовой порядка 5МГц обеспечивает разрешение 0,05об/мин при 60'000об/мин. Поэтому ничего не нужно переключать, разве, что показывать на табло запятую в нужном месте. Схема и программа, выложенная мною выше применяется в тахометре ниже Спойлер Вот по теме https://radiokot.ru/forum/viewtopic.php ... 1%82%D0%B0
повысить точность замероф на низких скоростях можно увелияиф число импулсоф датчика на 1 оборот это делается применение оптодатчика и диска обтюратора на валу с болшим цисом шелей или магнитного датчика с болшим чисом полюсоф (гибкий магнит на ободе диска намагниченый соответствено+ХООЛЛ) при частоте импулсоф от 100гц уже можно применять и усреднение или напротиф экстраполяцию если ресурсоф железа хватит на то...
_________________ ZМудрость(Опыт и выдержка) приходит с годами. Все Ваши беды и проблемы, от недостатка знаний. Умный и у дурака научится, а дураку и .. Алберт Ейнштейн не поможет и ВВП не спасет.и МЧС опаздает
Да - необходимо обеспечить такой диапазон измерений. 1-60000 об/мин Потому время измерения естественно не менее периода следования импульсов, но не менее при то 0,3 сек.
Единственный способ получать замеры с периодом ==0.3сек при частоте вращения 1 об/мин - это поставить датчик оборотов дающий как минимум 60/0.3 = 200 импульсов/оборот. Всё остальное это - мошенничество магия рук или интерполяция (что то же самое).
Единственный способ получать замеры с периодом ==0.3сек при частоте вращения 1 об/мин - это поставить датчик оборотов дающий как минимум 60/0.3 = 200 импульсов/оборот. Всё остальное это - мошенничество магия рук или интерполяция (что то же самое).
На самом деле всё намного проще - достаточно ВНИМАТЕЛЬНО прочитать всего лишь одну страницу форума с этой темой. Главное ВНИМАТЕЛЬНО...
1 об/мин + 1 импульс/оборот + обновление не реже 3Гц - ФИЗИЧЕСКИ НЕРЕАЛИЗУЕМЫЕ ТРЕБОВАНИЯ. Каким бы крупным шрифтом вы их не писали - они реализуемей не станут. В школу что-ль сходите для начала.
Сейчас этот форум просматривают: Majestic-12 [Bot] и гости: 17
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения