Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование микроконтроллеров AVR. Учебное пособие.pdf
Скачиваний:
0
Добавлен:
08.09.2026
Размер:
2 Мб
Скачать
☆
Если выходное напряжение рассмотренного формирователя импуль­сов подать на логический элемент триггер Шмитта, то фронты становятся максимально крутыми. Ввод прямоугольного импульса в микроконтрол­лер можно осуществлять по возрастающему фронту.
Для дальнейшей обработки сигналов с формирователя импульсов можно использовать таймеры/счетчики микроконтроллера. Для получения результата требуется определить количество импульсов за определенное время (за 1 с), а затем рассчитать период и скорость вращения с учетом числа зубцов на валу ротора.
Описание работы программы. Блок-схемы алгоритмов
Блок-схема алгоритма основной программы остается неизменной, та­кой же, как и в п. 4.1. Измерение скорости вращения ротора производится в режиме бесконечного цикла, как это показано в блок-схеме алгоритма основной программы (рис. 4.2).
Процесс измерения скорости вращения ротора необходимо проводить за строго определенный контролируемый промежуток времени (1 с), ко­торый формируется с помощью 16-разрядного таймера/счетчика ТС1.
Блок-схема алгоритма п/программы обработки прерывания таймера ТС1 представлена на рис. 4.29.
При тактовой частоте процессора, равной 4 МГц, промежутки време­ни длительностью 1 с можно отсчитывать с помощью таймера/счетчика ТС1 с предделителем 64: 4 МГц / 64 = 62,5 кГц (Т = 1/62,5 кГц = 16 мкс), тогда Т = 1 с = 16 мкс · 62500 имп. В режиме OVERFLOW код для реини­циализации равен 65536 – 62500 = 3036 в десятичной системе счисления, а в шестнадцатеричной системе – 0BDC.
В течение промежутка времени, равного 1 с, производится подсчет импульсов, поступающих с датчика скорости после формирователя. Эти импульсы подаются на счетный вход таймера ТС0, а в конце этого проме­жутка времени необходимо считывать полученный результат и обнулять счетчик для последующей счетной операции.
101
НАЧАЛО
Реинициализация
стартового значения
таймера/счетчика ТС1
Вычисление числа
оборотов ротора
ВОЗВРАТ
Перенос содержимого
счетного регистра TCNT0
в переменную speed
Вывод информации на
ЖКИ
Обнуление счетного
регистра TCNT0
Подсчет импульсов
датчика оборотов ротора
в счетном регистре
TCNT0
Нет
Да
Длительность
измерения
1 с
Рис. 4.29. Блок-схема алгоритма п/программы
обработки прерывания таймера ТС1
102
Фрагменты дополнительных кодов программы для измерения скоро­сти вращения с четырьмя зубцами на валу представлены ниже: фрагмент с определениями глобальных и локальных переменных (листинг 4.7.1), фрагмент п/программы обработки прерывания АЦП (листинг 4.7.2).
Листинг 4.7.1
#include <alcd.h>
#asm .equ _lcd_port=0x16; PORTD #endasm unsigned int speed=0; // speed - число импульсов с датчика за секунду unsigned int N=0; // N - число оборотов ротора в минуту unsigned char str1[16]; // строка для вывода результата
на ЖК-дисплей // подпрограмма (функция) вывода данных на ЖК-дисплей
void lcd_output(void) { sprintf(str1," n:%1i ob/min", N); // формат 1-й строки lcd_clear(); // очистка ЖК-дисплея lcd_gotoxy(0,0); // определение позиции для вывода 1-го символа 1-й строки ЖКИ lcd_puts(str1); // вывод 1-й строки }
Листинг 4.7.2
{
TCNT1H=0x0B; // реинициализация стартового значения счетчика TCNT1L=0xDC; // таймера_1 (BDC) speed=TCNT0; // перенос содержимого счетного регистра в переменную
103
TCNT0=0x00; // обнуление содержимого счетного регистра N=60*speed; // вычисление числа оборотов ротора в минуту // speed=0; lcd_output(); // вывод информации на ЖК-дисплей N=0;
}
После успешного завершения трансляции отлаженной программы в среде Code Vision AVR можно перейти к симуляции ее работы в про­граммной среде PROTEUS. Для этого требуется сначала подготовить файл Design-схемы для симуляции программы измерения переменного напря­жения, скриншот которого представлен на рис. 4.30, а затем загрузить в микроконтроллер симулятора сгенерированный при компиляции файл с расширением .cof.
Рис. 4.30. Скриншот файла Design-схемы для измерения скорости
При правильной настройке программы число оборотов вращения вала на ЖКИ должно совпадать с расчетными значениями.
104
4.8. ПОДГОТОВКА ПРОГРАММЫ
ДЛЯ ИЗМЕРЕНИЯ ТЕМПЕРАТУРЫ
При измерении температуры с помощью микроконтроллера AV R следу-
ет сначала выбрать первичный преобразователь (датчик) температуры, обес­печивающий выполнение условий, оговоренных в техническом задании.
Для такой задачи наиболее подходящим считается широко распро-
страненный интеллектуальный датчик DS18B20, который является цифро­вым измерителем температуры, с разрешением преобразования 9–12 раз­рядов и функцией тревожного сигнала контроля за температурой. DS18B20 способен обмениваться данными с микроконтроллером по одно­проводной линии связи, используя протокол 1-Wire. Диапазон измерения температуры составляет –55...+125 °C. Аппаратная конфигурация шины 1-Wire показана на рис. 4.31.
Рис. 4.31. Аппаратная конфигурация шины 1-Wire
В цепи между датчиком температуры DS18B20 и индикатором ЖКИ
микроконтроллер играет роль только приемопередатчика цифровых сигна­лов, поэтому для реализации подобной задачи вполне достаточно даже ре­сурсов микроконтроллеров класса ATiny.
105
Описание работы программы. Блок-схемы алгоритмов
Основная функция DS18B20 – преобразование температуры датчика в цифровой код. Разрешение преобразования задается 9, 10, 11 или 12 бит. Это соответствует разрешающей способности: 0,5 (1/2) °C, 0,25 (1/4) °C, 0,125 (1/8) °C и 0,0625 (1/16) °C. После включения питания по состоянию битов R0 и R1 в регистре конфигурации определяется уровень разрешения преобразования 9, 10, 11 или 12 бит. С увеличением разрядности повыша­ется время преобразования. Эта зависимость показана на рис. 4.32.
Рис. 4.32. Зависимость времени преобразования
от уровня разрешения
В зависимости от времени преобразования устанавливается время об­новления данных. Система согласно протоколу на подключенной линии связи 1-Wire определяет наличие датчика температуры. Если датчик при­сутствует, то считывается его цифровой код, по которому определяется уровень разрешения преобразования и информация о температуре t1.
Если t1 > 1000, то температура отрицательная, если нет, то – положи- тельная. Температура пересчитывается и периодически через определен­ное время выводится на ЖКИ.
Блок-схема алгоритма программы показана на рис. 4.33.
106
Инициализация
НАЧАЛО
Да
Нет
Датчик
найден
Анализ R0, R1 в
рег-ре конфигурац
Преобразование
температуры
Да
Нет
t1 > 1000
Температура
отрицательная
Температура
положительная
Вывод
результата
ВОЗВРАТ
Рис. 4.33. Блок-схема алгоритма программы
измерения температуры
Фрагменты дополнительных кодов программы для измерения темпе-
ратуры представлены ниже: фрагмент с определениями глобальных и ло-
107
кальных переменных (листинг 4.8.1), фрагмент программы, выполняемой в цикле (листинг 4.8.2).
Листинг 4.8.1
// Alphanumeric LCD functions #asm .equ __lcd_port=0x12 //PORTD #endasm #include <alcd.h> #include <stdio.h> #define DEL 250 //период обновления данных (в мс)
char buff [99]; //буфер дисплея unsigned char ds=0; unsigned int i=0; float t1=0,t=0;; unsigned char devices; //количество устройств на линии unsigned char RomCode[5][9]; //массив ром-кодов датчиков void lcd() { lcd_gotoxy(0,0); sprintf(buff," TEMP %.1f C ",t); // вывод lcd_puts(buff); // вывод на дисплей } void temp() { if(ds==0){ devices=w1_search( DS18B20_SEARCH_ROM_CMD,
RomCode );} //поиск датчиков на линии 1-wire если нет датчиков
if(devices==1) //если датчик есть { ds=0;
108
delay_ms(10); ds18b20_init( &RomCode[0][0], 30, 60, DS18B20_12BIT_RES ); //12 битный режим delay_ms(10); t1 = ds18b20_temperature( &RomCode[0][0] ); //считываем температуру if( t1 > 1000 ) //если температура минусовая { t1 = 4096 - t1; t1 = - t1; } if(t1!=-9999){ t = t1; } //отсекаем ошибки } }
Листинг 4.8.2
while (1) { i++; lcd(); delay_ms(1); if(i>=DEL){i=0; temp();} //вызываем с определенной периодичностью }
После успешного завершения трансляции отлаженной программы в среде Code Vision AVR можно перейти к симуляции ее работы в про­граммной среде PROTEUS. Для этого требуется сначала подготовить файл Design-схемы для симуляции программы измерения температуры, скриншот которого представлен на рис. 4.34, а затем загрузить в микроконтроллер си­мулятора сгенерированный при компиляции файл с расширением .cof.
109
Рис. 4.34. Скриншот файла Design-схемы
для измерения температуры
При правильной настройке программы показания температуры на ЖКИ
должны совпадать с показаниями прибора U2.
110
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]