Проектирование микропроцессорной системы управления (МКС)

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

Рубрика Коммуникации, связь, цифровые приборы и радиоэлектроника
Вид курсовая работа
Язык русский
Дата добавления 26.06.2016
Размер файла 3,3 M

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

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

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

МИНИСТЕРСТВО ОБРАЗОВАНИЯ РЕСПУБЛИКИ БЕЛАРУСЬ

УЧРЕЖДЕНИЕ ОБРАЗОВАНИЯ

ГОМЕЛЬСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ ИМЕНИ П.О.СУХОГО

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

Кафедра «Промышленная электроника»

РАСЧЕТНО-ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

к курсовому проекту

по дисциплине «Микропроцессорная техника»

на тему: «Проектирование микропроцессорной системы управления (МКС)»

Выполнила: студентка гр. ПМ-41

Дворник М.Л.

Руководить проекта: доцент

Виноградов Э. М.

Гомель 2015

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

СОДЕРЖАНИЕ

микропроцессорная система алгоритм программа

ВВЕДЕНИЕ

1. Описание алгоритма работы и разработка структурной схемы МКС

1.1 Алгоритм работы МКС

1.2 Пульт управления

1.3 Структурная схема МКС

2. Разработка принципиальной схемы МКС

2.1 Схема подключения микроконтроллера

2.2 Схема ввода цифровых сигналов

2.3 Схема ввода аналоговых сигналов

2.4 Схемы вывода цифровых управляющих сигналов

2.5 Схема вывода аналогового управляющего сигнала

2.6 Схема подключения ЖК-дисплея

2.7 Схема подключения клавиатуры

2.8 Подключение аварийного датчика

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

3. Разработка программного обеспечения МКС

3.1 Разработка блок-схемы алгоритма главной программы работы МКС

3.2 Функция инициализации init( )

3.3 Функция interrupt( )

3.4 Функция digit( )

3.5 Функция analog( )

3.6 Функция display( )

3.7 Программа управления МКС

Заключение

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

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

ВВЕДЕНИЕ

В курсовом проекте требуется разработать микроконтроллерную систему (МКС) управления некоторым технологическим объектом. Структура МКС приведена на рисунке 1.1. МКС состоит из объекта управления, микроконтроллера, пульта управления и аппаратуры их взаимной связи. Микроконтроллер (МК) путем периодического опроса принимает информацию об объекте от аналоговых и цифровых датчиков. Выходные сигналы датчиков вследствие их различной физической природы могут потребовать промежуточного преобразования на аналого-цифровых преобразователях (АЦП) или на схемах формирователей сигналов (ФС), которые чаще всего выполняют функции гальванической развязки и формирования уровней двоичных сигналов стандарта ТТЛ.

Рисунок 1.1 - Структура микроконтроллерной системы

МК с требуемой периодичностью вырабатывает управляющие сигналы на своих выходных портах в соответствии с законом управления. Некоторая часть этих сигналов интерпретируется как совокупность простых двоичных сигналов, которые через схемы формирователей (усилители мощности, реле, оптроны и т.п.) поступают на исполнительные устройства. Другая часть управляющих сигналов представляет собой многоразрядные двоичные коды, которые через цифро-аналоговые преобразователи (ЦАП) воздействуют на исполнительные устройства аналогового типа. АЦП и ЦАП могут быть отдельными блоками МКС, но могут являться внутренними модулями микроконтроллера. Это определяется типом применяемого МК.

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

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

1. ОПИСАНИЕ АЛГОРИТМА РАБОТЫ И РАЗРАБОТКА СТРУКТУРНОЙ СХЕМЫ МКС

1.1 Алгоритм работы МКС

Блок-схема алгоритма (БСА) работы МКС представлена на рисунке 1.2.

Рисунок 1.2 - Блок-схема алгоритма работы МКС

После включения электропитания или нажатия кнопки «Сброс» на пульте управления выполняется начальная установка (инициализация) системы (блок 1 БСА): вывод начальных значений управляющих воздействий настройка внутренних модулей МК, таймер опроса начинает отсчет времени Топр. Блок 2 выполняет задачу логического управления. В нем производится ввод и обработка цифровой информации, поступающей от двоичных датчиков. В блоке 3 производится ввод и обработка аналоговой информации. Далее в блоке 4 происходит опрос клавиатуры, находящейся на пульте управления. Если ни одна из клавиш клавиатуры не была нажата, то программа переходит к блоку 8, в котором проверяется, не прошло ли время опроса Топр. Если время истекло, то программа вновь переходит на опрос клавиатуры (блок 4). Если же оператор нажал какую-либо клавишу клавиатуры с целью вывода на дисплей значения входного напряжения U1-U5, то программа переходит к блоку 6, в котором в зависимости от номера нажатой клавиши подготавливаются данные, а в блоке 7 происходит их вывод на дисплей. После этого в блоке 8 проверяется, не прошло ли время опроса Топр. Если время опроса истекло, то программа переходит к блоку 9, в котором таймер подготавливается для нового отсчета времени Топр. Затем программа переходит на выполнение блока 2 алгоритма, т.е. зацикливается.

Рисунок 1.3 - БСА обработки цифровой информации

Блок- схема алгоритма обработки цифровой информации приведена на рисунке 1.3. Сигналы от двоичных датчиков X1, X2, X3, X4, X5 вводятся в МК и запоминаются в его памяти данных (ПД). Затем вычисляется значение логической (булевой) функции f()=). Это значение выдается в качестве управляющего сигнала Y1 по соответствующему выходному каналу на исполнительное устройство. При единичном значении логической функции f()=)микроконтроллер вырабатывает выходной сигнал ТТЛ-уровня Y=1 длительностью t1. Форма сигнала Y1 приведена на рисунке 1.4.

