Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
методичка по контроллерам.docx
Скачиваний:
3
Добавлен:
23.11.2019
Размер:
841.08 Кб
Скачать

Описание лабораторной установки

Лабораторная установка состоит из конструктивно объединенных блока питания (преобразователь из 220VAC в +12VDC, -12VDC, +5VDC) и печатной платы с напаянным на нее набором элементов.

На печатной плате расположены:

  • Линейные стабилизаторы питания L7805, L7905, L7809;

  • Микроконтроллер ATMEGA8535-16PU;

  • Набор кнопок и переключаетелей;

  • Линейка из 10 светодиодов для вывода информации;

  • 2 потенциометра для ввода аналогового сигнала на вход АЦП;

  • 2 силовых ключа для подключения устройств повышенной мощности (электродвигатели и электромагниты);

  • Микросхема ЦАП;

  • Набор операционных усилителей, в том числе силовой операционный усилитель для подключения к стенду электрогидравлического усилителя 6Ц201;

  • Микросхема МАХ232 для связи компьютера и микроконтроллера по интерфейсу RS-232;

  • Драйвер двух датчиков давления;

  • Драйвер обработки сигнала с турбинного датчика расхода.

  • Сервомашинка

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

Рисунок 1. Фотография лабораторного стенда

1 – выключатели питания стенда; 2 – линейные стабилизаторы питания; 3 – микроконтроллера ATMega8535; 4- микросхема МАХ232; 5 – микросхема ЦАП AD5331; 6 – набор кнопок и переключателей; 7 – потенциометры; 8 – разъем для подключения COM-порта персонального компьютера; 9 – разъем подключения питания +12В и -12В; 10 – разъем программатора микроконтроллера; 11 – Разъем силового операционного усилителя; 12 – разъемы силовых ключей; 13 – светодиодная линейка; 14 – сервомашинка; 15 – силовые ключи; 16 – схема на операционных усилителях; 17 – шина +5В; 18 – шина земли; 19 – кнопка RESET микроконтроллера; 20 – разъемы для подключения сервомашинок; 21 – разъемы подключения датчиков давления; 22 – подстроечный резистор опорного напряжения; 23 – разъем подключения турбинного датчика расхода; 24 – фотоинтерраптор 1; 25 – фотоинтерраптор 2.

Электрическая принципиальная схема устройства

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

Система стабилизации напряжения:

Система стабилизации напряжения реализована в виде линейных стабилизаторов. На печатную плату приходит питание +12В и -12В от первичного блока питания. Далее напряжения с помощью линейного стабилизатора L7805 для питания всех цифровых устройств +12В понижаются до +5В.

Для питания биполярным стабилизированным напряжением операционных усилителей напряжение -12В понижается и стабилизируется до -5В при помощи линейного стабилизатора L7905.

Для питания драйвера тензопреобразователей давления требуется стабилизированное напряжение +9В, что обеспечивается стабилизатором L7809.

Для создания опорного напряжения стоит специальный прецизионный стабилизатор REF1950P.

Рисунок 2. Набор стабилизаторов напряжения на +5В, -5В, +9В, +5В опорное и 2 разъема подключения.

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

Для установки микроконтроллера на плату используется специальная DIP-панелька. С помощью данной панели можно быстро и без пайки устанавливать и снимать микроконтроллер, но следует следить за правильной ее установкой. Микроконтроллер, используемый в лабораторной работе ATMega8535-16PU фирмы ATMEL. К каждой ножке микроконтроллера присоединены шины от устройств, расположенных на печатной плате. Так же к микроконтроллеру подключен кварцевый резонатор на 16 MHz. К ножке RESET подключена кнопка K5 с подтяжкой к напряжению питания. Эту кнопку можно использовать для принудительной перезагрузки микроконтроллера. Дополнительно к 0 и 1 ножке порта PORTА микроконтроллера (39 и 40 ножки корпуса) подключены два переменных резистора, которые могут подавать на аналоговый сигнал величиной от 0В до 5В. Ножка аналогового опорного напряжения контроллера дополнительно задемпфирована LC-фильтром. На рисунке 3 обозначены названия информационных шин, подходящих к каждой ножке контроллера.

