Разработка системы управления отопительного котла

Выбор элементной базы. Разработка системы управления отопительного котла на основе семейства восьмибитных микроконтроллеров фирмы Atmel с архитектурой AVR на языке Assembler. Усилитель сигнала датчика температур. Схема подключения шагового двигателя.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 26.11.2012
Размер файла 2,5 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

Введение

Микроконтроллер -- микросхема, предназначенная для управления электронными устройствами. Типичный микроконтроллер сочетает в себе функции процессора и периферийных устройств, содержит ОЗУ или ПЗУ. По сути, это однокристальный компьютер, способный выполнять простые задачи.

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

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

Данная система управления будет разрабатываться на основе семейства восьмибитных микроконтроллеров фирмы Atmel.

1. Описание объекта управления

Газовый котел - котел, работающий на природном или сжиженном газе. В зависимости от места расположения различают напольные или настенные котлы. Газовые котлы Ferroli и других брендов предназначены для отопления жилых домов, коттеджей, промышленных или иных объектов. Обычно, для отопления жилья используют газовые котлы Buderus и целого ряда альтернативных марок мощностью до 50 кВт.

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

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

В разных котлах теплообменник может быть сделан из разного металла, иметь разный объем.

Чугунные теплообменники котла не подвержены ржавчине, но чувствительны к резкому перепаду температур (термическим ударам). Котлы Ferroli и прочих марок с такими теплообменниками очень тяжелые.

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

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

Газовая котельная - один из самых популярных решений для систем отопления. Распространенность систем отопления на базе газовой котельной определяется рядом факторов:

· Распространенность и дешевизна газа в России

· Высокий КПД (а значит - низкие расходы на эксплуатацию)

· Высокая надежность

· Нет проблем с доставкой топлива

· Широкий спектр мощностей

· Экологичность

· Очень малое количество сажи (реже нужно чистить дымоход и котел)

При этом, газовые котлы обладают двумя серьезными недостатками:

· низкой автономностью (при отключении или падении давления газа в магистрали котел перестает работать)

· высокой стоимостью и сложностью процесса согласования и получения разрешения для подключения магистрального газа (нужно оформить множество документов, разрешений, соглашений) и длительным временем(1-2 года) подключения.

Тем не менее, газовые котельные - является оптимальным решением с точки зрения стоимости дальнейшей эксплуатации системы отопления. Затраты на топливо в газовой котельной ниже затрат на топливо для котельной на жидком или твердом топливе в 1,5 - 2 раза!

Рис. 1 - Функциональная схема котла:

1. Панель управления; 2. Съемная панель отверстия для чистки; 3 Фланец дымохода; 4. Коллектор продуктов сгорания с термостатом дымовых газов; 5. SKKT (система контроля тяги дымохода); 6. Выход ОВ; 7. Подача газа; . Чугунный теплообменник; 9. Вход ОВ; 10. Камера сгорания; 11. Подача вторичного воздуха; 12. Атмосферная горелка; 13. "Вечное пламя"; 14. Подача первичного воздуха; 15. Форсунки горелки; 16. Катушка газовой арматуры; 17. Управление газовой арматурой; 18. Пьезоразжигатель; 19. Кожух котла; 20. Место для датчиков термометра, аварийного и рабочего термостатов

Структурная схема системы управления такого котла будет иметь вид:

Рис. 2 - Структурная схема

На схеме:

Микроконтроллер - центральное процессорное устройство.

– Клавиатура - устройство ввода информации.

– LCD - жидкокристаллический дисплей (устройство вывода информации).

– Кварц - схема кварцевого тактового генератора.

– Питание МК - питания микроконтроллера.

– Питание АЦП - питания встроенного аналого-цифрового преобразователя контроллера.

– Программатор - устройство для программирования микроконтроллера.

– Датчик температуры - измеряет температуру жидкости, его основу составляет терморезистор.

– Концевой датчик - указывает крайнее положение форсунки горелки.

– Схема усиления управляющего сигнала - схема, выполненная на дискретных компонентах, работающая в ключевом режиме.

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

– Драйвера управления шаговым двигателем - электрическая схема подключения двигателя, основой которой является биполярные транзисторы.

2. Выбор элементной базы

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

2.1 Концевой датчик

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

Рис. 3 - Концевой датчик L5K13PUM211

Характеристики датчика.

· Предназначен для коммутации электрических цепей управления под воздействием управляющих упоров в определённых точках пути контролируемого объекта.

· Степень защиты: IP65.

· Номинальное напряжение: 240 В, 50 Гц.

· Номинальный ток: 3 А.

· Контактная группа: 1 замыкающийся + 1 размыкающийся контакты.

· Материал корпуса: пластик.

· Тип привода: кнопочный толкатель.

· Материал толкателя: металл.

· Количество кабельных вводов: 1.

· Габаритные размеры: 94,5Ч30,0Ч30,5 мм.

· Изготовитель: «EMAS», Турция.

2.2 Датчик температуры

Датчик ОВЕН дТС3014-Pt1000.B2.50/2 предназначен для измерения температуры воды в контурах нагрева (в защитной гильзе) и измерения температуры воздуха.

Датчик имеет длину погружной части (гильзы) 50 мм и соединительный кабель длиной 2 м.

Чувствительный элемент - Pt1000.

Рис. 3 - Габаритный чертеж термопреобразователя ОВЕН дТС3014

2.3 Усилитель сигнала датчика температуры

