Можно всеми 3мя способами. Почему бы и нет. Но как мне кажется проще 2м. Ну не зря же захват придумали на 1ом таймере - всё просто и точно получается с захватом.
А выводить другим таймером. У таймера 2 есть тоже ШИМ. Хоть и 8-битный. Но кто мешает пересчитать, снизить разрядность? Вы знаете сколько у вас длительность тика Timer1. И знаете какой диапазон нужен в длительности на выходе (уже с учетом коэф.). Ну так и считаете в коде и настраиваете Таймер2 на генерацию ШИМ с нужными параметрами.
Или ногодрыгом и хоть Таймер0, хоть Таймер2 - "эмулируем" 16-битный счет. Как я писал в своём примере.
я бы так сделал:
1)запустил Т1 так чтобы он переполнялся не чаще 4 Гц
2)настроил прерывание на захват по фронту
в прерывании находил разницу текущего и прошлого захватов, эту разницу помещал бы в видимую отовсюду переменную.
3) на этом же таймере настроил прерывание и выход тоггле по совпадению
в прерывании увеличивал бы регистр сравнения на четверть переменной.
этот код, используя всего один таймер на лету (каждый входной импульс) пересчитывает частоты, не обязательно в 2 раза - можно подставить и другой множитель...
это код для меандра (на выходе меандр), если этот код немножко усложнить, то можно транспонировать не только частоту, но и скважность.
Для тех, кто не учил магию мир полон физики
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Для тех, кто не учил магию мир полон физики
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Так вот всё-таки надо понимать, ШИМ там или ЧИМ. В моём примере на тахометре сигнал был ЧИМ, меандр. Я не думаю, что там и частота и скважность меняются. Что-то одно должно )
предлагаю такой вариант:
ставим преобразователь частота-напряжение.
с помощью АЦП измеряем напряжение - это можно сделать очень быстро, практически без видимой задержки.
потом от величины напряжения таймером генерируем нужную частоту.
остается только найти калибровочный коэффициент (измеренное напряжение) - (выходная частота).
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Вариант он конечно рабочий, но мне кажется не к чему тут аналоговые решения. Сложнее и менее точно наверняка, да еще появляются всякие доп требования, например к питанию.
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
пока из частоты в напряжение преобразится... пока это напряжение устаканится... (дальше быстрей )
я проще предложил - не частоту увеличивать, а уменьшать длительность
измерил длительность, пересчитал, вывел - задержка не больше чем 1 входной плюс 0,5 выходного импульса.
Добавлено after 6 minutes 7 seconds:
если бы ТС поставил ныне популярное (даже слишком ) условие "без МК" вариант с преобразоввтелями в напряжение наверное был бы в лидерах...
Для тех, кто не учил магию мир полон физики
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
))) Мне хочу универсальное устройство, которое может и делить и умножать.... В зависимости от выбранного режима. На Т1 у меня не доходит голова, как реализовать. Ведь, если я буду использовать его ШИМ, то мне придется менять ЗАГРУЖАТЬ новые значения не только в регистр сравнения, но и в сам счетчик таймера. А тогда новое измерение по захвату невозможно будет правильно сделать...
Да вот не знаю я... . И меня это озадачивает самого. На разных машинах по разному...
Видел графики импульсов от некоторых машин. Есть где с проца идет ровный меандр. А есть где все время положительный +12 В и проваливается иголками в 3 мс. Потому и думал копировать как ШИМ. Однако, задумался о том, если я частоту увеличу, то и иголки эти будут уже не 3 мс, а гораздо короче, значит может тахометр их и не увидит.
Может реально надо оставлять длительность иголок такую же , а паузы между ними уменьшать.
Пока что запросил осциллограммы на холостых оборотах и почти в режиме отсечки, чтобы сравнить. Но их походу сделать не могут... Придется идти в сервис со своим осциллографом.
Добавлено after 3 minutes 47 seconds:
Если тупо брать сигнал от датчика оборотов коленвала, а там стоит либо холл либо индуктивный какой-нибудь с зубчиков считывает, то теоретически с увеличением числа оборотов и импульс станет короче.
Добавлено after 2 minutes 11 seconds:
Аналогично и с ABS, если оттуда брать и выводить на спидометр.
Вот про зажигание не знаю и форсунки, там может остается такой же импульс, но с меньшими паузами.
Добавлено after 6 minutes 23 seconds:
А есть где одного зуба нету на коленвале. Тогда осциллограмма вообще с выбросом идет.
СКАЗОЧНИК, ну так это всё ЧИМ. Скважность всегда фиксирована, меняется только частота. Это отметает советы выше на счет именно ШИМа, где фиксирована частота.
Вам нужно раз вычислить частоту и скважность, а потом считать только частоту. Вот этого и "пляшите" - нет нужды ненужные телодвижения совершать каждый раз измеряя то, что одинаковое.
Сделал я тупым ногодрыгом в прерывании... Но работает. ) И умножает и делит в диапазоне */8 . На частотах от 4 Гц. Но так таймер настроен на захват, меньше 4 Гц не ловит. )))
Как вариант. Использовать захват Т1 -> расчёт и занесение в буфер ОЗУ -> содержимое ОЗУ сдвигать с дискретом, определяемым точностью выходной последовательности.
Чего париться с AVR - есть STM32, в F103-м - 4 16-битных таймера, на каждом по 4 канала захвата/сравнения - можно захват делать по фронту и по спаду - 1 таймер 2-мя каналами захвата ловит входной ШИМ, 2-й таймер ШИМит.
Последний раз редактировалось Frogfot Пт мар 06, 2020 14:22:58, всего редактировалось 1 раз.
Frogfot, там не ШИМ.
Да ну и из пушки по воробьям это. Т.к. МК больше ничего делать и не надо, а частоты очень низкие (по сравнению с частотой даже 8-битных МК), то ногодрыг тут вполне уместен.
До дома доберусь через пару часов, напишу подробнее. Может и исходник выложу. Там всего 500 байт кода. )
атмегу8 поменяю на тини2313 или13.
Никаких резисторов с АЦП не буду делать для онлайн руления коэффициентом. Тупо дип-переключатели. Выставил, нажал сброс, мк при инициализации пересчитал значение и все.
Добавлено after 2 minutes 2 seconds:
А может и на ассемблере все перепишу, т.к. Си плохо знаю и код не оптимален. Хотя, ассемблер тоже мало знаю. ))))
Последний раз редактировалось СКАЗОЧНИК Пт мар 06, 2020 19:34:28, всего редактировалось 1 раз.