Рисунок 1.4 - Форма сигнала Y1

На рисунке 1.5 приведена БСА обработки аналоговой информации. Сигналы U1, U2, U3, U4, U5 от аналоговых датчиков (однополярное напряжение от 0 до +5 В) преобразуется в цифровую форму с помощью АЦП, входящего в состав МК. С выхода АЦП 10-разрядные коды W1, W2, W3, W4 и W5, представляющие собой целые беззнаковые двоичные числа, поступают на обработку.

Обработка кодов начинается с вычисления функции g()=9•W1+max{K1+W2; (W3+K3)/8}, где коэффициенты K1, K2, K3 - 16-разрядные целые двоичные числа, хранящиеся в программной памяти МК. Полученное значение функции g()=9•W1+max{K1+W2; (W3+K3)/8} сравнивается с константой Q (уставкой), хранящейся в программной памяти. В зависимости от результата сравнения МК вырабатывает двоичные управляющие сигналы ТТЛ-уровня Y2 или Y3 длительностью t2 или t3 соответственно. Форма сигналов Y2 и Y3 аналогична сигналу Y1, изображенному на рисунке 1.4.

Рисунок 1.5 - БСА обработки аналоговой информации

Цифровой код W4, образованный аналоговым сигналом U4, используется для вычисления функции e()=3•W4/K4, где K4 - коэффициент, хранящийся в программной памяти. Полученное значение функции e()=3•W4/K4используется для формирования управляющего сигнала Y4, представляющего собой последовательность импульсов с широтной модуляцией. При широтно-импульсной модуляции (ШИМ) период следования Т импульсов и их частота fявляются постоянными, а изменяется длительность импульсов tи в диапазоне от tи.мин до tи.макс пропорционально значению функцииe()=3•W4/K4, как показано на рисунке 1.6. Частота импульсов ШИМ определяется исходя из заданной тактовой частоты fosc работы МК. (16МГц).

Цифровой код W5, образованный аналоговым сигналом U5, используется для вычисления функции h()=7•W5/K5. Полученной значение функции h()=7•W5/K5служит для формирования импульсной последовательности ШИМ, из которой путем фильтрации образуется аналоговый сигнал Y5, поступающий на исполнительное устройство.

Рисунок 1.6 - Временные диаграммы сигналов при широтно-импульсной модуляции

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

1.2 Пульт управления

Пульт управления должен содержать следующие элементы.

1. Жидкокристаллический дисплей (ЖКД) для отображения значений аналоговых входных напряжений U1-U5.

2. Клавишный переключатель для выбора вида отображаемой информации на ЖДК.

3. Кнопка «Сброс», при нажатии на которую происходит сброс микроконтроллера.

4. Светодиод индикации и динамик, на которые подаются сигналы от МК в аварийном режиме.

Общий вид передней панели пульта управления приведен на рисунке 1.7.

Рисунок 1.7 - Вид передней панели пульта управления

После включения электропитания МКС находится в рабочем режиме, в котором циклически выполняется ввод и обработка информации от датчиков с периодов Топр (4.2 с). В этом режиме на ЖДК выводится текст сообщения «WorkMode» (рабочий режим). Оператор при нажатии на одну их клавиш с надписями «U1», «U2», «U3», «U4», «U5» может вывести на ЖДК значения входных напряжений U1, U2, U3, U4 или U5, которые подаются от датчиков. Текст сообщения на ЖДК при этом может быть следующим:

WorkMode

U1 = 2.345 V

При поступлении сигнала от аварийного датчика МКС переходит в аварийный режим. В этом режиме прекращается ввод информации от датчиков и формирование управляющих сигналов, а на пульте управления включается аварийная сигнализация (световая с частотой 1Гц и звуковая с частотой 500 Гц, на дисплей выводится текст сообщения «Error» - ошибка). Выход из аварийного режима возможен только после выключения питания МКС.

1.3 Структурная схема МКС

Структурная схема разрабатываемой МКС приведена на рисунке 2.1. Ее центральной частью является микроконтроллер PIC16F877 фирмы Microchip.

Аналоговые сигналы U1, U2, U3, U4, U5 поступают на выводы МК, которые являются входными каналами внутреннего АЦП. Цифровые (двоичные) сигналы X1, X2, X3, X4, X5 поступают на входы МК, которые являются выводами порта, настроенных на ввод. Управляющие сигналы Y1, Y2 и Y3, представляющие собой одиночные импульсы определенной длительности, вырабатываются микроконтроллером. Управляющий сигнал Y1 представляет собой периодическую последовательность импульсов с ШИМ, которая вырабатывается внутренним модулем МК. Сигналы Y1-Y4 усиливаются по току с помощью формирователей ФС1-ФС4. Аналоговый управляющий сигнал Y5 формируется с помощью схемы ФС5, на которую подаются импульсы с ШИМ от микроконтроллера.

Пульт оператора включает в себя: жидкокристаллический дисплей (ЖДК) для отображения аналоговых сигналов (напряжений) U1-U5; клавиатуру с 5-ю клавишами для выбора сигналов; кнопку «Сброс» для сброса МК; устройство аварийной сигнализации, выдающее звуковые и световые сигналы определенной частоты.

Рисунок 1.8 - Структурная схема МКС

2. РАЗРАБОТКА ПРИНЦИПИАЛЬНОЙ СХЕМЫ МКС

2.1 Схема подключения микроконтроллера

Для работы PIC-микроконтроллера необходимо:

1) присоединить времязадающую цепь для работы внутреннего тактового генератора;

2) обеспечить сброс МК при включении электропитания.

На рисунке 2.1 приведена типовая схема подключения микроконтроллера PIC16F877, который используется для выполнения курсового проекта.