AD594 - это совершенный измерительный усилитель и компенсатор холодного спая термопары на монолитной микросхеме. Он сравнивает эталон точки плавления льда с предварительно калиброванным усилителем, чтобы получить выходной сигнал высокого уровня (10 мВ/°С) непосредственно из сигнала термопары. Расположение ножек микросхемы позволяет использовать ее как линейный усилитель-компенсатор или как контроллер с переключаемым выходным сигналом, используя встроенный или удаленный контроль установки. Может использоваться непосредственно для усиления собственного компенсированного напряжения, таким образом превращая его в автономный преобразователь в градусы Цельсия с выходом низкого сопротивления.

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

AD594 может питаться напряжением одной полярности (+5В) и напряжением обоих полярностей при необходимости измерения температуры ниже 0°С. Чтобы минимизировать саморазогрев, разгруженный AD594 обычно потребляет питание 160 мкА, но он также может потреблять ±5 мА в нагруженном состоянии.

Рисунок 4 - Подключение термопары к AD594

AD594 содержит кондиционер термопары. При использовании одного питания +5 В изображенного на схеме (рис.4) можно получить точное напряжение на выходе.

Можно использовать любое удобное напряжение от +5 В до +30 В, при этом возникают ошибки, связанные с самонагревом, более низкое значение которой соответствует более низкому уровню напряжения. В случае одиночного питания +5 В подключается на ножку 11, а «земля» - на ножку 7 (для обеспечения питания) и на ножку 4 (общий сигнал). Термопара подключается к ножкам 1 и 14, либо непосредственно в месте измерения, либо через проводники, соответствующие типу термопары. В случае, когда сигнализация не используется, ножку 13 необходимо подключить на «землю». Калиброванный выходной сигнал с ножки 8 вместе с выходом ножки 9 позволяет получить номинальную температурную характеристику в 10 В/°С для передачи.

AD594 действует как два дифференциальных усилителя. Выходные сигналы суммируются и используются для управления повышающим усилителем, как показано на рисунке 5.

Рисунок 5 - AD594

При нормальном режиме работы выходы главного усилителя, на ножке 9, подключены к цепи обратной связи на ножке 8. Сигналы термопары, подключенные к буферу выходного уровня на ножках 1 и 14, усиливаются в блоке G дифференциального усилителя и дальше усиливаются в блоке А главного усилителя. Выход главного усилителя подключен ко второму уровню дифференцирования путем обратной связи. На этом уровне сигнал обратной связи усиливается и тоже подается на вход главного усилителя через суммирующую цепь. Из-за инверсии усилитель в обратной цепи приводит к снижению дифференциального сигнала до маленького значения. Два дифференциальных усилителя G сделаны таким образом, чтобы соответствовать друг другу и иметь одинаковый коэффициент усиления. В результате сигнал обратной связи, который подается на правый дифференциальный усилитель будет в точности соответствовать входному сигналу термопары, когда дифференциальный сигнал был снижен до нуля. Цепь обратной связи настроена таким образом, что эффективное усиление на выходе, на ножках 8 и 9 соответствует напряжению в 10 мВ на °С возбуждения термопары. В добавление к сигналу обратной связи на правый дифференциальный усилитель подается напряжение компенсации холодного спая. Компенсацией является дифференциальное напряжение, пропорциональное температуре чипа по Цельсию. Этот сигнал влияет на дифференциальный вход таким образом, что выходной сигнал усилителя должен регулировать возвратным сигналом входа, который равен напряжению термопары. Компенсационный сигнал подается через встроенные резисторы таким образом, что влияние на главный выход тоже равно 10 мВ/°С. В результате компенсационное напряжение добавляется к эффективному напряжению термопары как сигнал, прямо пропорциональный разнице между 0°С и температурой чипа. Если температура холодного спая термопары соответствует температуре AD594, выходной сигнал чипа будет соответствовать читаемому сигналу, который получен путем усиления сигнала термопары погруженной в ледяную ванну. AD594 также содержит в себе детектор разрыва цепи входа, который открывает транзистор сигнализации. Этот транзистор фактически является токоограниченным выходным буфером, но в пределе может быть использован как переключающий транзистор для операций включения и выключения внешней сигнализации. Цепь компенсации «ледяной» точки обладает напряжением, позволяющим получить как положительные, так и отрицательные температурные коэффициенты. Эти напряжения могут использоваться вместе с внешними резисторами для изменения точки плавления льда и калибровки AD594. Резистор обратной связи подключен таким образом, что значение его сопротивления может быть увеличено последовательным подключением резистора, или уменьшено подключением внешнего резистора на ножках 5 и 9.

2.4 Клапан регулирующий шаровой с электроприводом

Область применения. Регулирующий шаровой клапан устанавливается на трубопроводах и дает возможность полностью или частично перекрывать поток рабочей среды. Используется для регулирования расхода рабочей среды.

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

Рабочая среда: вода, горячая вода, пар, воздух, масла, бензин, мазут, слабые кислоты, спирт.

Материалы. Корпус: нержавеющая сталь. Уплотнение: PTFE.

Рабочая температура: 0°С…+185°С.

Рабочее давление: 0,0...1,6 MПa.

Присоединение: Резьбовое Ѕ" ѕ" 1" 1ј" 1Ѕ" 2" ДУ, мм: 15 20 25 32 40 50

Питание: ~220В, выводной провод 1 м.

Время открытия/закрытия: 5...6 (10...15) с или 30 с.

Применение: Упаковочная промышленность, пивоварение, пищевая промышленность, химические системы и смесительное оборудование, линии водоподготовки.

Рис. 6 - Клапан регулирующий шаровой LD-15 с электроприводом

Рис. 7 - Схема подключения электропривода

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

2.5 Схема подключения асинхронных двигателей клапанов

Рис. 8 - Схема подключения асинхронных двигателей клапанов

