Электронный тахометр для жигулей на КР1878ВЕ1

         

Электронный тахометр для жигулей на








Электронный тахометр для жигулей на КР1878ВЕ1


Это устройство было задумано для измерения частоты вращения жигулёвского двигателя. В этой конструкции датчиком является контактная группа прерывателя зажигания. При вращении контакты замыкаются, и в катушке зажигания запасается энергия а затем, в момент размыкания, она преобразуется в высоковольтную искру. У четырёхцилиндрового двигателя за один оборот происходит два зажигания. Для вычисления частоты вращения достаточно измерить период между двумя искрами t1, увеличить его в два раза и взять обратную величину. На холостых оборотах частота вращения равна 820 оборотам в минуту (о/м), а максимальная величина 6000 о/м. Переведя это в периуд, получаем на холостых 820о/м / 60сек = 13.6 о/с *2 = 27.3 искры в секунду, или 36 милисекунды. На 6000о/м / 60сек = 100 о/с * 2 = 200 герц или 5 милисекунд. Периуд проще измерять подсчитывая количество импульсов образцовой частоты между двумя искрами. Частоту заполнения надо выбирать так, чтобы небыло переполнения счётчика на низких оборотах и при этом на высоких оборотах должна быть достаточная точность измерений. Встроенный предделитель позволяет делить тактовую на 8 жёстких коефициэнтов деления, и для тактовой в 4 МГц получаем следующий ряд частот:

1/2       2 000 000 1/4       1 000 000 1/8         500 000 1/16        250 000 1/32        125 000 1/64         62 500 1/128        31 250 1/256        15 625

Так как встроеный таймер-счётчик 16 разрядный то лучше использовать частоту заполнения 62500 Гц, что обеспечиват непереполнение его при периоде в 1 секунду, что соответствует скорости вращения 120 оборотов в минуту, это приблизительно скорость запуска двигателя от стартёра (хотя по паспорту при запуске должно быть где то 300о/м). при такой частоте на максимальных оборотах получится точность +/- 20 оборотов. При индикации на трёх разрядном индикаторе на реальных оборотах около 4000, получается нормальная точность +/-1 разряд. В программе для сглаживания показаний происходит усреднение, т.е. предыдущее измерение не стирается, а к нему прибавляется текущее значение а затем делится на 2. Окончательная формула вычисления оборотов выглядит так:
(60*62500)/(t0 + t1) = обороты в минуту

Вообще то можно мерять не только время между двумя искрами, но и время замкнутого и разомкнутого состояния контактов прерывателя. Зная время замкнутого состояния прерывателя можно вычислить сколько энергии запасает катушка и мощьность искры. За один оборот происходит две искры, следовательно два раза замыкаются контакты. Периуд разомкнутого состояния + периуд замкннктого состояния = 180 градусам. Для вычисления замкнутого угла надо 180 градусов разделить на сумму перудов замкнутого и разомкнутого состояния, получится сколько градусов в одном отсчёте. А затем на эту величину умножить периуд замкнутого состояния. Нормальная величина для жигулёвского двигателя состовляет 55 градусов. Вторая формула такова :

(tз*90)/(t0+t1) = угол замкнутого состояния контактов прерывателя.

t0 - старое значение периуда между искрами
t1 - новое значение периуда между искрами
tз - периуд замкнутого состояния контактов прерывателя
tр - периуд разомкнутого состояния контактов прерывателя (tз+tр=t1)

Работа программы организована в прерываниях от входного порта и сторжевого таймера. По прераваниям от сторжевого таймера работает динамическая индикация и опрос кнопки, с помощью которой происходит переключение индикации обороты/угол. По прерываниям от порта пускается таймер на измерение периуда. В программе используются две подпрограммы одна умножает 16 разрядне число на 8 разрядное, а другая делит 24 разрядное на 16 разрядное.Оконная организация памяти в микропроцессоре позволила Вызывать подпрограммы только указав окну "а" где лежат исходные данные. Соответственно после завершения работы подпрограммы в нужных байтах будет находиться ответ. Почему устройство не работает. Наверное неверно делается индикация, прерывание для обновления индицируемого разряда может прийти в момент когда происходит преобразование двоичного числа в двоично-десятичное. Неправильно организовано подавление дребезга при возникновении прерывания от порта. При возникновении прерывания происходит непрерывное считывание порта и задвижение считаного состояния в буферный регистр, после проверки регистра на FF (все еденицы) или 0 (все 0) происходит принятие решения о том что состояние на порту стабильное. Слишком много усреднений одно при считывании таймера и ещё одно заложено в расчётную формулу. Не до конца разобрался переполняется или нет стек. Слишком примитивно сделан входной формирователь состояния контактов прерывателя. В данный момент у меня нет машины, поэтому проект заглох, если кому то интересно это устройство собирайте, у меня оно работало на столе от иммитатора а в машине работать отказалось. Может Вам удасться довести его до ума :-) Все предложения и дополнения программы присылайте на e-mail dima_bo@chat.ru