Рисунок 3. Микроконтроллер с обвязкой.

Линейка светодиодов:

К порту C и 6 и 7 ножкам порта А (шины bit1-bit10) микроконтроллера подключена линейка светодиодов для индикации. На эту линейку при необходимости можно вывести интересующие параметры системы. Светодиод начинает излучать в видимом диапазоне при падении напряжения на нем приблизительно в 2В. При этом через него протекает ток в 20-25 мА.

Рисунок 3. Линейка светодиодов с токоограничивающими резисторами.

Кнопки, переключатели:

К контроллеру подключены 2 нормально разомкнутые кнопки и два движковых переключателя. Каждую кнопку и каждый переключатель можно подключить или отключить от ножки контроллера с помощью специального джампера, который находится в непосредственной близости от отключаемого устройства. Каждая кнопка и каждый переключатель подтянуты к «земле» резистором номиналом 10 кОм. Это означает, что при замкнутой кнопке на ножку микроконтроллера будет подано напряжения +5В, а при разомкнутой кнопке 0В. Кроме того, для уменьшения эффекта дребезга переключателей, кнопка задемпфирована емкостью в 0.1 мкФ. Шины, к которым подключены кнопки: ADC2 и INT0. Переключатели подключены к шинам ADC4 и ADC5.

Рисунок 4. Кнопки и переключатели

Фотоинтеррапторы:

Фотоинтерраптор представляет собой светодиод с одной стороны и фототранзистор с другой, отделенные друг от друга воздушным зазором величиной в 5мм. Светодиод излучает в инфракрасном спектре, поэтому невооруженным глазом световой поток не виден. По этой же причине один лист бумаги не остановит световой поток – требуется более плотный материал. Электрическая схема представлена на рисунке 5.

Рисунок 5. Электрическая схема фотоинтерраптора.

Для получения результатов с фотоинтерраптора следует подключить его к питанию через токоограничивающие резисторы. Схема подключения показана на рисунке 6. Выход информационного сигнала фотоинтерраптора 1 подключен к шине ADC3, а выход фотоинтерраптора 2 подключен к шине INT1.

Рисунок 6. Схема подключения фотоинтеррапторов.

Силовые ключи

Для управления с помощью контроллера устройствами, потребляющими ток, больший чем может выдать микроконтроллер (максимальный ток, который можно пропустить через ножку микроконтроллера – 40 мА) следует пользоваться транзисторами. Для правильной работы транзистора ему следует спроектировать драйвер управления. Такая комбинация из драйвера, полевого транзистора и устройств защиты (защита от перегрева, защита от переполюсовки напряжения, защита от противоЭДС, защита от превышения максимальной величины тока) присутствует в устройстве под названием интеллектуальный ключ. Два таких ключа установлены на плате. Один из низ подключен к шине OC0, другой к шине OC2. При подаче высокого уровня сигнала на ножку In (ножка 2 микросхемы) этот ключ коммутирует на ножку Out (ножка 5 микросхемы) напряжение 12 вольт. Номинальный рабочий ток данного ключа 4.3А при температуре окружающей среды не больше 40 градусов.

Рисунок 7. Силовые ключи и разъемы для подключения электродвигателей.

Драйвер тензопреобразователя давления:

В лабораторном стенде предусмотрена возможность подключения двух тензопреобразователей давления типа ВР производителя НПО «Сигнал». Драйвер представляет собой источник тока на основе операционного усилителя, который питает мост из тензочувствительных резисторов, расположенных в датчике. На выходе стоит дифференциальный усилитель с коэффициентом усиления 13,75, что формирует выходной сигнал, приходящий на ножки АЦП микроконтроллера, в диапазоне 0..5В на весь номинальный диапазон измерений датчика. Выходной сигнал с драйвера подключен к линиям ADC2 и ADC3. С помощью джамперов jp5 и jp6 можно отключать драйвер от ножек контроллера.

Рисунок 8. Драйвер тензопреобразователя давления.

