Одним из распространенных методов проверки системы зажигания, в частности угла опережения зажигания, является стробоскопический, при котором импульс высокого напряжения на свече первого цилиндра поджигает стробоскопическую лампу, дающую в момент начала зажигания вспышку, освещающую метку шкива коленчатого вала и метку-выступ на крышке блока цилиндров. Если при вспышке подвижная метка шкива коленчатого вала совпадает с неподвижной на крышке блока цилиндров, значит зажигание установлено правильно, а плавное взаимное смещение подвижной метки относительно неподвижной при увеличении числа оборотов говорит об исправной работе центробежного регулятора опережения зажигания. Такой визуальный метод, хоть и наглядный, но обладает некоторыми недостатками. Первый - это то, что измерения нельзя производить во время движения, что приводит к значительным неудобствам, и второй - это низкая точность измерения, так как измерение производится "на глаз". Прибор, разрабатываемый в данной курсовой работе позволяет производить измерения во время движения, и с точностью до Dj=±0,1°. Кроме этого параллельно можно измерять количество оборотов коленчатого вала.
Принцип работы и методика измерения.
Прибор имеет два входа, на которые подаются сигналы от датчиков. На один вход поступает сигнал датчика количества оборотов коленчатого вала, который представляет собой импульс с амплитудой равной 5В. Этот импульс вырабатывается в тот момент, когда поршень (например первого цилиндра) находится в верхней мертвой точке. На второй вход поступает сигнал от другого датчика, который вырабатывает такой же импульс, но в момент зажигания. Результаты измерений отображаются на индикаторе, при этом прибор в зависимости от режима роботы отображает либо угол опережения зажигания, либо частоту вращения коленчатого вала. Режим работы определяется положением переключателя.
Методика измерения угла следующая. Угол опережения зажигания можно определить по формуле:
, где Тс1 - период вращения коленчатого вала, Тс2 - время между зажиганием и нахождением поршня в верхней мертвой точке.
Измерение периода заключается в сравнении измеряемого интервала времени Тс с дискретным интервалом, воспроизводящим единицу времени. Это достигается заполнением измеряемого интервала Тс импульсами с известным образцовым периодом следования Тобр<<Тс - преобразованием интервала в отрезок периодической последовательности импульсов, число которых, пропорциональное интервалу Тс, подсчитывается.
Рис. 1.
При подаче на вход "Датчик 1" импульса количества оборотов включается счетчик, который подсчитывает счетные импульсы образцового генератора (Счетчик 1 см. рис.1). При поступлении на вход "Датчик 2" импульса зажигания включается второй счетчик. Счетчики продолжают считать временные интервалы до тех пор пока на вход "Датчик 1" снова не придет импульс, после чего счетчики останавливаются.
Число просчитанное первым счетчиком будет пропорционально периоду оборотов коленчатого вала, а число на втором счетчике - пропорционально времени между зажиганием и нахождением поршня в верхней мертвой точке.
Аппаратное обеспечение.
Структурная схема устройства показана на рис.2. Прибор выполнен на базе восьмибитового микропроцессора Z-80. Измерительная процедура всегда начинается с измерения периода. С генератора импульсов на таймер непрерывно поступают счетные импульсы. С приходом стробирующего импульса с Датчика1 запускается Счетчик1, роль которого выполняет таймер. С приходом сигнала с Датчика2 запускается Счетчик2. Когда вновь появляется сигнал от Датчика1, таймер останавливает Счетчик1 и Счетчик2. После чего, микропроцессор считывает значение с обоих счетчиков, причем, число на Счетчике1 будет пропорционально Тс1, а на Счетчике2 - Тс2.
Рис. 2.
Таким образом получив значения Тс1 и Тс2 микропроцессор вычисляет угол опережения зажигания и выводит результат на индикатор. При этом проверяется через устройство ввода/вывода (роль которого выполняет логический элемент И) состояние переключателя режима роботы, и в соответствии с этим на индикаторе отображается либо угол, либо частота вращения коленчатого вала. Данные о сегментах поступают на индикатор через регистр, а выбор разряда осуществляется с помощью регистра и дешифратора.
Выберем частоту генератора счетных импульсов. Диапазон вращения коленчатого вала лежит в пределах от 600 до 6000 об/мин. т.е. от 10 до 100Гц. Пусть максимальное значение счетчика будет равно 60000. Отсюда следует, что при минимальное частоте ( т.е. при максимальном периоде) 10Гц и значении счетчика 60000, частота счетных импульсов будет равна 600 000Гц. Принимаем частоту счетных импульсов равной 500 КГц, так как ее легче получить с помощью простого делителя частоты.
Оценим погрешность дискретности, которая возникает вследствие того, что периодическая последовательность счетных импульсов и заполняемый ими стробирующий импульс в общем случае - сигналы несинхронные. Максимальное значение абсолютной погрешности дискретности измерения периода DТ=±Тобр=±2мкс, т.е. составляет ±1 младшего разряда счета. Наибольшая относительная погрешность дискретности составляет dт=±(Тобр/Тс). Принимая Тс равным 360°, можно получить максимальную относительную погрешность измерения угла равной Dj=±0,06°.
Принципиальная схема изображена странице 7. С кварцевого генератора прямоугольных импульсов, выполненном на микросхеме ЛН1 сигнал поступает на делитель частоты D8 (555ИЕ7). С делителя снимается две частоты: 4МГц - тактовая частота микропроцессора, которая подается на вход СLC, и счетные импульсы с частотой 500 КГц, которые, в свою очередь, подаются на вход СLC таймера. Разрешение счета и запрет сигналами с датчиков осуществляется при помощи Т-триггеров выполненных на микросхеме D11. Сигнал с Датчика1 подается прямо на вход маскируемых прерываний INT микропроцессора Z-80. К микропроцессорной шине подключена микросхема ПЗУ D4, ячейки которой расположены начиная с адреса 0000 по 4096 (в десятичной системе), и микросхема ОЗУ D3, ячейки которой расположены соответственно по адресу 4096 - 5120. В данной схеме используется микросхема ОЗУ статического типа. Обращение к ней осуществляется двумя сигналами MREQ и A13, объеденные логическим элементом D10.1
Информация на индикатор поступает следующим образом. Выбирается разряд индикатора, а затем по восьми каналам подается информация о сегментах. Сегменты индикатора подключены через регистр D5 прямо к шине данных, а информация на них поступает по команде OUT по адресу 16Н. Выбор разряда происходит при помощи дешифратора D7, на вход которого подается номер разряда в двоичной системе, а на выход подается "1" только на разряд под этим номером. Для того, что бы разряд светился в течении некоторого времени ставится регистр D6, который запоминает состояние шины данных пока микропроцессор к нему вновь не обратится с новыми значениями сегментов. Обращение к регистру производится по команде OUT по адресу 8Н. Вывод на индикатор производится с частотой 200 Гц, так чтобы каждый сегмент засвечивался 50 раз в секунду. Контроль времени производится с помощью таймера выход которого подключен на вход немаскируемых прерываний NMI.
Программное обеспечение
На рис. 3. изображена блок-схема -программы, которая находится в ПЗУ.
Все "свободное" время микропроцессор выводит на индикатор результат. При приходе на вход маскируемых прерываний сигнала от Датчика1, процессор прерывает вывод на индикатор и вызывает процедуру обслуживания прерываний.
Рис.3.
Эта процедура считывает с выхода таймера значение Счетчика1. Затем проверяет наличие сигнала с переключателя рода роботы, и если такой имеется, то программа вычисляет количество оборотов в минуту коленчатого вала, и передает результат основной программе, которая выводит его на индикатор. Количество оборотов можно вычислить по следующей формуле, зная частоту счетных импульсов и значение Счетчика1:
В случае если переключатель не нажат, то микропроцессор считывает с выхода таймера значение Счетчика2. Затем, пользуясь значениями счетчиков 1 и 2, вычисляет угол опережения зажигания, и после этого так же как и в предыдущем случае процессор передает результат основной программе, которая выводит его на индикатор. Следует отметить, что перед тем как результат будет выведен на индикатор он разбивается на десятки, для того, чтобы затем можно было перевести каждую цифру в отдельности из двоичной системы в код сегментного индикатора.
Ниже приводится программа на ассемблере для микропроцессора Z-80.
Основной блок:
; начальный блок, программирующий таймер.
LD A, 00111010 ; запись управляющего слова в счетчик 0: Режим работы 5; загрузка сначала младшего, затем старшего байта; код - двоичный.
OUT 3,A
LD A, FFH
OUT 3,A
LD A, FFH
OUT 3,A
LD A,01111010 ; запись управляющего слова в счетчик 1.
OUT 3,A
LD A, FFH
OUT 3,A
LD A, FFH
OUT 3,A
LD A, 10111010 ; запись управляющего слова в счетчик 3.
OUT 3,A
LD A, C4
OUT 3,A ;запись числа 2500.
LD A,9
OUT 3,A
; основной блок - вывод информации на индикатор.
N: LD D,0
LD B, (R4) ; загрузка количества десятков.
L: LD A,B
OUT 8,A ; выбор разряда.
LD HL, (R5)
LD E, B
ADD HL, DE
LD E, (HL) ; выбор цифры.
LD HL, (R6)
ADD HL, DE
LD A, (HL) ; выбор кода сегментного индикатора.
LD (R8), A
INC (R9)
M: LD A, (R9) ; ожидание прихода сигнала на вход немаскируемого прерывания.
JR NZ, M;
DJNZ L;
JP N;
Программа обработки прерывания вывода на индикатор:
LD A, (R9)
OUT 16,A ; вывод данных о сегментах.
LD (R9),0
RETI
Программа обработки прерывания с датчика:
EXX ; обмен с альтернативными регистрами.
LD A, (R7) ; проверка состояния счетчика
JR NZ N; на выходе таймера истинное значение счетчика
LD (R7),1 ; на выходе таймера ложное значение счетчика
EXX
RETI
N: LD (R7),0
IN A,0 ; ввод значения Счетчика1 с выхода таймера.
XOR FFH ; инверсия, так как счетчик таймера считает в отрицательном направлении.
LD L,A
IN A,0
XOR FFH
LD H,A
LD (R1), HL
IN A,4 ; ввод состояния переключателя.
CPS 1
JP NZ A; если не нажат, то переход к А.
LD BC, (R1) ; вычисление количества оборотов.
LD (A1), BC
LD (A2),10
CALL DEL ; вызов процедуры деления.
LD BC, (A2)
LD (A2), BC
LD (A1), 50000
CALL DEL
LD (A2),6
CALL YMH ; вызов процедуры умножения.
LD BC, (A1)
LD (R3), BC
LD (R10),0
CALL DECT ; вызов процедуры разбиения на десятки.
EXX
RETI
A: IN A, 1 ; ввод значения Счетчика2 с выхода таймера.
XOR FFH
LD L, A
IN A, 1
XOR FFH
LD H, A
LD (R2), HL ; вычисление угла опережения зажигания.
LD (A1), 36 (10)
LD (A2), HL
CALL YMH
LD HL, (A1)
LD BC, (R1)
LD (A1), BC
LD (A2), 10
CALL DEL
LD BC, (A1)
LD (A2), BC
LD (A1), HL
CALL DEL
LD BC, (A1)
LD (R3), BC
LD BC, (A3)
LD (R10), BC
CALL DECT
EXX
RETI
Подпрограмма DECT:
; процедура разбиения числа на десятки (на цифры).
LD BC, (R3) ; ввод числа, которое нужно разбить осуществляется через ячейку с адрессом R3.
LD (A1), BC
C: LD (A2), 10
CALL DEL
LD B, (A3)
INC (R4) ; количество десятков в ячейке с адресом R4.
LD A, (R4)
ADD A, (R5)
LD (A), B
LD A, (A1)
CPS 10
JP NC C;
LD B, (A1)
INC (R4)
LD A, (R4)
ADD A, R5
LD (A), B ; цифры находятся в памяти друг за другом, в порядке возрастания начиная с адреса R5.
INC A
LD (A), 128 (10) ; вывод точки
INC A
LD B, (R10)
LD (A), B
RET
Подпрограмма DEL:
; процедура деления одного числа (в ячейке памяти по адресу А1) на другое ( в ячейке памяти по адрессу А2).
PUSH BC
PUSH DE
PUSH HL
LD HL, (A2)
LD DE, (A1)
LD BC, 0
M1: LD (A4), HL
SBC HL, DE
INC BC
JR NC, M1;
DEC BC
LD (A1), BC ; результат заносится в ячейку памяти с адресом А1.
LD HL, (A4)
LD (A3), HL ; остаток от деления находится в ячейке памяти с адресом А3.
POP HL
POP DE
POP BC
RET
Подпрограмма YMH:
; процедура для умножения одного числа (в ячейке памяти по адресу А1) на другое ( в ячейке памяти по адрессу А2).
PUSH DE
PUSH HL
LD DE, (A2)
DEC DE
LD HL, (A1)
M2: ADC HL, HL
DINZ M2;
LD (A1), HL ; результат заносится в ячейку памяти с адресом А1.
POP HL
POP DE
RET
Опишем подробней каждую из процедур.
DECT: процедура разбиения числа на десятки. Программа делит число на десять, остатком от деления будет младший разряд, который заносится в ячейку R5. Эта процедура повторяется несколько раз, при этом каждый раз увеличивается число количества десятков ( ячейка R4), пока частное не будет меньше 10, после чего процедура останавливается, а последнее полученное нами частное будет старшим разрядом, которое заносится в ячейку по адресу R5+R4.
DEL и YMH: процедуры умножения и деления двух чисел. Наиболее рациональным методом деления и умножения в цифровых приборах является метод двоичного умножения (деления). Но в нашей схеме по ряду причин мы будем использовать другой метод. Одна из причин - это то, что в ассемблере для Z-80 не существует команды для сдвига влево или вправо пары восьмибитовых регистров, а мы производим вычисления над 16-битовыми числами. И второе - быстродействие достигаемое методом двоичного умножения (деления) нам не нужно так, как микропроцессор только обслуживает одно прерывание с Датчика1 (которое появляется с частотой 10-100 Гц) и второе - с таймера (появляющееся с частотой 200 Гц), а все остальное время находится в режиме ожидания.
Процедура умножения запрашивает два числа А1 и А2, а результат возвращает в А1. Умножение производится обычным сложением А1+А1 А2 раз. Поэтому рекомендуется, чтобы А1 было больше чем А2.
Процедура деления запрашивает два числа А1 и А2, а результат и остаток возвращает соответственно в А1 и А3. Деление производится вычитанием из А1 числа А2 пока не будет установлен флаг переноса.
На индикатор информация выводится следующим образом:
Берется цифра соответствующего разряда (разряды перебираются с конца) и из ячейки с адресом "R6+цифра" выбирается код сегментного индикатора.
С приходом сигнала с таймера на вход немаскируемых прерываний микропроцессор вызывает процедуру обработки прерывания, которая выводит на индикатор данные о сегменте. Все остальное время микропроцессор находится в режиме ожидания. Количество разрядов соответствует количеству десятков.
Разряд индикатора показан на рис.4, а код соответствующий определенной цифре в таблице 1.
Таблица 1.