Курсовая работа на тему: «Применение микроконтроллеров Atmel в системах автоматического регулирования температуры»

У нас на сайте представлено огромное количество информации, которая сможет помочь Вам в написании необходимой учебной работы. 

Но если вдруг:

Вам нужна качественная учебная работа (контрольная, реферат, курсовая, дипломная, отчет по практике, перевод, эссе, РГР, ВКР, диссертация, шпоры...) с проверкой на плагиат (с высоким % оригинальности) выполненная в самые короткие сроки, с гарантией и бесплатными доработками до самой сдачи/защиты - ОБРАЩАЙТЕСЬ!

Курсовая работа на тему: «Применение микроконтроллеров Atmel в системах автоматического регулирования температуры»

Содержание

Введение.......................................................................................................... 3

1   Анализ технического задания....................................................................... 4

Блок микроконтроллера............................................................................... 7

1.2        Блок объектов управления.................................................................. 12

1.2.1    Источник питания.......................................................................... 12

1.2.2    Вентилятор..................................................................................... 13

1.2.3    Лампа............................................................................................. 13

1.2.4    Нагревательный элемент................................................................ 14

2   Разработка алгоритма взаимодействия с объектом управления.................. 22

2.1   Интерфейс общения с объектом управления........................................ 22

2.2   Измерение температуры....................................................................... 22

2.3   Регулирование температуры................................................................. 24

3   Разработка ПО............................................................................................. 25

Заключение.................................................................................................... 26

Список использованных источников............................................................. 28

Приложение А................................................................................................ 29

Введение

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

В данной курсовой работе рассматриваются следующие вопросы:

 

    практической реализации цифровых систем автоматического регулирования температуры на базе микроконтроллеров Atmel;

    теоретические основы и практическая реализация алгоритмов измерения температуры при помощи терморезистора.

Цель работы заключается в усвоении методики реализации цифровых систем автоматического регулирования температуры на базе микроконтроллеров Atmel.

1 Анализ технического задания

Исходя из технического задания, требуется реализовать механизм цифрового регулирования температуры. Исходными компонентами служат два блока: блок микроконтроллера и блок объектов управления. Исходя из этого, технические требования будут следующие:

    использование микроконтроллера фирмы Atmel;

    отображение показаний с датчика температуры (терморезистор);

    отображение показаний с датчика скорости вентилятора;

    цифровое управление лампой подогрева - 3 режима мощности и выкл.»;

    цифровое управление скоростью вращения вентилятора;

    задание необходимой температуры с помощью кнопок.

 

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

 

Рисунок 1.1 - Структура вычислительного комплекса в режиме управления объектом

Функциональная схема системы автоматического регулирования (САР) температуры объекта, используемой в курсовом проекте, приведена на рисунке 1.2. При помощи внешних устройств ПК можно задавать уставку температуры, закон изменения температуры или менять температуру произвольным образом, выбирать нужный режим работы системы. Таким

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

Задающее устройство формирует уставку Gp, с которой сравнивается текущее значение выходного сигнала датчика Ys. Сигнал Fp на выходе устройства сравнения поступает на вход автоматического регулятора.

Автоматический регулятор формирует заданный закон регулирования. Сигнал с выхода автоматического регулятора Up поступает на вход усилителя.

Усилитель обеспечивает передачу требуемого уровня электрической энергии Wэл на нагреватель (элемент омического сопротивления).

Датчик температуры, установленный на нагревателе, преобразует неэлектрическую величину в виде температуры в электрическую величину в виде напряжения. Это напряжение преобразуется аналого-цифровым преобразователем в цифровой код Ys, который поступает на устройство сравнения.

Формирователь возмущений служит для имитации внешних воздействий, приводящих к уменьшению или увеличению температуры объекта. При включении вентилятора температура объекта при отсутствии регулирования будет уменьшаться за счет интенсивного обдува поверхности потоком воздуха, что приводит к более интенсивному выносу тепловой энергии с поверхности объекта. Вентилятор имеет датчик частоты вращения, что позволяет уменьшать или увеличивать частоту нужным образом. При включении зеркальной лампы поток ИК-излучения вызывает нагрев поверхности объекта. Включение производится при помощи одного из трех реле, в силовые цепи которых включены резисторы разного номинала. Это позволяет задать 3 различных уровня мощности излучения.