В схеме используется даже не тиристор, а мощный семистор TC106-10. Этот семистор позволяет коммутировать нагрузку до 10 ампер. Для справки: семистор отличается от тиристора тем, что он работает с обоими полупериодами переменного напряжения, то есть, в открытом состоянии он пропускает как положительную, так и отрицательную полуволны. Для гальванической развязки цепей микроконтроллера и силовых цепей нагрузки используется оптодинистор АОУ103Б. Для того, что бы не создавать лишней нагрузки на выход микроконтроллера для управления светодиодом фотодинистора используется ключ на транзисторе КТ361. Что бы отключить нагрузку от источника питания 220В микроконтроллер должен выставить на своем выходе (в данном случае на выходе PB4 сигнал логической единицы. При этом ключ VT1 закрывается, ток через светодиод фотодинистора не течет, и семистор тоже закрыт. Когда нужно включить нагрузку, микроконтроллер устанавливает на своем выходе логический ноль. Транзистор VT1 открывается, светодиод фотодинистора зажигается и освещает динистор. Динистор начинает открываться в каждом полупериоде напряжения. Через диодный мостик, обозначенный, как VD1 динистор подключен к управляющему электроду семистора VS1. Поэтому в каждом полупериоде семистор тоже открывается и на нагрузку поступает полное напряжение питания. Диодный мостик VD1 необходим потому, что динистр может работать лишь в одном направлении. Он открывается только тогда, когда на его верхнем по схеме выводе плюс а на нижнем минус. В обратном направление динистор не открывается. Если подключить динистор к семистору напрямую, то и семистор тоже сможет пропускать лишь одну из полуволн питающего напряжения. В качестве мостика VD1 можно применить любой маломощный мостик либо составить его из четырех диодов КД522Б. Светодиод HL1 служит просто для индикации включения нагрузки.

2.6 Шаговый двигатель

Для закрытия/открытия форсунки газовой горелки выберем шаговый двигатель FL42STH33-0316A.

Таблица 1 - Основные технические характеристики двигателя

Наименование

Значение

Угловой шаг

1.8°

Погрешность углового шага

±5% (полный шаг, без нагрузки)

Погрешность сопротивления

±10%

Погрешность индуктивности

±20%

Повышение температуры

80°C Max.(рабочий ток, 2 фазы)

Рабочая температура

-20°C ~ +50°C

Сопротивление изоляции

100MЩMin. ,500VDC

Диэлектрическая проницаемость

500VAC for one minute

Радиальное биение вала

0.02Max. (450 g-load)

Осевое биение вала

0.08Max. (450 g-load)

Напряжение питания

12В

Ток

0,31А

Сопротивление

38,5 Ом

Крутящий момент

1,6 Кг*См

Количество выводов

6

Момент инерции

35 г*см2

Вес

0,22 кг

Длина

34 мм

Рис. 9 - Эскиз шагового двигателя

2.7 Схема подключения шагового двигателя

К выходам микроконтроллера подключается драйвер - силовые ключи коммутирующие обмотки шагового двигателя. Драйвер состоит из 4х транзисторов КТ 972.

Рис. 10 - Схема подключения шагового двигателя

Диоды можно использовать любые с допустимым импульсным током 200мА. (BAS21)

2.8 Клавиатура

Ввод информации будем производить с матричной 12-клавишной клавиатуры, имеющей 4 линии строк и три линии столбцов.

Рис. 11 - Клавиатура

Все вертикальные линии матрицы подключены через резисторы к источнику питания +5 В.

Устанавливая по очереди на каждой из вертикальных линий уровень напряжения, соответствующий логическому 0, опрашивается состояние горизонтальных линий. Если ни одна клавиша не нажата, уровень напряжения на всех горизонтальных линиях соответствует логической 1 (т.к. все эти линии подключены к источнику питания +5 В через резисторы).

Если оператор нажмет на какую-либо клавишу, то соответствующая вертикальная и горизонтальная линии окажутся замкнутыми. Когда на этой вертикальной линии процессор установит значение логического 0, то уровень напряжения на горизонтальной линии также будет соответствовать логическому 0.

Как только на одной из горизонтальных линий появится уровень логического 0 фиксируется нажатие на клавишу. На микроконтроллер поступает запрос на прерывание и номер клавиши в матрице. Аналогичные действия выполняются и тогда, когда оператор отпускает нажатую ранее клавишу.

2.9 LСD - дисплей

Рис.12 - Дисплей

Жидкокристалический модуль MT-10S1 состоит из БИС контроллера управления и ЖК панели. Контроллер управления КБ1013ВГ6, производства ОАО «АНГСТРЕМ», аналогичен HD44780 фирмы HITACHI и KS0066 фирмы SAMSUNG.

Модуль выпускается со светодиодной подсветкой. Внешний вид приведен на рисунке 12. Модуль позволяет отображать 1 строку из 10 символов. Символы отображаются на матрице 5*8 точек между символами имеются интервалы шириной в одну отображаемую точку. Каждому отображаемому на ЖКИ символу соответствует его код в ячейке ОЗУ модуля. Модуль содержит два вида памяти -- кодов отображаемых символов и пользовательского знакогенератора, а также логику для управления ЖК панелью.

Модуль позволяет:

* модуль имеет программно-переключаемые две страницы встроенного знакогенератора (языки: русский, украинский, белорусский, казахский и английский).

* работать как по 8-ми, так и по 4-х битной шине данных

* принимать команды с шины данных;

* записывать данные в ОЗУ с шины данных;

* читать данные из ОЗУ на шину данных;

* читать статус состояния на шину данных;

* запоминать до 8-ми изображений символов, заданных пользователем;

* выводить мигающий (или не мигающий) курсор двух типов;

* управлять подсветкой.

микроконтроллер архитектура котел датчик

2.10 Газовая горелка

Для подогрева жидкости выберем газовую горелку CRONO 4G-8G 15G-20G

Рис. 13 - Газовая горелка

1. Реле давления воздуха; ;2. 6-ти шрырьковая вилка для подключения газового мультиблока; 3. Автомат горения; 4. Кнопка разблокировки горелки со световым сигнализатором блокировки; 5. Крепежный фланец с теплоизоляционной прокладкой; 6. Винт регулировки воздушной заслонки; 7. Держатель головки горелки; 8. Штуцер для присоединения реле давления воздуха; 9. Электродвигатель

Таблица - Технические характеристики горелки

2.11 Микроконтроллер

Выбор микроконтроллера завис от количества задействованных ножек. Для наших целей выберем микроконтроллер фирмы Atmel AtMega103.

Отличительные особенности:

· Основан на AVR® RISC архитектуре;

· AVR® - высокая производительность и RISC архитектура с низким энергопотреблением;

· 120/ 121 мощных инструкций - большинство выполняются за один такт;

· 32 х 8 рабочих регистров общего назначения + регистры управления периферией;

· Производительность, вплоть до 6 MIPS при 6 МГц;

· Память данных и энергонезависимая память:

· 64/128 Кбайт Flash- программная память с поддержкой внутрисистемного программирования;

· ресурс: 1000 циклов запись/ стирание;

· 4 Кбайт встроенной SRAM;

· 2К/4К байт EEPROM с поддержкой внутрисистемного программирования;

· Ресурс: 100 000 циклов записи/ стирания;

· Программируемая блокировка для безопасности содержимого Flash и EEPROM;

· Периферия:

· Встроенный аналоговый компаратор;

· Программируемый следящий таймер с встроенным генератором;

· Программируемый последовательный UART;

· Ведущий/ ведомый SPI- последовательный интерфейс;

· Контроллер реального времени (RTC) с выделенным тактовым генератором;

· Два 8-ми разрядных таймера/ счетчика с отдельным предварительным делителем частоты;

· Расширенная система с 16-ти разрядным таймером/ счетчиком с отдельным; предварительным делителем частоты режимами сравнения и захвата, а также с 8-ми, 9-ти и 10-ти разрядным ШИМ;

· Программируемый следящий таймер с встроенным тактовым генератором;

· 8-ми канальный, 10-ти разрядный АЦП;

· Специализированные функции микроконтроллера:

· Режимы пониженного энергопотребления:

· Покоя (Idle), экономичный (Power Save) и отключения (Power Down);

· Программно- выбираемая частота тактового генератора;

· Внешние и внутренние источники прерывания;

· Спецификации:

· Микромощная, высокоскоростная CMOS технология;

· Полностью статический режим работы;

· Потребляемая мощность при 4 МГц, 3 В, 25°С:

· Активный режим: 5.5 мА;

· Режим покоя: 1.6 мА;

· Режим отключения: <1 мкА;

· Функции I/O и корпуса:

· 32 программируемые линии I/O, 8 выходных линий, 8 входных линий;

· корпус 64-pin TQFP;

· Напряжение питания: от 2.7 В до 3.6 В

· Диапазон тактовых частот: от 0 до 4 МГц

Рис. 14 - Расположение выводов

ATmega603/103 является 8-ми разрядным CMOS микроконтроллером с низким уровнем энергопотребления, основанным на AVR RISC архитектуре. Благодаря выполнению высокопроизводительных инструкций за один период тактового сигнала, ATmega603/103 достигает производительности, приближающейся к уровню 1 MIPS на МГц, обеспечивая разработчику возможность оптимизировать уровень энергопотребления в соответствии с необходимой вычислительной производительностью.

Ядро AVR, основанное на усовершенствованной RISC архитектуре, содержит мощный набор инструкций и 32 рабочих регистра общего назначения. Все 32 регистра напрямую подключены к арифметико - логическому устройству (АЛУ), что обеспечивает доступ к двум независимым регистрам при выполнении одной инструкции за один такт. В результате, данная архитектура имеет более высокую эффективность кода, при повышении пропускной способности, вплоть до 10 раз, по сравнению со стандартными микроконтроллерами CISC.

ATmega603/103 имеет: 64/128 Кбайт Flash - памяти с поддержкой внутрисистемного программирования, 2К/4К байт EEPROM, 4Кбайт SRAM, 32 линии I/O общего назначения, 8 выходных линий, 8 входных линий, 32 рабочих регистра общего назначения, контроллер реального времени (RTC), 4 универсальных таймера/ счетчика с режимами сравнения и ШИМ, UART, программируемый следящий таймер с встроенным тактовым генератором, SPI- последовательный порт, а также, три программно выбираемых режима экономии энергопотребления. Режим ожидания «Idle Mode» останавливает CPU, но позволяет функционировать SRAM, таймеру/ счетчикам, порту SPI и системе прерываний. Режим экономии энергопотребления «Power Down» сохраняет содержимое регистров, но останавливает тактовый генератор, отключая все остальные функции микроконтроллера, вплоть до следующего внешнего прерывания, или до аппаратной инициализации. В режиме экономии энергопотребления (Power Save) тактовый генератор таймера продолжает функционировать, позволяя пользователю поддерживать контроль времени в то время, как все остальные функции микроконтроллера отключены.

Устройство производится с применением технологи энергонезависимой памяти с высокой плотностью размещения, разработанной в корпорации Atmel. Встроенная Flash - память обеспечивает возможность перепрограммирования программного кода в составе системы посредством последовательного интерфейса, или с помощью стандартного программатора энергонезависимой памяти. Благодаря совмещению усовершенствованного 8-ми разрядного RISC CPU с Flash- памятью с поддержкой внутрисистемного программирования на одном кристалле получился высокопроизводительный микроконтроллер ATmega603/103, обеспечивающий гибкое и экономически- высокоэффективное решение для многих приложений встраиваемых систем управления.

AVR ATmega603/103 поддерживается полным набором программ и пакетов для разработки, включая: компиляторы С, макроассемблеры, отладчики/ симуляторы программ, внутрисхемные эмуляторы и наборы для макетирования.

3. Разработка программы

Алгоритм программы управления представлен на рисунке 15.

Рис. 15 - Алгоритм

Заключение

В ходе данного курсового проекта была разработана система управления отопительного котла. Была выбрана элементная база, разработан алгоритм и программа управления системой. Программа написана для микроконтроллеров фирмы Atmel с архитектурой AVR на языке Assembler. Чертежи выполнены с помощью САПР, элементарная база представлена в пояснительной записке.

Список литературы

1. Мортон Д. Микроконтроллеры AVR. Вводный курс. 2006

2. Голубцов М.С. Микроконтроллеры AVR от простого к сложному.2003

3. Баранов В.Н. Применение микроконтроллеров AVR.Схемы, алгоритмы, программы.2004

Приложение А

Код основной программы

.include "m103def.inc"

.include "LCD4_macro.inc"

.dseg

Digit: .byte 4

Key: .byte 1

;*****************************************************************************

.cseg

.org 0

jmp INT00 ; External Interrupt Request 0

jmp INT01 ; External Interrupt Request 1

.equ DT =PF0 ; вход датчика температуры

.equ PC0 =PC0 ;

.equ PC1 =PC1 ;

.equ PC2 =PC2 ;

.equ PC3 =PC3 ; Шаговый двигатель

.equ PC4 =PC4 ; открытие входного клапана

.equ PC5 =PC5 ; закрытие входного клапана

.equ PC6 =PC6 ; открытие выходного клапана

.equ PC7 =PC7 ; закрытие выходного клапана

;--------------------------------------------------------------------------------------

; ТАБЛИЦА ВЕКТОРОВ ПРЕРЫВАНИЙ

INT00:

jmp RESET ;переход на RESET при срабатывании прерывания INT00 (кнопка "СТОП")

reti

INT01:

ldi can1, 0b00000001 ;запрещаем прерывание

out EIMSK, can1 ;INT01 ("ПУСК"). EIMSK - регистр масок внешних прерываний

reti

;*********************************************************

;MAIN

RESET:

; устанавливаем вершину стека

; RAMEND - конец памяти SRAM

ldi r16,LOW(RAMEND)

out SPL,r16

ldi r16,HIGH(RAMEND)

out SPH,r16

ldi r16, 1<<TOIE0 ; r16=TOIE0

out TIMSK, r16 ; разрешаем прерывание по переполнению таймера-счётчика 0

rcall port_init ; инициализация портов

sei ; разрешаем использование прерываний

rcall KeyRead

rcall Keyboard

INIT_LCD ; инициализация дисплея

WR_DDADR 0 ; Указатель на начало видео памяти (ячейка с координатми 0,0)

rcall DATA_WR ; Вывод значения на экран

SHIFT CUR_R ; сдвиг курсора вправо

rcall KeyRead

rcall Keyboard

rcall DATA_WR ; Вывод значения на экран

; опрашиваем кнопку пуск

PUSK:

sbic PINA, 5 ; пропустить следующую команду, если кнопка нажата

rjmp PUSK

sbi PORTC, 6 ; открываем выходной клапан

sbi PORTC, 4 ; открываем входной клапан

rcall Wait15s ;

cbi PORTC, 4;

rcall OPEN_SHD ; открытие форсунки

rcall Wait15s ;

rcall DATA_RD ; считываем температуру с экрана

rcall CMP ; сравниваем температуру

;*************************************************************

; ПОДПРОГРАММА ИНИЦИАЛИЗАЦИИ ПОРТОВ

port_init:

; ножки PA4-PA5 на ввод, остальные на вывод

ldi r16, 0b11001111

out DDRA, r16

ldi r16, 0b00110000

out PORTC, r16

; ножки порта С на вывод

cbr r16

out PORTC, r16

; ножки PD0-PD7 на ввод

cbr r16

out DDRD, r16

;ножки PЕ2-PЕ4 на вывод

ldi r16, 0b11100011

out PORTD, r16

ret

;*********************************************************

KeyRead:

;проверяет нажатие клавиши в клавиатуре возвращает номер клавиши в случае нажатия

;иначе возвращает -1 (255) также -1 возвращается в случае, если в прошлый раз была ;нажате та же кнопка возвращаемое значение - переменная Key

;блок проверки строки (всего их 4)

in R17,PinD ; читаем порт D

rcall KeyTest ;вызываем программу проверки

;программа возвращает номер кнопки: 0..2

;или -1 - если нет нажатых кнопок

ldi R17,0 ;загружаем код текущей строки

cpi R18,255 ;если ничего не нажато - идем дальше

brne SetKey ;иначе - переходим на обработку

;конец 0-го блока

in R17,PinD

rcall KeyTest

ldi R17,3

cpi R18,255

brne SetKey

in R17,PinD

rcall KeyTest

ldi R17,6

cpi R18,255

brne SetKey

in R17,PinD

rcall KeyTest

ldi R17,9

cpi R18,255

brne SetKey

ldi R17,0

SetKey:

add R17,R18 ;прибавляем номер кнопки к коду строчки

lds R18,Key ;грузим код кнопки, прочитанный в прошлый раз

andi R18,0b00001111 ;"чистим" его по маске

cp R17,R18 ;если в прошлый раз

brne EndKeyRead ;была нажата не та же кнопка, выходим

ori R17,0b10000000 ;иначе - пишем флажок "повтор"

EndKeyRead:

sts Key,R17 ;сохраняем код кнопки в ОЗУ

ret ;выходим

;*********************************************************

KeyTest:

andi R17,0b01110000 ;обрезаем по маске

ldi R18,0b01110000

eor R17,R18 ;инвертируем биты по маске

breq NoButtons ;если все нули (нет нажатых), переходим по метке

ldi R18,0 ;инициализируем счетчик

cpi R17,0b00010000 ;проверяем 0-ю кнопку

breq EndKeyTest ;нажато - выход

inc R18 ;иначе - инкремент счетчика

cpi R17,0b00100000 ;проверка 2 кнопки

breq EndKeyTest

inc R18

cpi R17,0b01000000 ;проверка 3 кнопки

breq EndKeyTest

NoButtons:

ldi R18,255 ;если ничего не нажато - возвращаем 255

EndKeyTest: ret

;*********************************************************

Keyboard:

;запускает выполнение операции, закрепленной за кнопкой

lds R17,Key ;загружаем переменную Key

mov R18,R17 ;проверяем на наличие флажка

andi R18,0b10000000 ;"повтор" или -1

brne EndKeyboard ;если повтор или -1 - выходим

ldi ZH,High(KeysLUT*2) ;загружаем таблицу

ldi ZL,Low (KeysLUT*2) ;истинности (клавиша -> значение)

ldi R18,0 ;смещаемся на номер клавиши

add ZL,R17

adc ZH,R18

lpm ;загружаем значение элемента

mov R17,R0

lds R18,Digit+2 ;сдвигаем разряды индикатора

sts Digit+3,R18 ;на один влево

lds R18,Digit+1

sts Digit+2,R18

lds R18,Digit

sts Digit+1,R18

sts Digit,R17 ;пишем в млад. разряд индикатора текущее значение

EndKeyboard: ret

;*********************************************************

KeysLUT:

.db 1,2,3,4,5,6,7,8,9,10,0,11 ;массив (таблица истинности клавиатуры)

;**********************************************************

;подрограмма опроса датчика

CMP:

; ADEN - разрешаем работу АЦП

; ADSC - начало преобразования

ldi r22, DT ; АЦП для датчика температуры

out ADMUX, r22

; опрос датчика

ADC:

ldi r22,1<<ADEN|1<<ADSC

out ADCSRA, r22

; ожидание завершения преобразования ADC

rADC:

sbic ADCSRA, ADSC

rjmp rADC

sbic PINA, 4 ; опрос кнопки стоп

rjmp END ; перейти на END, если нажата

; сравниваем текущую температуру

in r22, ADCL

cp R17, r22

breq ADC ; продолжаем, если равны

cp R17, r22

brlo CLOSE ;переход, если меньше

;OPEN

sbi PORTC,4 ;открытие входного клапана

rcall Wait1s

cbi PORTC,4

ret

CLOSE:

sbi PORTC,5 ;закрытие входного клапана

rcall Wait1s

cbi PORTC,5

ret

;--------------------------------------------------------------------------------------

; ПОДПРОГРАММА ЗАДЕРЖКИ в 1 сек

Wait1s:

ldi r28, 20

ldi r29, 255

Wait1s_mid:

ldi r30, 255

Wait1s_in:

dec r30

brne Wait1s_in

dec r29

brne Wait1s_mid

dec r28

brne Wait1s_out

ret

;--------------------------------------------------------------------------------------

; ПОДПРОГРАММА ЗАДЕРЖКИ в 15 сек

Wait15s:

ldi r28, 230

Wait15s_out:

ldi r29, 255

sbic PINA, 4 ; опрос кнопки стоп

rjmp END ; перейти на END, если нажата

Wait15s_mid:

ldi r30, 255

Wait15s_in:

Nop

dec r30

brne Wait15s_in

dec r29

brne Wait15s_mid

dec r28

brne Wait15s_out

ret

;--------------------------------------------------------------------------------------

; ПОДПРОГРАММА ЗАДЕРЖКИ в 1 мкс

Wait1mks:

ldi r28, 5

Wait1mks_out:

ldi r29, 255

Wait1mks_mid:

dec r29

brne Wait1mks_mid

dec r28

brne Wait1mks_out

ret

;***************************************************************************

; открытие форсунки

OPEN_SHD:

ldi r1, 0b00000001

ldi r2, 0b00000011

ldi r3, 0b00000010

ldi r4, 0b00000110

ldi r5, 0b00000100

ldi r6, 0b00001100

ldi r7, 0b00001000

ldi r8, 0b00001001

SHD_R:

sbic PIND, 7 ; опрос концевого датчика

rjmp STOP_SHD ; перейти на STOP_SHD, если нажат

out PORTC, r1 ; Крутим двигатель вправо

out PORTC, r2

out PORTC, r3

out PORTC, r4

out PORTC, r5

out PORTC, r6

out PORTC, r7

out PORTC, r8

rcall Wait1mks ; задержка между шагом

rjump SHD_R

STOP_SHD:

ret

;************************************************************

; закрытие форсунки

CLOSE_SHD:

ldi r1, 0b00001001

ldi r2, 0b00000100

ldi r3, 0b00001100

ldi r4, 0b00000100

ldi r5, 0b00000110

ldi r6, 0b00000010

ldi r7, 0b00000011

ldi r8, 0b00000001

SHD_L:

out PORTC, r1 ; Крутим двигатель влево

out PORTC, r2

out PORTC, r3

out PORTC, r4

out PORTC, r5

out PORTC, r6

out PORTC, r7

out PORTC, r8

rcall Wait1mks ; задержка между шагом

rjump SHD_L

ret

;**********************************************************

END:

RCALL CLOSE_SHD ; закрываем форсунку

sbi PORTC, 7; закрываем выходной клапан

sbi PORTC, 5; закрываем входной клапан

rjump Reset;

.include "LCD4.asm"

Приложение Б

Программа управление дисплеем

LCD4.asm

;===========LCD Define ======================================================

.equ DATA_PORT = PORTA ; LCD Data Port

.equ DATA_PIN = PINA

.equ DATA_DDR = DDRA

.equ CMD_PORT = PORTE ; LCD Control Port

.equ CMD_PIN = PINE

.equ CMD_DDR = DDRE

.equ E = 4

.equ RW = 3

.equ RS = 2

.equ SPEED = 14 ; 14 для XTAL=16MHz, 10 для XTAL=8MHz,

; 6 для XTAL=4MHz, 5 для XTAL<4MHz

;==========================================================================

;===========LCD Proc ========================================================

InitHW: CBI CMD_PORT,RS ; Выставляем нужные уровни на

; управляющих выводах

CBI CMD_PORT,RW ; Порты на выход

CBI CMD_PORT,E ; И сразу же выставляются на 1

SBI CMD_DDR,RS

SBI CMD_DDR,RW

SBI CMD_DDR,E

RCALL PortIn; Порт данных на вход

RET

;==========================================================================

BusyWait: CLI ; Ожидание флага занятости контроллера дисплея

RCALL PortIn ; Порты на вход

CBI CMD_PORT,RS ; Идет Команда!

SBI CMD_PORT,RW ; Чтение!

BusyLoop: SBI CMD_PORT,E ; Поднять строб

RCALL LCD_Delay ; Подождать

IN R16,DATA_PIN ; Считать байт

PUSH R16 ; Сохранить его в стек. Дело в том, что у нас R16

; убивается в LCD_Delay

CBI CMD_PORT,E ;Бросить строб - первый цикл (старший полубайт)

RCALL LCD_Delay ; Подождем маленько

SBI CMD_PORT,E ; Поднимем строб

RCALL LCD_Delay ; Подождем

CBI CMD_PORT,E ; Опустим строб - нужно для

; пропуска второго полубайта

RCALL LCD_Delay ; Задержка снова

POP R16 ; А теперь достаем сныканый байт - в нем наш флаг.

ANDI R16,0x80 ; Продавливаем по маске. Есть флаг?

BRNE BusyLoop ; Если нет, то переход

BusyNo: SEI ; Разрешаем прерывания.

RET

;==========================================================================

; Запись команды в дисплей. Код команды в R17

CMD_WR: CLI ; Запрет прерываний

RCALL BusyWait ; Ждем готовности

CBI CMD_PORT,RS ; Идет команда!

RJMP WR_END ; Переход на запись

;-----------------------------------------------------------------------------------------

; Запись данных в дисплей. Код данных в R17

DATA_WR: CLI ; Запрет прерываний

RCALL BusyWait ; Ждем готовности

SBI CMD_PORT,RS ; Идут данные!

WR_END: CBI CMD_PORT,RW ; Запись!

SBI CMD_PORT,E ; Поднять строб

RCALL PortOut ; Порт настроить на выход!

PUSH R17 ; Сохраним данные которые будем выводить в стеке

ANDI R17,0xF0 ; Отдавим по маске данным младшую тетраду.

IN R16,DATA_PORT ; Возьмем из порта данных старое значение

ANDI R16,0x0F ; Отдавим ему старшую тетраду

PUSH R16 ; Сохраним результа в стеке. Пригодится

OR R16,R17 ; Склеим младшую тетраду из порта со старшей тетрадой данных

OUT DATA_PORT,R16 ; Выдадим этого мутанта в порт.

RCALL LCD_Delay ; Подождем

CBI CMD_PORT,E ; Бросим строб вниз - данные ушли в индикатор

RCALL LCD_Delay ; Подождем

SBI CMD_PORT,E ; Поднимем строб

POP R16 ; Достанем из стека младшую тетраду из порта

POP R17 ; И данные которые мы выводим

SWAP R17 ; Поменяем тетрады местами у байта данных

ANDI R17,0xF0 ; Отдавим младшую тетраду

OR R16,R17 ; Склеим младшую тетраду из

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

OUT DATA_PORT,R16 ; Выдадим в порт

RCALL LCD_Delay ; Подождем

CBI CMD_Port,E ; Бросим строб

RCALL PortIn ; Порт вернем в прежнее состояние - на вход

SEI ; Разрешим прерывания

RET ; Возврат

;==========================================================================

; Чтение команды из дисплея. Результат в R17

CMD_RD: CLI ; Запрет прерываний

RCALL BusyWait ; Ждем контроллер

CBI CMD_PORT,RS ; Команда!

RJMP RD_END ; Идем на чтение

;-----------------------------------------------------------------------------------------

; Чтение команды из дисплея. Результат в R17

DATA_RD: CLI ; Запрет прерываний

RCALL BusyWait ; Ждем контроллер

SBI CMD_PORT,RS ; Данные!

RD_END: SBI CMD_PORT,RW ; Чтение!

SBI CMD_PORT,E ; Поднимаем строб

RCALL LCD_Delay ; Ждем

IN R17,DATA_PIN ; Читаем из порта байт

CBI CMD_PORT,E ; Бросем строб вниз

ANDI R17,0xF0 ; Отдавливаем ему младшую тетраду

SWAP R17 ; Обмениваем тетрады местами

RCALL LCD_Delay ; Ждем

SBI CMD_PORT,E ; Поднимаем строб

MOV R16,R17 ; Прячем старшую тетраду в R16

IN R17,DATA_PIN ; Берем еще один байт

CBI CMD_PORT,E ; Бросаем строб

ANDI R17,0xF0 ; Отдавливаем младшую тетраду

OR R17,R16 ; Склеиваем результат с старшим байтом

SWAP R17 ; Разорваичаем байт. Т.к. первой

; выходила старшая тетрада

SEI ; разрешаем прерывания

RET ; Возврат.

;==========================================================================

PortIn: IN R16,DATA_DDR ; Данные из DDR в регистр

ANDI R16,0x0F ; Отдавливаем старшую тетраду - нам нужно

; сохранить младшую и обнулить старшую

OUT DATA_DDR,R16 ; Выдаем результат в порт.

IN R16,DATA_PORT ; Берем данные из порта

ORI R16,0xF0 ; Выставляем все биты старшей тетрады,не трогая младшую

OUT DATA_PORT,R16 ; Выдаем в порт

RET

;==========================================================================

PortOut: IN R16,DATA_DDR ; Данные из ДДР в регистр

ORI R16,0xF0 ; Выставляем все биты старшей тетрады, не

; трогая младшую

OUT DATA_DDR,R16 ; Выдаем данные в порт

RET

;==========================================================================

LCD_Delay: LDI R16,SPEED ; Задержка на несколько тактов. Для того чтобы

; дисплей

L_loop: DEC R16 ; Успевал обрабатывать данные

BRNE L_loop

RET

LCD4_macro.inc

;==========================================================================

; LCD Init

equ LCD_CLR = 0 ; DB0: clear display

equ LCD_HOME = 1 ; DB1: return to home position

equ LCD_ENTRY_MODE = 2 ; DB2: set entry mode

equ LCD_ENTRY_INC = 1 ; DB1: increment

equ LCD_ENTRY_SHIFT = 0 ; DB2: shift

equ LCD_ON = 3 ; DB3: turn lcd/cursor on

equ LCD_ON_DISPLAY = 2 ; DB2: turn display on

equ LCD_ON_CURSOR = 1 ; DB1: turn cursor on

equ LCD_ON_BLINK = 0 ; DB0: blinking cursor

equ LCD_MOVE = 4 ; DB4: move cursor/display

equ LCD_MOVE_DISP = 3 ; DB3: move display (0-> move cursor)

equ LCD_MOVE_RIGHT = 2 ; DB2: move right (0-> left)

equ LCD_F = 5 ; DB5: function set

equ LCD_F_8B = 4 ; DB4: set 8BIT mode (0->4BIT mode)

equ LCD_F_2L = 3 ; DB3: two lines (0->one line)

equ LCD_F_10D = 2 ; DB2: 5x10 font (0->5x7 font)

equ LCD_CGRAM = 6 ; DB6: set CG RAM address

equ LCD_DDRAM = 7 ; DB7: set DD RAM address

equ SCR_L = 0b00011000 ; Сдвиг экрана влево

equ SCR_R = 0b00011100 ; Сдвиг экрана вправо

equ CUR_L = 0b00010000 ; Сдвиг курсора влево

equ CUR_R = 0b00010100 ; Сдвиг курсора вправо

; Init Config

MACRO INIT_LCD ; нициализация LCD

RCALL InitHW ; Настроить контрольный порт

RCALL LCD_DELAY ; Подождать

WR_CMD (1<<LCD_F)|(0<<LCD_F_8B) ;Выдать функции в порт.

; Команда инициализации адресации

WR_CMD (1<<LCD_F)|(0<<LCD_F_8B)|(1<<LCD_F_2L) ;

Так как на 4

; байтах нельзя передать сразу второй байт

WR_CMD (1<<LCD_CLR) ;0x01

WR_CMD (1<<LCD_ENTRY_MODE)|(1<<LCD_ENTRY_INC)

0x06

WR_CMD (1<<LCD_ON)|(1<<LCD_ON_DISPLAY)|(0<<LCD_ON_CURSOR)|(0<<LCD_ON_BLINK)

;0x0C

WR_CMD (1<<LCD_HOME)

.ENDM

;==================================================================================

;Write Data

.MACRO WR_DATA

LDI R17,@0

RCALL DATA_WR

.ENDM

;==================================================================================

;Write CMD

.MACRO WR_CMD

LDI R17,@0

RCALL CMD_WR

.ENDM

;==================================================================================

; Read Data

.MACRO RD_DATA

RCALL DATA_RD

.ENDM

;==================================================================================

; Read CMD

.MACRO RD_CMD

RCALL CMD_RD

.ENDM

;==================================================================================

;Set COORD

;Syntax LCD_COORD X,Y

.MACRO LCD_COORD

LDI R17,(1<<LCD_DDRAM)|(@0+0x40*@1)

RCALL CMD_WR

.ENDM

;==================================================================================

;Shift SCREEN/CURSOR

.MACRO SHIFT

LDI R17,@0

RCALL CMD_WR

.ENDM

;==================================================================================

;LCD Clear

.MACRO LCDCLR

LDI R17,(1<<LCD_CLR)

RCALL CMD_WR

.ENDM

;==================================================================================

;Write CGRAM

.MACRO WR_CGADR

LDI R17,(1<<LCD_CGRAM)|(@0)

RCALL CMD_WR

.ENDM

;Write DDRAM

.MACRO WR_DDADR

LDI R17,(1<<LCD_DDRAM)|(@0)

RCALL CMD_WR

ENDM

Размещено на Allbest.ru


Подобные документы

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