Цифро-аналоговый преобразователь:

Для получения аналогового сигнала, управляемого с помощью контроллера на печатной плате припаяна микросхема ЦАП с десятиразрядным параллельным интерфейсом AD5331. Данный ЦАП выдает на ножке Vout аналоговый сигнал, пропорциональный величине кода, установленного на ножках DB0-DB9, максимальное значение которого (при коде 1023) равно Vref, а минимальное (при коде 0) 0В. Для отключения микросхемы от опорного напряжения, созданного на плате, и подключения внешнего опорного напряжения установлен джампер jp7. Для включения микросхемы ЦАП на ножку CS (Chip Select) должен приходить низкий уровень сигнала. Для генерации на ноже выхода ЦАП Vout (ножка 4 микросхемы) необходимого аналогового сигнала следует выполнить следующие действия:

  1. Убедиться, что на ножку CS приходит низкий уровень сигнала

  2. Установить на ножке WR низкий уровень сигнала. Это действие устанавливает микросхему к записи кода во внутреннюю память.

  3. Установить желаемое значение уровня сигнала в двоичном виде на соответствующих ножках (DB0-DB9)

  4. Подать импульс низкого уровня сигнала продолжительностью не менее 10 микросекунд на ножку LDAC (ножка 10 микросхемы).

Рисунок 9. Цифро-аналоговый преобразователь.

Источник тока на основе операционных усилителей:

Для управления электрогидравлическим усилителем, входящем в состав рулевого привода необходимо на обмотку электромеханического преобразователя посылать значение тока от -50мА до 50мА. Для подавления влияния индуктивности обмотки следует управлять не напряжением на обмотке ЭМП, а током. На операционном усилителе U10 собран усилитель тока. В данном случае использована простейшая схема на основе неинвертирующего усилителя, в цепь обратной связи которого, включена обмотка управления ЭМП. Выходной ток усилителя протекает через резистор R44, на котором возникает падение напряжения, создающее обратную связь по току в обмотке. Благодаря очень большому коэффициенту усиления ОУ это напряжение практически равно входному напряжению усилителя тока. При выборе максимального значения входного напряжения усилителя тока следует учитывать, что если оно будет слишком маленьким, то на него могут оказать значительное влияние шумы и помехи, а по мере его увеличения уменьшается максимально возможное напряжение, которое может быть подано на обмотку ЭМП. Это может привести к недостаточной максимальной скорости нарастания тока в обмотке ЭМП. В данном стенде максимальное значение входного напряжения принято равным 2,5В. Зная максимальный ток ЭМП можно рассчитать сопротивление резистора R44.

Выходное напряжение микросхемы ЦАП может находиться в диапазоне от 0В до 5В, а на вход усилителя тока необходимо подавать напряжение -2,5В .. 2,5В. Для этого преобразования использован дифференциальный усилитель на операционном усилителе U3B. Неинвертирующий вход подключен к выходу ЦАП, а инвертирующий к подстроечному потенциометру R28. Выходное напряжение операционного усилителя будет вычисляться по формуле (при условии, что R32=R33 и R36=R38):

Коэффициент усиления в данном дифференциальном усилителе равен 1. Т.е. Из сигнала, полученного с микросхемы ЦАП вычитается напряжение, приходящее с потенциометра. Таким образом подстоечный потенциометр R28 устанавливает «ноль» схемы. При отсутствии перекоса он должен подавать напряжение, равное 2.5В.

Рисунок 9. Дифференциальный усилитель и усилитель тока.

Сервомашинка:

Для наглядного примера управления приводами с помощью контроллера в лабораторный стенд включена сервомашинка, использующаяся, в основном, моделистами. Она представляет собой электродвигатель с редуктором, потенциометром обратной связи и платой управления (Рисунок 10).

Рисунок 10. Сервомашинка.

