Это устройство было задумано для измерения частоты
вращения жигулёвского двигателя. В этой конструкции датчиком является
контактная группа прерывателя зажигания. При вращении контакты замыкаются,
и в катушке зажигания запасается энергия а затем, в момент размыкания, она
преобразуется в высоковольтную искру. У четырёхцилиндрового двигателя за
один оборот происходит два зажигания. Для вычисления частоты вращения
достаточно измерить период между двумя искрами 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
Вот исходники:
taxo.mic,
taxo.lst,
math.lib,
macro.mlb,
а это бинарник:
taxo.sav
Источник: http://www.mit8.ru/