Тахометр на т4 своими руками

Опубликовано: 04.05.2024

Предлагаемый ниже тахометр вы можете собрать своими руками, прибор весьма прост по схеме, но обладает хорошими техническими характеристиками, собран на доступных компонентах. Тахометр может оказаться очень полезным при регулировочных операциях с электронными блоками зажигания двигателя автомобиля, при точной установке порогов срабатывания экономайзера и др. А вот целесообразность использования цифрового тахометра в качестве бортового (установленного на приборном щитке) мы бы поставили под большое сомнение, и об этом в журнале "Радио" была в свое время помещена статья А. Межлумяна "Цифровая или аналоговая?" -1986, № 7, с. 25, 26.

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

Цикл измерения равен 1 с, причем время индикации также равно 1 с, т. е. в течение времени индикации происходит очередное измерение, смена показаний индикатора происходит один раз в секунду. Максимальная погрешность измерения 30 мин

1, число разрядов индикатора - 3; переключения пределов измерения не предусмотрено. Тахометр имеет кварцевую стабилизацию тактового генератора, поэтому погрешность измерений не зависит от температуры окружающей среды и изменений напряжения питания.

Принципиальная схема тахометра показана на рис. 1. Функционально прибор состоит из кварцованного генератора, собранного на микросхеме DD1, входного узла на транзисторе VT1, утроителя частоты входных импульсов на элементах DD2.1-DD2.3 и счетчике DD3, счетчиков DD4-DD6, преобразователей кода DD7-DD9, цифровых индикаторов HG1-HG3 и стабилизатора напряжения питания ОА1. Сигнал на входной узел тахометра поступает с контактов прерывателя.

После подачи напряжения питания триггер DD2.1, DD2.2 может оказаться в любом состоянии (из двух возможных). Предположим, что на выходе элемента DD2.2 присутствует напряжение низкого уровня, которое запрещает прохождение через элемент DD2.3 импульсов частотой 1024 Гц с выхода F счетчика DD1 на счетный вход СР счетчиков D03 и DD4.

При размыкании контактов прерывателя транзистор VT1 откроется, переключит триггер DD2.1, DD2.2 и откроет элемент DD2.3. Счетчики DD3 и DD4 начнут счет импульсов частотой 1024 Гц. По спаду третьего входного импульса счетчика DD3 на его выходе 2 сформируется импульс, который переключит триггер DD2.1, DD2.2 в исходное состояние, элемент D02.3 окажется снова закрытым, а счетчик DD3 - обнуленным. При следующем импульсе с прерывателя процесс повторится. Таким образом, при каждом размыкании контактов прерывателя число, записанное в цепь счетчиков DD4-DD6, будет увеличиваться на 3.

Процесс записи будет продолжаться в течение секунды, т. е. до того момента, когда на выходе S1 счетчика DD1 появится очередной положительный перепад напряжения. В этот момент информация, накопившаяся в счетчиках DD4-DD6, будет переписана в буферные регистры преобразователей кода DD7-DD9, а вскоре счетчики DD4-DD6 обнулит по входу R сигнал с цепи C5R9. Сразу после спада импульса высокого уровня на входе счетчиков DD4-DD6 начнется новый цикл записи и т. д. Для обеспечения необходимой временной задержки между моментами перезаписи информации из счетчиков DD4-DD6 в буферные регистры преобразователя кода DD7-DD9 и обнуления счетчиков служат дифференцирующие цепи C3R6, C4R8, C5R9 и элемент DD2.4.

Утроение частоты импульсов, поступающих с прерывателя, необходимо для получения соответствия между показаниями индикатора и частотой вращения коленчатого вала двигателя в мин-1. Так как время счета входных импульсов равно 1 с, то в счетчики запишется, а затем будет выведено на индикаторы число 2N3/60, где N - частота вращения коленчатого вала в мин-1, 2N - частота искрообразования. При частоте вращения вала 3000 мин-1 показания индикатора будут 3.00.

Все детали тахометра, кроме стабилизатора напряжения DA1 и индикаторов HG1-HG3, размещены на печатной плате из двустороннего фольгированного стек-лотекстолита. Чертеж печатной платы и расположение деталей на ней представлены на рис. 2. Тахометр некритичен к типу применяемых деталей. Номиналы резисторов и конденсаторов могут отличаться от указанных на схеме на ±20 %.

Резистор R1 - КИМ, но поскольку вы-сокоомные резисторы довольно дефицитны, на плате предусмотрены монтажные площадки для установки вместо одиночного резистора номиналом 22 МОм последовательно нескольких меньшего сопротивления.

