Министерство высшего образования Украины
Национальный технический университет Украины
“Киевский политехнический институт”

Радиотехнический факультет.
Кафедра радиотехнических устройств и систем.

Êóðñîâàÿ ðàáîòà

ïî êóðñó
 “Öèôðîâûå óñòðîéñòâà è ìèêðîïðîöåññîðû”

Устройство для измерения угла опережения зажигания четырехтактных карбюраторных двигателей

Âûïîëíèëè: ñòóäåíòû ãðóïïû ÐÒ-42
Ñîëîìåíöåâà Ê. Ê.
ßí÷óê È. Â.

Ïðîâåðèë: Ìèõàéëåíêî Ì. Â.

Çàùèùåíà ñ îöåíêîé:

—Êèåâ 1997—
Оглавление
1. Òåõíè÷åñêîå çàäàíèå.	
2. Îïèñàíèå ïîäîáíûõ ñõåìîòåõíè÷åñêèõ ðåøåíèé.	
3. Ïðèíöèï ðàáîòû è ìåòîäèêà èçìåðåíèÿ.	
4. Àïïàðàòíîå îáåñïå÷åíèå.	
5. Ïðîãðàììíîå îáåñïå÷åíèå	
Ëèòåðàòóðà	

1. Техническое задание.

Разрабатываемый прибор предназначен для диагностики системы зажигания в автомобиле, а именно для измерения опережения угла зажигания четырехтактных карбюраторных двигателей.
2. Описание подобных схемотехнических решений.

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

Прибор имеет два входа, на которые подаются сигналы от датчиков. На один вход поступает сигнал датчика количества оборотов коленчатого вала, который представляет собой импульс с амплитудой равной 5В. Этот импульс вырабатывается в тот момент, когда поршень (например первого цилиндра) находится в верхней мертвой точке. На второй вход поступает сигнал от другого датчика, который вырабатывает такой же импульс, но в момент зажигания. Результаты измерений отображаются на индикаторе, при этом прибор в зависимости от режима роботы отображает либо угол опережения зажигания, либо частоту вращения коленчатого вала. Режим работы определяется положением переключателя.
Методика измерения угла следующая. Угол опережения зажигания можно определить по формуле:
, где Тс1 - период вращения коленчатого вала, Тс2 - время между зажиганием и нахождением поршня в верхней мертвой точке.
Измерение периода заключается в сравнении измеряемого интервала времени Тс с дискретным интервалом, воспроизводящим единицу времени. Это достигается заполнением измеряемого интервала Тс импульсами с известным образцовым периодом следования Тобр<<Тс - преобразованием интервала в отрезок периодической последовательности импульсов, число которых, пропорциональное интервалу Тс, подсчитывается.

Рис. 1.
При подаче на вход “Датчик 1” импульса количества оборотов включается счетчик, который подсчитывает счетные импульсы образцового генератора (Счетчик 1 см. рис.1). При поступлении на вход “Датчик 2” импульса зажигания включается второй счетчик. Счетчики продолжают считать временные интервалы до тех пор пока на вход “Датчик 1” снова не придет импульс, после чего счетчики останавливаются.  
Число просчитанное первым счетчиком будет пропорционально периоду оборотов коленчатого вала, а число на втором счетчике - пропорционально времени между зажиганием и нахождением поршня в верхней мертвой точке.

4. Аппаратное обеспечение.

Структурная схема устройства показана на рис.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 КГц, так как ее легче получить с помощью простого делителя частоты. 
Оценим погрешность дискретности, которая возникает вследствие того, что периодическая последовательность счетных импульсов и заполняемый ими стробирующий импульс в общем случае - сигналы несинхронные. Максимальное значение абсолютной погрешности дискретности измерения периода Т=Тобр=2мкс, т.е. составляет 1 младшего разряда счета. Наибольшая относительная погрешность дискретности составляет т=(Тобр/Тс). Принимая Тс равным 360, можно получить максимальную относительную погрешность измерения угла равной =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.

5. Программное обеспечение

На рис. 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.
Цифра	Сегменты	Адрес	
	A	B	C	D	E	F	G	H		
0	1	1	1	1	1	1	0	0	4111	
1	0	1	1	0	0	0	0	0	4112	
2	1	1	0	1	1	0	1	0	4113	
3	1	1	1	1	0	0	1	0	4114	
4	0	1	1	0	0	1	1	0	4115	
5	1	0	1	1	0	1	1	0	4116	
6	1	0	1	1	1	1	1	0	4117	
7	1	1	1	0	0	0	0	0	4118	
8	1	1	1	1	1	1	1	0	4119	
9	1	1	1	1	0	1	1	0	4120	

Опишем переменные и место расположение их в памяти, используемые программой.
                                                                            Таблица 2.
Переменная	Назначение	Нач. Адрес	Длина	
R1	Значение Счетчика1	4096 D	2 байта	
R2	Значение Счетчика2	4098	2	
R3	Переменная для процедуры DECT	4100	2	
R4	Число десятков	4102	1	
R5	Начальный адрес массива цифр (8 цифр)	4103	8 байт	
R6	Начальный адрес массива кодов сегментного индикатора (10)	4111	10 байт	
R7	Состояние счетчика таймера	4121	1	
R8,R9,R10	Вспомогательная	4122	1,1,1	
A1	1-е число для процедур DEL и YMH	4125	2	
A2	2-е число для процедур DEL и YMH	4127	2	
A3	остаток от деления	4129	2	

В данной схеме сигнал прерывания с Датчика1 подается на вход немаскируемого прерывания INT микропроцессора Z-80. В общем случае обычное прерывание приведет к тому, что текущий счетчик команд будет помещен в стек, а управление с помощью программы RST будет передано на нулевую страницу ПЗУ. Поэтому процедура обработки прерываний должна находится по адресу 0000Н (см. рис. 5). Сигнал прерывания с таймера, контролирующий вывод на индикатор, поступает на вход немаскируемого прерывания NMI. Это прерывание имеет более высокий приоритет чем INT. Сигнал автоматически переводит ЦП к выполнению программы с адреса 0066Н. Поэтому данная процедура обработки прерывания вывода на индикатор должна находится по этому адресу. Следом за ней идут вспомогательные  процедуры DECT, DEL, YMH, после чего располагается основная программа.

Литература

1. 	В.И. Зубчик, В.П. Сигорский. Справочник по цифровой схемотехнике. - К: “Техника”, 1990г., 448с.
2. 	Г.Я. Мирский. Микропроцессоры в измерительных приборах. - М: “Радио и связь”, 1984г., 160с.
3. 	В.И. Корнейчук, В.П. Тарасенко. Вычислительные устройства на микросхемах. - К: “Техника”, 1986г,264с.
4. 	У.Тант. Ассемблер Z-80. - М: ВА Принт, 1993г.,124с.
5. 	Конспект лекций по дисциплине “Цифровые устройства и микропроцессоры” для студентов радиотехнических специальностей. / Сост. Грабинский Ю.И, Коцержинский Б.А., Михайленко М.В. -К.:КПИ, 1995. - 184 с.
6. 	М.А. Раевский, В.П. Обметица, Справочник по обслуживанию и ремонту автомобилей ВАЗ. - К: “Выща школа” 1989г.,176с.