Вы находитесь на странице: 1из 57

ОГЛАВЛЕНИЕ

ВВЕДЕНИЕ..............................................................................................................5
ГЛАВА 1 ТЕХНИЧЕСКИЕ ТРЕБОВАНИЯ.........................................................8
1.1 Обзор задания курсового проекта....................................................................8
1.2 Разработка структурной схемы........................................................................8
1.3 Принцип работы симисторного управления...................................................9
ГЛАВА 2 ПОДБОР ЭЛЕМЕНТНОЙ БАЗЫ.......................................................12
2.1 Датчик положения...........................................................................................12
2.2 Датчик температуры.......................................................................................13
2.3 Концевой выключатель...................................................................................15
2.4 Энкодер............................................................................................................15
2.5 Часы реального времени.................................................................................16
2.6 Выбор и обоснование микроконтроллера.....................................................18
2.7 Выбор аналогово-цифрового преобразователя............................................19
2.8 Организация местного пульта управления. Цветовая и звуковая
сигнализация..........................................................................................................21
2.9 ЖКИ индикатор...............................................................................................22
ГЛАВА 3. РАЗРАБОТКА МИКРОПРОЦЕССОРНОЙ СИСТЕМЫ................25
3.1 Функциональная схема...................................................................................25
3.2 Расчет потребляемой мощности управляющей части системы..................27
3.3 Принципиальная схема...................................................................................27
3.4 Разработка алгоритма программы.................................................................29
ГЛАВА 4. МОДЕЛИРОВАНИЕ И ПРОВЕРКА ФУНКЦИОНИРОВАНИЯ...35
4.1 Общая схема в Proteus.....................................................................................35
4.2 Моделирование работы отдельных участков кода......................................37
ЗАКЛЮЧЕНИЕ.....................................................................................................43
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ............................................44

АБВГ.123456.000
Изм. Лист № докум. Подпись Дата
Разраб. Лит. Лист Листов
Провер. 1 2

Н. Контр. ИАТЭ НИЯУ МИФИ


ЭиА-С17
Утв.
ПРИЛОЖЕНИЯ.....................................................................................................45
Приложение А.......................................................................................................46

Лист
ОКПО.421411.006ПЗ 2
Изм. Лист № докум. Подпись Дата
ОБОЗНАЧЕНИЯ И СОКРАЩЕНИЯ

АСУ ТП – комплекс технических и программных средств, предназначенный


для автоматизации управления технологическим оборудованием на
промышленных предприятиях;
АЦП – аналого-цифровой преобразователь;
ЖКИ – жидкокристаллический индикатор;
МК – микроконтроллер;
ТС – таймер-счетчик;
ЦАП – цифро-аналоговый преобразователь;
COM – (англ. communications port – «последовательный порт») – сленговое
название интерфейса стандарта RS-232;
I2C – (англ. Inter-Integrated Circuit) – последовательная шина обмена
данными между интегральными схемами;
UART – (англ. universal asynchronous receiver/transmitter – «универсальный
асинхронный приемопередатчик») – узел вычислительных устройств,
предназначенный для организации связи с другими цифровыми
устройствами
USB – (англ. Universal Serial Bus – «универсальная последовательная шина»)
– последовательный интерфейс для подключения периферийных устройств к
вычислительной технике.
SPI – (англ. Serial Peripheral Interface, SPI bus — последовательный
периферийный интерфейс, шина SPI) — последовательный синхронный
стандарт передачи данных в режиме полного дуплекса, предназначенный для
обеспечения простого и недорогого высокоскоростного сопряжения
микроконтроллеров и периферии.

Лист
ОКПО.421411.006ПЗ 2
Изм. Лист № докум. Подпись Дата
ВВЕДЕНИЕ

Автоматизация — одно из направлений научно-технического


прогресса, использующее саморегулирующие технические средства и
математические методы с целью освобождения человека от участия в
процессах получения, преобразования, передачи и использования энергии,
материалов, изделий или информации, либо существенного уменьшения
степени этого участия или трудоёмкости выполняемых операций.
Автоматизируются:
– производственные процессы;
– проектирование;
– организация, планирование и управление;
– научные исследования;
– обучение;
– бизнес-процессы;
– и другие сферы человеческой деятельности.
Автоматизация позволяет повысить производительность труда,
улучшить качество продукции, оптимизировать процессы управления,
отстранить человека от производств, опасных для здоровья. Автоматизация,
за исключением простейших случаев, требует комплексного, системного
подхода к решению задачи. Применяемые методы вычислений иногда
копируют нервные и мыслительные функции человека. Весь этот комплекс
средств обычно называют системами.
Автоматизированная система управления технологическим процессом
(АСУ ТП) – комплекс технических и программных средств,
предназначенный для автоматизации управления технологическим
оборудованием на промышленных предприятиях. Может иметь связь с более
общей автоматизированной системой управления предприятием (АСУП).
Под АСУ ТП обычно понимается целостное решение, обеспечивающее
автоматизацию основных операций технологического процесса на

Лист
ОКПО.421411.006ПЗ 2
Изм. Лист № докум. Подпись Дата
производстве в целом или каком-то его участке, выпускающем относительно
завершённое изделие.
Понятие «автоматизированный», в отличие от понятия
«автоматический», подчёркивает необходимость участия человека в
отдельных операциях, как в целях сохранения контроля над процессом, так и
в связи со сложностью или нецелесообразностью автоматизации отдельных
операций.
Составными частями АСУ ТП могут быть отдельные системы
автоматического управления (САУ) и автоматизированные устройства,
связанные в единый комплекс. Такие как системы диспетчерского
управления и сбора данных (SCADA), распределенные системы управления
(DCS), и другие более мелкие системы управления (например, системы на
программируемых логических контроллерах (PLC)). Как правило, АСУ ТП
имеет единую систему операторского управления технологическим
процессом в виде одного или нескольких пультов управления, средства
обработки и архивирования информации о ходе процесса, типовые элементы
автоматики: датчики, устройства управления, исполнительные устройства.
Одну из главных ролей в таких системах выполняет микроконтроллер.
Можно считать, что микроконтроллер (МК) – это компьютер,
разместившийся в одной микросхеме. Отсюда и его основные
привлекательные качества: малые габариты; высокие производительность,
надежность и способность быть адаптированным для выполнения самых
различных задач.
Конвейер (от англ. convey «передавать») — машина непрерывного
транспорта, предназначенная для перемещения сыпучих, кусковых или
штучных грузов.
Конвейеры широко применяются в современном производстве
благодаря важнейшей своей характеристике – непрерывности работы. Эта
система превратила процесс сборки сложных изделий, ранее требовавший
высокой квалификации от сборщика, в рутинный, монотонный,

Лист
ОКПО.421411.006ПЗ 2
Изм. Лист № докум. Подпись Дата
низкоквалифицированный труд, значительно повысив его
производительность.
Ленточный конвейер – это транспортирующая машина для
перемещения в горизонтальном и наклонном направлениях насыпных и
штучных грузов непрерывным потоком без остановок на загрузку и
выгрузку. Тяговым (и одновременно грузонесущим) органом такого
конвейера является закольцованная вокруг концевых барабанов лента.
Ленточные конвейеры являются наиболее распространенным типом машин
конвейерного транспорта благодаря высокой производительности (до 30 000
т/ч), большой длине транспортирования (до 3-4 км в одном конвейере),
простоте конструкции, эксплуатации и высокой надежности.
В данном курсовом проекте рассмотрено применение ленточного
конвейера для постепенного нагрева и последующего охлаждения деталей
термоустановкой.

Лист
ОКПО.421411.006ПЗ 2
Изм. Лист № докум. Подпись Дата
ГЛАВА 1. ТЕХНИЧЕСКИЕ ТРЕБОВАНИЯ

1.1 Обзор задания курсового проекта

В курсовом проекте представлена разработка процесса симисторного


управления термоустановкой линейного конвейера в диапазоне температур
от 50 до 250 С. Деталь движется по конвейеру мимо нагревателей.
o

Температура регистрируется в следующих точках – 25, 50, 75, 100 (середина),


75, 50, 25% конвейера. Каждый нагреватель термоустановки установлен под
одним из семи секторов ленты (в последнем секторе деталь остывает под
воздействием внешней среды). Если детали не конвейере нет, конвейер не
движется и термоустановка не включена. Движение конвейера возможно
также при установившейся температуре нагревателя. Установка температуры
осуществляется с помощью кнопочной клавиатуры (режим – местный пульт).
В системе предусмотрена световая и звуковая аварийная индикация в
случаях, когда не работает нагреватель, не работает транспортер, нет детали
в течение заданного времени. На ЖКИ будет выводиться общее время
работы, количество пройденных деталей и показания датчиков. С ПК (режим
– удаленное управление) по интерфейсу RS485 будет осуществляться запрос
на вывод данных на ЖКИ.