Преобразуем функциональную схему (рисунок 1.2), исключив источники возмущений и внешние устройства ПК (рисунок 1.3). Далее перейдем к структурной схеме (рисунок 1.4).

 

Рисунок 1.2 – Функциональная схема САР температуры с источниками возмущения

 

Рисунок 1.3 – Функциональная схема САР температуры, используемая в курсовой работе

 

Рисунок 1.4 – Структурная схема САР темературы

Блок микроконтроллера

Блок   микроконтроллера  представляет  собой   покупное   устройство фирмы Mikroelectronica [1]. Внешний вид блока представлен на рисунке 1.5.

Рисунок 1.5 – Блок микроконтроллера с установленными модулями Данный блок имеет модульную структуру, в состав которой входят

следующие модули:

 

    материнская плата;

    набор тактовых кнопок (86 штук);

    набор светодиодных двоичных индикаторов;

    модуль программирования микроконтроллера;

    порты ввода-вывода;

    порт для подключения IBM-совместимой клавиатуры;

    порты UART,

    Кроме того, имеются съемные модули:

    модуль микроконтроллера (рисунок 1.6);

    модуль жидкокристаллического знакосинтезирующего дисплея;

    модуль жидкокристаллического графического дисплея;

    модуль сенсорного экрана (для графического дисплея);

    модуль часов реального времени.

Рисунок 1.6 – Модуль микроконтроллера AVR Электропитание блока может осуществляться от порта USB, либо от

внешнего источника питания.

 

Для выполнения поставленной задачи необходимы следующие модули:

 

    материнская плата;

    набор тактовых кнопок;

    модуль программирования микроконтроллера;

    порты ввода-вывода;

    модуль микроконтроллера;

    модуль жидкокристаллического монохромного текстового дисплея;

    тактовые кнопки.

В имеющемся блоке установлен модуль микроконтроллера Atmel ATmega128 [2]. Данный MK имеет следующие характеристики:

    8-разрядное ядро с архитектурой RISC;

    FLASH-память 128 Кбайт;

    максимальная частота процессора – 16 МГц;

    оперативная память – 4 Кбайт;

    53 линии ввода/вывода;

    8 линий внешних прерываний;

    8 каналов 10-разрядного АЦП;

    4 таймера (один 16-разрядный);

    7 каналов ШИМ;

    2 канала для захвата внешних событий (для таймера);

    напряжение питания от 2,5 до 5,5 В;

    диапазон температур: от минус 40 до 85 °С.

 

Функциональное назначение выводов МК приведено на рисунке 1.7.

 

Таким образом, можно сделать вывод, что данный микроконтроллер обладает всеми необходимыми функциями и периферийными устройствами для решения поставленной задачи.

Аналого-цифровой преобразователь, как отмечалось ранее, имеет разрядность 10 бит и отдельные линии для подключения источника опорного напряжения и источника питания самого АЦП. Однако в данном блоке эти линии соединены с шиной питания микроконтроллера, что впоследствии может сказаться на точности измерения температуры.

Рисунок 1.7 – Назначение выводов МК Atmega128

Кнопки представлены в виде матрицы (рисунок 1.5), однако каждая кнопка соединена с каждой линией ввода/вывода. Общие контакты кнопкой можно подключить либо к шине питания, либо к общей шине при помощи соответствующего джампера. Таким образом, для ввода информации при помощи кнопок можно использовать любой порт. Однако, для простоты реализации, для чтения информации с кнопок будем использовать линии прерывания, т. к. их более чем предостаточно.

Для передачи данных между микроконтроллерами или между микроконтроллером и ПК используются стандартные интерфейсы передачи данных. Одним из таких интерфейсов является универсальный синхронно-

асинхронный          приёмопередатчик          –           USART          (Universal Synchronous/Asynchronous Receiver-Transmitter).