Кварцевый резонатор ZQ1 - любой, от цифровых часов. Стабилитрон VD1 - лю- ¦ бой малогабаритный на напряжение стабилизации 3. 5 В. Микросхемы серии К176 можно заменить на соответствующие серии К561. Микросхемный стабилизатор КР142ЕН8А установлен на тепло-отвод площадью около 10 см2.

В тахометре использованы семиэлементные индикаторы АЛ304Г (высота цифр - 3 мм) с большой яркостью свечения и сравнительно небольшим потребляемым током (около 5 мА на элемент). Яркости свечения вполне достаточно для уверенного считывания информации в салоне автомобиля даже в солнечную погоду. Табло тахометра следует накрыть плотным светофильтром соответствующего цвета.

При необходимости можно использовать индикаторы и с более крупными цифрами, например, АЛС321А, АЛС321Б, АЛС324А, АЛС324Б. Ток, потребляемый каждым их элементом, значительно больше - до 20 мА, поэтому для обеспечения запаса яркости свечения выходной ток дешифраторов необходимо усилить. Схемы усилителей тока для индикаторов серий АЛС321 и АЛС324 представлены на рис. 3, а и б.

Обращаем внимание на то, что при использовании индикаторов с общим катодом АЛС321А и АЛС324А на вход S преобразователей кода DD7-DD9 следует подавать напряжение низкого уровня (выводы 6 соединить с общим проводом).

Разумеется, использование крупно-знаковых индикаторов потребует коррекции печатной платы и установки стабилизатора DA1 на теплоотвод большей площади (не менее 30 см2).

Правильно собранный из исправных деталей тахометр начинает работать сразу, и табло должно высветить нулевое показание примерно через 2 с после включения питания. Если этого не произошло, следует проверить наличие секундных импульсов на выходе S1 счетчика DD1. Их отсутствие или заметное отличие периода от 1 с означает скорее всего неисправность кварцевого резонатора. Для проверки работоспособности остальных узлов тахометра можно сигнал с вывода 3 счетчика DD1 (импульсы с частотой 128 Гц) подать через резистор сопротивлением 10 кОм на базу транзистора VT1. При этом на индикаторе должно появиться число 3.84.

В автомобиле, оборудованном стандартной батарейной системой зажигания, вход тахометра подключают к выводу прерывателя. При бесконтактной электронной системе зажигания тахометр можно подключить к ее выходу, увеличив сопротивление резистора R3 до 200-250 кОм, причем этот резистор желательно установить не на плате, а в разрыв провода, идущего от платы тахометра к выходу системы зажигания. Это вызвано тем, что напряжение на выходе электронной системы зажигания может достигать 400 В и даже более, что может привести к пробоям на плате тахометра. Если электронная система зажигания работает от контактного прерывателя, то тахометр подключают к выводу прерывателя, уменьшив сопротивление резистора R3 до12к0м.

Тахометр дизель

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

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

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

Откуда берет сигнал тахометр на дизельный двигатель

Схема подключения тахомтера

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

Подключение устройства

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

Генератор
Чтобы подключить тахометр к дизельному двигателю, желательно осуществлять работы на подъемнике или воспользоваться смотровой ямой. На начальном этапе необходимо демонтировать защиту с генератора, избегая попадания грязи внутрь устройства. Следующим шагом становится визуальный осмотр катушки генератора, на которой присутствуют несколько клемм. Контакт тахометра (входной провод) следует подключать к той клемме, которая обычно маркируется литерой «W».

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

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

Вывод провода от генератора
Если клемма, обозначенная «W», на генераторе отсутствует изначально, тогда потребуется самостоятельное выведение отдельного контактного провода. Заранее подготовленный провод в обязательном порядке нужно качественно заизолировать. Для облегчения доступа генератор необходимо полностью снять, так как потребуется его частичный разбор. После разборки станут видны провода (3 штуки), идущие от обмотки генератора на выпрямитель, который также встроен в устройство.

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

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

  • Виды тахометров
  • Как подключить тахометр через ЭБУ
  • Схема подключения тахометра на бензиновый двигатель
  • Как подключить тахометр к дизелю
  • Как проверить тахометр на работоспособность

Виды тахометров

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

Выносной

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

Штатный

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

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

Как подключить тахометр через ЭБУ