Для обеспечения генерации тактовой частоты fOSCк выводам OSC1 и OSC2 подключен кварцевый резонатор ZQ1. Частота кварцевого резонатора fZQвыбирается из условия fOSC=fZQи может быть в пределах 0…20МГц (По заданию 16МГц).

Рисунок 2.1 - Схема подключения микроконтроллера PIC16F877

Конденсаторы С1, С2 служат для облегчения запуска внутреннего тактового генератора. Цепочка С3, R1 обеспечивает сброс МК при подачи электропитания. С помощью кнопки SB1, расположенной на пульте управления, сброс МК может выполнить оператор в любой момент времени.

Конденсатор С4 служит для фильтрации высокочастотных помех, возникающих на выводах источника питания при работе микросхемы.

33 двунаправленные линии портов A, B, C, D, Eмикроконтроллера могут быть использованы в МКС для ввода и вывода данных.

2.2 Схема ввода цифровых сигналов

Так как по заданию цифровые сигналы X1-X5 являются двоичными сигналами ТТЛ-уровней, то их можно непосредственно подавать на линии портов МК. Необходимо эти линии настроить на ввод.

На рисунке 2.2 приведена схема подключения сигналов X1-X5 к линиям RC3-RC7 порта С микроконтроллера. Разъем XS1 (розетка) служит для подключения соединительного кабеля (вилки XP1) от датчиков цифровых сигналов.

Рисунок 2.2 - Схема подключения сигналов X1-X5 к МК

2.3 Схема ввода аналоговых сигналов

Так как аналоговые сигналы U1-U5 по заданию являются напряжениями постоянного тока, изменяющимися в пределах от 0 до +5 В, то их можно непосредственно подавать на линии портов, которые служат аналоговыми каналами внутреннего модуля АЦП микроконтроллера.

На рисунке 2.3 приведена схема подключения сигналов U1-U5 к линиям RA0-RA5 порта А микроконтроллера. Эти линии могут быть настроены как аналоговые каналы AN0-AN4 модуля АЦП. Разъем XS2 (розетка) служит для подключения соединительного кабеля (вилки XP2) от датчиков аналоговых сигналов.

Рисунок 2.3 - Схема подключения аналоговых сигналов U1-U5 к МК

2.4 Схемы вывода цифровых управляющих сигналов

В проектируемой МКС имеются 4 цифровых управляющих сигнала. Сигналы Y1, Y2, Y3 представляют собой одиночные импульсы ТТЛ-уровней, поступающие на исполнительные устройства МКС. Сигнал Y4 - это периодическая последовательность импульсов с широтно-импульсной модуляцией, вырабатываемая внутренним модулем ШИМ микроконтроллера.

Управляющие сигналы снимаются с линий портов МК. Нагрузочная способность линий портов PIC-микроконтроллеров довольно высока: максимальный выходной ток равен 25 мА. Такая нагрузочная способность позволяет подключать многие исполнительные устройства непосредственно к линиям портов МК. Однако, с целью повышения надежности рекомендуется подключать исполнительные устройства к портам МК через буферные элементы, которые в простейшем случае могут представлять собой микросхемы повторителей с открытым коллектором, например, К155ЛП9. Такие микросхемы могут обеспечить ток нагрузки до 40 мА, а главное, при аварийной ситуации в нагрузке, например, коротком замыкании, выходит из строя микросхема повторителя, а не дорогостоящий микроконтроллер.

На рисунке 2.4 приведена схема формирования управляющих сигналов МКС с использованием микросхемы К155ЛП9, в состав которой входят 6 повторителей с открытым коллектором.

Рисунок 2.4 - Схема вывода управляющих сигналов Y1-Y4

Разъем XS3 (розетка) служит для подключения соединительного кабеля (вилки XP3) к исполнительным устройствам.

В некоторых случаях, например, при значительном расстоянии исполнительного устройства от МКС, а также исключения влияния помех от наводок на соединительные провода, необходимо гальваническое разделение, т.е. по постоянному току, цепей МК и управляющих сигналов. На рисунке 2.5 приведена схема формирования управляющего сигнала Y1 с гальванической развязкой, реализованной с помощью транзисторной оптопары АОТ128А. Следует иметь в виду, что источник питания с напряжением +Uп1, -Uп2 должен быть гальванически не связан с основным источником +5 В (получать питание от отдельной обмотки сетевого трансформатора).

Рисунок 2.5 - Схема вывода управляющего сигналаY1 с гальванической развязкой

2.5 Схема вывода аналогового управляющего сигнала

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

Способ преобразования цифровых значений в аналоговые напряжения отличается сравнительной простотой. Он заключается в изменении коэффициента заполнения импульсов прямоугольного напряжения пропорционально исходному цифровому значению. Временные диаграммы импульсов ШИМ были приведены на рисунке 1.6. Если обозначить Т - период ШИМ-сигнала, fШИМ = 1/Т - его частота, а tи - длительность импульса, то коэффициент заполнения г = tи/Т.

В англоязычной литературе вместо коэффициента заполнения используется термин DutyCycle (величина рабочего цикла).

Спектральный анализ ШИМ-сигнала на основе преобразования Фурье позволяет представить этот сигнал в виде суммы постоянной составляющей и отдельных гармоник с различными амплитудами и частотами:

u(t) = U0+U1msin?t+ U2msin?t+ U3msin?t+…,

где U0 - постоянная составляющая, U1m, U2m, U3m… - амплитуды гармоник.

Если ШИМ-сигнал пропустить через фильтр низкой частоты (ФНЧ) и отфильтровать составляющие переменного напряжения, то в идеальном случае остается составляющая постоянного напряжения. При этом выходной сигнал ФНЧ определяется как

u(t) = U0 = Umг,

где Um - амплитуда ШИМ-сигнала.