Для передачи данных по последовательному интерфейсу USART используются две линии связи: TX – передача, RX – приём, а также общий провод GND (рисунок 1.8). Интерфейс является последовательным. Это означает, что для передачи одного байта данных требуется 8 тактов времени, а на самом деле около 10 – 12 тактов, т. к. кроме данных передаётся ещё и служебная информация.

USART может работать в нескольких режимах. Во-первых, количество передаваемых бит данных варьируется от 5 до 9. Во-вторых, количество стоп- бит может быть 1, 1,5 или 2, однако, в микроконтроллере ATmega128 можно задать только 1 или 2 стоповых бита. В-третьих, интерфейс USART может аппаратно считать и передавать бит чётности или нечётности. И, конечно, можно настроить скорость работы USART. Данные настройки не синхронизируются между устройствами, поэтому два устройства должны быть одинаково сконфигурированы до момента начала работы.

Риcунок 1.8 – Функциональная схема подключения двух микроконтроллеров по интерфейсу USART

Были рассмотрены особенности блока микроконтроллера, теперь необходимо рассмотреть особенности блока объектов управления.

Блок     объектов     управления     представляет     собой     устройство (лабораторный стенд), в состав которого входит:

1.2         Блок объектов управления

    источник вторичного электропитания;

    защитные устройства;

    нагревательный элемент;

    термодатчик;

    вентилятор (охладитель);

    лампа накаливания (подогрев);

    схемы согласования.

 

Данный блок питается от промышленной сети 200 В/ 50 Гц.

 

1.2.1   Источник питания

Источник питания предназначен для питания переменным напряжением нагревателя и зеркальной лампы, а также для питания постоянным током вентилятора и остальных частей схемысопряжения. Схема источника питания изображена на рисунке 1.10.

Трансформатор выбран типа ТС-200К, на его первичную обмотку подается переменное напряжение от сети 220В 50 Гц через выключатель SA1.

 

Рисунок 1.10 – Источник питания

 

1.2.2   Вентилятор

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

1.2.3   Лампа

 

Лампа накаливания представляет собой мощную (200 Вт) галогеновую лампу. Мощность лампы регулируется с помощью коммутатора мощности (рисунок 1.11).

 

Рисунок 1.11 – Схема коммутатора мощности

 

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

1.2.4   Нагревательный элемент

Нагреватель, как основной объект управления, рассмотрим подробнее.

 

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

количество энергии, теряемой объектом за счет теплообмена с окружающей средой. Существуют различные способы подвода энергии к объекту: использование химической энергии, использование энергии, возникающей в процессе горения, использование электрической энергии. Наиболее часто в промышленности и в быту используется последний способ как наиболее безопасный, имеющий довольно высокий КПД и хорошо поддающийся управлению. Поэтому далее в качестве элементов подвода энергии к объекту, который необходимо нагреть, будем рассматривать электрические нагреватели (электронагреватели) [3].

Электронагреватель представляет собой элемент омического сопротивления, способный длительное время рассеивать значительную электрическую мощность. Рабочий элемент нагревателяобычно выполняют из проволоки с высоким удельным сопротивлением (обычно из нихрома), помещенную внутрь теплостойкого изолятора. Изолятор нужен для предотвращения поражения людей электрическим током и предотвращения замыкания электрической цепи на элементы конструкции объекта. Изолятор обычно выполняется из керамики или слюды, при низких температурах (не более 300 °С) – из фторопласта.

Мощность, рассеиваемая на элементе омического сопротивления R, определяется по формулам

Энергия W, выделяемая на элементе омического сопротивления R за время t, определяется по формуле:

 

𝑃 = 𝐼 ∗ 𝑈 = 𝐼2 ∗ 𝑅 =

 

где    I – ток через резистор R,

 

U – падение напряжения на резисторе R.

𝑈2

𝑅 ,

 

Энергия W, выделяемая на элементе омического сопротивления R за время t, определяется по формуле:

𝑊  = 𝑃 ∗ 𝑡

 