Схема подключения тахометра на бензиновый двигатель

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

  1. Закрепите механизм на его месте (место расположения определяется видом устройства).
  2. Чёрный провод подсоедините к массе (кузову) автомобиля.
  3. Провод красного цвета соедините с клеммой замка зажигания, подающей напряжение 12 Вт во время работы системы зажигания.
  4. Третий провод может быть любого цвета. Поскольку система зажигания есть контактная и бесконтактная, рассмотрим, куда подключать тахометр в обеих. При контактной системе – прибор подключается к прерывателю трамблёра. Во второй системе – к коммутатору напряжения.

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

Как подключить тахометр к дизелю

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

Внимание! Обязательно нужно замкнуть контакт, отходящий от маслонасоса. Если этого не сделать тахометр может «врать».

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

Как проверить тахометр на работоспособность

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

Интересно! Сконструировал тахометр американец Кёртис Виддер в 1903 году.

Подписывайтесь на наши ленты в таких социальных сетях как, Facebook, Вконтакте, Instagram, Pinterest, Yandex Zen, Twitter и Telegram: все самые интересные автомобильные события собранные в одном месте.

Подключение на бензиновый двигатель

Подключение прибора отличается на инжекторном моторе и с карбюратором. С инжектором его подключают к контролеру ЭБУ. При этом «масса» отводится на кузов, а положительный провод необходимо соединить с плюсовой клеммой зажигания.

Устройство имеет два выхода: один идет на датчик положения коленвала, а другой – на ЭБУ. Таким образом, он будет считывать количество оборотов с контролера управляющего блока. Ниже приведена схема подключения тахометра с БСЗ.


Схема с бесконтактной СЗ

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

  1. Сначала в зависимости от вида прибора нужно установить на месте, где он будет расположен.
  2. Далее установленный тахометр следует подключить. Минусовый провод обычно черного цвета присоединяется к массе.
  3. Красный провод следует соединить с плюсом замка зажигания, на которую подается напряжение 12 В при работе системы зажигания (СЗ).
  4. Третий провод может иметь любой цвет – это вход прибора. Подключается он в зависимости от СЗ. Если СЗ контактная, то прибор подключается к прерывателю трамблера, в случае с бесконтактной СЗ его нужно подсоединять к коммутатору напряжения.
  5. Если автомобиль оборудован подсветкой, то прибор должен подключаться к выключателю габаритов машины.


Схема для контактной СЗ

Система зажигания бензиновых двигателей

Управление процессами зажигания двигателей может быть организовано несколькими методами:

  • Трамблерный с одной катушкой зажигания;
  • Бестрамблерный со сдвоенной (тройной, четверной в зависимости от количества цилиндров, деленных на 2) катушкой зажигания;
  • Индивидуальный (на каждую свечу зажигания).

Во всех случаях на катушку поступает мощный импульс амплитудой 12В с прерывателя (для автомобилей до 90-х годов), транзисторного коммутатора или непосредственно с блока управления двигателя. Именно из этой точки и следует брать сигнал на тахометр.

Разновидности тахометров

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

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

Условно устройства можно разделить на два вида:

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


1. Штатный прибор на пятерке


2. Аналоговое устройство для авто


3. Выносные автомобильные приборы

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

Испытание, регулировка тахометра

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

На первом этапе испытаний заводят двигатель, проверяют работоспособность системы (отклонение стрелки на холостых оборотах). Как правило, частота оборотов в этом режиме находится в пределах 800 – 1000 об/мин.

Далее регулируют уровень показаний. Если стрелка тахометра отклоняется незначительно, можно между сигнальным проводом и массой автомобиля включить дополнительный конденсатор емкостью около 1 мкФ. Наоборот, если стрелка зашкаливает, в разрыв сигнальной цепи включить переменное сопротивление около 1 кОм и масштабировать сигнал.

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

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

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

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

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

Для разработки схемы по сути достаточно было знать о миллиамперметре лишь то, что при токе порядка 10мА стрелка отклоняется до предела, а сопротивление обмотки равно примерно 180Ом. В качестве мозга был выбрал контроллер ATtiny2313A славной фирмы Atmel, тактируемый от внешнего кварцевого резонатора на 16МГц. Питание прибора осуществляется от бортовой сети автомобиля, а значит по ГОСТу он должен выдерживать «бороду» до 100В и стабильно работать в диапазоне от 9-15В. Ввиду незначительного потребления(несколько десятков миллиампер) было принято решение использовать линейный стабилизатор 7805 с индуктивным фильтром и сапрессором для защиты от импульсных помех. Прибор собирался из того, что было под рукой, поэтому в готовом изделии применяется мощная версия 7805, хотя вполне хватило бы и 78L05 на 100мА.
Миллиамперметром контроллер управляет, естественно, используя ШИМ. Для чего был задействован 16ти разрядный таймер в режиме Phase and Frequency Correct PWM.
Информация о частоте вращения коленчатого вала передается от ЭБУ в виде импульсов от 0 — 12В. Активный уровень низкий. 2 импульса за 1 оборот коленчатого вала. Для захвата этих импульсов используется внешнее прерывание INT0 и соответствующая цепочка из RC фильтра, подтяжек и защитных диодов. В общем и целом схемотехника устройства довольно типична и я с удивлением обнаружил, что только что так много написал о ней. Но да не судите строго, первая статья всё-таки.


