Квазианалоговый тахометр своими руками

Добавил пользователь Валентин П.
Обновлено: 18.09.2024

Вот твой квазианалоговый тахометр на Мастеркит. 280 р. всё удовольствие. Светодиодов можешь натыкать хоть 20, и сделать хоть полукругом,хоть ромбом.
У меня вообще была мысль - разобрать приборку, снять диск часов, замутить в размер другой диск, вставив туда светодиоды и нанести шкалы.

dimka224

Пассатовод

Вот твой квазианалоговый тахометр на Мастеркит. 280 р. всё удовольствие. Светодиодов можешь натыкать хоть 20, и сделать хоть полукругом,хоть ромбом.
У меня вообще была мысль - разобрать приборку, снять диск часов, замутить в размер другой диск, вставив туда светодиоды и нанести шкалы.


Во во во. только я хотел сделать там же на часах и применить все теже SMD светодиоды и не 12 шт а на 40-50 шт типа вот или вот этого, чтобы точнее шкала была



Часовой пояс: UTC + 3 часа

Квазианалоговая шкала тахометра

В общем то хочу сделать такой девайс на микроконтроллере. Как видно из схемы светодиоды будут включаться регистрами сдвига. Обороты буду считать так (в течении 1 сек. считаю прерывания от сигнала тахометра) полученное число >>7 (эквивалентно /128). Все просто 1 диод=128 об/мин.
Вопрос в следующем, я не прошу написать программу, но нужна помощь как отобразить не полоску в текущий момент времени, а получить, что то типа стрелки аналогового тахометра, но именно полосой светодиодов, а не одним.
В общем нужен алгоритм (быстрый алгоритм ), все что я не придумывал работает медленно, очень медленно . В файле, пробы работы с регистрами сдвига и соответственно схема.

на телефоне схему посмотреть не могу, если я правильно понял, счетчики не задействованы. исользуйте или прерывание по совпадению (нужные вам 128) или просто раз в нужный вам период (если его взять меньше секунды -уже будет делителем) считывайте и сбрасывайте счетчик - это должно освободить массу времени
Если ждать показаний секунду - счетчик будет выглядеть тормозом.
это бегло (нормально гляну только в понедельник, если ещё будет актуально )

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

JLCPCB, всего $2 за прототип печатной платы! Цвет - любой!

У меня тормозит как раз таки вывод и не могу понять почему, даже если не считаю, а просто вывожу столбик скажем высотой в 12 светодиодов. На счет использования меньшего времени подсчета идея отличная, че сам не додумался? Спасибо , а вот со скоростью отображения вопрос .

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

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Необходим быстродействующий преобразователь питания средней мощности с высоким КПД? Он должен быть компактным и недорогим? Решение – карбид-кремниевые модули средней мощности WolfPACK производства Wolfspeed. В статье рассмотрены основные особенности модулей WolfPACK и показано, что переход на эту универсальную и масштабируемую платформу позволяет не только быстро разработать новые устройства, но и без значительных затрат времени и средств модернизировать уже существующие схемы на традиционной элементной базе.

Я делаю на atmega16 так как, на ней уже сделана и работает кнопка START-STOP Engine и удлинялка поворотников, т. к. ног хватает, а эти программы работая параллельно, слабо жрут ресурс, я решил еще добавить Тахометр и вольтметр. Поэтому готовая прошивка мне не интересна, нужен алгоритм или код чего то подобного.

Приглашаем 27/01/2022 всех желающих посетить вебинар, посвященный двум наиболее растущим сегментам интегрированных источников питания – AC/DC малой мощности (1-20Вт) и сегменту решений PoL без изоляции. На вебинаре рассмотрим проблему выбора AC/DC в бюджетном сегменте и концепцию тестирования ускоренного старения, проведем сравнительный анализ подходов к интеграции AC/DC модулей. Сделаем обзор решений концепции POL с доисторических времен до современных технологий и средств для разработки и тестирования.

сначала ТЗ - действительно нужен тахометр управляющий поворотниками? если да, то прикидывай, какие аппаратные ресурсы можно задействовать (таймеры-счетчики, прерывания), как оптимизировать всё устройство, например показания тахометра могут пригодиться как сигнал для отключения стартера, можно глянуть в сторону диспетчера задач (вроде РТОС) могу проектик интересный (не мой) подкинуть там неплохие комментарии, правда он на АБ (это почти асм).

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

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