В PIC-микроконтроллерах ШИМ-сигнал снимается с выводов порта С, поэтому можно считать что Umравно напряжению питания микроконтроллера UDD, следовательно

u(t) = UDDг

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

На рисунке 2.6 приведена схема формирования аналогового напряжения посредством фильтрации ШИМ-сигнала, снимаемого с вывода RC1 порта С. Фильтр низкой частоты представляет собой простейший RC-фильтр 1-го порядка. Операционный усилитель включен по схеме повторителя. Он необходим для устранения влияния сопротивления нагрузки на работу RC-фильтра.

Рисунок 2.6 - Схема подключения фильтра к выходу канала PWM2

Частота среза RC-фильтра равна

fc = 1/2RC (2.1)

ПроизведениеRC называют постоянной времени фильтра.

Выбор параметров RC-фильтра определяется многими факторами, но можно воспользоваться некоторыми рекомендациями для первоначального выбора.

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

, (2.2)

где UDD - напряжение питания МК; TШИМ - период ШИМ-сигнала; - допустимая величина пульсаций на выходе фильтра.

Формула (2.2) предполагает, что постоянная времени RCпо крайней мере в 10 раз больше, чем период ШИМ-сигнала.

Например, если UDD = 5 В, ТШИМ=0,2 мс (частота fШИМ = 5 кГц), допустимая пульсация на выходе фильтра = 0.05 В (1% от UDD), то из формулы (2.2) получим RC = 0.0074 с.

Если взять конденсатор C = 1 мкф, то сопротивление R = 7400 Ом. Выбираем ближайший номинал из стандартного ряда R = 7.5 кОм. Частота среза такого фильтра будет fc = 21.2 Гц.

2.6 Схема подключения ЖК-дисплея

Алфавитно-цифровые ЖК-дисплеи (ЖКД), или по-английски LCD (LiquidCrystalDisplay), представляют собой недорогие и удобные модули, позволяющие сэкономить время и ресурсы при разработке новых изделий. Они обеспечивают отображение большого объема информации при хорошей различимости и низком энергопотреблении.

Японская фирма Hitachi разработала специальную микросхему - контроллер HD44780 для управления подобными ЖК-дисплеями. Этот контроллер определил интерфейс, который стал стандартом «дефакто» для ЖК-дисплеев. Аналоги этого контроллера или совместимые с ним по интерфейсу микросхемы выпускают множество фирм, среди которых Epson, Toshiba, Sanyo, Samsung, Philips. ЖК-дисплеи на базе данного контроллера можно встретить в самым разнообразных устройствах: измерительных приборах, медицинском оборудовании, промышленном и технологическом оборудовании, офисной технике - принтерах, телефонах, факсимильных и копировальных аппаратах.

Контроллер HD44780 может управлять 2-мя строками по 40 символов в каждой (для дисплеев с 4-мя строками по 40 символов используются два однотипных контроллера), при матрице символов 5 х 7 точек.

Существует несколько различных стандартных форматов ЖК-дисплеев (количество символов х число строк); 8х2, 16х1, 16х2, 16х4, 20х1, 20х2, 20х4, 40х2, 40х4. В курсовом проекте будет применяться ЖК-дисплей типа WM-C1602N-2YLY с 32-позиционным индикатором (16х2 символов). Конструктивно дисплей представляет собой печатную плату с установленными на ней контроллером HD44780 и ЖК-индикатором. Плата содержит 14-контактное поле, расположенное в нижней части, а также 2 контакта (выводы питания подсветки) в правой части. Назначение выводов поясняет таблица 2.1.

Таблица 2.1 - Назначение выводов ЖК-дисплея

Основными чертами интерфейса контроллера HD44780 являются такие характеристики.

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

Управление выполняется с использованием трех линий:

- линия RS (выбор регистра), которая определяет, будет передаваться команда или символьные данные;

- линия R/W (чтение/запись), которая определяет направление перемещения данных (R/W = 1 -чтение, R/W = 0 - запись);

- линия Е (разрешение), которая выполняет функцию тактирования с целью синхронизации процесса передачи данных.

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

На рисунке 2.7 приведена схема подключения модуля ЖКД к микроконтроллеру с использованием 4-разрядной шины данных.

Рисунок 2.7 - Схема подключения ЖКД к микроконтроллеру

Вывод R/W дисплея присоединен к общему проводу питания, так как библиотечные функции управления ЖК-дисплеем компилятора mikroCPRO, которые будут использоваться в данном проекте, выполняют только запись данных из микроконтроллера, т.е. при этом должно быть R/W = 0. Потенциометр R1 служит для регулирования контраста отображаемых символов на дисплее.

2.7 Схема подключения клавиатуры

В разрабатываемой МКС на пульте управления имеется простейшая клавиатура, состоящая из клавиш для выбора отображаемой на дисплее информации. Клавиатуры по методу аппаратурной реализации бывают дух видов: кодирующие и некодирующие.

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

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

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

На рисунке 2.8 приведена схема подключения клавиатуры из пяти клавиш SB1-SB5 к порту D микроконтроллера.

Рисунок 2.8 - Подключение клавиатуры к микроконтроллеру

2.8 Подключение аварийного датчика

Так как по заданию X0 от аварийного датчика является двоичным сигналом ТТЛ-уровня, то его можно непосредственно подавать на линию порта МК. Необходимо эту линию настроить на ввод.

На рисунке 2.9 приведена схема подключения сигнала X0 к линии RB0 порта В микроконтроллера. Разъем XS4 (розетка) служит для подключения соединительного кабеля (вилки XP4) от аварийного датчика.

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

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

На рисунке 2.10 приведена схема подключения динамика BA1 для звуковой сигнализации. Транзистор VT1 усиливает по току выходной сигнал с линии RC0 порта.

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

На рисунке 2.11 приведена схема подключения светодиода VD1 для аварийной световой сигнализации.