1.2 Разработка структурной схемы

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


с ленты конвейера таких показаний, как температура и наличие детали на
ленте. Температуру будем контролировать в семи точках. Наличии детали
будем контролировать в начале, на 25% длинны конвейера и в конце
конвейера. На отметке 25% длинны конвейера будем контролировать
наличие детали для включения нагревателей. Контроль наличия детали в
конце конвейера необходим для выключения нагревателей, а также для
подсчета количества обработанных деталей. Температура от установки
Лист
ОКПО.421411.006ПЗ 2
Изм. Лист № докум. Подпись Дата
будет регулироваться системой из четырех симисторов. Структурная схема
изображена на рисунке 1.

Источник: Собственная разработка


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

Структурная схема отражает только общие связи между элементами.


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

1.3 Принцип работы симисторного управления

С целью коммутации нагрузок в цепях переменного тока удобно


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

Лист
ОКПО.421411.006ПЗ 2
Изм. Лист № докум. Подпись Дата
Источник: Собственная разработка
Рисунок 2 – Схематическое обозначение симистора

Тогда как у тиристора имеются четко определенные катод, анод и


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

Лист
ОКПО.421411.006ПЗ 2
Изм. Лист № докум. Подпись Дата
оптодрайвер MOC3021. Схема подключения МОС3021 показана на рисунке
2.

Источник: Собственная разработка


Рисунок 3 – Схема подключения оптодрайвера MOC3021

Также для контроля смены полярности сигнала питания будем


использовать микросхему РС837АВ и диодный мост (BR1), схема
подключения показана на рисунке 3. РС837АВ выполняет гальваническую
развязку высоковольтной части схемы и низковольтного МК. Диодный мост
необходим для выпрямления синусоидального напряжения питания от сети
220В.

Источник: Собственная разработка


Рисунок 4 – Схема подключения РС837АВ и диодного моста (BR1)

Лист
ОКПО.421411.006ПЗ 2
Изм. Лист № докум. Подпись Дата
ГЛАВА 2. ПОДБОР ЭЛЕМЕНТНОЙ БАЗЫ

2.1 Датчик положения

Для создаваемой системы необходимо подобрать датчик, который


будет контролировать наличие детали в определенном месте. В качестве
такого датчика подойдет датчик положения. Датчик положения должен
предупреждать только о наличии или отсутствии детали на ленте конвейера.
Для этого подойдет плоский фотоэлектрический датчик BPS3M-TDT фирмы
Autonics с выходом типа NPN. В качестве источника света используется
инфракрасный светодиод (850 нм). Датчик срабатывает на затемнение и
определяет наличие/отсутствие непрозрачных объектов с диаметром Ø≥5 мм.
Так же в нем предусмотрена защита от переполюсовки и короткого
замыкания. Данный датчик показан на рисунке 2.

Источник: [3]
Рисунок 2 – Датчик положения BPS3M-TDT

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

Лист
ОКПО.421411.006ПЗ 2
Изм. Лист № докум. Подпись Дата
Источник: [1]
Рисунок 3 – Схема подключения датчика BPS3M-TDT

Данный датчик имеет следующие характеристики:


− рабочее расстояние – 0-3000 мм;
− рабочее напряжение – 12-24 В;
− частота модулируемого луча – 10-55 Гц;
− размер (В, Ш, Г) – 28×16×7,5 мм.
Характеристики датчика BPS3M-TDT удовлетворяют требованиям к
подбираемому датчику контроля наличия детали в определенном месте.
Рабочее расстояния, рабочее напряжение, частота проверки наличия детали и
размеры подходят для нашей системы.

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

В качестве датчика температуры предполагается использовать


обычную термопару К-типа, так как она не требует дополнительного
источника питания и обладает малой собственной погрешностью, а также
при ее использовании отсутствует гистерезис. Она недорогая, точная,
надежная и имеет широкий температурный диапазон от 0 до 600 0С. Для того
чтобы преобразовать ее показания в удобные для обработки
микроконтроллером, использую микросхему AD595, выполняющую
компенсацию холодного спая и оцифровку сигнала от термопары типа K.
Схема подключения данной микросхемы изображена на рисунке 4.

Лист
ОКПО.421411.006ПЗ 2
Изм. Лист № докум. Подпись Дата
Источник: [4]
Рисунок 4 – Схема подключения микросхемы AD595 к МК

Предварительно откалиброванная цепь обратной связи на выводе


8 соединена с выходом вывода 9, чтобы обеспечить номинальную
характеристику передачи температуры 10 мВ/0С.
Данная микросхема имеет следующие характеристики:
− предварительная калибровка для работы с термопарами типа K;
− погрешность калибровки 1°C за счет лазерной
подгонки на пластине;
− низкоимпедансный выход напряжения – 10 мВ/°C;
− напряжение питания – 5-15 В;
− диапазон измеряемых температур – 0-300 0С;
− потребляемая мощность – 1 мВт.
Проанализировав характеристики связки микросхемы AD595 и
термопары К типа можно сделать вывод, что данная связка нам подходит.
Она имеет достаточную для наших целей погрешность, диапазон измерений
тоже подходящий для создаваемой системы. Напряжение питания позволяет
использовать тот же источник питания, что и для микроконтроллера.
Обработка данных от этой микросхемы будет происходить при помощи
АЦП. Его выбор будет сделан позже.

Лист
ОКПО.421411.006ПЗ 2
Изм. Лист № докум. Подпись Дата
2.3 Концевой выключатель

Для того чтобы выключать двигатель конвейера при появлении в


опасной от него близости людей, используется механический концевой
выключатель AZ-8108. Он показан на рисунке 5.

Источник: [6]
Рисунок 5 – Концевой выключатель AZ-8108

При выборе концевого выключателю главным критерием являлось то,


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

2.4 Энкодер

Для того чтобы контролировать работу двигателя, используется


энкодер Siemens 1XP8001-2. Он будет снимать угловую скорость двигателя и
генерировать сигнал с определенной частотой. Внешний вид энкодера
показан на рисунке 6.

Лист
ОКПО.421411.006ПЗ 2
Изм. Лист № докум. Подпись Дата
Источник: [8]
Рисунок 6 – Энкодер Siemens 1XP8001-2

Характеристики энкодера:
− напряжение питания – 5-30 В;
− предельная скорость вращения – 12000 об/мин;
− точность – 21024 импульсов/оборот.
– отдельный вывод, на который поступаем импульс после каждого
полного оборота.
Инкрементный энкодер Siemens 1XP8001-2 подходит для установки в
создаваемую систему. Его характеристики соответствуют требованиям.
Напряжение питания позволяет подключать устройство от источника
питания микроконтроллера. Предельная скорость вращения и точность тоже
нам подходят. Преимуществом энкодера Siemens 1XP8001-2 является то, что
он на отдельном выходе генерирует импульс после каждого оборота, что
очень удобно для его использования в системах не требующих высокой
точности определения скорости вращения вала энкодера.

2.5 Часы реального времени

Для того чтобы знать общее время работы конвейера, могут


применяться часы реального времени (RTC). В качестве них используется
микросхема PCF8583 в режиме часов. Взаимодействие через МК
производится при помощи интерфейса I2C (TWI). Для задействования

Лист
ОКПО.421411.006ПЗ 2
Изм. Лист № докум. Подпись Дата
внешнего генератора между выводами OSC1 и OSC0 нужно подключить
кварцевый резонатор на частоту 32,768 кГц. Условное графическое
обозначение часов показано на рисунке 7.

Источник: [5]
Рисунок 7 – Условное графическое обозначение часов PCF8583

Назначение выводов микросхемы:


− OSCI – вход внешнего генератора;
− OSCO – выход генератора;
− A0 – линия выбора адреса;
− VSS – общий провод питания;
− VDD – линия питания;
− INT – выход прерывания с открытым коллектором;
− SCL – линия тактового сигнала;
− SDA – линия данных. Характеристики часов:
− напряжение питания – от 3,3 до 5 В;
− 24 или 12-часовой формат времени;
− память на 4 календарных года;
− потребляемая мощность – 300 мВт.
К микросхеме часов реального времени главное требование, чтобы она
имела кварцевый генератор с частотой, кратной 1 секунде. Также
микросхема PCF8583 подключается по интерфейсу I2C, что позволяет
сократить число используемых выводов микроконтроллера. Еще PCF8583
имеет статическое ОЗУ емкостью 240 байт, что позволяет в будущем
улучшить разработанную систему, задействовав дополнительную память.
Лист
ОКПО.421411.006ПЗ 2
Изм. Лист № докум. Подпись Дата
2.6 Выбор и обоснование микроконтроллера

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