Код кнопки запуска двигателя уже написан мною и работает на машине все ОК, удлинялка на поворотники вооще проста до безобразия и тоже работает нормально, все в одном коде. Есть переменная count она имеет значение соответствующее количеству прерываний, за полсекунды. Алгоритм таков Имеем полоску светодиодов count длиной, 1светодиод~128 об/мин вот эта полоска должна отобразится, но только не сразу, а постепенно нарастая, ну чтобы долго не объяснять, как эквалайзер в проигрывателе.

я хотел чтоб ты сам догадался где ошибка, ну да ладно, давай ТЗ - сколько оборотов МАХ, сколько светодиодов (или так например светодиодов 24, 4 светодиода = 1000 имп/мин) (1имп=1об ? ), свободные/занятые (и чем) счетчики, тактовая частота контроллера, ограничение по ногам (если чтото уже припаяно и перепаять нельзя. Если я правильно понял у тебя одна доложка светодиодов и гореть должны все, которые меньше текущих показаний тахометра (столбик). Плавность и живость столбика сделаю настраиваемыми, надо ли пики (когда обороты резко снижаются один светодиод повисит немного (это немного потрудней, но тоже реализуемо).

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

Использую 32 светодиода 1=128имп/мин соответственно мах=4096. Переменная count содержит текущее значение частоты и изменяется каждые 0.5 сек. Последнее изменять нельзя ибо сильно усложнит алгоритм определения заведена ли машина, там все немного посложней чем определить ширину импульса. Да и все обкатано. С пиками было бы великолепно, но боюсь это сильно уменьшит производительность, хотя интересно. Я бы наверное даже сделал отдельно тахометр. Но при условии что не будет тормозить
Вот пожалуй и все ТЗ.

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

Спасибо огромное, исходя из кода, я понял, что частота измеряется по ширине фронта, но с учетом того, что известно колличество прерываний, заводку машины можно проверить сл. образома. пропускаем 4 прерывания и измеряем частоту, если частота превысила 600 об/мин engine=1; машина работает. Далее if ((engine)&&(!CurrMeas)) then . Я правильно понял на счет этого?
Вот код кнопки запуска, я интегрировал ее с сигналкой SHeriff ZX 1050. Схема собиралась на ATTINY2313. Все работает ОК. А тут под руки попала ATMEGA16 с кучей таймеров, вот и родилась идея скрестить ежа с колючей проволокой
Обрати внимание я считал обороты не по захвату, а по количеству переполнений. Сейчас надо все переделывать, но я думаю оно того стоит.

И еще я не понимаю, почему дергается последний регистр, к которому подключен индикатор?

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

Чтобы не дергался - увеличь делитель (дергается - последний ркзряд - шумящий) если не поможет, напиши - добавлю гистерезис, это кардинально решит проблему. Переменную, да, так и делай, только устанавливай флаг допустим по 650, а сбрасывай по 550 пропускать ничего не надо (проверяй в прерывании Т1.
Используется только количество импульсов.
Если вольтметр не делать то здесь тинки хватит.

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

Завтра на попробую вольтметр добавить. Отпишусь.
Но вот что то мне подсказывает, что за счет того, что прерывание будет выполняться очень часто, основной код записанный в main() будет реально глючить из-за постоянного прерывания процессов, я конечно понимаю, что программа вернется в точку прерывания, но вот как быть с задержкой? Я специально не использовал delay_ms(), а сделал это на таймере, получается прерывание в прерывании и здесь возможно все. Но в любом случае попробую объединить и посмотрю, что получится.
Кстати в протеусе есть мерцание, но возможно это глюк протеуса, потому как в пошаговом исполнении судя по таймингам ничего не должно мерцать. Вот доделаю шкалу, тогда можно будет на железе проверить

это глюк протеуса, ну не глюк, в нем есть 2 вида светодиодов -analog и digital, вторые со сглаживанием. у простых можно выбирать в свойствах . шкала - аналоги, а восьмёрки цифровые, потому горят ровно.

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

Я тоже об этом подумал.
А что скажешь по поводу моего софта на тиньке, его реально объединить на меге? или лучше не стоит?

бегло глянул, как много всего задействовано, может выход сигнала о заведенности мотора сделать , а тинькой его ловить.
Посмотрел внимательнее:
вставить не трудно, но код перебрать придется (порты перецепить и переделать алгоритм, отказавшись от задержек и опираясь на то, что он 30 раз в секунду запускается).
Вот ещё кот допиленный - сделана индикация вольтметра, перенесен ИСП в прерывания чтобы его не ждать, сделана переменная, указывающая на состояние двигателя, "расчищено" место и время для кода автозапуска.

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

ещё мысль пришла - вольтметр может не только напряжение показывать, но и прочие надписи (Strt, Stop, Run, Err.1 и тд), (обороты пока нет - нет их в системе с такой точностью, хотя получить можно, притом не теряя в скорости:
1) по фронту сбрасываем счетчики, ждём ок 0,5с (Т1),
2) разрешаем захват,
3)при захвате смотрим сколько Т0 нащёлкал и
4)делим значение Т0 на время 0,5+ICR)

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