При питании от переменного синусоидального напряжения энергия W, выделяемая в течение доли полупериода напряжения, определяется по формуле:

𝑡1

При питании от напряжения постоянного тока при неизменной мощности энергия W пропорциональна времени, в течение которого к элементу сопротивления подводится мощность.

2 ∗ 𝜋 ∗

𝑡1

4 ∗ 𝜋 ∗ 𝑡

𝑊 = 𝑈𝑚 ∫ sin

𝑡2

𝑇/2     𝑑𝑡 = 𝑈𝑚 ∫ sin

𝑡2

𝑇        𝑑𝑡.

 

Значение t1 t2 можно выразить через период T, тогда формула (1.3) с учётом того, что t1=T/n, а t1=T/m, примет вид:

𝑇/𝑚

 

𝑊 = 𝑃𝑚 ∫ sin

𝑇/𝑛

 

Преобразуем выражение (1.4):

4 ∗ 𝜋 ∗ 𝑡

𝑇        𝑑𝑡.

 

𝑇/𝑚

4 ∗ 𝜋 ∗

𝑇                  4 ∗ 𝜋 ∗

𝑇/𝑚

𝑊 = 𝑃𝑚 ∫ sin

𝑇/𝑛

𝑇        𝑑𝑡 = 𝑃𝑚 4 ∗ 𝜋 (− cos

𝑇       ) 𝑇/𝑛

 

Схема   управления  нагревателем   представляется  собой   ключевую тиристорную схему (рисунок 1.12).

В качестве источника переменного напряжения выступает вторичная обмотка понижающего трансформатора. Управляемый выпрямитель собран на диодах VD1 и VD2 типа Д214 и тиристорах VS1 и VS2 типа КУ202Н. Включение тиристоровосуществляется усилителем тока на транзисторах VT1 и VT2 типа КТ315В и КТ814Гсоответственно. При единичном уровне сигнала HeatOn/Off транзистор VT1 открывается и открывает транзистор VT2. Резистор RБ1 имеет номинал сопротивления 2 кОм и мощность рассеивания 0,25 Вт, резистор RБ2 имеет номинал сопротивления 560 Ом и мощность рассеивания 0,5 Вт. Резисторы RS1 и RS2 имеют номинал сопротивления 100 Ом и мощность рассеивания 2 Вт.

Рисунок 1.12 – Схема управления нагревателем

Схема сопряжения с датчиком температуры изображена на рисунке 1.13.

 

Рисунок 1.13 – Схема сопряжения с датчиком температуры

 

Для получения напряжения, зависящего от температуры, терморезистор должен быть включен в измерительную схему. На практике используются потенциометрические и мостовые схемы. Достоинством потенциометрической схемы является ее простота, а недостатком – значительная погрешность вследствие пульсаций и дрейфа напряжения источника питания. Мостовая схема (рисунок 1.14) обеспечивает более высокую чувствительность, но требует наличия дифференциального усилителя для усиления сигнала с диагонали моста.

Рисунок 1.14 – Мостовая схема измерителя

В данном курсовом проекте используется потенциометрическая схема включения. Напряжение с терморезистора Ux, поступающее на МК, определяется из выражения

U    =       𝑅𝑇

T         𝑅д + 𝑅𝑇

∗ 𝑈𝑅𝐸𝐹 .

 

Для получения опорного напряжения используется параметрический стабилизатор на стабилитроне КС139 и резисторе RСТ номиналом 100 Ом и мощностью рассеивания 0,125 Вт. Конденсатор С1 емкостью 100 мкФ сглаживает пульсации напряжения питания. Резистор Rд номиналом 510 Ом и мощностью рассеивания 0,125 Вт включается в верхнее плечо делителя напряжения.

Для измерения температуры используется терморезистор ММТ-4 сопротивлением 4,7 кОм с отрицательным ТКС, т. е. при увеличении температуры его сопротивление уменьшается.

Сопротивление терморезистора при температуре 20 °С составляет 4,7 кОм. Терморезистор включается в нижнее плечо делителя напряжения.

