Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2155.pdf
Скачиваний:
62
Добавлен:
07.01.2021
Размер:
3.48 Mб
Скачать

Если было прерывание, уменьшаем счетчик циклов и УОЗ. Определяем время подачи искры, включаем светодиод индикации детонации, возвращаемся в начало цикла 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

Контрольные вопросы

1.От каких величин, связанных с работой ДВС, зависит УОЗ?

2.Каковы причины возникновения детонации в ДВС?

3.Как работает датчик детонации?

4.Какие параметры ДВС изменяются при изменении УОЗ?

5.Как зависит УОЗ от скорости вращения коленчатого вала ДВС?

6.Как зависит УОЗ от мощности (механической нагрузки) ДВС?

7.Как работает модуль зажигания?

8.Что такое индикаторная диаграмма ДВС?

Библиографический список

1.

Блум, Джереми. Изучаем Arduino: инструменты и методы

технического волшебства / Джереми Блум ; пер. с англ. СПб.

: БХВ-

Петербург, 2015. 336 с.

 

 

 

2.

Карвинен, Теро. Делаем сенсоры: проекты сенсорных устройств на

базе Arduino и Raspberry Pi / Теро Карвинен, Киммо Карвинен,

Вилле

 

 

 

И

 

Валтокари ; пер. с англ. М. : ООО «И. . Вильямс», 2015. 432 с.

 

3.

Петин, В.А. Проекты с исп

ользованием контроллера Arduino /

В.А. Петин. СПб. : БХВ-Петербург, 2014Д. 400 с.

 

4.

Соммер, У. Программирование микроконтроллерных плат

Arduino/Freeduino / У. Соммер. СПб. : БХВ-Петербург, 2012.256 с.

5.

А

 

 

Зубарев, А.А. Ассем лер для микроконтроллеров AVR : учебное

пособие / А.А. Зубарев. – Омск : СибАДИ, 2007. – 112 с.

 

6.

б

двигателей. Ч. 1. Характеристики

Испытания автомоб льных

автомобильныхСдвигателейи. Стендовые испытания дизелей : методические указания / сост. .М. Гергенов. – Улан-Удэ : Изд-во ВСГТУ, 2002.

7. Системы управления бензиновыми двигателями : пер. с нем. – М. :

«За рулем», 2005. 432 с.

8.Уве, Рокош. Бортовая диагностика / Рокош Уве ; пер. с нем. М. :

«За рулем», 2013. – 224 с.

9.Konrad Reif (Hrsg.) Bosch Autoelektrik und Autoelektronik Bordnetze, Sensoren und elektronische Systeme.- Vieweg+Teubner Verlag |Springer Fachmedien Wiesbaden, GmbH, 2011.

66

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]