помощью микроконтроллера. Он должен обладать рядом характеристик:
иметь доступную среду для разработки, поддерживать работу интерфейсов
USART (для связи с ПК) и I2C (для связи с RTC), а так же иметь встроенные
8-миканальный АЦП, к которому можно подключить датчики температуры,
и минимум 3 таймера-счетчика: 2 для подсчета внешних сигналов от
энкодера за 1 секунду и 1 для формирования временного интервала для
управления симисторами. Разрядность МК должна быть 8-ми битовой как
наиболее распространенная и удобная в программировании. По
предварительным подсчетам МК должен иметь не менее 35 выводов для
подключения датчиков, кнопок, интерфейсов и другого оборудования.
Всем этим условиям удовлетворяет микроконтроллер ATmega128
фирмы AVR. ATmega128 имеет достаточной для наших целей количество
выводов, даже несколько будет не задействовано, что дает возможность
расширения системы в будущем.
Характеристики микроконтроллера:
− напряжение питания – 4,5-5,5 В;
− частота работы – до 16 МГц;
− ширина шины данных – 8 бит.
Количество портов и расположение выводов данного МК показаны на
рисунке 8.

Лист
ОКПО.421411.006ПЗ 2
Изм. Лист № докум. Подпись Дата
Источник: [1]
Рисунок 8 – Расположение выводов МК ATmega128

ATmega128 имеет 4 таймера счетчика, что удовлетворяет нашим


требованиям и дает возможность усовершенствования системы в будущем.
Так же ATmega128 имеет необходимые нам интерфейсы USART (для связи с
ПК) и I2C (для связи с RTC), и встроенный 8-ми канальный АЦП. По
остальным характеристикам ATmega128 также удовлетворяет требования к
микроконтроллеру для нашей системы, значит его и будем использовать.

2.7 Выбор аналогово-цифрового преобразователя

Для выбора АЦП необходимо соблюсти следующие критерии:


– знать точное количество каналов подключения;
– рассчитать разрядность;
– необходимое быстродействие.
Суммарное количество используемых датчиков, подключаемых к АЦП
равно 8, это означает что наш АЦП должен быть восьмиканальным.
Лист
ОКПО.421411.006ПЗ 2
Изм. Лист № докум. Подпись Дата
Для расчета разрядности АЦП необходимо рассчитать его
погрешность:


ε АЦП = ( ε 2Σ−N ε 2Д ),
❑ ❑
где ε Σ – значение приведенной погрешности, ε Д – погрешность датчика,
N – количество используемых датчиков.
Рассчитаем погрешность:
ε АЦП =√( 3 −8∗1 )=2 %.
2 2

Рассчитаем требуемую разрядность АЦП:

m ≥(∫ lo g2 (ε )
1
АЦП
=∫ lo g2 ( 0,021 )=7),
где m значение разрядности АЦП.
Быстродействие АЦП характеризуется временем преобразования, т.е.
интервалом времени от момента изменения сигнала на входе до появления на
выходе установившегося кода. В данной системе быстродействие АЦП не так
важно, можно, например, взять АЦП среднего быстродействия с частотой
выборок около 4-15 кГц.
Так как к АЦП будет подключено 8 микросхем AD595, подойдет АЦП
последовательного приближения, позволяющее мультиплексировать их
входные сигналы. Оно обладает высоким быстродействием, так как весь
процесс преобразования выполняется за N последовательных шагов (N –
разрядность АЦП). Структурная схема АЦП последовательного
приближения изображена на рисунке 9.

Источник: [1]
Рисунок 9 – Структурная схема АЦП последовательного приближения

Лист
ОКПО.421411.006ПЗ 2
Изм. Лист № докум. Подпись Дата
ATmega128 содержит 10-разрядный АЦП последовательного
приближения. АЦП связан с 8-канальным аналоговым мультиплексором, 8
однополярных входов которого связаны с линиями порта F.
Так как для выполнения задания необходим 8-миканальный АЦП с
разрядность не менее 7, то встроенный в микроконтроллер АЦП может быть
использован в проекте.

2.8 Организация местного пульта управления. Цветовая и звуковая


сигнализация

Для сигнализации о неисправности проектируемой системы


реализована цветовая и звуковая сигнализация, состоящая из светодиодов и
свето-звукового оповещателя.
Зеленый светодиод будет зажигаться тогда, когда температура детали в
центре конвейера, где симистор пропускает 100% полуволны генератора,
отличается от заданной. Это будет сигнализировать о поломке
термоустановки. Красный светодиод будет зажигаться тогда, когда при
срабатывании датчика положения в начале 2-го сектора ленты конвейера
датчик положения вначале ленты не сработает. Это будет сигнализировать об
отсутствии новой детали на конвейере.
Звуковая сигнализация будет срабатывать тогда, когда количество
пришедших от энкодера импульсов будет отличаться от числа испульсов при
нормальной работе установки. Это будет означать неисправность в работе
конвейера. В качестве звуковой сигнализации используется свето-звуковой
оповещатель МАЯК-24-КП. Схема его подключения изображена на рисунке
10.

Лист
ОКПО.421411.006ПЗ 2
Изм. Лист № докум. Подпись Дата
Источник: [1]
Рисунок 10 – Схема подключения МАЯК-24-КП

Его характеристики:
− напряжение питания – 24 В;
− уровень звукового сигнала – 105 дБ;
− потребляемый ток звукового оповещателя – 50±5,0 мА;
− потребляемый ток светового оповещателя – 25±2,5 мА.
МАЯК-24-КП подходит для установки в нашу систему, оповещатель
подходит под все требования к свето-звуковой сигнализации,
устанавливаемой в нашу систему.

2.9 ЖКИ индикатор

Для вывода начальных параметров, показаний датчиков температуры,


общего времени работы конвейера и количества обработанных деталей
применяется жидкокристаллический индикатор. Для выбора подходящего
нам ЖКИ определим какое количество символов требуется выводить. На
ЖКИ будут выводиться следующие выражения:
– Значение требуемой температуры, которую установка будет
поддерживать формата (Request t=xxx);
– Текущее значение температуры и количество обработанных деталей
(Temp=xxx Det=xxx);

Лист
ОКПО.421411.006ПЗ 2
Изм. Лист № докум. Подпись Дата
– Значение текущей температуры установки и разность текущей и
заданной температуры формата (Сt=xxx Rt=xxx);
– Значения текущей температуры установки в разных точках по
запросу от ПК формата (t=xxx t=xxx t=ххх).
Проанализировав требования к ЖКИ можно сделать выбор в пользу
HD44780, он имеет две строки по 16 знакомест, что позволяет разместить
выводимую в нашей системе информацию. Схема подключения ЖКИ
показана на рисунке 11.

Источник: [1]
Рисунок 11 – 4-х проводная схема подключение ЖКИ HD44780 к МК

Кроме 4-х проводной схемы подключения ЖКИ существует 8-ми


проводная схему подключения данного ЖКИ, но мы в целях минимизации
количества используемых выводов микроконтроллера будем использовать
4-х проводную схему. Для соединения контроллера ЖКИ-модуля с
управляющим МК по 4-х проводной схеме используется параллельная
синхронная шина, включающая следующие контакты:
− R/W (READ/WRITE) – линия определяет направление передачи
данных в текущей операции (0 – запись данных в контроллер ЖКИ, 1 –
чтение данных из контроллера ЖКИ);

Лист
ОКПО.421411.006ПЗ 2
Изм. Лист № докум. Подпись Дата
− RS (RegisterSet) – линия определяет, с каким из регистров
производится текущая операция (0 – регистр команд (IR), 1 – регистр данных
(DR));
− E (Enable) – линия стробирования/синхронизации данных. Операция
чтения/записи стартует по заднему фронту на этой линии;
− DB0...DB7 (DataBus) – линии данных. В 8-битном режиме
используются все линии данных, при 4-битном – старшая тетрада.
ЖКИ HD44780 к МК подходит для установки в нашей системе, он
способен выводить всю необходимую нам информацию, также позволяет
расширение системы в будущем, есть возможность добавления вывода
информации строчками большей длинны, чем используется в нашей системе.
Также плюсом данного ЖКИ является возможность подключить его по 4-х
проводной схеме, что по сравнению с 8-ми проводной значительно
сокращает число используемых выводов микроконтроллера.

Лист
ОКПО.421411.006ПЗ 2
Изм. Лист № докум. Подпись Дата
ГЛАВА 3. РАЗРАБОТКА МИКРОПРОЦЕССОРНОЙ СИСТЕМЫ

3.1 Функциональная схема

В отличие от структурной в функциональной схеме указаны все


датчики и микросхемы и конкретное их количество. Она представлена на
рисунке 13.

Источник: [1]
Рисунок 13 – Функциональная схема

Так как температура сначала возрастает до середины процесса