Рисунок 2.11 - Подключение светодиода для аварийной сигнализации

3. РАЗРАБОТКА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ МКС

3.1 Разработка блок-схемы алгоритма главной программы работы МКС

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

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

Алгоритм работы проектируемой МКС был приведен на рисунке 1.2. По нему составим блок-схемы алгоритма (БСА) главной программы работы МКС, которая на языке Си будет иметь имя main(). БСА этой программы приведена на рисунке 3.1.

Рисунок 3.1 - БСА главной программы main()

Главная программа main() состоит из нескольких функций, которые вызываются по мере надобности согласно алгоритму работы МКС. Такое построение упрощает структуру программы, делает ее более понятной. Кроме того, использование функций облегчает разработку и отладку всей программы.

Согласно БСА на рисунке 3.1 в главную программу входят следующие функции:

init() - функция инициализации МКС;

digit() - функция ввода и обработки цифровой информации;

analog() - функция ввода и обработки аналоговой информации;

display() - функция вывода данных на дисплей.

Кроме этих функций в программу работы МКС будет входить функция обработки прерывания interrupt(), которая обрабатывает запросы прерывания от таймера и аварийного датчика.

В блоке 7 алгоритм главной программы проверяется значение переменной-флага с именем flag_T. Этот флаг устанавливает функция обработки прерывания interrupt(). Если значение flag_T = 0, то время отсчета Топр еще не окончено. По окончании отсчета времени Топр обработчик прерывания устанавливает флаг flag_T = 1, что является для главной программы сигналом к завершению цикла ожидания.

Рассмотрим возможную реализацию функций, составляющую программу работы МКС. Будем считать, что заданы следующие параметры: тактовая частота работы микроконтроллера fOSC= 16МГц, время опроса Топр = 4.2 с.

3.2 Функция инициализации init( )

Функция init() используется для инициализации МКС после включения электропитания или сброса МК при помощи кнопки «Сброс», расположенной на пульте управления. БСА этой функции приведена на рисунке 3.2.

Сначала необходимо настроить линии портов МК на ввод или вывод согласно требованиям подключенных к ним внешних устройств. Далее нужно вывести нулевые начальные значения управляющих сигналов Y1, Y2, Y3, Y4, Y5. Затем необходимо произвести инициализацию ЖКД, клавиатуры, модулей АЦП и ШИМ, а также канала звука по методике, изложенной в описании библиотечных функций mikroCPROдля этих устройств. После инициализации ЖКД надо вывести на дисплей текст «WorkMode», сообщающий о начале работы МКС после запуска микроконтроллера. Заключительным этапом инициализации является настройка таймера TMR0 на заданный режим работы и настройка системы прерывания.

Таймер TMR0 будет использоваться в программе для отсчета времени опроса Топр, при этом он считает импульсы внутреннего тактового генератора. Счетные импульсы поступают с частотой, определяемой частотой системной синхронизации и коэффициентом предварительного деления, задаваемым регистром специальных функций OPTION_REG.

Рисунок 3.2 - БСА функции инициализации init( )

Формат регистра OPTION_REGследующий:

Коэффициент деления выбирают с помощью битов PS2, PS1, PS0 в диапазоне от 2 до 256, как показано в таблице 3.1.

Таблица 3.1 - Выбор коэффициента деления с помощью регистра OPTION_REG

Например, при использовании тактовой частоты fOSC = 16МГц период тактовых импульсов будет TOSC = 1 / fOSC = 0,0625мкс, командный (машинный) цикл будет 4 х TOSC = 0,8мкс (частота тактирования внутренне делится на 4). Таким образом, если, например, выбрать коэффициент деления 16, то содержимое счетного регистра таймера будет увеличиваться через каждые 16 мкс.

При переполнении счетного регистра (т.е. переход от 255 к 0) формируется запрос прерывания от таймера (если оно разрешено). Загружая некоторое значение в регистр TMR0, можно управлять количеством отсчетов до получения переполнения.

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

TOV = 4 * TOSC * K * (256 - TMR0), (3.1)

Где TOV - время до момента переполнения (мкс); TOSC-период следования импульсов тактового генератора (мкс); К - коэффициент деления частоты, выбранный с помощью регистра OPTION_REG; TMR0 -значение, загруженное в регистр TMR0 (десятичное число).

Из формулы (3.1) можно определить, что максимальное время переполнения, а следовательно, и время задержки при тактовой частоты 16 МГц, т.е. TOSC = 0,0625мкс, коэффициенте деления К = 256, начальном значении TMR0 = 0 будет:

TOV= 4 * 0,0625 * 256 * (256 - 0) = 16384мкс

Это значение значительно меньше требуемого времени Топр =4.2 с. Поэтому на таймере реализуем задержку на 15мс, а в переменной, например с именем counter (счетчик) будем накапливать количество переполнений с целью получения требуемой задержки в 4.2 с. Необходимое количество переполнений для отсчета времени 4.2с будет:

4200мс / 15мс = 280

Для определения значения, которое должно быть загружено в регистр TMR0 с целью получения заданного времени переполнения, формулу (3.1) удобно записать в виде:

TMR0 = 256 - TOV / (4 * 0.0625 * K) (3.2)

Для получения времени 15мс при тактовой частоте 16 МГц и коэффициенте деления 256 из формулы (3.2) имеем:

TMR0 = 256 - 15000/ (4 * 0.0625 * 256) = 21.625 =22

Таким образом в регистр TMR0 необходимо загрузить десятичное число 22. Для получения коэффициента деления К = 256 в младшие 3 разряда регистра OPTION_REG надо записать двоичное число 111. Кроме этого, необходимо установить бит INTEDG = 1 для того, чтобы прерывание по входу INT микроконтроллера от аварийного датчика возникало при изменении сигнала Х0 от “0” к “1”. Таким образом, в регистр OPTION_REG необходимо загрузить число 0b01000111 = 0x47.