Таким образом, получим структуру, изображенную на рисунке 1.16. Назначение выводов микроконтроллера ATmega128, используемых для связи со схемами сопряжения, приведено в таблице 1.1. Сигналы с выводов МК поступают на коннекторы, а далее по плоскому кабелю на разъем устройства сопряжения. Назначение контактов разъема приведено в таблице 1.2.

Таблица 1.1 – Выводы МК ATmega128, используемые для связи со схемами сопряжения.

 

С устройства сопряжения сигналы поступают на собственно объект управления. Назначение контактов разъема приведено в таблице 1.3.

 

Рисунок 1.16 – Обмен информацией между платой МК и объектом управления со схемами сопряжения

Таблица 1.2 – Контакты разъёма 2РМ22Б10Г1В1, используемые для связи с платой МК и для подачи питания от платы МК

 

Таблица 1.3 – Контакты разъёма ПЛ-8, используемые для связи с объектом управления

 

В данном разделе были рассмотрены блок микроконтроллера и блок объектов управления.

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

Блок объектов управления представляет собой лабораторный стенд с нагревателем в виде мощного резистора и датчиком его температуры, лампой подогрева и вентилятором. Кроме того,были рассмотрены и внутренние моду- ли данного блока: модуль питания, схемы согласования.

После знакомства с вычислительным комплексом можно перейти к разработке и реализации алгоритмов управления.

2   Разработка алгоритма взаимодействия с объектом управления

2.1    Интерфейс общения с объектом управления

Отправка команд, а также получение значений с объекта управления выполнялись по интерфейсу RS-232C, а для отображения всего этого процесса на ПК в консоли, была установлена программа PuTTY.

С помощью отправления команд производились следующие действия:

 

    включение вентилятора;

    выключение вентилятора;

    включение различных режимов лампы;

    выключение лампы;

    задание коэффициентов ПИД-регулятора;

    задание уставки;

    отключение нагрева.

 

2.2    Измерение температуры

С объекта управления принималась текущая температура нагреваемого элемента.

Измерение температуры, в рамках выполнения курсовой работы, производилось с помощью термопары, подключенной к мультиметру, с которого снимались показания (t oC). Первым делом подавалось напряжение на нагреваемый элемент. Далее с датчика температуры снималось напряжение и с помощью АЦП преобразовывалось в цифровой сигнал, после чего, значение записывалось (ADCтр), которое соответствует показанию на мультиметре. Получившиеся значения представлены в таблице 2.1.

Таблица 2.1 – зависимость напряжения с терморезистора от показаний мультиметра.

 

На основе полученных значений была найдена функция, позволяющая преобразовывать цифровой сигнал с терморезистора в температуру:

тр

 

𝑡 = 7844 + (−34.3343 ∗ 𝐴𝐷𝐶тр) + 0.0512179 ∗ 𝐴𝐷𝐶2 +

 

тр

 

+(−0.0000258353 ∗ 𝐴𝐷𝐶3 )

 

На рисунке 2.1 показан график найденной функции.

 

Рисунок 2.1 – график найденной функции.

2.3    Регулирование температуры

Изменение температуры на терморезисторе производилось с помощью ШИМ (широтно-импульсная модуляция).

Чтобы температура на терморезисторе была равна заданной уставке, был реализован ПИД-регулятор:

Δu(𝑡) = П(𝑡) + И(𝑡) + Д(𝑡),

 

где    П(t) – пропорциональная часть, П(t) – интегральная часть,

Д(t) – дифференциальная часть.

 

Пропорциональная часть вычисляется по следующей формуле:

 

П(𝑡) =  Кп  ·  ε(𝑡),

 

где    ε(t) – невязка, находится по формуле:

 

𝜀(t) = 𝑡тек  − 𝑡уст,

где    tтек – текущая температура,

tуст – уставка.

Интегральная часть вычисляется по следующей формуле:

 

И(𝑡) = И(𝑡 – 𝜏)– Ки · ε(𝑡).

 

Дифференциальная часть вычисляется по следующей формуле:

 

Д(𝑡) = Кд · [ε(𝑡 – 𝜏)– ε(𝑡)].