обработки детали, а потом симметрично понижается, для управления семью
нагревателями достаточно четырех симисторов. Вся лента конвейера условно
разделена на 8 секторов. Первый симистор будет пропускать только четверть
полуволны синусоидального сигнала внешнего генератора, регулирующего
работу термоустановки. Благодаря этому нагреватели в секторах 1 и 7 будут
работать только на 25% мощности. Второй симистор будет пропускать уже
половину полуволны и регулировать работу нагревателей в секторах 2 и 6,
третий – три четверти полуволны и отвечать за работу нагревателей в
секторах 3 и 5. Четвертый симистор будет пропускать всю полуволну,
Лист
ОКПО.421411.006ПЗ 2
Изм. Лист № докум. Подпись Дата
поэтому мощность нагревателя в секторе 4 будет стопроцентной. В 8 секторе
нагреватель не ставится, обрабатываемая деталь будет остывать до
комнатной температуры естественным путем.
Для согласования уровней напряжений между МК и ПК используется
драйвер MAX220CPE. Так же на схеме указаны все интерфейсы, через
которые будет происходить обмен данными между микросхемами и
микроконтроллером.
При помощи кнопок будет задаваться температура термоустановки и ее
допустимые отклонения. Величина допустимого отклонения равна 20 0С. Для
задания температуры в режиме установки температуры будем использовать
6 кнопок:
– Первая кнопка будет увеличивать значение задаваемой температуры
на 10 0С;
– Вторая кнопка уменьшать значение задаваемой температуры на 10 0С;
– Третья кнопка будет увеличивать значение задаваемой температуры
на 5 0С;
– Четвертая кнопка уменьшать значение задаваемой температуры на 5
С;
0

– Пятая кнопка будет увеличивать значение задаваемой температуры


на 1 0С;
– Шестая кнопка будет уменьшать значение задаваемой температуры
на 1 0С.
Так же в системе предусмотрена кнопка, которая при отжатом
состоянии позволяет только вводить начальные данные; остальные строки
кода не выполняются. Это позволит избежать ненужной работы МК и
системы в целом.
На ЖКИ будет осуществляться вывод начальных параметров для
удобства их задания. По сигналу от ПК информация на ЖКИ будет меняться
на вывод общего времени работы, вывод температуры термоустановки и
количества деталей, вывод показаний датчиков температуры 1, 2, 3 и 4 и
вывод показаний датчиков температуры 5, 6 и 7.
Лист
ОКПО.421411.006ПЗ 2
Изм. Лист № докум. Подпись Дата
3.2 Расчет потребляемой мощности управляющей части системы

Общая потребляемая мощность управляющей части системы


определяется суммой мощностей всех входящих в нее элементов. Расчет
мощности, потребляемой нагревательным элементом, двигателем в этой
работе не производится в связи с тем, что главная часть системы это
управляющая. Мощность двигателя и нагревательных элементов
подбираются под конкретные условия работы. Мы же проектируем
управляющую часть, которая может регулировать большим количеством
вариантов систем с различными двигателями и нагревателями. Путем
перемножения напряжения и силы тока определяется сначала потребляемая
мощность отдельных элементов системы:
1) PДТ = 8 ∗ 0,001 Вт = 0,008 Вт – мощность, потребляемая датчиками
температуры;
2) PДП= 3 ∗ 12 В ∗ 0,02 А = 0,72 Вт – мощность, потребляемая
датчиками положения;
3) PЭНК= 5 В ∗ 0,15 А = 0,75 Вт – мощность, потребляемая энкодером;
4) PКВ=0,15 Вт;
5) PЖКИ= 5 В ∗ 0,0005 А = 0,0025 Вт;
6) PРЕЗ=0,3 Вт;
7) PRS232 =0,842 Вт;
8) PМАЯК=24 В ∗ (0,025 + 0,05) А = 1,8 Вт.
При суммировании всех полученных значений получается общая
потребляемая мощность системы:
𝑃 = (0,008 + 0,72 + 0,75 + 0,15 + 0,0025 + 0,3 + 1,8 + 0,842) Вт = 3,57 Вт

Лист
ОКПО.421411.006ПЗ 2
Изм. Лист № докум. Подпись Дата
3.3 Принципиальная схема

На основе выбранной элементной базы разработана принципиальная


схема, представленная на рисунке 14.

Лист
ОКПО.421411.006ПЗ 2
Изм. Лист № докум. Подпись Дата
Источник: Собственная разработка
Рисунок 14 – Принципиальная схема
Лист
ОКПО.421411.006ПЗ 2
Изм. Лист № докум. Подпись Дата
3.4 Разработка алгоритма программы

Перед написанием программы разрабатывается ее алгоритм. В


основной функции «main» инициализируются на вход и выход нужные порты
в зависимости от их назначения. Так же подключаются все используемые
интерфейсы. Порт А будет отвечать за вывод сигналов сигнализации на
сирену и светодиоды и прием сигналов от датчиков положения и концевого
выключателя. Ручное управление реализуется на порте B при помощи
кнопок. ЖКИ стандартно подключается к порту С. Интерфейс I2C,
связывающий часы реального времени с микроконтроллером реализуется на
порте D. Передача данных по интерфейсу USART осуществляется при
помощи виртуального терминала, подключенного к порту Е, через который
так же будет осуществляться управление симисторами. Так как выводы порта
F являются входами АЦП, к ним будут подключены датчики температуры.
Так же в основной функции нужно проинициализировать таймеры-
счетчики. Таймер-счетчик 0 будет отвечать за формирование 1 секунды, в
конце которой будут подсчитываться внешние импульсы от энкодера.
Таймер-счетчик 1 будет отвечать за формирование времени полупериода
синусоидального сигнала от внешнего генератора. При помощи таймера-
счетчика 3 будут подсчитываться внешние импульсы от энкодера для
контроля скорости двигателя конвейера. Соответственно, так же нужно
объявить прерывание по совпадению с регистрами OCR1A таймера-счетчика
1 и OCR таймера-счетчика 0. Завершает инициализацию разрешением общих
прерываний от МК.
Далее следует бесконечный цикл while(1), в котором и будут
обрабатываться все поступающие данные и формироваться выходные
сигналы. Для начала задается температура термоустановки и величина ее
допустимых отклонений, которые выводятся на ЖКИ. После этого
нажимается стартовая кнопка, показывающая, что система готова к работе.
Прежде всего, проверяются данные концевого выключателя. Если он
сработал, то работа конвейера и термоустановки должны быть прекращены.
Лист
ОКПО.421411.006ПЗ 2
Изм. Лист № докум. Подпись Дата
Далее первый датчик положения своим срабатыванием предупреждает
систему о наличие в начале ленты конвейера детали. При ее отсутствии будет
зажигаться красный светодиод и останавливаться работа всего конвейера. В
дальнейшем каждая новая деталь должна присутствовать в начале ленты
тогда, когда предыдущая достигает второй секции обработки. Выполнение
этого условия осуществляется одновременным срабатыванием первого и
второго датчиков положения.
Если все условия для корректной работы конвейера выполнены,
включается сначала термоустановка. Следом за ней, как только температура
всех нагревателей достигнет заданной, запускается двигатель. При этом
происходит контроль температуры в заданных пределах: при достижении
верхнего предела термоустановка выключается, при достижении нижнего
снова включается. При помощи количества импульсов, поступающих от
энкодера, узнается о скорости работы двигателя. Если подсчитанное
таймером-счетчиком количество импульсов меньше соответствующего
скорости, заявленной в паспорте двигателя, то все процессы так же
останавливаются. Оператор узнает об этой проблеме при помощи звуковой
сигнализации.
При движении детали по ленте конвейера при помощи термопар с нее
снимаются показания температуры. Если показания датчика температуры в
центре ленты конвейера, которые должны совпадать с температурой
термоустановки, не соответствуют заданным, зажигается зеленый светодиод
и работа конвейера прекращается.
При полностью безаварийной работе конвейера окончание обработки
детали фиксируется при помощи датчика положения на конце ленты. На
ЖКИ выводится температура термоустановки и обработанное количество
деталей.
По сигналу от ПК информация на ЖКИ будет меняться на вывод
общего времени работы при нажатии “1”, вывод показаний датчиков
температуры 1, 2, 3 и 4 при нажатии “2” и вывод показаний датчиков
температуры 5, 6 и 7 при нажатии “3”.
Лист
ОКПО.421411.006ПЗ 2
Изм. Лист № докум. Подпись Дата
Блок-схема основного алгоритма программы изображена на рисунках
15-19.

Источник: Собственная разработка


Рисунок 15 – Блок-схема основного алгоритма программы

Источник: Собственная разработка


Рисунок 16 – Продолжение блок-схемы основного алгоритма
программы