В функции init( )необходимо также разрешить прерывания при переполнении таймера TMR0 и по сигналу на входе INT от аварийного датчика.

В микроконтроллерах семейства PIC16 управление прерываниями реализовано с помощью регистров специальных функций INTCON, PIE, PIR, а программа обработчик прерываний всегда начинает исполняться с адреса 0004h.

Формат регистра INTCON следующий:

GIE - это бит общего разрешения прерываний. Если он установлен в “1”, то все немаскируемые прерывания разрешены. Если он сброшен в “0”, то все прерывания запрещены.

PEIE используется в качестве бита разрешения всех прерываний от периферийных устройств, определяемых с помощью регистров PIEи PIR. В данном курсовом проекте не предусмотрены прерывания от периферийных устройств, поэтому этот бит равен 0.

T0IEявляется битов разрешения (логическая 1) или запрещения (логический 0) прерывания при переполнении таймера TMR0.

Бит T0IF является флагом запроса прерывания при переполнении TMR0 (T0IF = 1 -есть запрос прерывания, T0IF = 0 -нет запроса).

INTE - Это бит разрешения внешнего прерывания по входу INT, а бит INTF-это флаг запроса прерывания по этому входу.

RBIE - это бит разрешения прерывания при изменении уровней сигналов на входах линий RB4, RB5, RB6, RB7 порта B, а бит RBIF-это таймер TMR0 и сигнал по входу INT, который поступает от аварийного датчика. Поэтому для разрешения прерываний от них необходимо в регистр INTCON загрузить число 0b10110000 = 0хB0.

Рассмотрим пример реализации функции инициализации МКС init( ) на языке mikroC.

/* Объявления глобальных переменных, используемых в init() */

// присоединение выводов ЖКД

sbitLCD_ENatRB3_bit;

sbit LCD_D4 at RB4_bit;

sbit LCD_D5 at RB5_bit;

sbit LCD_D6 at RB6_bit;

sbit LCD_D7 at RB7_bit;

// направлениевыводов

sbitLCD_RS_Direction at TRISB2_bit;

sbitLCD_EN_Direction at TRISB3_bit;

sbit LCD_D4_Direction at TRISB4_bit;

sbit LCD_D5_Direction at TRISB5_bit;

sbit LCD_D6_Direction at TRISB6_bit;

sbit LCD_D7_Direction at TRISB7_bit;

// присоединение клавиатуры к порту D микроконтроллера

charkeypadPort at PORTD;

voidinit () //функцияинициаизации

{

// настройка линий портов

TRISA = 0xFF;

TRISB = 0b11111101;

TRISC = 0b11111000;

TRISE = 0;

TRISD = 0xFF;

// вывод начальных значений Y1=Y2=Y3=Y4=Y5=0

PORTE = 0;

PORTC.B0 = 0;

PORTC.B1 = 0;

PORTC.B2 = 0;

PORTB.B1 = 0;

//инициализацияЖКД

Lcd_Init();

Lcd_Cmd(_LCD_CLEAR);

Lcd_Cmd(_LCD_CURSOR_OFF);

Lcd_Out(1,4, "WorkMode");

//инициализация модуля АЦП

ADC_Init();

//инициализация клавиатуры

Keypad_Init();

//инициализация модулей ШИМ

PWM1_Init(5000);

PWM2_Init(5000);

PWM1_Start();

PWM2_Start();

//инициализация линии RC0 порта C для генерации звука

Sound_Init(&PORTC,0);

//инициализациятаймераTMR0

OPTION_REG = 0b11111111;

TMR0 = 22;

//разрешить прерывания от TMR0 и INT

INTCON = 0xB0;

}

3.3 Функция interrupt( )

Функция interrupt( ) является обработчиком прерывания при поступлении запроса прерывания INT(сигнал Х0 от аварийного датчика) или переполнения таймер TMR0. Функция также производит отсчет времени опроса Топр.

Блок-схема алгоритма обработчика прерывания interrupt( )приведена на рисунке 3.3. Так как прерывание по INT должно иметь более высокий приоритет, то программа вначале проверяет флаг запроса внешнего прерывания INTF. Если флаг INTFустановлен (поступил сигнал Х0 от аварийного датчика), то программа переходит на выполнение блоков 2, 3 и 4 аварийной сигнализации. После вывода мигающего светового сигнала с частотой 1 Гц программа в блоке 4 зацикливается. При этом прекращается выполнение каких-либо других действий. Для выхода из аварийного режима нужно отключить питание МК или нажать кнопку «Сброс» на пульте управления.

Рисунок 3.3 - БСА функции interrupt()

Если флаг запроса внешнего прерывания INTFсброшен, то это означает, что запрос прерывания пришел от таймера TMR0 (установлен флаг T0IF). Программа переходит к обслуживанию прерываний от таймера. При каждом прерывании вследствие переполнения таймера инкрементируется переменная-счетчик counter. Если содержимое counterстает равным280, то это означает, что истекло время опроса Топр = 4.2 с (блок 6). После окончания отсчета времени 4.2 с функция interrupt( )устанавливает в 1 переменную-флаг flag_T, что является сигналом для главной программы main( ) начать новый цикл опроса датчиков и выполнения других функций управления. Если же время опроса не закончилось, то в блоке 8 в счетчик таймера TMR0 загружается число 22 для нового отсчета 15мс. Перед выходом из обработчика в блоке 9 выполняется сброс флага запроса прерывания от таймера TMR0, после чего МК будет вновь реагировать на переполнение таймера TMR0.

Рассмотрим пример реализации обработчика прерывания interrupt( ).

/* Определения глобальных переменных, используемых в функции */

