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

          

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







Электронный тахометр для жигулей на КР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