3                                                                                                                        Разработка ПО

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

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

Существует множество инструментов для разработки программ для платформы AVR8, например CodeVisionAVR, IAR, AVR/Atmel Studio. Однако не все из них являются бесплатными. В качестве среды разработки использовалась Atmel Studio 7.0 фирмы Atmel Corporation. Данная среда является бесплатной и поддерживается производителем микроконтроллера. Кроме того, она поддерживаетотладку, как аппаратную, так и программнуюю (симулятор).

Данная IDE представляет собой набор различных утилит AVR Toolchain, включая компилятор AVR GCC. Все утилиты являются консольными, однако, предусмотрена специальная оболочка Visual Studio Shell, которая устанавливается отдельно. Как видно из названия, оболочка внешне схожа с известной IDE Microsoft Visual Studio 2017. Кроме того, в данную оболочку интегрирован пакет Visual Assist X, который содержит средства для рефакторинга, что существенно упрощает написание программного кода.

Исходный код программы представлен в приложении А.

Заключение

В ходе работы рассматривался вопрос практической реализации цифровых систем автоматического регулирования температуры на базе микроконтроллеров Atmel AVR.

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

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

Блок объектов управления представляет собой лабораторный стенд с нагревателем в виде мощного резистора и датчиком его температуры, лампой подогрева и вентилятором.

После знакомства с вычислительным комплексом разрабатывались алгоритмы управления. При этом был произведен обзор методов измерения и управления скоростью вентилятора. В данном проекте используется трехпроводной вентилятор с таходатчиком.

Были рассмотрены основные схемы измерения температуры, их достоинства и недостатки. В данном проекте использовалась потенциометрическая схема, а в качестве датчика температуры — терморезистор.

Управление нагревом терморезистора производилось с помощью ШИМ.

В конце теоретической части был разработан алгоритм взаимодействия с объектом управления. При этом была описана САР температуры при помощи ПИД-регулятора.

Таким образом, поставленная в рамках данной курсовой работы задача была успешно выполнена.

2.   Микроконтроллер Atmega128. Сайт фирмы Atmel Corporation [Электронный ресурс] : Электрон., текстовые и граф. дан. в формате * .pdf URL: http://www.atmel.com/Images/doc2467.pdf (дата обращения: 15.04.2018).

3.   Безруков П. Л., Ломанов А. Н., Гусаров А. В. Применение микроконтроллеров Atmel в системах автоматического регулирования температуры:    Лабораторная    работа    по    курсам   «Микроконтроллеры»,

4.   Широтно-импульсная модуляция. Wikipedia – электронная энциклопедия [Электронный ресурс]: сайт энциклопедии «Wikipedia». URL : ru.wikipedia.org/wiki/Широтно-импульсная_модуляция (дата обращения: 15.04.2018).

5.   Статьи по аппаратному обеспечению ПК. Магазин «НИКС». [Электронный ресурс] : Электрон, текстовые, граф. дан. URL: http://www.nix.ru/computer_hardware_news/hardware_news_viewer.html?id=164 176&page=2 (дата обращения 15.04.2018 г.).

6.     Павлов Р. В. Основы теории управления: Учебное пособие - Рыбинск: РГАТА, 2007. - 83 с.

7.   ПИД Регулирование. [Электронный ресурс] : Электрон., текстовые и граф. дан. - URL : http://pidcontrol.narod.ru (дата обращения: 16.04.2018 г.).

8.   Ломанов А. Н., Андрющенко А. В., Котляр Д. И. Разработка устройств на базе микроконтроллеров AVR: Учебное пособие. – Рыбинск: РГАТУ имени П. А. Соловьева, 2017. – 174 с.

Приложение А

Список использованных источников

1.   Лабораторный стенд BigAVR2. Сайт фирмы Mikroelectronica [Электронный ресурс] : Электрон., текстовые и граф. дан. в формате *.pdf URL: http://www.mikroe.com/downloads/get/26/bigavr2_manual_vl00.pdf (дата обращения: 14.04.2018).