Лист
ОКПО.421411.006ПЗ 2
Изм. Лист № докум. Подпись Дата
Источник: Собственная разработка
Рисунок 17 – Продолжение блок-схемы основного алгоритма
программы

Источник: Собственная разработка


Рисунок 18 – Продолжение блок-схемы основного алгоритма
программы

Лист
ОКПО.421411.006ПЗ 2
Изм. Лист № докум. Подпись Дата
Источник: Собственная разработка
Рисунок 19 – Продолжение блок-схемы основного алгоритма
программы

В прерывании по совпадению с регистром OCR0 таймера счетчика 0


при помощи счетчика отсчитывается секунда. По ее достижении происходит
подсчет внешних импульсов от энкодера таймером-счетчиком 3.
Когда синусоидальный сигнал от внешнего генератора достигает нуля,
срабатывает внешнее прерывание. В нем сначала обнуляется регистр TCNT
таймера-счетчика 1 для того, чтобы счетчик начал работать с 0. Затем
включается сам таймер счетчик и на выводе PE4, к которой подключен
симистор, пропукающий 100% полупериода синусоидального сигнала от
генератора, устанавливается высокий уровень напряжения. В регистр OCR1A
заносится число (для 50 Гц – это 100) для формирования временного
интервала, равного четверти полупериода синусоидального сигнала
генератора.
В прерывании по совпадению с регистром OCR1A таймера счетчика 1
при помощи счетчика отмечается количество срабатываний прерывания. При
первом срабатывании на выводе PE5 устанавливается высокое напряжение
для пропускания 75% полуволны синусоидального сигнала от генератора.

Лист
ОКПО.421411.006ПЗ 2
Изм. Лист № докум. Подпись Дата
При втором срабатывании на выводе PE6 устанавливается высокое
напряжение для пропускания 50% полуволны, а при третьем высокое
напряжение устанавливается на выводе PE5 для пропускания 25%
полуволны. Затем счетчик обнуляется, напряжения выводов PE4-PE7
сбрасываются в 0, и таймер-счетчик 1 выключается.
Блок-схемы обработчиков прерываний показаны на рисунке 20.

Источник: Собственная разработка


Рисунок 20 – Блок-схема обработчиков а) прерывания по совпадению с
регистром OCR0, б) внешнего прерывания, в) прерывания по совпадению с
регистром OCR1A

Лист
ОКПО.421411.006ПЗ 2
Изм. Лист № докум. Подпись Дата
ГЛАВА 4. МОДЕЛИРОВАНИЕ И ПРОВЕРКА
ФУНКЦИОНИРОВАНИЯ

4.1 Общая схема в Proteus

Для проверки работы написанного кода была собрана схема в


программе Proteus. Она состоит из микроконтроллера ATmega128, ЖКИ
HD44780, 8 микросхем AD595 с подключенными к ним термопарами, часы
реального времени PCF8583. К контактам RXD0 и TXD0 подключен
VIRTUAL TERMINAL, при помощи которого будут выводиться данные и
вводиться команды, передаваемые при помощи интерфейса USART. На
порте B при помощи 8 кнопок реализован кнопочный пульт. Кнопка начала
работы подключена к выводу PD4. К выводам PA2 и PA3 подключены
диоды световой индикации.
Из-за ограниченной базы элементов программы датчики положения и
концевой выключатель были заменены на кнопки, подключенные к выводам
PA4-PA7. Логика замены была обусловлена тем, что эти устройства
принимают только два состояния: включен и выключен. Свето-звуковой
выключатель представлен элементом BUZZ, подключенным к выводу PA1.
Так же замене подвергся энкодер: вместо него подключен генератор с
заранее заданной частотой. Для моделирования одновременной работы
энкодера и двигателя конвейера выход генератора был связан с выводом
PA0, с которого будет поступать сигнал запуска двигателя, при помощи
логического элемента 2-И.
Для отслеживания момента, когда синусоидальный сигнал от внешнего
источника пересекает 0, использован диодный мост вкупе с оптопарой с
симисторным и диодным выходами. Оптопары с транзисторным и диодным
выходами применены для управления 4 симисторов, которые подключены к
2 осциллографам для отслеживания их работы. Схема в Proteus изображена
на рисунке 21.

Лист
ОКПО.421411.006ПЗ 2
Изм. Лист № докум. Подпись Дата
Источник: Собственная разработка
Рисунок 21 – Схема системы в Proteus

Лист
ОКПО.421411.006ПЗ 2
Изм. Лист № докум. Подпись Дата
Из-за большого количества элементов данная схема работает
нестабильно. Для проверки работоспособности создадим упрощенную схему,
имеющую меньшее количество элементов.

4.2 Моделирование работы отдельных участков кода

Упрощенная схема состоит из микроконтроллера ATmega128, ЖКИ


HD44780 и 1 микросхемы AD595 с подключенной к ней термопарой. К
контактам RXD1 и TXD1 подключен VIRTUAL TERMINAL, при помощи
которого будут вводиться команды, передаваемые при помощи интерфейса
USART. На порте B при помощи 6 кнопок реализован кнопочный пульт.
Кнопка начала работы подключена к выводу PD4.
Для отслеживания момента, когда синусоидальный сигнал от внешнего
источника пересекает 0, использован диодный мост с оптопарой с
симисторным и диодным выходами. Оптопары с транзисторным и диодным
выходами применены для управления 4 симисторов.
Упрощенная схема в Proteus изображена на рисунке 22.

Источник: Собственная разработка


Рисунок 22 – Упрощенная схема в Proteus

Лист
ОКПО.421411.006ПЗ 2
Изм. Лист № докум. Подпись Дата
На рисунке 23.1 показан ввод первоначальных данных. Кнопка начала
работы отжата, на ЖКИ выведена заданная оператором температура.
Кнопками В0-В5 будем регулировать задаваемую температуру в следующей
последовательности:
– B0 +10 к температуре;
– B1 -10 к температуре;
– B2 +5 к температуре;
– B3 -5 к температуре;
– B4 +1 к температуре;
– B5 -1 к температуре.
При моделировании установим требуемую температуру равную 210 0С.

Источник: Собственная разработка


Рисунок 23.1 – Демонстрация работы ручного пульта управления

После ввода задаваемой температуры, на экран выводится температура


нагревательной установки и ее отклонение от заданной – рисунок 23.2. «Ct»
обозначает текущую температуру установки, «Rt» обозначает разность
текущей и заданной температуры.

Лист
ОКПО.421411.006ПЗ 2
Изм. Лист № докум. Подпись Дата
Источник: Собственная разработка
Рисунок 23.2 – Демонстрация работы ручного пульта управления

При включении кнопки работы термоустановки и во время дальнейшей


работы системы на ЖКИ выводится текущая температура нагревателя и
количество обработанных деталей – рисунок 23.3.

Источник: Собственная разработка


Рисунок 23.3 – Демонстрация работы вывода данных во время работы
системы

Также проведем моделирование работы системы при взаимодействии с


ПК. Мы моделируем упрощенную версию системы, имеющую всего 1 датчик
температуры, поэтому при выводе показаний с разных датчиков они будут
одинаковы. При отправке «1» с ПК на ЖКИ должно выводиться текущее
время работы системы – рисунок 23.4.

Лист
ОКПО.421411.006ПЗ 2
Изм. Лист № докум. Подпись Дата
Источник: Собственная разработка
Рисунок 23.4 – Демонстрация работы вывода данных во время работы
системы

На рисунке 24 кнопка начала работы нажата. Менять значение


начальных данных нельзя. По команде от ПК на ЖКИ выводится значение
температуры, измеренной термопарой.

Источник: Собственная разработка


Рисунок 24 – Демонстрация работы удаленного пульта управления

На рисунке 25(а,б) представлены осциллограммы, демонстрирующие


работу симисторов. Желтая синусоида на 1 осциллограмме является
первоначальным сигналом от внешнего генератора, синяя – сигнал, от
пропускающего 100% сигнала симистора. Сиреневая синусоида формируется

Лист
ОКПО.421411.006ПЗ 2
Изм. Лист № докум. Подпись Дата
на 75%. На 25(б) осциллограмме показаны синусоиды, сформированные на
50% (синяя) и 25% (сиреневая). Зеленым на 1 и синим и желтым на 2
осциллограмме показаны сигналы от микроконтроллера, открывающие
симисторы.

Источник: Собственная разработка


Рисунок 25(а) – Демонстрация работы симисторного управления

Лист
ОКПО.421411.006ПЗ 2
Изм. Лист № докум. Подпись Дата
Источник: Собственная разработка
Рисунок 25(б) – Демонстрация работы симисторного управления

Лист
ОКПО.421411.006ПЗ 2
Изм. Лист № докум. Подпись Дата
ЗАКЛЮЧЕНИЕ

В ходе выполнения курсового проекта была разработана


