Материал: 2155

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

В научных статьях, где рассматриваются эти теоретические вопросы, формулы для вычисления УОЗ и других параметров имеют общий вид. Их невозможно вставить в алгоритм программы для вычисления численных значений величин.

Этот путь достаточно сложен, так как нет полной теории определения скорости горения в различных условиях, поэтому в данном случае требуются соответствующая проверка и корректировка углов опережения зажигания в процессе испытаний ДВС.

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

Как видно, все эти варианты требуют проведения дополнительных

специальных испытаний.

И

 

Разработанная нами модель ДВС имеет все необходимые датчики, а в качестве электронного блока управления (ЭБУ) для обработки сигналов с датчиков и управления исполнительными механизмами служит контроллер Ардуино. Через него система подключается к ноутбуку.

Основное достоинство разработанной модели и системы управления в том, что они позволяют сравнить несколько вариантов вычисления угла

опережения зажигания в

различных

режимах работы

(при изменении

 

 

 

 

 

 

Д

 

 

скорости, нагрузки) и отра отать алгоритмы и программы управления в

учебной аудитории.

 

 

 

 

А

 

 

 

 

 

 

 

 

 

Для решения этой задачи нужно определить алгоритм вычисления

УОЗ в зависимости от

 

ч сла о оротов коленчатого

вала двигателя,

нагрузки на него и нал

 

 

б

 

 

 

ч я детонации топлива (октанового числа бензина),

т. е. по аналогии с

 

механ ческой

системой

управления УОЗ в

 

и

 

 

 

 

С

 

 

 

 

 

 

распределителе системы зажигания, которая рассматривается в любом учебнике по электрооборудованию автомобилей. Отличие будет состоять в том, что величина коррекции УОЗ, вносимая вакуум-корректором, будет зависеть от частоты вращения вала ДВС: при увеличении частоты вращения она будет уменьшаться.

Алгоритм уменьшения угла опережения зажигания, вносимого вакуум-корректором с ростом частоты вращения двигателя, можно пояснить графически (рис. 53). При вычислении изменения УОЗ, вносимого вакуум-корректором, нужно умножать её на К, а затем добавлять к суммарному УОЗ.

На графике видно, что до 2000 об/мин вакуум-корректор вносит коррекцию на заданную величину угла, пропорциональную увеличению мощности. Далее величина вносимого угла опережения начинает линейно стремиться к нулю таким образом, что при 3500 об/мин величина

61

вносимого угла составит половину от выставленного, а при 5000 об/мин и на более высоких частотах вращения корректор перестаёт вносить коррекцию и выходной УОЗ остается без изменений.

К

1

0,5

0

 

2000

 

 

 

 

 

6000

 

 

n,об/мин

 

4000

 

 

 

 

 

 

 

Рис. 53. Изменение коэффициента влияния вакуум-коррекции на УОЗ

1.Начальное значение УОЗ = 1012До – режимИхолостого хода.

2.При увеличении скорости вращения маховика от оборотов холостого хода до максимальныхАУОЗ увеличивается линейно на 20о. При этом используются сигналы с датчика скорости.

3.При увеличении механической нагрузки на ДВС (увеличении мощности) и нажатии на бпедаль газа (увеличении размеров отверстия дросселя) УОЗ увеличивается на 0 – 20о пропорционально уменьшению разряжения во впускномиколлекторе. Используются сигналы с датчика давления во впускном коллекторе.

Причем величинаС, на которую производится увеличение УОЗ, умножается на коэффиц ент, зав сящ й от скорости вращения (см. рис. 53).

4.При возникновении события «детонации» (вызывается легким ударом по датчику детонации) происходит прерывание программы, при котором обработчик прерывания скачкообразно увеличивает УОЗ на 5о, с последующим уменьшением его на 1° через каждые 10 циклов.

Упрощенный алгоритм программы для микроконтроллера модуля Ардуино представлен на рис. 54. Он меняется в процессе обучения.

После объявления глобальных переменных и инициализации устройств в секции setup() попадаем в главный цикл loop(), ждем верхнюю мертвую точку (ВМТ), запоминаем время ВМТ, ждем нижнюю мертвую точку (НМТ), заодно в цикле измеряем давление и определяем: минимальное или среднее. Запоминаем время НМТ, отнимаем от него время ВМТ, определяем длительность половины оборота, вычисляем скорость вращения, длительность поворота на 1°, коррекцию УОЗ по скорости, коррекцию по нагрузке (давлению во впускном коллекторе) в зависимости от скорости.

62

Начало

Объявление глобальных

переменных

Прерывание от

детонации

УОЗ =+5

 

 

 

 

Секция set()

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Настройка:

 

 

 

 

 

 

 

 

 

 

Количество циклов.

 

 

 

 

1.Последовательного порта

 

 

 

 

 

 

 

 

 

 

Счетчик циклов вкл.

 

 

 

 

2.Внешних прерываний

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3.Портов ввода/вывода

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Цикл

 

 

 

 

 

 

 

 

 

 

 

Возврат

 

 

 

 

 

Прерывание от

 

 

 

 

 

 

 

 

 

 

Loop()

детонации

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Регистрация импульсов с

 

 

 

 

 

И

 

 

 

 

датчиков скорости и давл.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Д

 

 

 

 

Проходит

Нет

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ВМТ ?

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