«Управляющие вычислительные комплексы» – Рыбинск: РГАТА, 2009. - 58 с.

Листинг программы

 

 

 

#define F_CPU 10000000UL #define TIMER_FREQ 100 #define TIMER1_MAX 0x01FF

#define PID_P 0.5f #define PID_I 0.0f #define PID_D -100.0f

#define TEMP_APPROX_A 7844.39f #define TEMP_APPROX_B -34.3343f #define TEMP_APPROX_C 0.0512179f #define TEMP_APPROX_D -0.0000258353

#define ADC_APPROX_A 720.8377399744227f #define ADC_APPROX_B 1.2930418245300215f #define ADC_APPROX_C -0.04944050752419885f #define ADC_APPROX_D 0.00024616053855108956f

#include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include "kalman.h"

void timer0_init(void); void timer1_init(void);

void usart0_init(uint16_t baud); void usart0_send(uint8_t data); void usart_print(char * str); void usart_println(char * str); void usart_handle(char * str); void adc_init(uint8_t PIN);

 

uint16_t temp2adc(float temp);

float adc2temp(uint16_t tempADC);

 

 

float targetTemp = 30;

uint16_t tempADC = 0;

 

uint8_t outputFlag = 1;

 

char outputData[20]; char inputData[30] = "";

 

ISR (USART0_RX_vect) {

uint8_t data = UDR0; if (data == 13) {

usart_println("");

 

 

 

} else {

 

 

 

 

 

}

outputFlag = 1; usart_handle(inputData); inputData[0] = NULL;

 

char c[2];

c[0] = (char)data; c[1] = NULL;

outputFlag = 0; strcat (inputData, c); usart0_send(data);

 

}

 

uint16_t epsMem = 0;

 

ISR(ADC_vect) {

PORTC = ADCH; PORTD = ADCL;

tempADC = (uint32_t)(ADC);

tempVolt = (uint32_t)(ADC) * 5 * 1000 / 1024;

} ISR(TIMER0_COMP_vect){

int32_t eps = -((int32_t)targetTempADC - tempADC);

 

float P = pid_P * eps; float Icur = pid_I * eps; float I = Imem - Icur; Imem = Icur;

float D = pid_D * (epsMem - eps); epsMem = eps;

float dU = P + I + D; pwm += dU;

//pwm += P; if (dU > 0) {

PORTA |= 4;

} else {

 

}

PORTA &= ~4;

if (pwm < 0) {

PORTA &= ~2;

pwm = 0;

DDRB &= ~(1<<5);

}

else {

 

PORTA |= 2;

DDRB |= (1<<5);

if (pwm > TIMER1_MAX) {

pwm = TIMER1_MAX;

}

}

OCR1A = (uint16_t)pwm;

}

int main(void)

{

cli();

DDRC = 0xFF; DDRD = 0xFF; DDRA = 0xFF;

adc_init(1);

targetTempADC = temp2adc(targetTemp); PORTA = 1;

timer1_init(); timer0_init(); usart0_init(9600); sei();

DDRB |= (1<<6);

OCR1B = TIMER1_MAX / 2;

while (1)

{

PORTA ^= 1;

float currentTemp = adc2temp(tempADC); if (outputFlag) {

sprintf(outputData, "Temperature: %d.%d", (uint16_t) (currentTemp),

(uint16_t)(currentTemp * 10) % 10);

usart_println(outputData);

_delay_ms(1000);

}

}

}

void timer0_init(void) {

ASSR=0<<AS0;

TCCR0=(0<<WGM00) | (0<<COM01) | (0<<COM00) | (0<<WGM01) | (1<<CS02) | (1<<CS01) | (1<<CS00);

TCNT0=0x00; OCR0=0x00;

TIMSK |= (1<<OCIE0);

}

void timer1_init(void) {

DDRB |= (1<<5);

 

TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (1<<WGM12) | (1<<CS12) | (0<<CS11) | (0<<CS10);

 

TCNT1=0x0000; ICR1=0x0000; OCR1A=pwm; OCR1B=0x0000; OCR1C=0x0000;

}