Собранный прибор без циферблата теперь выглядит так:

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

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

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

Далее было обнаружено, что если просто одним махом изменить ток в цепи амперметра для того, чтобы к примеру передвинуть стрелку на 1000 вперед, то она совершит два-три-четыре колебания в районе целевой отметки, что было совершенно неприемлемо и на что заказчик обращал особое внимание. Дело в том, что эти тахометры изначально имеют такую проблему и несколько раз газанув в такт колебаниям можно заставить стрелку раскачиваться со значительной амплитудой(более половины шкалы!).
С этим нужно было что-то делать. Идея моя заключалась в том, чтобы подводить стрелку к отметке серией более мелких шагов, постепенно приближаясь к цели. Собственно говоря эта часть и является самой интересной и полезной для новичков, т.к. требует некоторой сноровки. Ведь имея дело с микроконтроллером вызов log2() в цикле является, мягко говоря, не самой удачной идеей. К тому-же 8битная архитектура накладывает ещё больше ограничений. Ну а про «плавучку» (floating point) и вовсе нужно забыть. Но все эти трудности, как всегда, приводят лишь к более глубокому пониманию процессов и расчётов, производимых процессором.

Текста почему-то получается всё больше, но не остановиться более подробно на этом моменте я просто не могу!
Итак, понятно, что нам нужна логарифмическая прогрессия. Шаг изменения тока в цепи миллиамперметра должен уменьшаться по мере приближения к целевой отметке. Ресурсы на вес золота, а значит только табличный метод. Точек тоже по возможности минимум.
Начнем с построения логарифмической таблицы.
Всё очень просто: запускаем 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об/мин не будет и те незначительные перелеты стрелки, которые всё-же можно наблюдать на видео не станут проблемой. Просто если устранить и их — то можно здорово потерять в быстродействии прибора и его показания будут отставать от реальности.

P.S. Не сказать, что в архиве совсем говнокод, но да, местами можно было сделать красивее. Да, я знаю, что магические числа это плохо и да, я мог бы лучше. С другой стороны потеряться в исходнике в 200строк довольно сложно, поэтому кое-где я позволил себе немного на халтурить.
Просто зарегаться на хабре хотелось уже давно, а написать сколько-нибудь подробную статью по прошествии времени после реализации проекта становится всё сложнее, поэтому я решил, что сегодня будут «вести с полей».
Так что реальный код с реального устройства, собранного за реальный срок в 7 вечеров, которое завтра будет установлено на славный автомобиль ВАЗ 2108 с двигателем 21126 и надеюсь будет ещё долго радовать владельца, согласившегося выложить за мои труды аж 100 вечнозеленых.
Но мы то с вами знаем, что проделал я весь этот путь не только и не столько ради денег. Ведь так приятно, когда ты создал что-то и оно даже работает!

В архиве проект Atmel studio и схема+плата в Altium designer. Изготавливалась плата методом ЛУТ.
UPD: Архив был выложен на бесплатный файлообменник и потому скоропостижно скончался. Для хранения архива на habrastorage я встроил его в фото тахометра без циферблата(оно в верхней части статьи). В общем jpg нужно сохранить себе и открыть винраром. Можно ещё просто изменить расширение на zip.
UPD2: Схема и плата переработаны, картинки обновлены, архив по прежнему в картинке.
UPD3 Архив в картинки теперь не вставляется. Пишите в ЛС тут или найдете меня vk.com/trotskyi

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

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

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

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

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

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

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