Это мне понятно, мне интересно, как будет взаимодействовать мой код, где опрашиваются кнопки? Получается, что не успело произойти событие основном цикле бац прерывание, потом бац еще одно, т .п. Может нет смысла совмещать, кнопку и тахометр? Посмотри мой код, я сбрасывал выше, что скажешь?

совместить легко, только нужно принцип многозадачности соблюдать
1) подпрограммы запускаются поочереди по прерыванию таймера (в нашем случае по T2)
2) подпрограммы не должны выполняться долго (достаточно из них убрать циклы ожидания)
3) ожидание реализуется через переменную (подпрограмма проверила событие, если есть событие - прирастила переменную, проверила переменную: мало - завершилась, достаточно - ожидание закончено, работаем дальше)

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

Часовой пояс: UTC + 3 часа

Кто сейчас на форуме

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y

продаётся раскрученный сайт недорого обращаться в личку

Вот и прошло успешные испытания очередное устройство Игоря Горского, для которого я стал бета-тестером и сборщиком. Я уже засветил его когда советовался с Вами при разводке платы по дизайну. Так как плата достаточно сложна по количеству дорожек и определится с дизайном нужно было до разводки дорожек, так из за их плотности сделать это сейчас очень трудно было бы. С дизайном тогда мы определились, проголосовали практически одноголосно. Не все правда разобрались что картинки были в негативе и голосовали за черную, но насчет размещения разногласия не было.

После определения с размещения деталей я развел плату согласно схемы,

к стати не знаю все ли видели фото плат я добавил в ту же запись. Кто не видел напомню
Еще через время были собраны обе платы

Морда лица

Обе части спидометра


После чего Игорь занялся софтом. В начале прошлой недели я получил первый вариант программы для спидометра-одометра. И через пару дней первый раз запустил ее в железе. Прибор заработал с первого раза но в режиме покоя горел 7 диод с конца. Я думал что уже ошибся в разводке но оказалась банальная сопля.

последствия сопли


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

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








Прибор прошел испытания и от ездил первые 300 км к теще и обратно на выходные. В общей сложности откатался уже неделю. И на период написания статьи готовится релиз на сайте avtoelectro.radioliga.com/index.php. Это еще одно подтверждение того что на сайт "Авторские Электронные устройства" попадает только те устройства которые были собраны в железе и прошли проверку, и обкатку при необходимости.
По уже установленной традиции снят видео-обзор собранного устройства. Получилось минут 15 надеюсь смотреться будет не скучно, так же на моем канале в youtube есть видео во время тестов в ночное время и днем скоростям не верьте при испытании проскочит и 200 км/ч реально там 100 я игрался с калибровкой скорости под 10-ти импульсный датчик.

Приятного просмотра :). А так же жду от Вас конструктивной критики и советов. На счет яркости диодов если ни не слепят камеру в ночном видео то и глаз не слепят поверьте. А подсветка шкалы и панели конечно же на микроконтроллере, с плавным стартом и режимом день/ночь, так же плавным переходом между режимами но этому будет посвящена отдельная запись.

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

Электронные схемы для дома и быта

Азы электроники для чайников

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

Книга содержит следующие разделы:

Регулятор оборотов вентилятора охлаждения радиатора от температуры своими руками



Данная схема работает следующим образом: Чем выше температура двигателя-тем быстрее вращается вентилятор охлаждения. И наоборот, чем ниже температура-тем медленнее вращается вентилятор,таким образом пока не остановится. Так же данный ШИМ регулятор снижает на грузку на бортовую сеть автомобиля, и избавляет от реле.


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

Начало изучения радиотехники начинающими

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

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



Закон Ома

Квазианалоговый спидометр с прошивкой своими руками



После того как спидометр с квазианалоговой шкалой
стал комерческим, то из интернета сразу пропали его исходники и прошивки,без которых спидометр было не построить. Было решено создать прибор по функциям похож на его прибор. Но прибор вышел на многофункциональней, чем прибор МАМЕДА. И так,переходим к просмотру-
схема спидометра+одометр с прошивкой своими руками
.

Напряжение и ток – понятия

Вам это будет интересно Миллиамперы в амперы

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



Наглядное определение напряжения





Эмулятор 2ого лямбда зонда

Эмулятор 2ого лямбда зонда своими руками


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

В данной статье рассмотрим схему и изготовления усилителя для автомобиля

Самодельный усилитель

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

Источники напряжения и тока

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

Под источником напряжения понимается элемент цепи, обладающий двумя полюсами. Между этими полюсами образуется напряжение, которое задается некоторыми функциями от времени и не зависит тока в цепи. Этот источник в идеальном состоянии способен отдавать неограниченную мощность. Реальные же источники имеют внутреннее сопротивление, поэтому к ним сопротивление подключается последовательно.

Идеальный источник тока – это элемент цепи, через полюса которого протекает ток с заданной закономерностью изменения во времени. Он не зависит от напряжения между его выводами. Эта независимость означает, что внутренняя проводимость источника равно нулю, а внутреннее сопротивление бесконечно.


Реальный источник тока

Электронные устройства для автомобилей, мотоциклов, велосипедов

Здесь мы разместили различные схемы для автомобилей, мотоциклов, велосипедов. А также некоторые справочные данные цоколевке разъемов автомагнитол

Противоугонное устройство на основе дешевого телефонаПротивоослепляющее устройство для автомобиляАвтоматический стеклоподъемник ТахометрТахометр для 6 и 8 цилиндрового двигателяПростой тахометр Датчик дождяУказатель поворотов для велосипедаУказатель поворотов для велосипеда (Вариант 2) Плавное включение дальнего света фар Индикатор напряжения для автомобиляИндикатор напряжения для автомобиля на трехцветном светодиоде Радиосигнализация для автомобиляПростой сигнализатор перегрева двигателяПравильный уход за аккумулятором

Электроника на практике

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

Вам это будет интересно Светильник ДРЛ 400

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

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

Квазианалоговый спидометр с прошивкой своими руками

После того как спидометр с квазианалоговой шкалой

стал комерческим, то из интернета сразу пропали его исходники и прошивки,без которых спидометр было не построить. Было решено создать прибор по функциям похож на его прибор. Но прибор вышел на многофункциональней, чем прибор МАМЕДА. И так,переходим к просмотру-
схема спидометра+одометр с прошивкой своими руками
.

Какие еще есть книги для изучения электроники

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

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

Регулятор оборотов вентилятора охлаждения радиатора от температуры своими руками

Данная схема работает следующим образом: Чем выше температура двигателя-тем быстрее вращается вентилятор охлаждения. И наоборот, чем ниже температура-тем медленнее вращается вентилятор,таким образом пока не остановится. Так же данный ШИМ регулятор снижает на грузку на бортовую сеть автомобиля, и избавляет от реле.

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

Номер 1. Ламинарная турбина для утилизации энергии выхлопных газов.

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

Номер 3. Электрическое мотор-колесо для движения в пробках и использовании энергии торможения.

Автомобиль массой одну тону при скорости 60км\ч обладает кинетической энергией 140кДж (или 40вт*ч), но, энергию вы теряете при каждом торможении, ещё и колодки изнашиваются. И генератор постоянно работает, 3л.с. отъедает от мотора. А ведь велосипедные и скутерные мотор-колеса существуют очень давно. Любое из них может выполнять роль генератора, возвращая тормозную энергию в сеть. А если поставить хорошую литиевую батарею, то накопленной энергии хватит, что бы ползти в пробке с черепашьей скоростью…. опять же используя это мотор-колесо.