Из нее входит 3 провода: силовой провод питания, силовой провод «земли», провод управления. На питание сервомашинки подается ее номинальное значение напряжения, и по силовому проводу питания идет большой ток, потребляемый электродвигателем. Работает сервомашинка следующим образом: когда на вход управляющего провода приходит импульс, то он своим передним фронтом запускает одновибратор внутри сервомашинки. Одновибратор - это блок выдающий один импульс заданной длительности по запускающему фронту. Длительность этого внутреннего импульса зависит исключительно от положения переменного резистора, т.е. от текущего положения выходного вала. Далее эти два импульса сравниваются на стандартной логике. Если внешний импульс короче внутреннего, то эта разность подается на двигатель в одной полярности. Если внешний импульс длинней внутреннего, то полярность подачи напряжения на движок будет другой. Под действием одного импульса движок дернется в сторону уменьшения разности. А поскольку импульсы идут часто (20мс между каждым) то на двигатель идет подобие ШИМа. И чем больше разность между заданием и текущим положением, тем больше коэффициент заполнения и движок активней стремится эту разность ликвидировать. В итоге, когда импульсы задающие и внутренние сравняются по длительности движок или остановится или, что вероятней, т.к. схема не идеальная — переменный резистор дребезжит, поэтому идеального равенства не будет, начнет «рыскать». Подрагивая то в одну, то в другую сторону. Чем более износился резистор или хуже задающие импульсы, тем больше эти рыскания. Для того, чтобы повернуть сервомашинку на нужный угол ей надо на вход подавать импульс с нужной длительностью. 0.8мс это примерно 0 градусов, крайне левое положение. 2.3мс это около 170 градусов — крайне правое. 1.5мс — среднее положение. Между импульсами производитель рекомендует давать 20мс. Но это не критично.

Рисунок 11. Диаграмма управляющих сигналов сервомашинки.

Структура программы управления микроконтроллером, написанная на языке С++

Главный цикл

Инициализация всех переменных и периферийных устройств.

Описание локальный переменных

Описание программы

Подключение модулей

Описание глобальных переменных

Процедуры, функции, прерывания.

Главная функция

Описание программы – даты создания программы, имя автора и описание работы программы. Необходимые комментарии или журнал проектирования.

Пример текста, который генерирует CodeVisionAVR:

/*****************************************************

This program was produced by the

CodeWizardAVR V2.05.5a Evaluation

Automatic Program Generator

© Copyright 1998-2011 Pavel Haiduc, HP InfoTech s.r.l.

http://www.hpinfotech.com

Project :

Version :

Date : 17.12.2011

Author : Freeware, for evaluation and

non-commercial use only

Company :

Comments:

Chip type : ATmega8535

Program type : Application

AVR Core Clock frequency: 8,000000 MHz

Memory model : Small

External RAM size : 0

Data Stack size : 128

*****************************************************/

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

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

  1. Функции sin(), cos(), tan() и т.п. описаны в модуле math.h

  2. Функции delay_ms(), delay_us() описаны в модуле delay.h

Пример использования в программе:

#include <mega8535.h>

#include <math.h>

#include <delay.h>

В конце строки не надо ставить точку с запятой

Описание глобальных переменных – описание переменных, которые в последствии будут необходимы в программе. Эти переменные будут доступны во всех процедурах и функциях программы.

Переменные могут быть следующих типов:

  • Целые типы данных: char (1 байт), int (2 байта), long int (4 байта);

  • Нецелые типы данных (с плавающей точкой): float (4 байта), double (8 байт), long double(10 байт);

Для целого типа можно применить следующие модификаторы: signed, unsigned. Т.е. знаковая и без знаковая (имеют отрицательные значения или не имеют отрицательные значения). В случае знакового типа переменная может принимать отрицательные и положительные значения, в случае без знакового типа переменная будет принимать только положительные значения, но диапазон будет в два раза больше.

Пример:

Для переменной типа char в памяти выделяется 1 байт, т.е. 8 бит. Из этого следует, что знаковая переменная такого типа может принимать значения от -128 до +127. В случае если переменная без знакового типа, то она может принимать значения от 0 до 255. Для типа int ,без знаковая переменная будет принимать значения 0 до 65535, а знаковая от -32768 до +32767. Если модификатор не указан перед переменной, то она автоматически считается знаковой.