микропроцессорная система управление нагрузкой с помощью симисторов.
Во время выполнения задания были произведены:
– подбор и обоснование элементной базы;
– разработка структурной, функциональной и принципиальной схем
микропроцессорной системы;
– разработка программного кода на языке программирования С для
микроконтроллера ATmega128, который представлен в приложении;
– проверка работы программы в среде симуляции.
В программе Proteus была создана схема для проверки системы. При
проверке на работоспособность полной системы среда симуляции работала
нестабильно и некорректно, с связи с этим были смоделированы некоторые
участки кода, важные для понимания работоспособности системы. Жизненно
важные для нашей системы функции удалось проверить, система работает
корректно и согласно требованиям.

Лист
ОКПО.421411.006ПЗ 2
Изм. Лист № докум. Подпись Дата
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

Специальная литература
1. Д.В. Васильковский, А.В. Руденко Лабораторный практикум по
курсу «МИКРОПРОЦЕССОРЫ И МИКРОКОНТРОЛЛЕРЫ», 2019. − 248 с.
2. Степаненко И.П. Основы микроэлектроники: Учебное пособие для
вузов. 2-е изд. – М.: Лаборатория базовых знаний, 2001. -100 экз
3. Норенков И.П. Основы автоматизированного проектирования: Учеб.
для вузов. 2-е изд., перераб.  и дополн.- М.: Изд-во МГТУ им. Н.Э. Баумана,
2002.-336 с.-15 экз
4. Волович Г.И. Схемотехника аналоговых и аналого-цифровых 
электронных устройств. 2-е издание - М.: Издательский дом «Додэка ХХ1»,
2007. -10 экз.
5. Data Sheet. ATmega 128 8-bit Microcontroller with 128K Bytes In-
System Programmable Flash, 2011 – 368 c.
6. Datasheet. PCF8583 Clock/calendar with 240×8-bit RAM, 2010 – 37 c.

Электронные ресурсы
7. Симисторы: принцип работы, проверка и включение, схемы.
[Электронный ресурс] Режим доступа: https://www.asutpp.ru/simistory.html
8. Датчик положения оптический BPS3M-TDT. [Электронный ресурс]
Режим доступа: https://rusautomation.ru/catalog/datchik_polozheniya
9. Усилитель сигналов термопары типа K с компенсацией холодного
спая. [Электронный ресурс] Режим доступа:
https://www.analog.com/ru/products/ad595.html
10. Энкодеры Siemens. [Электронный ресурс] Режим доступа:
https://www.sti-ug.ru/enkodery-simens

Лист
ОКПО.421411.006ПЗ 2
Изм. Лист № докум. Подпись Дата
ПРИЛОЖЕНИЯ

Лист
ОКПО.421411.006ПЗ 2
Изм. Лист № докум. Подпись Дата
Приложение А
Код созданной программы

#include <avr/io.h>
#define F_CPU 10000000UL
#include <util/delay.h>
#include <stdio.h>
#include <stdint.h>
#include <avr/interrupt.h>

#define nCS PB0


#define CSK PB1
#define MOSI PB2
#define MISO PB3

unsigned int adc_value;


float temr=0;
float temr1=0;
float temr2=0;
float temr3=0;
float temr4=0;
float temr5=0;
float temr6=0;
float temr7=0;
float temr8=0;
char high_adc=0,low_adc=0;
int y1=0;
int temp[8] = {0};

unsigned char trebuemaya_temp=150;


int i5=0;
int i4=0;

int counter_detals=0;

int en_heat=0;

int IMPULS_FROM_ENKODER=0;
int IMPULS_FROM_ENKODER_ZAD=60;
int counter_for_compOCRA1=0;

void usart_1_init(void){

//макросы вычисления скорости


#define BAUD 9600
#define UBRR_VAL (F_CPU/16/BAUD-1)

UBRR1H = UBRR_VAL >> 8;


UBRR1L = UBRR_VAL;
UCSR1A = 0x00;
//Разрешение работы приемника и передатчика
UCSR1B = (1 << RXEN1) | (1 << TXEN1);
// Формат посылки 8 бит
UCSR1C = (1 << UCSZ11) | (1 << UCSZ10);
}

Лист
ОКПО.421411.006ПЗ 2
Изм. Лист № докум. Подпись Дата
void usart_1_write_char(char c){

/* Ожидание освобождения буфера передатчика */


while (!( UCSR1A & (1 << UDRE1 ) ));
/* Помещение данных в буфер, отправка данных */
UDR1 = c;
}

void usart_1_puts(char* str) {


while (*str) {
usart_1_write_char(*str++);
}
}

uint16_t usart_1_read(void){

static uint16_t dat;


dat = 0;
/* Проверка на наличие новых данных */
if ( UCSR1A & (1 << RXC1))
dat = UDR1 ;
//usart_1_write_char(dat);
/* Функция вернет 0, если не было новых данных */
return dat;
}

/* установка лог. "1" на линии E */


#define LCD_E_SET PORTC|=0x02
/* установка лог. "0" на линии E */
#define LCD_E_CLR PORTC&=0xFD
/* установка лог. "1" на линии RS */
#define LCD_RS_SET PORTC|=0x01
/* установка лог. "0" на линии RS */
#define LCD_RS_CLR PORTC&=0xFE

/* макрос, указывающий функции, что


передаются команды */
#define LCD_COMMAND 0
/* макрос, указывающий функции, что
передаются данные */
#define LCD_DATA 1

#define lcd_putc(x) lcd_putbyte(x, LCD_DATA)

/* функция передачи тетрады в жки */


void lcd_putnibble(char t)
{
t&=0x0F;
t<<=4;
LCD_E_SET;
_delay_us(50);
PORTC&=0x0F;
PORTC|=t;
LCD_E_CLR;
_delay_us(50);
}

/* функция передачи байта в жки.


char c - сам байт
char rs - переменная, указывающая что передается:
rs = 0 - команда (устанавливается линия RS)
rs = 1 - данные (сбрасывается линия RS) */
void lcd_putbyte(char c, char rs)

Лист
ОКПО.421411.006ПЗ 2
Изм. Лист № докум. Подпись Дата
{
char highc=0;
highc=c>>4;
if (rs==LCD_COMMAND) LCD_RS_CLR;
else LCD_RS_SET;
lcd_putnibble(highc);
lcd_putnibble(c);
}

/* функция инициализации работы жки


в 4-битном режиме, без курсора */
void lcd_init()
{
_delay_ms(15);
lcd_putbyte(0x33, LCD_COMMAND);
_delay_ms(4);
lcd_putbyte(0x32, LCD_COMMAND);
_delay_us(100);
lcd_putbyte(0x28, LCD_COMMAND);
_delay_ms(1);
lcd_putbyte(0x0C, LCD_COMMAND);
_delay_ms(1);
lcd_putbyte(0x06, LCD_COMMAND);
_delay_ms(1);
}

/* функция очистки дисплея и возврата


курсора в начальную позицию*/
void lcd_clear()
{
lcd_putbyte(0x01, LCD_COMMAND);
_delay_us(1500);
}

/* функция перемещения курсора в заданную позицию


col - номер знакоместа по горизонтальной оси (от 0 до 15)
row - номер строки (0 или 1) */
void lcd_gotoxy(char col, char row)
{
char adr;
adr=0x40*row+col;
adr|=0x80;
lcd_putbyte(adr, LCD_COMMAND);
}

/* Адрес микросхемы PCF8583 на шине I2C */


#define RTC_ADDR 0b10100000

/* инициализация портов, подключенных к жки */


void init_port()
{
DDRC=0xFF;
PORTC=0x00;
DDRA = 0b00001111;
PORTA = 0x00;
PORTF = 0x00;
PORTB = 0x00;
DDRE= 0b00001111;

/* Передача команды СТАРТ на шину */


void I2C_StartCondition(void)
{

Лист
ОКПО.421411.006ПЗ 2
Изм. Лист № докум. Подпись Дата
/* Передача команды */
TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);

/* Ожидание установки флага TWINT. Это будет


означать окончание установки состояния СТАРТ */
while (!(TWCR & (1<<TWINT)));

/* Передача байта по шине с установлением


подтверждения (ACK)*/
void I2C_SendByte(unsigned char c)
{
/* Запись данных в регистр TWDR. Очистка бита
TWINT для начала передачи */
TWDR = c;
TWCR = (1<<TWINT)|(1<<TWEN);

/* Ожидание установки флага TWINT. Это будет


означать окончание передачи и установку
подтверждения (ACK) */
while (!(TWCR & (1<<TWINT)));
}

/* Получение байта */
unsigned char I2C_RecieveByte(void)
{
unsigned char dat;

/* Запуск процесса */
TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWEA);

/* Ожидание установки флага TWINT, говорящем


об окончании передачи.*/
while (!(TWCR & (1<<TWINT)));

/* Считывание данных */
dat = TWDR;
return dat;
}