Для разработки схемы по сути достаточно было знать о миллиамперметре лишь то, что при токе порядка 10мА стрелка отклоняется до предела, а сопротивление обмотки равно примерно 180Ом. В качестве мозга был выбрал контроллер ATtiny2313A славной фирмы Atmel, тактируемый от внешнего кварцевого резонатора на 16МГц. Питание прибора осуществляется от бортовой сети автомобиля, а значит по ГОСТу он должен выдерживать «бороду» до 100В и стабильно работать в диапазоне от 9-15В. Ввиду незначительного потребления(несколько десятков миллиампер) было принято решение использовать линейный стабилизатор 7805 с индуктивным фильтром и сапрессором для защиты от импульсных помех. Прибор собирался из того, что было под рукой, поэтому в готовом изделии применяется мощная версия 7805, хотя вполне хватило бы и 78L05 на 100мА.
Миллиамперметром контроллер управляет, естественно, используя ШИМ. Для чего был задействован 16ти разрядный таймер в режиме Phase and Frequency Correct PWM.
Информация о частоте вращения коленчатого вала передается от ЭБУ в виде импульсов от 0 — 12В. Активный уровень низкий. 2 импульса за 1 оборот коленчатого вала. Для захвата этих импульсов используется внешнее прерывание INT0 и соответствующая цепочка из RC фильтра, подтяжек и защитных диодов. В общем и целом схемотехника устройства довольно типична и я с удивлением обнаружил, что только что так много написал о ней. Но да не судите строго, первая статья всё-таки.


Собранный прибор без циферблата теперь выглядит так:

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

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

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

Далее было обнаружено, что если просто одним махом изменить ток в цепи амперметра для того, чтобы к примеру передвинуть стрелку на 1000 вперед, то она совершит два-три-четыре колебания в районе целевой отметки, что было совершенно неприемлемо и на что заказчик обращал особое внимание. Дело в том, что эти тахометры изначально имеют такую проблему и несколько раз газанув в такт колебаниям можно заставить стрелку раскачиваться со значительной амплитудой(более половины шкалы!).
С этим нужно было что-то делать. Идея моя заключалась в том, чтобы подводить стрелку к отметке серией более мелких шагов, постепенно приближаясь к цели. Собственно говоря эта часть и является самой интересной и полезной для новичков, т.к. требует некоторой сноровки. Ведь имея дело с микроконтроллером вызов log2() в цикле является, мягко говоря, не самой удачной идеей. К тому-же 8битная архитектура накладывает ещё больше ограничений. Ну а про «плавучку» (floating point) и вовсе нужно забыть. Но все эти трудности, как всегда, приводят лишь к более глубокому пониманию процессов и расчётов, производимых процессором.

Текста почему-то получается всё больше, но не остановиться более подробно на этом моменте я просто не могу!
Итак, понятно, что нам нужна логарифмическая прогрессия. Шаг изменения тока в цепи миллиамперметра должен уменьшаться по мере приближения к целевой отметке. Ресурсы на вес золота, а значит только табличный метод. Точек тоже по возможности минимум.
Начнем с построения логарифмической таблицы.
Всё очень просто: запускаем 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об/мин не будет и те незначительные перелеты стрелки, которые всё-же можно наблюдать на видео не станут проблемой. Просто если устранить и их — то можно здорово потерять в быстродействии прибора и его показания будут отставать от реальности.

P.S. Не сказать, что в архиве совсем говнокод, но да, местами можно было сделать красивее. Да, я знаю, что магические числа это плохо и да, я мог бы лучше. С другой стороны потеряться в исходнике в 200строк довольно сложно, поэтому кое-где я позволил себе немного на халтурить.
Просто зарегаться на хабре хотелось уже давно, а написать сколько-нибудь подробную статью по прошествии времени после реализации проекта становится всё сложнее, поэтому я решил, что сегодня будут «вести с полей».
Так что реальный код с реального устройства, собранного за реальный срок в 7 вечеров, которое завтра будет установлено на славный автомобиль ВАЗ 2108 с двигателем 21126 и надеюсь будет ещё долго радовать владельца, согласившегося выложить за мои труды аж 100 вечнозеленых.
Но мы то с вами знаем, что проделал я весь этот путь не только и не столько ради денег. Ведь так приятно, когда ты создал что-то и оно даже работает!

В архиве проект Atmel studio и схема+плата в Altium designer. Изготавливалась плата методом ЛУТ.
UPD: Архив был выложен на бесплатный файлообменник и потому скоропостижно скончался. Для хранения архива на habrastorage я встроил его в фото тахометра без циферблата(оно в верхней части статьи). В общем jpg нужно сохранить себе и открыть винраром. Можно ещё просто изменить расширение на zip.
UPD2: Схема и плата переработаны, картинки обновлены, архив по прежнему в картинке.
UPD3 Архив в картинки теперь не вставляется. Пишите в ЛС тут или найдете меня vk.com/trotskyi

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

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

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

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