Открыть Электронные книги
Категории
Открыть Аудиокниги
Категории
Открыть Журналы
Категории
Открыть Документы
Категории
РАЗРАБОТКА АВТОМОБИЛЬНЫХ
ЭЛЕКТРОННЫХ СИСТЕМ НА БАЗЕ ARDUINO:
УПРАВЛЕНИЕ РАБОТОЙ ДВИГАТЕЛЯ
ВНУТРЕННЕГО СГОРАНИЯ
И
Методические указания
АД
Составитель А.А. Зубарев
иб
С
Омск • 2016
Согласно 436-ФЗ от 29.12.2010 «О защите детей от информации,
причиняющей вред их здоровью и развитию» данная продукция
УДК 621.43: 681.31 (075.8) маркировке не подлежит.
ББК 39.33 (32.97)
Рецензенты:
канд. техн. наук, доц. Ю.П. Макушев (СибАДИ);
канд. техн. наук, доц. И.В. Никонов (ОмГТУ)
И
используются в лекционных демонстрациях и при проведении лабораторных работ.
Имеют интерактивное оглавление в виде закладок.
Предназначены для обучающихся всех форм обучения по направлениям и
АД
специальностям, изучающим электронные системы управления автомобилей и
тракторов, в частности «Системы электроники и автоматики автомобилей и тракторов»,
«Микропроцессорные системы автомобилей и тракторов», «Проектирование
микропроцессорных систем автомобилей и тракторов», «Датчики в системах
управления автомобилей и тракторов» и т.п.
Могут быть использованы в курсовом и дипломном проектировании
иб
2
ВВЕДЕНИЕ
И
системы питания топливом своего автомобиля, для того чтобы она
удовлетворяла экологическим требованиям путем замены старых агрегатов
на новые. Но замена узлов и агрегатов двигателя влечет за собой
АД
необходимость замены электронного блока управления (ЭБУ) двигателем
или хотя бы обновления программного обеспечения ЭБУ.
Необходимость замены ЭБУ возникает и у относительно новых
автомобилей при их поломке. Однако нередко возникают проблемы
нахождения блока нужной марки, его дороговизны, снятия с производства
иб
3
элементной базы – микроконтроллеров и миниатюрных моделей,
позволяющих исследовать работу блоков управления, разрабатывать и
проверять на них алгоритмы и отлаживать программы для управления
основными процессами, происходящими в работающем ДВС.
В методических указаниях рассматриваются натурные модели, на
которых можно проверить работоспособность электронного блока на базе
программируемых микроконтроллеров и отработать алгоритмы
управления ДВС. Предложены макеты электронных блоков управления
основными процессами, происходящими в работающем ДВС, которые
можно использовать для лекционных демонстраций и лабораторных работ
в любой учебной аудитории без дополнительного оборудования, не
создавая шума и загрязнения воздуха. Они позволяют наглядно изучить и
исследовать процесс дозирования топлива до момента воспламенения его
в цилиндре (доза впрыскиваемого топлива вычисляется по количеству
засасываемого воздуха).
На всех этапах этого процесса нужно обеспечить просмотр сигналов с
И
датчиков и сигналов на схемах формирования импульсов, поступающих на
микроконтроллер, управляющий процессом. Все этапы процесса
сопровождаются программным кодом, написанным в среде разработки
АД
Arduino (или Ардуино).
иб
С
4
1. КРАТКИЕ СВЕДЕНИЯ ОБ АРДУИНО
И
электронные компоненты. В настоящее время выпускаются десятки видов
плат Ардуино с различными микроконтроллерами и плат с датчиками и
другими устройствами, которые можно присоединить к плате Ардуино, –
АД
шилдов (shield – щит), собрав устройство в виде этажерки.
иб
С
5
1.2. Общие сведения о средах разработки
Для создания программ, которые носят название скетчи, и
программирования плат Ардуино используется среда разработки и отладки
программ (IDE – integrated development environment), которую можно
бесплатно скопировать с сайта сообщества разработчиков www.arduino.cc
(рис. 2).
И
АД
Рис. 2. Стартовое окно программы для разработки программ для Ардуино
иб
6
Кнопки панели инструментов позволяют проверить и записать
программу, создать, открыть и сохранить скетч, открыть мониторинг
последовательной шины. Дополнительная функциональность может быть
добавлена с помощью библиотек. Существует множество специализи-
рованных библиотек, их можно скачать с сайтов разработчиков.
Обычно библиотеки пишутся так, чтобы упростить решение той или
иной задачи и скрыть от разработчика детали программно-аппаратной
реализации. Программы библиотек пишутся на языке С++.
Среда Arduino IDE поставляется с набором стандартных библиотек:
Serial, EEPROM, SPI, Wire и др.
Atmel Studio 7 – бесплатная интегрированная среда разработки
приложений на микроконтроллерах семейств Atmel SMART и AVR и
Веб-платформы, которую можно скачать с сайта фирмы. Atmel START –
мощный инструмент для создания и настройки встроенных приложений,
И
драйверов и типовых проектов, позволяет разработчикам создавать
собственные программные платформы. Atmel Studio 7 позволяет
АД
использовать скетчи, созданные в Arduino IDE, и конвертировать их в С++
проекты. Также эта среда позволяет разрабатывать и отлаживать
программы на языке Ассемблер для микроконтроллеров AVR [5]
(рис. 4, 5).
иб
С
7
И
Рис. 5. Окно Atmel Studio 7, в котором выбирается среда
для разработки программ для Ардуино
АД
иб
С
8
Написать программу для Arduino Uno и отладить её в режиме
реального времени может помочь бесплатный симулятор (программа для
моделирования) UnoArduSim [6], который позволяет испытать
разрабатываемое устройство без наличия каких-либо фактических
аппаратных средств. Устройство собирается из виртуальных деталей:
платы Arduino Uno, серводвигателей, цифровых и аналоговых генераторов
формы сигнала, пьезоэлементов, светодиодов, кнопок, резисторов
подтягивания, переменных потенциометров, устройств ввода/вывода с
возможностью подключения устройств с использованием
последовательных интерфейсов (UART, I2C и SPI) с выбираемой
скоростью передачи данных. Поддерживаемые библиотеки: Servo.h,
SoftwareSerial.h, Wire.h, SPI.h и eeprom.h.
Таким образом, имея в наличии только компьютер, можно выполнить
разработку устройства управления на базе Ардуино и проверить его
работу.
И
1.3. Примеры проектов
Светодиод
синего
цвета
9
Плату необходимо подключить к компьютеру с помощью кабеля USB,
имеющего один из разъемов микроUSB.
Код исходной программы:
/* Мигание LED
* ------------
* Включает и выключает светодиод (LED), подсоединенный
* к выходу 13, с интервалом в 2 секунды
*/
int ledPin = 13; // LED подсоединен к выводу 13
void setup()
{
pinMode(ledPin, OUTPUT); // устанавливаем вывод 13 как выход
}
void loop()
{
digitalWrite(ledPin, HIGH); // включаем LED
И
delay(1000); // пауза 1 секунда
digitalWrite(ledPin, LOW); // выключаем LED
delay(1000); // пауза 1 секунда
АД
}
Внесем изменение в программу, не изменяя её функциональность:
вместо установки на выводе 13 состояния HIGH, а затем обратно LOW
будем инвертировать текущее значение ledPin. Т.е. если оно было HIGH,
то станет LOW, и наоборот.
иб
}
Теперь взамен delay() используем функцию millis(). Данная функция
возвращает количество миллисекунд, прошедшее с момента запуска или
сброса (нажатием на кнопку Reset) текущей программы. Функция
переполнится (вернется в нуль) приблизительно через 50 суток работы
программы.
Альтернативной функцией является micros(), которая возвращает
количество микросекунд, прошедшее с момента запуска текущей
программы. Функция переполнится (вернется в нуль) приблизительно
через 70 мин работы программы.
Код:
/* Мигание LED Версия 2
* Включает и выключает светодиод (LED), подсоединенный
* к выходу 13, с интервалом в 2 секунды, используя функцию millis().
10
*/
int ledPin = 13; // LED подсоединен к выводу 13
unsigned long currentTime;
unsigned long loopTime;
void setup()
{
pinMode(ledPin, OUTPUT); // устанавливаем вывод 13 как выход
currentTime = millis(); // считываем время, прошедшее с момента
запуска программы
loopTime = currentTime;
}
void loop()
{
currentTime = millis(); // считываем время, прошедшее с момента запуска
программ
if(currentTime >= (loopTime + 1000)){ // сравниваем текущий таймер с
И
переменной loopTime + 1 секунда
digitalWrite(ledPin, !digitalRead(ledPin)); //включаем/выключаем LED
loopTime = currentTime; // в loopTime записываем новое значение.
АД
}
}
Контрольные вопросы
11
2. РЕГИСТРАЦИЯ СИГНАЛОВ С ДАТЧИКОВ,
УПРАВЛЕНИЕ ИНДИКАТОРАМИ
И
АД
Рис. 8. Плата Ардуино-Нано
иб
int redLED = 7;
void setup() {
pinMode(redLED, OUTPUT);
pinMode(yellowLED, OUTPUT);
pinMode(greenLED, OUTPUT);
}
void loop() {
digitalWrite(redLED, HIGH); // Включение красного светодиода,
delay(500); // задержка.
digitalWrite(redLED, LOW); // Включение красного светодиода
delay(100);
digitalWrite(yellowLED, HIGH);
delay(500);
digitalWrite(yellowLED, LOW);
12
delay(100);
digitalWrite(greenLED, HIGH);
delay(500);
digitalWrite(greenLED, LOW);
delay(100);
} // Переход в начало функции loop для повторения.
И
• D (цифровые входы/выходы с 0 по 7).
Каждый порт управляется 3 регистрами. Регистр DDR определяет
направление передачи сигнала: на вывод или ввод. При помощи регистра
АД
PORT можно установить вывод в состояние HIGH или LOW. Регистр PIN
служит для ввода данных, с его помощью можно считать состояние ножек
Arduino, когда они работают на вход.
Для примера будем использовать порт D. Сначала мы должны
установить нужные выводы порта D как цифровые выходы. Биты 3, 5 и 7
иб
13
В программе нам нужно ввести 2 переменные: первая upDown будет
содержать значение куда двигаться – вверх или вниз, а вторая step − шаг
сдвига.
В функции setup() мы определяем, какие ножки должны работать как
выходы.
В главном цикле программы loop() светодиоды по очереди загораются
вверх путем увеличения переменной step, а когда доходит до самого
верхнего, то переменной upDown присваивается 0 и светодиоды
загораются вниз по очереди.
Код:
/* Светофор из 3 светодиодов */
unsigned char upDown=1; // начинаем с движения вверх
unsigned char step=0; // зажигает светодиоды по очереди
void setup() {
DDRD = B10010100; // устанавливаем биты порта D 3, 5 и 7 как выходы
}
И
void loop() {
if(upDown==1){ // если идем вверх, то
step++;
if(step>=7) upDown=0; // когда достигнут наибольший номер LED, то в след.
АД
цикле идем вниз
}
else {
step--;
if(step==0) upDown=1; // когда достигнут наименьший номер LED, то в след.
иб
14
Код:
/* Пример, показывающий возможности
функции analogWrite() для изменения
яркости свечения светодиода, который
подключен к ножке D9 Arduino Uno:
*/
int brightness = 0; // яркость светодиода
int fadeAmount = 5; // шаг изменения яркости
unsigned long currentTime
unsigned long loopTime
void setup() { Рис. 9. Подключение
pinMode(9, OUTPUT);// устанавливаем 9 светодиода
ногу как выход
currentTime = millis(); loopTime = currentTime;
}
void loop() {
И
currentTime = millis();
if(currentTime >= (loopTime + 20)){
analogWrite(9, brightness); // устанавливаем значение на 9 ножке
АД
brightness = brightness + fadeAmount;// прибавляем шаг изменения
яркости, которая установится в следующем цикле
// если достигли мин. или макс. значения, то идем в обратную сторону:
if (brightness == 0 || brightness == 255) fadeAmount = -fadeAmount ;
loopTime = currentTime;
иб
}
}
Для управления светодиодом будем
использовать фоторезистор (рис. 10). Эту
С
15
выходе делителя (и входе АЦП микроконтроллера) напряжение
увеличивается, когда освещенность падает, − все наоборот.
Напряжения 0В и 5В берутся с Arduino. Ножка А0 используется как
вход АЦП.
Если нужно подключать более мощную нагрузку, такую как лампа
накаливания, то ее следует подключать через реле или тиристор.
В коде программы есть закомментированные участки, они служат для
отладки. Можно будет контролировать значение АЦП (от 0 до 1024).
Также можно в коде изменить значение 500 (порог включения и
выключения) на то, которое вы подберете опытным путем, изменяя
освещенность.
Код:
/* фоторезистор*/
int sensorPin = A0; // устанавливаем входной вывод для АЦП
unsigned int sensorValue = 0; // напряжение с фоторезистора
void setup() {
И
pinMode(13, OUTPUT);
Serial.begin(9600); // старт монитора данных (для контроля)
}
АД
void loop() {
sensorValue = analogRead(sensorPin); // считываем напряжение с фоторезистора
if(sensorValue<500) digitalWrite(13, HIGH); // включаем
else digitalWrite(13, LOW); // выключаем
Serial.print(sensorValue, DEC); // вывод данных с фоторезистора (0-1024)
Serial.println(""); // перевод строки
иб
delay(500); }
16
Максимальный ток, который может отдать в нагрузку
микроконтроллер с одного вывода, составляет 40 мА. Поэтому между
микроконтроллером и мощной нагрузкой ставят усилитель мощности на
биполярном или полевом транзисторе, работающем в ключевом режиме.
Широтно-импульсная модуляция позволяет плавно управлять
скоростью вращения. Сигнал ШИМ, вырабатываемый контроллером,
поступает на ключевую схему, собранную на транзисторе, к которой
подключена мощная нагрузка. В нашем случае это электродвигатель.
Пример такой схемы на биполярном транзисторе показан на рис. 11.
И
АД
Рис. 11. Ключевая схема на биполярном транзисторе
иб
17
Рис. 12. Схема регулятора на полевом транзисторе
И
Назначение L и C1 – элементы фильтра нижних частот для сглаживания
импульсов напряжения при регулировании, С2 – фильтрация помех
АД
напряжения питания.
иб
С
18
На рис. 14 показаны временные диаграммы напряжений на
электродвигателях при ШИМ.
Uк
U1
Uи
U2
0 T 2T 3T 4T t
Uвх
Uи
τ
0 T 2T
И 3T 4T t
АД
Рис. 14. Временная диаграмма ШИМ
19
n n
n0 n0
0 МТР
тр М 0 МТР
тр М
а б
Рис. 15. Механические регулировочные характеристики электродвигателей:
а − при использовании схемы на рис.11; б − при использовании схемы на рис. 12
И
параллельны друг другу. Это обеспечивает большую «жесткость»
характеристик или меньшую зависимость числа оборотов от нагрузки при
малых моментах нагрузки на вал электродвигателя.
АД
Для управления мощностью (и скоростью вращения) электромотора
мы используем ШИМ-выход контроллера (вывод 9). Кроме него для ШИМ
можно также использовать следующие выводы платы Ардуино: D3, D5,
D6, D9, D10, D11.
Для управления шириной импульсов используем переменный
иб
20
Резистором R1 (см. рис. 16) изменяется ширина импульсов при
помощи подачи изменяющегося напряжения на аналоговый вход А0 платы
Ардуино. Сигнал ШИМ снимается с цифрового выхода платы D9 и
подается на ключевой полевой транзистор.
Код программы:
// Управление электродвигателем
int rPin = A0; // устанавливаем входную ножку для АЦП
unsigned int rValue = 0; // напряжение с переменного резистора
unsigned int pwmValue = 0;
void setup(){
Serial.begin(9600); // запуск монитора данных (для тестирования)
}
void loop(){
rValue = analogRead(rPin); // считываем значение с переменного
резистора
pwmValue = rValue/4; // делим это значение/4, получаем параметр
И
ШИМ
// или rValue = map(rValue, 0, 1023, 0, 255);
analogWrite(9, pwmValue); // Pin9 – выход ШИМ
АД
//Для вывода на дисплей (монитор) нижеследующие строки:
Serial.print(rValue, DEC); // вывод данных с резистора (0-1024)
Serial.print(" ");
Serial.print(pwmValue, DEC);
Serial.println(""); // перевод строки
иб
delay(200);
}
21
постоянным магнитом или электромагнитом. Чаще всего используется
изменение величины немагнитного зазора (рис. 17, а, поз.7).
Взаиморасположение элементов магнитной цепи датчика может быть
любым, лишь бы через них проходили силовые линии. В простейшем
случае датчик может регистрировать изменение магнитного поля при
движении магнита мимо него (рис. 17, б).
Эти изменения преобразуются датчиком в электрические импульсы, а
затем электронная схема устройства подсчитывает частоту или период
импульсов и отображает скорость вращения в числовой или другой форме.
Рассмотрим три вида датчиков:
1. Индукционный (см. рис. 17, а).
2. Датчик Холла (см. рис. 17, б).
3. Магниторезистивный.
На рис. 17, а показан индукционный датчик положения коленчатого
вала, расположенный вблизи зубчатого колеса 8, находящегося на
коленчатом валу; при вращении этого колеса его зубья проходят мимо
И
датчика и изменяют магнитное поле, создаваемое магнитом 2 с сердечником 5,
при этом в катушке 6 наводится переменное напряжение, являющееся
сигналом с датчика. Оно поступает в блок регистрации по кабелю 1.
АД
На рис. 17, б показан датчик Холла 1, который реагирует на
изменение магнитного поля при прохождении мимо него магнитных меток
на вращающемся диске. Такой датчик обычно используется для
определения скорости вращения колеса.
иб
С
а б
Рис. 17. Взаиморасположение магнитных датчиков и движущихся элементов
их магнитной цепи в автомобиле
22
Для согласования датчиков с микроконтроллером по амплитуде напря-
жения и выходному сопротивлению между ними устанавливают буферный
каскад усиления. Схемы включения датчиков представлены на рис. 18.
а б в
Рис. 18. Схемы включения датчиков:
а – индукционного; б – датчика Холла; в − магниторезистивного
И
общего применение LM358. Эти усилители работают при напряжении
питания от 3 до 30 В, широко используются в цифровой аппаратуре и
имеют низкую цену.
АД
Сигналы с датчиков и на выходах схем усилителей не являются
прямоугольными. Подача их на входы цифровых схем (счетчиков,
таймеров и т.п.) может привести к некорректной их работе. Для получения
прямоугольных импульсов из аналогового выходного сигнала его
необходимо подать на компаратор, имеющий гистерезис, например, на
иб
23
Сигнал поступает на вход «1» компаратора, сравнивается с
напряжением на движке переменного сопротивления R2, которое называют
пороговым. Если входное напряжение больше порогового, то на выходе
компаратора высокий потенциал «1», если меньше, то низкий «0». С
выхода «1» компаратора импульсы напряжения поступают на вход D-триггера
(микросхема 176ТМ2), собранного по схеме делителя частоты на 2.
Датчики для проведения экспериментов взяты из вентильных
(бесколлекторных двигателей постоянного тока) (рис. 20). Они по габари-
там в десять раз меньше автомобильных, но выдают примерно те же
сигналы.
И
а б в
24
Контрольные вопросы
И
Кинематическая схема стенда представлена на рис. 22. Она состоит из
цилиндра, в котором движется поршень. Он приводится в движение шатуном,
АД
шарнирно соединенным с маховым колесом. Колесо заставляет вращаться
ремень, натянутый на него, и шкивы на осях двух электродвигателей. Один из
электродвигателей является тяговым и заставляет двигаться ремень,
соединенные с ним колесо и вал второго электродвигателя. Этот электро-
двигатель приводит в движение поршень цилиндра и может моделировать
иб
25
Второй электродвигатель играет роль механической нагрузки,
возникающей в результате его электродинамического торможения. Эта
нагрузка будет регулироваться изменением омического сопротивления в
цепи его якоря.
К цилиндру прикручены два патрубка с впускным и выпускным
клапанами. Они открываются (пропускают воздух) при наличии разницы
давлений внутри цилиндра и снаружи его.
Фотографии стенда (модели ДВС) показаны на рис. 23.
Все устройства смонтированы на общее металлическое основание
(подставку). Кроме этого на фотографиях видны элементы крепления
датчиков скорости (датчика Холла и магниторезистивного), а на ободе
колеса имеются красные метки, которые показывают места, где
вмонтированы магниты.
И
АД
а
иб
С
б
Рис. 23. Фотографии механической части стенда: а − вид сбоку; б − вид сверху
26
3.2. Измерения скорости вращения махового колеса
И
U
АД
T 2T 4T t
0
а
U
иб
0 2T t
4T
б
С
27
Рис. 25. Платы усилителей и компаратора с делителем на 2
И
с датчика, представлен ниже. Для управления скоростью вращения, так же,
как и в предыдущем примере, используется переменный резистор,
напряжение с которого поступает на АЦП.
АД
Код:
//** Измерение скорости вращения
int rPin = A0; // устанавливаем входной штырек для АЦП
unsigned int rValue = 0; // цифровое значение напряжения с переменного
резистора
иб
}
void loop(){
rValue = analogRead(rPin); // считываем значение с переменного
резистора
rValue = //масштабируем
analogWrite(9, rValue); // Pin9 - выход ШИМ
time_us=pulseIn(10, HIGH); // Pin10 - вход изм. длительности импульса
//Для отладки нижеследующие строки
Serial.print(rValue, DEC); // вывод данных ШИМ
Serial.print(" ");
Serial.println(time_us); //длительность импульса
delay(200);
}
28
Здесь беззнаковая целая переменная rValue содержит число от 0 до
1023, она предназначена для хранения напряжения с переменного
резистора R1. Функция map(rValue, 0, 1023, 0, 255) преобразует диапазон
изменения этой переменной в диапазон 0 – 255, в котором изменяется
ширина импульсов ШИМ. При этом коэффициент заполнения импульсов
меняется от 0 до 1.
Беззнаковая длинная целая переменная time_us используется для
хранения длительности импульса, которая измеряется при помощи
функции pulseIn(10, HIGH). Для этого выходы 2 или 3 (рис. 26)
подключаются к цифровому входу D10 на плате Ардуино.
Второй вариант измерения периода вращения – с использованием
прерывания по цифровому входу. У Ардуино есть несколько входов для
внешних прерываний:
interrupt 0 – D3;
interrupt 1 – D2;
interrupt 2 – D0;
И
interrupt 3 – D1.
Входы для подключения сигналов, вызывающие эти прерывания,
показаны на плате Ардуино на рис. 26. Мы выбрали прерывание interrupt 0
АД
и должны подключить к D3 выход «1» с платы усилителей (см. рис. 25).
иб
С
29
Для измерения периода следования импульсов будем использовать
прерывание «0» при возникновении события появления нарастающего
фронта импульса на штырьке платы D3.
Программный код для этого случая приведен ниже:
//** Измерение скорости вращения
int rPin = A0; // устанавливаем входной штырек для АЦП
unsigned int rValue = 0; // цифровое значение напряжения с переменного
резистора
volatile unsigned long time_ms=0; // длительность периода импульсов
volatile unsigned long time; // новое время
volatile unsigned long otime; //старое время
void setup(){
Serial.begin(9600); // старт последовательного вывода данных
attachInterrupt(0, blink, RISING); // прерывание на цифровом входе 3 по
нарастающему фронту
}
И
void loop(){
rValue = analogRead(rPin); // считываем значение с переменного
резистора
АД
rValue = map(rValue, 0, 1023, 0, 255); //масштабируем
analogWrite(9, rValue); // Pin9 - выход ШИМ
//Для отладки нижеследующие строки:
Serial.print(rValue, DEC); // вывод данных ШИМ
Serial.print(" ");
иб
изменяются
{
time = millis();
time_ms = time - otime;
otime = time;
}
Или:
unsigned long blink()
{
time = millis();
time_ms = time - otime;
otime = time;
return time_ms;
}
30
3.3. Датчик давления (разряжения) газа
И
третий способ измерения расхода воздуха – измерение коэффициента
наполнения цилиндра.
Расхода воздуха по величине разряжения определяется с помощью
АД
дроссельных устройств − диафрагмы, сопла, трубки Вентури (рис. 27), а
также насадки со свободным входом, так называемой коноидальной
насадки [8]. Для измерения перепада давления применяют
дифференциальные манометры.
Связь между перепадом давлений на дроссельном устройстве и
иб
31
И
АД
а
иб
С
32
Для автомобильной промышленности выпускают большое разнооб-
разие датчиков давления воздуха. По каталогу немецкой фирмы Bosch
датчики давления имеют диапазон измерения давлений Р1 = 10 – 50 кПа;
Р2 = 115 – 300 кПа. Выходное напряжение от 0,3 до 4,8 В.
На рис. 28 представлен один из выпускаемых фирмой Bosch датчиков
и его выходная характеристика.
И
АД
Рис. 28. Датчик давления и его выходная характеристика
33
Этот датчик имеет малые габаритные размеры 30х30х8 мм, линейную
выходную характеристику. Он является интегрированным, то есть в
корпусе с чувствительным элементом расположена интегральная микро-
схема, обеспечивающая выходное напряжение, согласованное с входом
микроконтроллера, термокомпенсацию и линейность характеристик.
Основные технические характеристики датчика:
Термокомпенсация в диапазоне 0 – 85 оС.
Диапазон измерения давления 15 – 115 кПа.
Максимальная ошибка измерений 1,5%.
Максимальное давление 400 кПа.
Диапазон измерения выходного напряжения 0,2 – 4,8 В.
Чувствительность 46 мВ/кПа.
Напряжение питания 5,1 В, ток 7 мА.
На рис. 30 представлена зависимость напряжения на выходе датчика
от давления газа.
И
АД
иб
С
34
3.4. Измерение коэффициента наполнения цилиндра
И
АД
иб
а б
35
На рис. 33 показана кривая изменения давления во впускном
коллекторе после дроссельной заслонки от времени за один цикл движения
поршня в цилиндре макета.
И
АД
Рис. 33. Разбиение площади над кривой графика
функции давления на n участков
Gвцикл = K , (3)
или
Gвцикл = K , (4)
36
Gвцикл = K’ • , (5)
где K’ = К Δt.
Вычисление расхода воздуха по формуле (5) можно сделать
программно. При этом контроллеры Адруино позволяют получить число
отсчетов за цикл n около 1000, т. е. обеспечить очень высокую точность.
Теоретические зависимости между массой засосанного воздуха (или
коэффициентом наполнения цилиндра) и этими давлениями и скоростями
довольно сложны, но нам требуются относительные диапазоны изменения
параметра, пропорционального массе засосанного воздуха, который мы
перенесем на диапазон изменения параметра, регулирующего массу
впрыскиваемого топлива (например, функцией map()). В случае учета
нелинейности нам потребуются корректирующие коэффициенты, а также
коэффициенты, учитывающие влияние внешних факторов (температуры,
атмосферного давления и т.п.). Эти коэффициенты могут быть заданы
аналитически или в виде таблиц, сохраняемых в EEPROM контроллера.
На рис. 34 показаны упрощенные кривые зависимости величины
И
сигнала с датчика давления от времени (убраны помехи и колебания
давления из-за турбулентности, амплитуда которых около 0,5 В) при
АД
изменении скорости вращения и положения дроссельной заслонки.
иб
С
37
Схема электрическая принципиальная для превращения сигналов с
датчика давления в прямоугольные импульсы представлена на рис. 35. По
этим импульсам можно точно определить моменты времени открывания и
закрывания клапанов.
И
Датчик и плата компаратора устанавливаются на входном патрубке
цилиндра (рис. 36), обеспечивая тем самым минимальный объем воздуха в
АД
патрубке между дросселем и впускным клапаном цилиндра.
иб
С
38
задаются коэффициентом наполнения цилиндра. По определению, этот
коэффициент определяется следующим образом:
Совершенство процесса наполнения оценивается коэффициентом
наполнения ηV, равным отношению количества свежего заряда,
находящегося в цилиндре, к началу действительного сжатия, то есть к
моменту закрытия органов газообмена, к тому количеству свежего заряда,
которое могло бы заполнить рабочий объем цилиндра при условиях на
впуске [7].
ηV = Gk.cж = , (6)
Vh ρk
И
АД
иб
39
Для определения моментов прохождения нижней мертвой точки
установлена кнопка и собрана схема (рис. 38). Достигая нижней мертвой
точки, поршень замыкает кнопку SW1.
Это соответствует нарастающему фронту импульсов на выходе Uвых2
(см. рис. 38).
Зная перечисленные моменты времени, коэффициент наполнения
цилиндра можно определить как
И
на π рад).
T = ΔT1 + ΔT2; ηV = 1 при ΔT1 = 0 или ΔT2 = Т.
АД
иб
С
40
И
АД
Рис. 39. Временные диаграммы напряжений
Код:
//** Измерение коэффициента наполнения цилиндра
/* Используемые штырьки:
А0 – вход с переменного резистора,
С
41
unsigned int rValue = 0; // цифровое значение напряжения с переменного
резистора
void setup() {
pinMode(2, INPUT);
pinMode(3, INPUT);
Serial.begin(9600); // старт последовательного вывода данных
pi= 3,14;
}
void loop() {
rValue = analogRead(rPin); // считываем значение с переменного
резистора
rValue = map(rValue, 0, 1023, 0, 255); //масштабируем
analogWrite(9, rValue); // Pin9 - выход ШИМ
cycleT = pulseIn(10, HIGH); // Pin10 – с выхода делителя на 2 (см. рис. 25)
deltaT1 =pulseIn(2, HIGH);
deltaT2 =pulseIn(3, HIGH);
И
hpT = deltaT1+deltaT2;
if(cycleT < 3*hpT)
{
АД
Serial.print("Error!!!");
}
else
{
knc = (1-cos(pi* deltaT2 / hpT))/2;
иб
}
speedR = 60000 / cycleT;
//Вывод на монитор
Serial.print("Speed = "); // скорость вращения
С
Serial.print(speedR);
Serial.print(", Koef.nap.cil = ");
Serial.println(knc); //коэффициент наполнения цилиндра
delay(100);
}
42
3.5. Система управления скоростью с помощью дроссельной заслонки
Водитель осуществляет плавное управление скоростью движения
автомобиля (мощностью двигателя) нажатием на педаль газа или
отпусканием её. При этом поворачивается дроссельная заслонка и
изменяется количество воздуха, поступающего в цилиндры ДВС.
Электронный блок управления по сигналам с датчиков расхода воздуха,
положения дроссельной заслонки, скорости вращения коленчатого вала,
температуры воздуха и охлаждающей жидкости оценивает количество
поступившего в цилиндры кислорода и определяет дозу топлива, которую
нужно впрыснуть через форсунки, задавая время, в течение которого они
должны быть открыты.
Процесс, аналогичный описанному процессу управления скоростью,
на нашей модели можно осуществить следующим образом:
С помощью резистора, который использовался для регулирования
скорости вращения электродвигателя, устанавливаем минимальные
обороты «холостого хода». При этом получаем начальную величину
И
параметра ШИМ сигнала, подаваемого на электродвигатель, вращающий
маховик, приводящий в движение поршень.
АД
Изменением площади отверстия дросселя поворотом винта (см. рис.
32, б) регулируем подачу воздуха в цилиндр. Его относительное
количество оценивается за один цикл по формуле (5) или по формуле (7).
Причем по формуле (5) можно рассчитать подачу воздуха, если известна
функция зависимости площади сечения отверстия дросселя от сигнала с
иб
43
воздух, который быстро смешивается с топливом, образуя
топливовоздушную смесь [7, 8].
И
В себе датчик содержит два элемента: чувствительный и вторичный
(рис. 40). Принцип работы чувствительного элемента очень напоминает то,
как работает датчик Холла, он также реагирует на изменение магнитного
АД
поля. Что касается вторичного элемента, то он включает в себя выходной
каскад, операционный усилитель и мостовую схему. Выходной каскад
сделан по типу открытого коллектора. Датчик фаз выполняет такую
работу, как определение такта для цилиндра номер 1, с помощью
распределительного вала определяет, какой клапан отрыт и какая фаза
иб
44
На рис. 42 показана схема системы управления Мотроник
(DI-Motronic-Systems) для безнаддувного ДВС со свободным впуском,
λ = 1 [9].
На ней цифрами обозначены устройства и датчики, перечисленные
ниже. В скобках даются соответствующие термины на немецком языке, так
как дается ссылка на книгу немецкого издания:
1. Бачок с активированным углем (Aktivkohlebehalter).
2. Термоанемометрический плёночный расходомер (массы) воздуха (Heiß-
film Luftmassenmesser).
3. Дросселирующее устройство (Drosselvorrichtung (EGAS)).
4. Клапан вентиляции топливного бака (Tankentluftungsventil).
5. Датчик давления во впускном коллекторе (Saugrohrdruck-sensor).
6. Датчик нагрузки при движении (Ladungs bewegungs klappe).
7. Насос высокого давления (Hochdruckpumpe).
8. Клапанная форсунка высокого давления (Rail mit Hochdruck-Einsprit-
zventil).
И
9. Регулятор кулачковый [распределительный вал] (Nockenwellen verstel-
ler).
10. Катушка зажигания, свеча зажигания (Zündspule mit Zündkerze).
АД
11. Датчик фаз (Nockenwellen Phasen sensor).
12. Датчик кислорода (Lambda-Sonde (LSU)).
13. Блок управления Motronic (Motronic Steuergerat).
14. Клапан рециркуляции ОГ (Abgasruckfuhrventil).
15. Датчик частоты вращения (Drehzahlsensor).
иб
45
И
АД
иб
С
46
Диапазон времени открывания форсунок показан на рис. 43.
И
АД
иб
47
int hpT;
double knc; //коэффициент наполнения цилиндра
float pi; //число пи
int cycleT; // время одного цикла хода цилиндра.
float speedR;
unsigned int rValue = 0; // цифровое значение напряжения с переменного
резистора
int val;
int valknc;
void setup(){
pinMode(2, INPUT);
pinMode(3, INPUT);
Serial.begin(9600); // старт последовательного вывода данных
pi= 3,14;
}
void loop(){
И
rValue = analogRead(rPin); // считываем значение с переменного
резистора
rValue = map(rValue, 0, 1023, 0,100); //холостой ход
АД
val = rValue+valknc;
analogWrite(9, val); // Pin9 - выход ШИМ
cycleT = pulseIn(10, HIGH); // Pin10 – с выхода делителя на 2 (см. рис. 25)
deltaT1 =pulseIn(2, HIGH);
deltaT2 =pulseIn(3, HIGH);
иб
hpT = deltaT1+deltaT2;
if(cycleT < 3*hpT)
{
Serial.print("Error!!!");
С
}
else
{
knc = (1-cos(pi* deltaT2 / hpT))/2;
}
valknc =knc*200; // добавка «газа»
speedR = 60000 / cycleT; // скорость вращения
//Вывод на монитор
Serial.print("Speed = ");
Serial.print(speedR);
Serial.print(", Koef.nap.cil = ");
Serial.println(knc); //коэффициент наполнения цилиндра
delay(100);
}
48
Контрольные вопросы
1. Зачем необходимо точно дозировать топливо?
2. Какие имеются способы определения количества воздуха, засосанного в
цилиндр?
3. Что такое коэффициент наполнения цилиндра?
4. Как определить коэффициент наполнения цилиндра, зная моменты
открытия и закрытия клапанов на макете ДВС?
5. Как измеряется расход воздуха при помощи датчика массового расхода
воздуха?
6. Как измеряется расход воздуха с помощью датчика давления?
7. Каков принцип работы системы подачи топлива в ДВС с коррекцией по
датчику кислорода?
8. Зачем используются два датчика кислорода?
9. Зачем нужен датчик фаз?
И
Схема электрическая структурная состоит из ряда блоков, которые
выполнены на отдельных платах. Все блоки собираются при помощи
АД
соединительных проводников с разъемами в единую систему управления
дозированием топлива, которая задает время открытия форсунки (рис. 44).
Управление
электродви- D10 A1 D11 Силовой блок
гателем А0 Плата Ардуино D9 электородвигате-
(холостой ля тяги (ШИМ) и
ход) Порт в/в D8
электродвигатель
нагрузки
Индикатор
впрыска
49
Пропорционально величине этого времени изменяется длительность
импульсов ШИМ, подаваемых на электродвигатель, приводящий в
движение поршень цилиндра. Это электродвигатель тяги, моделирующий
увеличение мощности ДВС при увеличении дозы топлива, подаваемой в
цилиндры.
Для начала процесса моделирования работы ДВС необходимо
установить дроссельное устройство с минимальным диаметром отверстия.
Затем при помощи переменного резистора, управляющего шириной
импульсов ШИМ, задать начальную длительность импульсов ШИМ –
начальные обороты двигателя – обороты холостого хода, при которых
двигатель устойчиво работает с минимальной частотой вращения (без
рывков и остановок). Нужно записать эту начальную скорость вращения
маховика. Затем заменить дроссельное устройство – поставить дроссель с
большим диаметром. Зарегистрировать увеличение скорости вращения
маховика. Проделать это со всеми дросселями, демонстрируя тем самым,
как изменяются параметры при управлении ДВС с помощью педали газа.
И
5. СХЕМА ЭЛЕКТРИЧЕСКАЯ ПРИНЦИПИАЛЬНАЯ
маховика.
С
50
С датчика давления (DA3) на Ардуино поступает аналоговый сигнал,
затем он преобразуется в импульсы компаратором (DA2-2).
Скорость вращения электродвигателя М1 задается переменным
резистором R17. Механическая нагрузка изменяется резистором R18,
включенным в цепь якоря электродвигателя М2.
И
распространения пламени и уменьшение вероятности возникновения
детонации. С увеличением частоты вращения коленчатого вала увели-
чивается содержание остаточных газов в рабочей смеси, что снижает
АД
интенсивность предпламенных процессов и приводит к снижению
детонации.
Уменьшение нагрузки сопровождается прикрытием дроссельной
заслонки, вследствие чего давление и температура заряда в конце процесса
сжатия снижаются, а коэффициент остаточных газов увеличивается. Кроме
иб
51
6.1. Индикаторная диаграмма
И
АД
иб
С
52
Теоретическая (пунктир) и действительная (сплошные линии)
индикаторные диаграммы 4-тактного карбюраторного двигателя: ra −
линия впуска; ac − линия сжатия; cz − линия сгорания; zb − линия
расширения; br − линия выпуска; P − давление; V − объём.
Снимая ИД при различных углах ОЗ, можно установить оптимальный
режим работы ДВС. ИМ данного двигателя различна на разных режимах
его работы. Зависимость ИМ от частоты вращения называется скоростной
характеристикой. Чтобы построить скоростную характеристику ИМ,
снимают индикаторные диаграммы на различных частотах вращения.
Датчик давления устанавливается на свече зажигания (рис. 47), что
обеспечивает одновременное создание искры и измерение быстропере-
менного давления в камере сгорания двигателей. Датчик давления работает
с усилителем сигнала.
И
АД
иб
53
поля при изменении немагнитного зазора (см. рис. 17), а также датчики
Холла, реагирующие на величину магнитного поля, в которое они
помещены. При прохождении мимо датчика магнита на выходе появляется
напряжение.
И
– MAP-sensor), применяется во всех системах управления двигателем, где
не используется термоанемометрический датчик массового расхода
воздуха.
АД
Расположение датчика давления и платы сопряжения показано на
рис. 48.
иб
С
54
6.3. Датчик детонации
И
кольцу 2 за счет своей деформации.
АД
иб
С
55
а б
И
размах не превышал напряжения питания 5 В. Затем этот сигнал подается
на ждущий мультивибратор, собранный на логических элементах 2 «И»
(DD1.1 – DD1.3), затем через инвертор DD1.4 поступает на выход.
АД
На выходе Вых2 формируется одиночный импульс положительной
полярности. Длительность импульса регулируется переменным
сопротивлением R3. Она должна превышать длительность затухающих
колебаний с датчика. Этот импульс зажигает светодиод VD3,
сигнализирующий о появлении детонации.
иб
56
Результаты моделирования могут быть сохранены в файле на флеш-
карту и распечатаны на принтере.
И искры
АД
Рис. 51. Структурная схема модели системы зажигания
57
Преобразованный в импульсы компаратором сигнал поступает на
цифровой вход Ардуино.
И
АД
иб
58
6.6. Алгоритм программы
И
обкатываются при работающем ДВС на всех режимах в течение
длительного времени. При этом ищутся алгоритмы управления УОЗ,
обеспечивающие выполнение экологических требований по вредным
АД
выбросам и экономию топлива. Фактически работа на богатой или бедной
топливовоздушной смеси не допускается. Состав смеси для норм
токсичности Евро-3 и Евро-4, которые хотят ввести в России, должен быть
в пределах 0,99−1,01, т. е. с допуском ±1% на всех стационарных режимах
работы двигателя. Допускается кратковременное отклонение от этих
иб
59
топливовоздушной смеси, от степени турбулизации потока в камере
сгорания ДВС и других параметров. Математические модели процессов,
происходящих при горении топлив, требуют значительного машинного
времени для расчета параметров и неприемлемы для современных
электронных блоков управления двигателем внутреннего сгорания, так как
требуют применения мощных процессоров, что приведет к значительному
удорожанию ЭБУ. Поэтому используется более простой алгоритм,
определяющий УОЗ топливной смеси по таблицам, записанным в
микросхему постоянного запоминающего устройства, находящуюся
внутри ЭБУ. Эти таблицы заполняются при испытаниях двигателей на
заводе-изготовителе.
Угол опережения зажигания для конкретного двигателя внутреннего
сгорания (ДВС) и вида топлива обычно определяется следующими путями:
1. Длительными стендовыми испытаниями по определению угла
опережения зажигания на всех режимах его работы как на стационарных,
так и на переходных режимах при поставленных начальных условиях.
И
Этими условиями могут быть максимальные значения крутящего момента
и мощности двигателя или минимальный расход топлива с учетом
отсутствия детонации на всех режимах работы ДВС. Обычно
АД
определяются обе эти характеристики и используются в зависимости от
условий движения, нагрузки автомобиля и манеры езды конкретного
водителя.
2. Для первого приближения углы опережения зажигания могут быть
взяты с аналога данного ДВС с последующей коррекцией в процессе
иб
доводочных работ.
3. Углы опережения зажигания могут быть определены также
расчетным путем, если известна скорость горения топливовоздушной
смеси в различных условиях, которые реализуются на конкретном ДВС.
С
60
В научных статьях, где рассматриваются эти теоретические вопросы,
формулы для вычисления УОЗ и других параметров имеют общий вид. Их
невозможно вставить в алгоритм программы для вычисления численных
значений величин.
Этот путь достаточно сложен, так как нет полной теории определения
скорости горения в различных условиях, поэтому в данном случае
требуются соответствующая проверка и корректировка углов опережения
зажигания в процессе испытаний ДВС.
4. Пересчетом угла опережения зажигания, полученного при
проведении испытаний, с одного вида топлива на другое в зависимости от
скорости их сгорания в воздушной среде при различных составах смеси,
температурах и давлениях с последующей корректировкой при
доводочных работах.
Как видно, все эти варианты требуют проведения дополнительных
специальных испытаний.
Разработанная нами модель ДВС имеет все необходимые датчики, а в
И
качестве электронного блока управления (ЭБУ) для обработки сигналов с
датчиков и управления исполнительными механизмами служит контроллер
Ардуино. Через него система подключается к ноутбуку.
АД
Основное достоинство разработанной модели и системы управления в
том, что они позволяют сравнить несколько вариантов вычисления угла
опережения зажигания в различных режимах работы (при изменении
скорости, нагрузки) и отработать алгоритмы и программы управления в
учебной аудитории.
иб
61
вносимого угла составит половину от выставленного, а при 5000 об/мин и
на более высоких частотах вращения корректор перестаёт вносить
коррекцию и выходной УОЗ остается без изменений.
0,5
И
1. Начальное значение УОЗ = 10−12о – режим холостого хода.
2. При увеличении скорости вращения маховика от оборотов
АД
холостого хода до максимальных УОЗ увеличивается линейно на 20о. При
этом используются сигналы с датчика скорости.
3. При увеличении механической нагрузки на ДВС (увеличении
мощности) и нажатии на педаль газа (увеличении размеров отверстия
дросселя) УОЗ увеличивается на 0 – 20о пропорционально уменьшению
иб
62
Начало Прерывание от
детонации
Объявление глобальных
переменных
УОЗ =+5
Секция set()
Настройка:
1.Последовательного порта Количество циклов.
2.Внешних прерываний Счетчик циклов вкл.
3.Портов ввода/вывода
Возврат
Цикл Прерывание от
Loop() детонации
Регистрация импульсов с
датчиков скорости и давл.
Проходит
ВМТ ?
Нет
И
АД
Да
Измерение давления.
Определение минимума Р
иб
Нет
Проходит
НМТ ?
С
Да
Вычисление УОЗ
Уменьшение УОЗ на 1О
63
Если было прерывание, уменьшаем счетчик циклов и УОЗ. Определяем
время подачи искры, включаем светодиод индикации детонации,
возвращаемся в начало цикла loop().
Один из вариантов программного кода управления УОЗ для
контроллера Ардуино представлен ниже.
И
давления
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); // высчитываем
С
65
Контрольные вопросы
Библиографический список
И
Петербург, 2015. − 336 с.
2. Карвинен, Теро. Делаем сенсоры: проекты сенсорных устройств на
базе Arduino и Raspberry Pi / Теро Карвинен, Киммо Карвинен, Вилле
АД
Валтокари ; пер. с англ. − М. : ООО «И.Д. Вильямс», 2015. − 432 с.
3. Петин, В.А. Проекты с использованием контроллера Arduino /
В.А. Петин. − СПб. : БХВ-Петербург, 2014. − 400 с.
4. Соммер, У. Программирование микроконтроллерных плат
Arduino/Freeduino / У. Соммер. − СПб. : БХВ-Петербург, 2012.− 256 с.
иб
66