image

Всем привет! Хотелось бы поделиться с сообществом своей историей модернизации тахометра ТХ-193

Неделю назад обратился ко мне один человек с довольно нестандартным заданием — нужно было обеспечить работу древнего тахометра ТХ-193(ВАЗ 2106) с современным двигателем ВАЗ21126(Приора), имеющем систему зажигания с индивидуальными катушками на каждый цилиндр, а значит просто подключить ТХ-193 к катушке зажигания уже не получится. К тому-же заказчик хотел повысить эксплуатационные качества прибора, оставив не тронутым его внешний вид и дизайн. В общем дело кончилось тем, что я взялся выпотрошить электронную начинку прибора и разработать свою, с блэкджеком и шлюхами. Информацию о частоте вращения коленчатого вала тахометр теперь будет получать от ЭБУ Январь 7.2, для чего в последнем имеется специальный вывод.

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

Хард
Начнем с устройства ТХ-193. Механическая часть прибора представляет из себя миллиамперметр классической конструкции, с постоянным магнитом и подвижной катушкой, приводящей в движение стрелку.

Софт
На самом деле ещё до вычерчивания схемы я оперативно собрал всё это дело на макетке, взяв контроллер в DIP корпусе и сразу же принялся махать стрелкой))
В общем то софт оказался немного интереснее харда.

Начнем с общей архитектуры:
Таймер 0 тикает с частотой 250кГц, а значит период тика = 4мкс прерывание по переполнению происходит с частотой 250кГц / 256 = 0.976кГц
а значит прерывание происходит один раз в 1024мкс. Можно было заморочиться и подогнать это дело ближе к одной миллисекунде путем обновления счетчика таймера в прерывании, но в данной задаче это не к чему. Т.е. мы можем измерять время с точностью 4мкс, что вполне достаточно для заданной точности прибора.
Таймер 0 у нас не только отсчитывает время, но ещё и выставляет флажки для запуска тех или иных задач с определенной периодичностью.
Задачи у нас две. Давать отмашку прерыванию INT0 на измерение периода импульсов на входе и изменять положение стрелки.

Таймер 1 тикает с частотой 16мГц, но т.к. он 16ти битный и используется режим Phase and Frequency Correct PWM — итоговая частота ШИМ оказывается очень небольшой и составляет что-то около 122Гц. Это потому, что таймер тикает сначала вверх, а потом вниз. Зато имеем тру 16битный ШИМ и можем очень точно рулить стрелкой! В даташите найдутся все подробности.
Механика, к слову сказать, оказалась отвратительного качества, плавно двигать стрелку было не реально из-за повышенного трения в механизме, который пришлось для начала хотя-бы смазать трансмиссионным маслом. Но это уже детали.
Была составлена таблица соответствия показаний прибора с соответствующим значением регистра таймера в ШИМ попугаях.
В исходниках это дело называется GAUGE_TABLE и вынесено по привычке в отдельный файл.

Текста почему-то получается всё больше, но не остановиться более подробно на этом моменте я просто не могу!
Итак, понятно, что нам нужна логарифмическая прогрессия. Шаг изменения тока в цепи миллиамперметра должен уменьшаться по мере приближения к целевой отметке. Ресурсы на вес золота, а значит только табличный метод. Точек тоже по возможности минимум.
Начнем с построения логарифмической таблицы.
Всё очень просто: запускаем excel и несколькими взмахами мыши получаем 50 значений логарифма по основанию 2 для последовательности от 1 до 50. Для наглядности строим красивый график.
Прекрасно! То, что нужно! Но во-первых — точек аж 50, а во вторых все числа с плавающей точкой. Это нам никак не подходит!
Поэтому отбираем из имеющегося массива 5 точек с шагом 10. Получаем что-то вроде этого:

Уже лучше. Последовательное приближение к цели всё ещё сохраняется, но точек в 10 раз меньше.
Дальше нужно нормировать полученный набор. Т.е. сделать так, чтобы все значения находились в диапазоне от 0 до 1. Для этого просто разделим каждый элемент на 5,64385618977472 (максимальное значение нашего массива).

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

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