/* Получение байта без установки подтверждения */


unsigned char I2C_RecieveLastByte(void)
{
unsigned char dat;
/* Запуск процесса */
TWCR = (1<<TWINT)|(1<<TWEN)|(0<<TWEA);

/* Ожидание установки флага TWINT, говорящем


об окончании передачи.*/
while (!(TWCR & (1<<TWINT)));

dat = TWDR;
return dat;
}

/* Передача состояния СТОП на шину */


void I2C_StopCondition(void)
{
TWCR = (1<<TWINT)|(1<<TWSTO)|(1<<TWEN);
}

/* Глобальные переменные, хранящие текущее время и дату */


static unsigned char sec, min, hour,
year_date, day_month;

Лист
ОКПО.421411.006ПЗ 2
Изм. Лист № докум. Подпись Дата
/* Считывание текущего времени из микросхемы I2C */
void get_time(void)
{
I2C_StartCondition();
I2C_SendByte(RTC_ADDR);
I2C_SendByte(0x02);
I2C_StartCondition();
I2C_SendByte(RTC_ADDR|1);
sec=I2C_RecieveByte();
min=I2C_RecieveByte();
hour=I2C_RecieveByte();
year_date=I2C_RecieveByte();
day_month=I2C_RecieveLastByte();
I2C_StopCondition();
}

void write_time(void)
{
I2C_StartCondition();
I2C_SendByte(RTC_ADDR);
I2C_SendByte(0x02);
I2C_SendByte(sec);
I2C_SendByte(min);
I2C_SendByte(hour);
I2C_StopCondition();
}

void write_time0(void)
{
I2C_StartCondition();
I2C_SendByte(RTC_ADDR);
I2C_SendByte(0x02);
I2C_SendByte(0b00000000);
I2C_SendByte(0b00000000);
I2C_SendByte(0b00000000);
I2C_SendByte(0b00000000);
I2C_SendByte(0b00000000);
I2C_StopCondition();
}

/* Функция вывода времени на ЖКИ */


void put_time(void)
{
/* Первая строка: время */
lcd_gotoxy(0,0);
/* Часы */
lcd_putc(((hour>>4)&0x03)+0x30);
lcd_putc((hour&0x0F)+0x30);
lcd_putc(':');
/* Минуты */
lcd_putc((min>>4)+0x30);
lcd_putc((min&0x0F)+0x30);
lcd_putc(':');
/* Секунды */
lcd_putc((sec>>4)+0x30);
lcd_putc((sec&0x0F)+0x30);
}

void timer_ini(void)
{
TCCR3B |= (1<<WGM32); // устанавливаем режим СТС (сброс по совпадению)
TIMSK |= (1<<OCIE3A); //устанавливаем бит разрешения прерывания 3ого счетчика
по совпадению с OCR1A(H и L)
OCR3AH = 0b00100110; //записываем в регистр число для сравнения

Лист
ОКПО.421411.006ПЗ 2
Изм. Лист № докум. Подпись Дата
OCR3AL = 0b00100101; //записываем в регистр число для сравнения
TCCR3B |= (1<<CS30)| (1<<CS30);//установим делитель 1024/ 00100110 00100101
(1sek)

TCCR1B |= (1<<WGM12); // устанавливаем режим СТС (сброс по совпадению)


TIMSK |= (1<<OCIE1A); //устанавливаем бит разрешения прерывания 1ого счетчика
по совпадению с OCR1A(H и L)
OCR1AH = 0b01100001; //записываем в регистр число для сравнения
OCR1AL = 0b10101000; //записываем в регистр число для сравнения
//TCCR1B |= (1<<CS10);//установим делитель 0. 0110 0001 10101000 /25000(1/4
полупериода)

TCCR0 |= (1<<CS01)|(1<<CS02); // устанавливаем режим normal


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

//----------------------------------------
void ADC_Init(void)
{
ADCSRA |= (1<<ADEN) // Разрешение использования АЦП
|(1<<ADSC)//Запуск преобразования
|(1<<ADFR)//Непрерывный режим работы АЦП
|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0)//Делитель 128 = 64 кГц
|(1<<ADIE);//Разрешение прерывания от АЦП
//ADMUX |= (1<<REFS1)|(1<<REFS0); //Выбор первого входа преобразования ADCSRA|
=(1<<ADSC)//Запуск преобразования
ADMUX = 0b01000000; //Выбор НУЛЕВОГО входа преобразовани
}