А

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Да

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Измерение давления.

 

 

 

 

 

 

 

 

 

 

 

 

 

Определение минимума Р

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

и

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

С

 

 

Нет

 

 

 

 

 

 

 

 

 

 

 

 

Проходбт

 

 

 

 

 

 

 

 

 

 

 

 

НМТ ?

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Да

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Вычисление УОЗ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Счетчик после

 

Нет

 

 

 

 

 

 

 

 

 

 

 

 

прерывания=0?

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

c=0?

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Вычисление момента

 

 

 

 

Да

 

 

 

 

 

 

 

 

 

 

зажигания, индикация

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Уменьшение УОЗ на 1О

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 54. Упрощенный алгоритм программы для управления УОЗ

63

Если было прерывание, уменьшаем счетчик циклов и УОЗ. Определяем время подачи искры, включаем светодиод индикации детонации, возвращаемся в начало цикла loop().

Один из вариантов программного кода управления УОЗ для контроллера Ардуино представлен ниже.

6.7. Программный код управления УОЗ с комментариями

unsigned int uoz = 10; // устанавливаем глобальные переменные: unsigned int speed = 0; //угол опережения зажигания, скорость и unsigned int presure = 0; //давление

int rPin = A0; // устанавливаем входной штырек для АЦП

unsigned int rValue = 0; // значение напряжения с переменного резистора

volatile int compar = 0; // величина на выходе компаратора - вывод 2

volatile int n = 0; // число измерений

И

 

volatile unsigned int pValue = 0; // цифровое значение напряжения с датчика

давления

 

 

 

 

 

 

 

Д

volatile unsigned long mAir; // сумма значений давления воздуха → масса

воздуха

 

 

 

 

 

А

volatile unsigned int kFiil;

 

 

 

 

 

 

 

void setup(){

 

 

 

б

 

 

pinMode(2, INPUT);

 

 

 

 

 

 

 

 

 

 

 

 

pinMode(3, INPUT);

и

 

 

 

 

Serial.begin(9600);

 

 

// старт последовательного вывода данных (для

тестирования)

 

 

 

 

 

 

 

 

 

attachInterrupt(0, blink, RISING);

// прерывание на цифровом входе 2 (по

 

 

С

 

 

 

 

 

спадающему фронту FALLING)

 

 

 

}

attachInterrupt(1, blank, RISING);

 

 

 

 

 

 

 

 

 

 

 

void loop(){

 

 

 

 

 

 

 

 

 

n = 0;

 

 

 

 

 

 

 

 

 

delay(200);

 

 

 

 

 

 

 

 

 

rValue = analogRead(rPin);

 

//

считываем значение с переменного

резистора

 

 

 

 

 

 

 

 

 

rValue = map(rValue, 0, 1023, 0, 255); //масштабируем

 

analogWrite(3, rValue);

 

// Pin3 - выход ШИМ

 

//Вывод на монитор

 

 

 

 

 

 

 

 

Serial.print(a, DEC);

 

// число измерений

 

Serial.print(" mAir= ");

 

 

 

 

 

 

Serial.println(mAir/1024);

//масса воздуха

}

mAir=0;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

64

void blink()

//

Внутри функции значения, возвращаемые millis(), не

изменяются, delay()не работает,Serial.println(); нельзя!!!

{

 

 

 

 

 

 

 

compar = LOW;

 

 

 

 

 

 

while(compar == LOW){

 

 

 

 

pValue = analogRead(A1);

 

 

 

compar = digitalRead(2);

 

 

 

 

for (int i=0; 100; i++) {

 

 

 

 

}

 

 

 

 

 

 

 

pValue = pValue/16;

 

 

 

 

mAir += pValue;

 

 

 

 

 

a++;

 

 

 

 

 

 

 

}

 

 

 

 

 

 

 

void blank() //

 

 

 

 

 

 

И

{

 

 

 

 

 

 

 

 

 

 

 

 

 

time = millis();

 

 

 

 

 

 

time_ms = time - otime;

 

 

Д

otime = time;

 

 

 

 

 

 

 

 

 

 

 

 

return time_ms;

 

 

 

 

А

 

}

 

 

 

 

 

 

 

 

 

 

 

 

if(speed > 5000) // если скорость вращения больше 5000, то

 

 

 

 

б

 

 

k = 0; // не учитываем изменение мощности

 

if(speed > 2000) // если скорость вращения больше 2000,

 

 

 

и

 

 

 

k = 1- (speed -2000)/3000; // вычисляем коэффициент влияния изменения

мощности

 

 

 

 

 

 

 

}

С

 

 

 

 

float getHeading(){

 

 

 

 

 

float heading

=

 

atan2(scaled.YAxis, scaled.XAxis); // высчитываем

направление, корректируем значения с учетом знаков if(heading < 0) heading += 2*PI;

if(heading > 2*PI) heading -= 2*PI;

return heading * RAD_TO_DEG; // переводим в градусы

}

}

Следует иметь в виду, что приведенные в методических указаниях электрические схемы, алгоритмы и коды программ использовались для модели поршневой машины, описанной с целью обучения разработке устройств на базе микроконтроллеров. Копирование их в курсовые и дипломные проекты не будет поощряться преподавателем. Студентам нужно предлагать свои схемы и код.

65

Источник: https://studfile.net/preview/16408212/