void adc_init(uint8_t PIN){

DDRF &= ~(1<<1);

ADMUX |= (0<<REFS1) | (1<<REFS0) | (0<<ADLAR) | (1<<MUX0);

ADCSRA |= (1<<ADEN) | (1<<ADSC) | (1<<ADFR) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0) | (1<<ADIF) | (1<<ADIE);

}

void usart0_init(uint16_t baud) {

UCSR0B = (1<<RXCIE0) | (1<<RXEN0) | (1<<TXEN0) | (0<<UCSZ02);

UCSR0C = (0<<UPM01) | (0<<UPM00) | (0<<USBS0) | (1<<UCSZ01) | (1<<UCSZ00);

uint16_t speed = (F_CPU / 16) / baud - 1; UBRR0H = (speed >> 8) & 0xFF; UBRR0L = speed & 0xFF;

}

void usart0_send(uint8_t data) {

while (!(UCSR0A & (1<<UDRE0))) {}

UDR0 = data;

}

void usart_print(char * str) {

while (*str != 0) {

usart0_send(*str);

str++;

}

}

void usart_println(char * str) { usart_print(str); usart0_send('\r'); usart0_send('\n');

}

void usart_handle(char * str){

char * eq = strstr(str, "=");

 

if (eq != NULL) {

char key[40]; char value[40];

strncpy(key, str, eq - str); key[eq - str] = NULL; strcpy(value, eq+1);

if (strcmp(key, "temp") == 0) { targetTemp = atof(value);

targetTempADC = temp2adc(targetTemp);

usart_println(outputData);

} else if (strcmp(key, "adc") == 0){ targetTempADC = atoi(value);

sprintf(outputData, "Target temp: %d", targetTempADC); usart_println(outputData);

sprintf(outputData, "PID_P: %ld", (int32_t)(pid_P*1000)); usart_println(outputData);

sprintf(outputData, "PID_I: %ld", (int32_t)(pid_I*1000)); usart_println(outputData);

float pid_P = PID_P; float pid_I = PID_I; float pid_D = PID_D;

uint16_t targetTempADC = 1000; uint16_t tempVolt = 0;

float pwm = 0; float Imem = 0;

TCCR1A=(1<<COM1A1) | (0<<COM1A0) | (1<<COM1B1) | (0<<COM1B0) | (0<<COM1C1) | (0<<COM1C0) | (1<<WGM11) | (1<<WGM10);

sprintf(outputData, "Target temp: %d.%d", (uint16_t) (targetTemp), (uint16_t)(targetTemp * 10) % 10);

} else if (strcmp(key, "pidp") == 0){ pid_P = atof(value);

} else if (strcmp(key, "pidi") == 0){ pid_I = atof(value);

} else if (strcmp(key, "pidd") == 0){ pid_D = atof(value);

sprintf(outputData, "PID_D: %ld", (int32_t)(pid_D*1000)); usart_println(outputData);

}

} else if (strcmp(str, "getpid") == 0) {

sprintf(outputData, "PID: P=%ld I=%ld D=%ld", (int32_t)(pid_P*1000), (int32_t)(pid_I*1000), (int32_t)(pid_D*1000));

usart_println(outputData);

} else if (strcmp(str, "info") == 0) {

float currentTemp = adc2temp(tempADC);

 

(uint16_t) (currentTemp), (uint16_t)(currentTemp * 10) % 10); usart_println(outputData);

}

}

uint16_t temp2adc(float temp) {

}

float adc2temp(uint16_t tempADC) {

}

sprintf(outputData, "Target: %d.%d, current: %d.%d", (uint16_t) (targetTemp), (uint16_t)(targetTemp * 10) % 10,

return ADC_APPROX_A + ADC_APPROX_B * temp + ADC_APPROX_C * temp * temp + ADC_APPROX_D * temp * temp * temp;

return TEMP_APPROX_A + TEMP_APPROX_B * tempADC + TEMP_APPROX_C * tempADC * tempADC + TEMP_APPROX_D * tempADC * tempADC * tempADC;