Нецелый тип данных записывает в память число в формате «мантисса E порядок степени с основанием 10». Расшифровка: 1.1Е1 = 11, 2.355Е-1 = 0.2355, 5.712Е3 = 5712, -3.1Е-2 = -0.031. Переменные типа float могут принимать значения от 3.4E-38 до 3.4E38 как положительные, так и отрицательные, а типа double от 1.7E-308 до 1.7E308 тоже обоих знаков.

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

Пример описания переменных:

  • Переменные целого типа

int a, b, c;

unsigned long int d,e;

signed char bb;

  • Переменные нецелого типа

double a,b;

float m;

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

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

Функция main записывается в следующем виде:

void main(void)

{

}

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

Описание локальных переменных – то же, что и описание глобальных, но переменные, описанные в данном разделе, будут доступны только внутри функции main. В процедурах, функциях и прерываниях их использование будет вызывать ошибку типа undefeined symbol .

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

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

Пример сгенерированного главного цикла в CodeVisionAVR:

while (1)

{

// Place your code here

}

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

Операторы С++

  1. Операторы в C++ чувствительны к регистру их написания и в конце каждого должна стоять точка с запятой.

  2. Комментарии

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

Пример:

// Все что написано в этой строке после косых палок не будет скомпилировано и проверено на ошибки

  1. Оператор присваивания

Синтаксис: «переменная» = «значение»

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

Пример:

a=2; b=c; d=a+b;

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

Пример:

i++;// Расшифровка: в результате этой операции переменная i увеличится на 1.

a--; //Расшифровка: в результате этой операции переменная i уменьшится на 1.

  1. Условный оператор

Синтаксис:

if («условие 1»)

{«Операторы ДА»}

else if («условие 2»)

{«Операторы ИНАЧЕ ЕСЛИ»}

else

{«Операторы НЕТ»}

В качестве «условия» может быть любое простое условие, либо сочетание условий, которое, если выполняется, то программа переходит к выполнению операторов «Операторы ДА», если не выполняется, то проверяет «Условие 2». Если условие «Условие2» выполняется, то выполняются операторы «Операторы ИНАЧЕ ЕСЛИ», если не выполняется, то переходит к выполнению операторов «Операторы НЕТ». После выполнения операторов «Операторы ДА», программа не переходит к выполнению операторов «Операторы НЕТ» и «Операторы ИНАЧЕ ЕСЛИ».

Операторов else if может быть сколько угодно много.

Операторы else if и else не являются обязательными к написанию.

Написание условий для условного оператора:

Сравнение двух величин:

  • Левое равно правому: ==

  • Левое больше правого: >

  • Левое меньше правого: <

  • Левое больше либо равно правому: >=

  • Левое меньше либо равно правому: <=

  • Логическое И: &&

  • Логическое ИЛИ: ||

  • Логическое не равно !=

Можно строить логические выражения, комбинируя одиночные условия.

Пример:

if ((a==b)&&(c!=d)) {Оператор;}

Перевод: если a равно b и с не равно d, тогда выполнится «оператор»

  1. Представление чисел в С++

Все числа можно представить в различных системах исчисления.

В таблице 1 представлены числа в различных системах исчисления с учетом синтаксиса языка С++

Десятичная

Двоичная

Шестнадцатеричная

0

0b0

0x0

1

0b1

0x1

2

0b10

0x2

3

0b11

0x3

4

0b100

0x4

5

0b101

0x5

6

0b110

0x6

7

0b111

0x7

8

0b1000

0x8

9

0b1001

0x9

10

0b1010

0xA

11

0b1011

0xB

12

0b1100

0xC

13

0b1101

0xD

14

0b1110

0xE

15

0b1111

0xF

16

0b10000

0x10

17

0b10001

0x11

18

0b10010

0x12

100

0b1100100

0x64

255

0b11111111

0xFF

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

Синтаксис: delay_ms(«интервал времени в милисекундах»);

delay_us(«интервал времени в микросекундах»);

Пример:

#include <delay.h>

Void main(void)

{

delay_ms(100);

}