charcounter = 0; //счетчик переполнений таймера TMR0

charflag_T = 0; //флаг окончания счета времени опроса

voidinterrupt() //функция-обработчик прерываний от TMR0 и INT

{

if(INTF == 1) //если запрос прерывания по INT

{

Lcd_Cmd(_LCD_CLEAR); //очиститьЖКД

Lcd_Out(1,5,"ERROR"); //вывод на дисплей

Sound_Play(500,10000); //частоты 500Гц, 10секунд

while (1) //вывод мигающего светового сигнала и зацикливание программы

{

PORTB.B1 = 1; //включитьсветодиод

Delay_ms(500); //задержка на 500мс

PORTB.B1 = 0; //выключить светодиод

Delay_ms(500); //задержка на 500мс

}

}

//запрос прерывания от таймера TMR0

counter++;

if(counter == 280) //если прошло время опроса 4.2 с

{

flag_T = 1; //установить флаг окончания отсчета

//времени Топр= 4.2с

counter = 0;

}

TMR0 = 22; //перезагрузить таймер

T0IF_bit = 0; //сбросить флаг запроса прерывания T0IF

}

3.4 Функция digit( )

Функция digit( ) выполняет обработку цифровых сигналов Х1-Х5, поступающих в МКС от двоичных датчиков. БСА обработки цифровой информации была приведена на рисунке 1.3.

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

f() =X1 || (!X2) && (!(X3 ||X4 || X5)). Входные сигналы Х1-Х5 поступают на линии RC3-RC7 порта С, настроенные на ввод. Выходной сигнал Y1 вырабатывается на линии RE0 порта Е, настроенный на вывод. Для формирования одиночного управляющего импульса Y1 длительностью, к пример t1 = 40мкс, будем использовать библиотечную функцию задержки Delay_us.

/* Объявление глобальных переменных, используемых в функции */

sbitX1 atRC3_bit; //битовая переменная X1 на линии порта RC3

sbitX2 atRC4_bit; //битовая переменная X2 на линии порта RC4

sbitX3atRC5_bit; //битовая переменная X3 на линии порта RC5

sbitX4atRC6_bit; //битовая переменная X4 на линии порта RC6

sbitX5atRC7_bit; //битовая переменная X5 на линии порта RC7

sbitY1 atRE0_bit; //битовая переменная Y1 на линии порта RE0

voiddigit() //функция обработки цифровой информации

{

bitf; //битовая переменная для хранения результата

//вычисления логической функции

f() =X1 || (!X2) && (!(X3 || X4 || X5));//вычисление //логической функции

if(f==1) //если результат равен 1

{

Y1=1;

Delay_us(40);

Y1=0;

}

}

3.5 Функцияanalog( )

Функция analog( ) выполняет ввод и обработку аналоговой информации, поступающей в МКС от датчиков. Блок-схема алгоритма этой программы была приведена на рисунке 1.5.

С помощью АЦП, входящего в состав микроконтроллера, аналоговые сигналы U1-U5 преобразуются в 10-разрядные двоичные коды W1-W5. Эти коды должны в ячейках памяти данных (ПД) для дальнейшего использования в программе. Далее вычисляется функция g(W1, W2, W3, K1, K2, K3), которая затем сравнивается с константой Q (уставкой), хранящейся в программной памяти МК.

В зависимости от результата сравнения вырабатываются управляющие сигналы Y2 или Y3, представляющие собой одиночные импульсы длительностью t2 или t3. В блоке 10 вычисляется функция e(W4,K4), которая используется для формирования сигнала Y4 на выходе RC2 микроконтроллера, представляющегося собой импульсную последовательность ШИМ. В блоке 12 вычисляется функция h(W5, K5), которая используется для формирования импульсной последовательности ШИМ на выводе RC1. Из нее путем фильтрации получается сигнал Y5, поступающий на исполнительные. По условию коэффициенты К1-К5, Q - это двухбайтные целые числа, хранящиеся в программной памяти микроконтроллера.

Рассмотрим пример реализации функции analog( ). Предположим, что требуется вычислить функции

g()=9•W1+max{K1+W2; (W3+K3)/8};

e() = 3•W4/K4;

h() = 7•W5/K5.

Коэффициенты К1 =5 , К2 =7 , К3 =10 , К4 = 5, К5 =4 , Q =20.

Длительность импульсов t2 = 16мс, t3 = 58мс.

/*Глобальные переменные, используемые в функции analog() */

//переменные для хранения кодов АЦП

unsignedintW1;

unsignedint W2;

unsignedint W3;

unsignedint W4;

unsignedintW5;

//размещение констант в памяти программ

constcodeintK1 = 5;

const code int K2 = 7;

const code int K3 = 10;

const code int K4 = 5;

const code int K5 = 4;

const code int Q = 20;

intM;

intN;

sbitY2 atRE1_bit; //битовая переменная Y2 на линии порта RE1

sbitY3 atRE2_bit; //битовая переменная Y3 на линии порта RE2

voidanalog()

{

intg; //двухбайтные переменные для хранения

inte; //результатов вычисления

inth; //функцийg(), e(), h()

charDC; //переменная для рабочего цикла ШИМ

//чтение кодов АЦП

W1 = ADC_Read(0); //аналоговый канал 0 (сигнал U1)

W2 = ADC_Read(1); //аналоговый канал 0 (сигнал U2)

W3 = ADC_Read(2); //аналоговый канал 0 (сигнал U3)

W4 = ADC_Read(3); //аналоговый канал 0 (сигнал U4)

W5 = ADC_Read(4); //аналоговый канал 0 (сигнал U5)

N=K1+W2; //вычисление функции g()

M=(W3+K3)/8;

if (N>M)

g =9•W1+N;

else

g =9•W1+M;

if(g>=Q)

{

Y3=1; //выводсигнала Y3

Delay_ms(58);

Y3=0;

}

else

{

Y2 = 1;

Delay_ms(16);

Y2 = 0;

}

e=3•W4/K4; //вычислениефункцииe()

DC=e; //определить величину рабочего цикла

PWM1_Set_Duty(DC); //установить текущий рабочий цикл для //PWM1

h = 7•W5/K5; //вычисление функции h()

DC = h; //определить величину рабочего цикла

PWM2_Set_Duty(DC); //установить текущий рабочий цикл для //PWM2

}