//--------------------------------------------
ISR (INT4_vect)
{
TCNT1H = 0b00000000; //обнуление счетчика таймера, считаеющего чеетверть периода
нагревателей
TCNT1L = 0b00000000;
TCCR1B |= (1<<CS10);//ВКЛЮЧИМ СЧЕТЧИК установим делитель 0. 0110 0001
10101000 /25000(1/4 полупериода)
//PORTE |= 1<<PE0; // включаем самый теплый нагреватель

}
//-----------------------
ISR (TIMER1_COMPA_vect)
{

if (en_heat==1){

if(counter_for_compOCRA1==0){
PORTE |= 1<<PE1; // включаем самый 75%ный нагреватель
counter_for_compOCRA1=counter_for_compOCRA1+1;
}

if (counter_for_compOCRA1==1)
{
PORTE |= 1<<PE2; // включаем самый 50%ный нагреватель
counter_for_compOCRA1=counter_for_compOCRA1+1;
}

Лист
ОКПО.421411.006ПЗ 2
Изм. Лист № докум. Подпись Дата
if (counter_for_compOCRA1==2)
{
PORTE |= 1<<PE3; // включаем самый 25%ный нагреватель
_delay_us(50);
TCCR1B &= 11111000 ;//выключаем таймер счетчик 1
PORTE &= 11110000; // выключаем все нагреватели
counter_for_compOCRA1=0;
}

}
//-----------------------
//-----------------------
ISR (TIMER3_COMPA_vect)
{
IMPULS_FROM_ENKODER=TCNT0;
//if () // СИГНАЛИЗАЦИЯ ОШИБКИ
//{
//}

}
//-----------------------
//----------------------------------------
ISR(ADC_vect)
{

low_adc = ADCL;
high_adc = ADCH;//Верхняя часть регистра ADC должна быть считана последней, иначе
не продолжится преобразование
adc_value = high_adc*256+low_adc;
temr = ((float)adc_value-53.67)/2;

//temp[y1]=temr;

if (y1==0)
{
ADMUX = 0b01000000; //Выбор НУЛЕВОГО входа преобразовани
}

if (y1==1)
{ temr1=temr;
ADMUX = 0b01000001; //Выбор первого входа преобразования
}

if (y1==2)
{ temr2=temr;
ADMUX = 0b01000010; //Выбор 2 входа преобразования
}

if (y1==3)
{temr3=temr;
ADMUX = 0b01000011; //Выбор 3 входа преобразования
}

if (y1==4)
{temr4=temr;
ADMUX = 0b01000100; //Выбор 4 входа преобразования
}

if (y1==5)

Лист
ОКПО.421411.006ПЗ 2
Изм. Лист № докум. Подпись Дата
{temr5=temr;
ADMUX = 0b01000101; //Выбор 5 входа преобразования
}

if (y1==6)
{temr6=temr;
ADMUX = 0b01000110; //Выбор 6 входа преобразования
}

if (y1==7)
{
temr7=temr;
ADMUX = 0b01000111; //Выбор 7 входа преобразования
}
ADCSRA |= (1<<ADSC);//Запуск преобразования

y1=y1+1;

if (y1==8)
{
temr8=temr;y1=0; }
}
//----------------------------------------

int main()
{

EIMSK |= (1<<INT4); // инициализируем внешние прерывания по низкому уровню


timer_ini();
sei();
ADC_Init();

usart_1_init(); // инициализируем Uart


char buf[22]; // массив для хранения значения напряжения
uint16_t t=0;
uint16_t chan=5;

init_port();
lcd_init();
lcd_clear();
int i = 0;
PORTA = 0x00;
DDRA = 0x00;
/* Инициализация обмена по TWI на 100 кГц */
TWBR=0x2A;
/* Инициализация адреса МК на шине I2C */
TWAR=0x00;
int knopka_start=0;

while (1) {

lcd_clear();
if(PIND&(1<<4)){ //KNOPKA START

Лист
ОКПО.421411.006ПЗ 2
Изм. Лист № докум. Подпись Дата
if(PINA&(1<<4)){ // KONCEVOY VIKLUCHATEL
if(~(PINA&(1<<4))){ // KONCEVOY VIKLUCHATEL

if (PINA&(1<<5)) // DATCHIK POLOZHENIA 1


{
en_heat=1; //включим 75 50 25 нагреватели
PORTE|=(1<<0); //Включим 100% нагреватель
i4=i4+1;

if (((trebuemaya_temp<(temr1+10))&&(trebuemaya_temp>(temr1-10)))||(i5=1))
{ i5=1;i4=0;
if(trebuemaya_temp>(temr1+10)){
en_heat=0; //выключим 75 50 25
нагреватели
PORTE&=~(1<<0); //Выключим 100%
нагреватель
}
if(trebuemaya_temp<(temr1-10)){
en_heat=1; //включим 75 50 25 нагреватели
PORTE|=(1<<0); //Включим 100% нагреватель
}

PORTA|=(1<<PA0); // ЗАПУСКАЕМ ДВИГАТЕЛЬ


_delay_ms(100);

if((IMPULS_FROM_ENKODER<(IMPULS_FROM_ENKODER_ZAD-5))||
(IMPULS_FROM_ENKODER>(IMPULS_FROM_ENKODER_ZAD+5))){
PORTA|=(1<<PA1); // ДВИГАТЕЛЬ РАБОТАЕТ НЕКОРРЕКТНО ВКЛЮЧАЕМ
БУЗЗЕР
}

if((IMPULS_FROM_ENKODER>(IMPULS_FROM_ENKODER_ZAD-
5))&&(IMPULS_FROM_ENKODER<(IMPULS_FROM_ENKODER_ZAD+5))){
// ДВИГАТЕЛЬ РАБОТАЕТ КОРРЕКТНО ВЫКЛЮЧАЕМ БУЗЗЕР

if(PINA&(1<<6)) {// ДАТЧИК ПОЛОЖЕНИЯ 3 НА ВЫХОДЕ


counter_detals=counter_detals+1;
}
lcd_clear();
lcd_putc('Temp=');
lcd_putc((unsigned char) (temr1/100) +0x30);//Преобразуем
число в код числа);
lcd_putc(((unsigned char)(temr1/10)%10 +0x30)); // ВЫВОДИМ
ТЕМПЕРАТУРУ ТЕРМОУСТАНОВКИ НА ЖКИ
lcd_putc(((unsigned char) (temr1))%10 +0x30);

lcd_putc(1);
lcd_putc('Det=');
lcd_putc((unsigned char) (counter_detals/100)
+0x30);//Преобразуем число в код числа);
lcd_putc(((unsigned char)(counter_detals/10)%10 +0x30)); //
ВЫВОДИМ КОЛИЧЕСТВО ДЕТАЛЕЙ НА ЖКИ
lcd_putc(((unsigned char) (counter_detals))%10 +0x30);

if(chan==1){ //ВЫВОД ВРЕМЕНИ РАБОТЫ НА ЖКИ


lcd_clear();
get_time();
put_time();
}

Лист
ОКПО.421411.006ПЗ 2
Изм. Лист № докум. Подпись Дата
if (chan==2)
{
lcd_clear();
_putc((unsigned char) (temr1/100) +0x30);//Преобразуем число в
код числа);
] lcd_putc(((unsigned char)(temr1/10)%10 +0x30)); // ВЫВОДИМ
ТЕМПЕРАТУРУ ТЕРМОУСТАНОВКИ НА ЖКИ
lcd_putc(((unsigned char) (temr1))%10 +0x30);

lcd_putc(1);

lcd_putc((unsigned char) (temr2/100) +0x30);//Преобразуем


число в код числа);
lcd_putc(((unsigned char)(temr2/10)%10 +0x30)); // ВЫВОДИМ
ТЕМПЕРАТУРУ ТЕРМОУСТАНОВКИ НА ЖКИ
lcd_putc(((unsigned char) (temr2))%10 +0x30);

lcd_putc(1);
lcd_putc((unsigned char) (temr3/100) +0x30);//Преобразуем
число в код числа);
lcd_putc(((unsigned char)(temr3/10)%10 +0x30)); // ВЫВОДИМ
ТЕМПЕРАТУРУ ТЕРМОУСТАНОВКИ НА ЖКИ
lcd_putc(((unsigned char) (temr3))%10 +0x30);

lcd_putc(1);

lcd_putc((unsigned char) (temr4/100) +0x30);//Преобразуем


число в код числа);
lcd_putc(((unsigned char)(temr4/10)%10 +0x30)); // ВЫВОДИМ
ТЕМПЕРАТУРУ ТЕРМОУСТАНОВКИ НА ЖКИ
lcd_putc(((unsigned char) (temr4))%10 +0x30);

lcd_putc(1);

if (chan==3)
{
lcd_clear();
lcd_putc((unsigned char) (temr4/100) +0x30);//Преобразуем число в код
числа);
lcd_putc(((unsigned char)(temr4/10)%10 +0x30)); // ВЫВОДИМ ТЕМПЕРАТУРУ
ТЕРМОУСТАНОВКИ НА ЖКИ
lcd_putc(((unsigned char) (temr4))%10 +0x30);

lcd_putc(1);

lcd_putc((unsigned char) (temr5/100) +0x30);//Преобразуем число в код


числа);
lcd_putc(((unsigned char)(temr5/10)%10 +0x30)); // ВЫВОДИМ ТЕМПЕРАТУРУ
ТЕРМОУСТАНОВКИ НА ЖКИ
lcd_putc(((unsigned char) (temr5))%10 +0x30);

lcd_putc(1);
lcd_putc((unsigned char) (temr6/100) +0x30);//Преобразуем число в код
числа);
lcd_putc(((unsigned char)(temr6/10)%10 +0x30)); // ВЫВОДИМ ТЕМПЕРАТУРУ
ТЕРМОУСТАНОВКИ НА ЖКИ
lcd_putc(((unsigned char) (temr6))%10 +0x30);

lcd_putc(1);

Лист
ОКПО.421411.006ПЗ 2
Изм. Лист № докум. Подпись Дата
lcd_putc((unsigned char) (temr7/100) +0x30);//Преобразуем число в код
числа);
lcd_putc(((unsigned char)(temr7/10)%10 +0x30)); // ВЫВОДИМ ТЕМПЕРАТУРУ
ТЕРМОУСТАНОВКИ НА ЖКИ
lcd_putc(((unsigned char) (temr7))%10 +0x30);

lcd_putc(1);
}
}
}

if(i4==100){
en_heat=0; //выключим 75 50 25 нагреватели
PORTE&=~(1<<0); //Выключим 100% нагреватель
i4=0;}

}
else // DATCHIK POLOZHENIA 1 else
{
}
}

else{ // KONCEVOY VIKLUCHATEL else


}

else{ //KNOPKA START else

while (PINA&(1<<7))
{
DDRF=0b10000000;
PORTF=0b10000000;
lcd_putc('Request t=');
if (PINB&(1<<0)) //B0 +10 К ТЕМПЕРАТУРЕ
{
trebuemaya_temp=trebuemaya_temp+10;
}

if (PINB&(1<<1)) //B1 -10 К ТЕМПЕРАТУРЕ


{
trebuemaya_temp=trebuemaya_temp-10;
}

if (PINB&(1<<2)) //B2 +5 К ТЕМПЕРАТУРЕ


{
trebuemaya_temp=trebuemaya_temp+5;
}

if (PINB&(1<<3)) //B3 -5 К ТЕМПЕРАТУРЕ


{
trebuemaya_temp=trebuemaya_temp-5;
}

if (PINB&(1<<4)) //B4 +1 К ТЕМПЕРАТУРЕ


{
trebuemaya_temp=trebuemaya_temp+1;
}

if (PINB&(1<<5)) //B5 -1 К ТЕМПЕРАТУРЕ


{
trebuemaya_temp=trebuemaya_temp-1;
}

Лист
ОКПО.421411.006ПЗ 2
Изм. Лист № докум. Подпись Дата
}

lcd_clear();
lcd_putc('Ct=');
lcd_putc((unsigned char) (215/100) +0x30);//Преобразуем число
в код числа);
lcd_putc(((unsigned char)(temr1/10)%10 +0x30)); // ВЫВОДИМ
ТЕМПЕРАТУРУ ТЕРМОУСТАНОВКИ НА ЖКИ
lcd_putc(((unsigned char) (temr1))%10 +0x30);

lcd_putc(1);
lcd_putc('Rt=');
lcd_putc((unsigned char) (( trebuemaya_temp-temr1)/100)
+0x30);//Преобразуем число в код числа);
lcd_putc(((unsigned char)(( trebuemaya_temp-temr1)/10)%10
+0x30)); // ВЫВОДИМ ОТКЛОНЕНИЯ ТЕРМОУСТАНОВКИ НА ЖКИ
lcd_putc(((unsigned char) (( trebuemaya_temp-temr1)))%10
+0x30);
}
}
}

Лист
ОКПО.421411.006ПЗ 2
Изм. Лист № докум. Подпись Дата

Вам также может понравиться