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

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

1.Как определяется функция в языке программирования (синтаксис)?

2.Как вызывается функция в программе?

3.Какие типы переменных используются в языке программирования?

4.Какова разрядность аналогово-цифрового преобразователя (АЦП) в микроконтроллерах ATMega?

5.Как работает компаратор напряжения?

6.Каков принцип действия индукционного датчика?

7.Каков принцип действия фоторезистора в схеме делителя напряжения?

8.Каков принцип работы электрической схемы с датчиком Холла (см. рис. 17)?

3.ОПРЕДЕЛЕНИЕ ДОЗЫ ТОПЛИВА

СибАДИ3.1. Кинематическая схема стенда

Кинематическая схема стенда представлена на рис. 22. Она состоит из цилиндра, в котором движется поршень. Он приводится в движение шатуном, шарнирно соединенным с маховым колесом. Колесо заставляет вращаться ремень, натянутый на него, и шкивы на осях двух электродвигателей. Один из электродвигателей является тяговым и заставляет двигаться ремень, соединенные с ним колесо и вал второго электродвигателя. Этот электродвигатель приводит в движение поршень цилиндра и может моделировать работу сгоревшей в ц л ндре топливной смеси, количество которой считается пропорциональной току через о мотку якоря. Он моделирует сгоревшую в цилиндре топливную смесь, которая в реальном двигателе подается через форсунку и дозируется временем её открытого состояния. Аналогично мощность электродвигателя регулируется длительностью импульсов напряжения, подаваемых на обмотку якоря при использовании широтно-импульсной модуляции (ШИМ).

Рис. 22. Кинематическая схема стенда

25

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

К цилиндру прикручены два патрубка с впускным и выпускным клапанами. Они открываются (пропускают воздух) при наличии разницы давлений внутри цилиндра и снаружи его.

Фотографии стенда (модели ДВС) показаны на рис. 23.

Все устройства смонтированы на общее металлическое основание (подставку). Кроме этого на фотографиях видны элементы крепления датчиков скорости (датчика Холла и магниторезистивного), а на ободе колеса имеются красные метки, которые показывают места, где вмонтированы магниты.

СибАДИа

б

Рис. 23. Фотографии механической части стенда: а вид сбоку; б вид сверху

26

3.2. Измерения скорости вращения махового колеса

Для измерения скорости (частоты) вращения используют 2 способа: подсчитывают, сколько оборотов сделает вал за единицу времени (секунду или минуту), или определяют время одного оборота (период вращения). Частота и период связаны обратно пропорционально.

На маховом колесе вала находятся 2 магнитные матки, то есть за один оборот вала с магнитного датчика поступают 2 импульса на компаратор, а затем на делитель на 2. Их временные диаграммы показаны на рис. 24. Для измерения периода вращения вала можно также использовать два способа: 1) измерить период импульсов с датчика после компаратора и умножить его на 2; 2) измерить длительность импульса Т после делителя на 2 и также

умножить на 2. Время одного оборота равно 2Т.

Рис. 24. ВременныеСибАДИдиаграммы сигналов: а с датчика; б с выхода делителя на 2

 

 

U

 

 

 

 

 

 

 

 

 

 

 

t

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

 

T

 

2T

 

 

 

4T

 

 

U

 

 

 

 

а

 

t

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

 

 

2T

 

 

 

4T

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

б

 

 

Программно проще реализовать измерение длительности импульса. Для этого используется одна команда pulseIn(10, HIGH), где 10 – это номер штырька платы Ардуино, на который подаются импульсы, а HIGH определяет, что измеряется длительность импульса, а не паузы. Если нужно измерять длительность паузы, то вместо HIGH записывается LOW. Для импульсов после делителя на 2 длительности импульсов и паузы равны. Схемы компаратора и делителя на 2 реализованы на плате, представленной на рис. 25, где обозначены контакты для подключения датчиков и выводов платы Ардуино.

27

 

Рис. 25. Платы усилителей и компаратора с делителем на 2

резистора

СибАДИ

Программный код, реализующий измерение длительности импульсов с датчика, представлен ниже. Для управления скоростью вращения, так же, как и в предыдущем примере, используется переменный резистор, напряжение с которого поступает на АЦП.

Код:

//** Измерение скорости вращения

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

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

 

резистора

unsigned long time us=0;

// дл тельность периода импульсов

void setup(){

 

 

 

Serial.begin(9600);

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

}

 

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

 

 

 

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 – 1.

Входы для подключения сигналов, вызывающие эти прерывания, показаны на плате Ардуино на рис. 26. Мы выбрали прерывание interrupt 0 и должны подключить к D3 выход «1» с платы усилителей (см. рис. 25).

D

Рис. 26. Плата с Ардуино. Входы для внешних прерываний

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(){

void blink() // СибАДИВнутри функц и значения, возвращаемые millis(), не изменяются

rValue = analogRead(rPin); // считываем значение с переменного

 

резистора

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

analogWrite(9, rValue); // Pin9 - выход ШИМ

//Для отладки нижеследующие строки:

Serial.print(rValue, DEC);

// вывод данных ШИМ

Serial.print(" ");

 

Serial.println(time ms);

//дл тельность импульса

delay(200);

 

}

 

{

time = millis(); time_ms = time - otime; otime = time;

}

Или:

unsigned long blink()

{

time = millis(); time_ms = time - otime; otime = time;

return time_ms;

}

30

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