3.6 Функция display( )

Функция display( ) используется для обслуживания пульта управления. БСА этой функции приведена на рисунке 3.4.

В блоках 1, 4, 7, 10, 13 по значению переменной key, в которой хранится номер (1…5), анализируется, какая клавиша была нажата оператором. В зависимости от нажатой клавиши (SB1…SB5) производится вычисление напряжения Uiв вольтах по его коду Wi.

Модуль АЦП в микроконтроллере PIC16F877 выдает 10-разрядный двоичный код. Диапазон изменения выходного кода будет 000h…03FFh, что соответствует входному однополярному напряжению в диапазоне 0… +5000мВ. Чтобы найти напряжение Ui, соответствующее коду Wi, составим пропорцию:

Ui, мВ - Wi

5000, мВ - 03FF

Откуда получим:

Ui = (Wi * 5000) / 03FF, мВ (3.3)

Рисунок 3.4 - БСА функции display()

Полученное по формуле (3.3) значение напряжения Ui будет в милливольтах. Для отображения на дисплее значения Ui в вольтах можно находить цифры путем целочисленного деления результата последовательно на 1000, 100 и 10.

Рассмотрим пример реализации функции display().

/*Глобальные переменные, используемые в функции display( ) */

unsignedint W1; //кодыАЦП

unsignedint W2;

unsignedint W3;

unsignedint W4;

unsignedint W5;

char key; //номернажатойклавиши

voiddisplay()

{

intmvolts; //переменная для хранения величины напряжения в

//милливольтах

charnum; //переменная для хранения цифр напряжения в

//вольтах

switch(key)

{

case 1:

{

mvolts = ((long)W1*5000) / 0x03FF; //преобразование

//кода W1 в/милливольты

Lcd_Cmd(_LCD_CLEAR);

Lcd_Out(1,4, "WorkMode");

Lcd_Out(2,4, "U1=");

num = mvolts / 1000;

Lcd_Chr_Cp(48+num); // выводцифрывкодеASCII

Lcd_Chr_Cp('.'); //вывод на ЖКД десятичной точки

num = (mvolts / 100) % 10; //извлечение десятых долей

//вольта

Lcd_Chr_Cp(48+num);

num = (mvolts / 10) % 10;

Lcd_Chr_Cp(48+num);

num = (mvolts / 10) % 10;

Lcd_Out_Cp("V"); //в текущую позицию курсора

break;

}

case 2:

{

mvolts = ((long)W2*5000) / 0x03FF; //преобразование кода W2 вмилливольты

Lcd_Cmd(_LCD_CLEAR);

Lcd_Out(1,4, "Work Mode");

Lcd_Out(2,4, "U2=");

num = mvolts / 1000;

Lcd_Chr_Cp(48+num); // выводцифры в коде ASCII

Lcd_Chr_Cp('.'); //вывод на ЖКД десятичной точки

num = (mvolts / 100) % 10; //извлечение десятых долей

//вольта

Lcd_Chr_Cp(48+num);

num = (mvolts / 10) % 10;

Lcd_Chr_Cp(48+num);

num = (mvolts / 10) % 10;

Lcd_Out_Cp("V"); //в текущую позицию курсора

break;

}

case 3:

{

mvolts = ((long)W3*5000) / 0x03FF; //преобразование кода W3 вмилливольты

Lcd_Cmd(_LCD_CLEAR);

Lcd_Out(1,4, "Work Mode");

Lcd_Out(2,4, "U3=");

num = mvolts / 1000;

Lcd_Chr_Cp(48+num); // выводцифры в коде ASCII

Lcd_Chr_Cp('.'); //вывод на ЖКД десятичной точки

num = (mvolts / 100) % 10; //извлечение десятых долей

//вольта

Lcd_Chr_Cp(48+num);

num = (mvolts / 10) % 10;

Lcd_Chr_Cp(48+num);

num = (mvolts / 10) % 10;

Lcd_Out_Cp("V"); //в текущую позицию курсора

break;

}

case 4:

{

mvolts = ((long)W4*5000) / 0x03FF; //преобразование кода W4 вмилливольты

Lcd_Cmd(_LCD_CLEAR);

Lcd_Out(1,4, "Work Mode");

Lcd_Out(2,4, "U4=");

num = mvolts / 1000;

Lcd_Chr_Cp(48+num); // выводцифры в коде ASCII

Lcd_Chr_Cp('.'); //вывод на ЖКД десятичной точки

num = (mvolts / 100) % 10; //извлечение десятых долейвольта

Lcd_Chr_Cp(48+num);

num = (mvolts / 10) % 10;

Lcd_Chr_Cp(48+num);

num = (mvolts / 10) % 10;

Lcd_Out_Cp("V"); //в текущую позицию курсора

break;

}

case 5:

{

mvolts = ((long)W5*5000) / 0x03FF; //преобразование кода W5 вмилливольты

Lcd_Cmd(_LCD_CLEAR);

Lcd_Out(1,4, "Work Mode");

Lcd_Out(2,4, "U5=");

num = mvolts / 1000;

Lcd_Chr_Cp(48+num); // выводцифры в коде ASCII

Lcd_Chr_Cp('.'); //вывод на ЖКД десятичной точки


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

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