Масштабирующий коэффициент(если можно его так назвать) 1024 появился здесь не случайно и нужно очень хорошо понимать почему именно 1024.
Во-первых это степень двойки и выбрана она потому, что дорогие операции деления и умножения на степень двойки можно заменить дешевым сдвигом влево/вправо и было-бы глупо не использовать такую возможность.
Во-вторых коэффициент должен выбираться и исходя из масштабов тех данных, к которым он будет применяться. В нашем случае это значения регистра 16ти разрядного таймера, который управляет заполнением ШИМа. Экспериментально было выявлено, что неудовлетворительные колебания стрелки обнаруживаются даже при её резком смещении на 200 об/мин. Т.е. если нужно двинуть стрелку на более чем ~200 об/мин — потребуется сглаживание. Из таблицы GAUGE_TABLE видно, что соседние ячейки в среднем отличаются на 4000 ШИМ попугаев, что соответствует примерно 500 об/мин на шкале прибора. Не трудно прикинуть, что в цифрах смещение стрелки на 200об будет 4000 / 2,5 = 1600 ШИМ попугаев.
Следовательно масштабирующий коэффициент нужно выбрать таким образом, чтобы во-первых он был как можно бОльшим, потому что иначе мы теряем разряды и точность, а во-вторых как можно меньшим, чтобы не заставлять нас переходить от 16ти разрядных переменных к 32х разрядным и не расходовать ресурсы понапрасну. В итоге выбираем наименьшую степень двойки, которая меньше 1600 и обеспечивает достаточную точность. Это и будет 1024.
Этот момент очень важен. Я сам до сих пор порою испытываю трудности с выбором правильных коэффициентов и размеров переменных.

Ну а дальше уж пошло-поехало. Находим в коде реализацию display_rpm() и видим, что для определения конкретного значения в ШИМ попугаях используется таблица GAUGE_TABLE[] и предположение, что между соседними отметками шкала линейна. Для организации изменения тока по логарифмическому закону введен массив на 5 точек pwm_cuve[] в котором содержится набор значений, который нужно последовательно отнять или прибавить(в зависимости от направления движения стрелки) от pwm_ocr1a_cur_val чтобы заставить стрелку двигаться плавно и чётко.
каждый шаг формируется путем умножения значения pwm_delta на коэффициент из нашей таблицы logtable[];
Перед умножением значение предварительно масштабируется путем деления на 1024.
Конечный расчётный пункт назначения стрелки target_pwm записывается в pwm_cuve[] как есть, потому что из-за проблем с округлением и из-за ограничения размерности переменных 16битами точное значение в результате расчётов будет там образовываться весьма не часто, поэтому приходится обеспечить гарантию того, что стрелка окончит свой путь в заданной точке.
В общем то всё вышесказанное по сути заключено в одной строке
pwm_cuve[ table_i ] = pwm_ocr1a_cur_val + (pwm_delta / LOG_TABLE_MAX * logtable[ table_i ]);

Далее главный цикл по сигналу от таймера0 раз в PWM_UPD_PERIOD выгребает значения из pwm_cuve и присваивает их переменной pwm_ocr1a_cur_val, значение которой в прерывании будет присвоено регистру OCR1A, что немедленно приведет к изменению заполнения ШИМа и изменению тока в цепи миллиамперметра.

Вот, собственно и почти все хитрости, за исключением перевода периода, представленного в тиках таймера в частоту вращения коленчатого вала, которая измеряется в об/мин.
Сократилось всё это до engine_rpm = (uint16_t)(15000000UL / (uint32_t)rot_time);
О том как получилась эта цифра мы можем поговорить или не поговорить в следующий раз, потому что и без того текста получилось не мало и явно не многие дочитают даже до этого места.

Немного видео, как и обещал
На точность показаний не обращайте внимание, стрелка нормально не одета + циферблат не закручен.
Движение стрелки с шагом 1000об/мин одним скачком.

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

До новых встреч!

Проверка прибора на автомобиле


Клиент очень доволен!
А когда увидел эту статью и все исходники, включая некоторые фото самого процесса изготовления платы — сказал, что его мозг взорван!

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