Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
ФГБОУ ВПО «Воронежский государственный
технический университет»
Кафедра робототехнических систем
ИССЛЕДОВАНИЕ СИСТЕМЫ УПРАВЛЕНИЯ ИСПОЛНИТЕЛЬНОГО УРОВНЯ НА МИКРОКОНТРОЛЛЕРАХ
МЕТОДИЧЕСКИЕ УКАЗАНИЯ
к выполнению лабораторной работы № 18
по дисциплине "Микропроцессорная техника
в мехатронике и робототехнике"
для студентов направления 221000.62
«Мехатроника и робототехника»
(профиль «Промышленная и специальная робототехника»)
очной формы обучения
Воронеж 2013
Составители: канд. техн. наук М.И. Герасимов,
инженер Н.С.Лесных
УДК 681.3-181.48:621.865.8
Исследование системы управления исполнительного уровня на микроконтроллерах: методические указания к выполнению лабораторной работы № 18 по дисциплине "Микропроцессорная техника в мехатронике и робототехнике" для студентов направления 221000.62 «Мехатроника и робототехника» (профиль «Промышленная и специальная робототехника») очной формы обучения / ФГБОУ ВПО «Воронежский государственный технический университет»; сост. М.И. Герасимов, Н.С.Лесных. Воронеж, 2013. 35 с.
Методические указания содержат теоретические сведения об средствах программирования однокристальных микроконтроллеров AVR, предварительное и рабочее задания, определяющие порядок исследования, контрольные вопросы.
Методические указания предназначены для студентов 3 курса. Они будут полезны студентам при изучении данной дисциплины и написании дипломной работы.
Методические указания подготовлены в электронном виде в текстовом редакторе MS Word 2003 и содержатся в файле
МУ_ МПТ_ЛР_17.doc.
Табл. 6. Ил. 5. Библиогр.: 9 назв.
Рецензент канд. техн. наук, доц. В.А. Медведев
Ответственный за выпуск зав. кафедрой
д-р техн. наук, проф. А.И. Шиянов
Издается по решению редакционно-издательского совета Воронежского государственного технического университета
© ФГБОУ ВПО «Воронежский государственный технический университет», 2013
Цель работы изучение функционирования системы управления исполнительного уровня на микроконтроллерах серии ATmega, языка программирования Assembler, составление программ и их отладка в составе аппаратно-программного комплекса.
Система управления РТК это обычно многопроцессорная система, в состав которой входят ЭВМ и микропроцессорные устройства (МПУ) с целевыми функциями. Эти МПУ в составе собственно микропроцессора, устройств хранения информации и средств связи с объектами, называются микроконтроллерами (МК). В общем случае элементы объекта управления принимают из микроконтроллера сигналы управления в цифровом и аналоговом виде и формируют для передачи в микроконтроллер сигналы состояния в цифровом и аналоговом виде.
Исследуем систему управления исполнительного уровня, на котором с помощью МК выполняется непосредственное управление приводами робота. В данной работе используется шаговый двигатель, соответственно из контура управления исключаются датчики положения и скорости.
Структурная схема лабораторного стенда имеет вид, приведенный на рис. 1. Для получения доступа к памяти программ МК (с целью его перепрограммирования в ходе экспериментов) в плату управления добавлен интерфейс внутрисхемной отладки JTAG. Сопряжение ШД и микроконтроллера выполнено через блок силовых ключей драйверов. Помимо этого, в состав схемы входят индикаторные узлы, позволяющие визуально наблюдать чередование сигналов в фазах двигателя.
Рис. 1. Структурная схема лабораторного стенда
Платы управления и отладчика получают питание + 5 В от блока питания ПК, от него же на общую точку обмоток двигателя подается + 12 В.
Принципиальная схема платы управления приведена на рис. 2. Основным элементом является DD1 микроконтроллер ATMega 162 /1, 2/, формирующий сигналы для коммутации обмоток ШД (в работе используется 4-фазный ШД). Частота коммутации обмоток (соответственно частота вращения) определяется временем задержки, задаваемым программно, порядок коммутации зависит от значений, засылаемых в каждый из разрядов порта, управляющего силовыми ключами (микросхема DA1, ULN2003A).
С выходов РA.0, РA.1, РA.2, РA.3 микросхемы DD1 управляющие сигналы через микросхему-ключ DА1 подаются на шаговый двигатель и на подключенный параллельно ему узел индикации.
Рис. 2. Схема платы управления двигателем
Узел индикации состоит из четырех светодиодов HL1-HL4 и включенных последовательно им токоограничивающих резисторов номиналом 330 Ом.
Микросхема ULN2003 представляет собой набор мощных составных ключей с защитными диодами на выходе. Наличие защитных диодов позволяет подключать индуктивные нагрузки без дополнительной защиты от выбросов обратного напряжения (см. ниже). Номинальный ток коллектора (одного ключа) составляет 500 мА. Схема внутреннего устройства этих микросхем приведена на рис. 3. Подробные сведения о данной микросхеме доступны на www.docs.chipfind.ru.
Рис. 3. Схема внутреннего устройства ULN2003A
(COM означает общую точку схемы)
В качестве объекта управления в данной работе используется миниатюрный шаговый двигатель с общей точкой обмоток. Самая простая схема управления таким шаговым двигателем (ШД) изображена на рис. 4. Видно, что каждая обмотка ШД последовательно соединена с ключом (переключателем), состояние которого (разомкнуто или замкнуто) определяется управляющими сигналами, поступающими с контроллера (на рисунке не показан). При замыкании ключа через соответствующую обмотку ШД протекает электрический ток и вал двигателя поворачивается на некоторый угол. Порядок переключения обмоток определяет направление вращения вала двигателя.
Рис. 4. Схема управления шаговым двигателем
Для источника питания обмотки двигателя представляют собой индуктивную нагрузку. Соответственно ток через обмотку не может быть включен или выключен мгновенно. Для этого необходимо было бы приложить бесконечно большое напряжение. Когда переключатель замыкается, разрешая протекание тока через обмотку, ток в обмотке ШД постепенно возрастает. Когда же переключатель размыкается, то ток в обмотке не может прекратиться мгновенно и на концах обмотки появляется скачок напряжения. Это напряжение старается поддержать ток через обмотку в прежнем направлении и может достичь величины, при которой переключатель выйдет из строя.
Есть два основных варианта решения задачи защиты ключа. Первый из них состоит в том, чтобы включить параллельно обмотке диод так, как показано на рис. 5,а. Вторым решением является подключение параллельно обмотке конденсатора (рисунок 5,б).
При замкнутом ключе диод заперт обратным напряжением и ток протекает только через обмотку. При размыкании ключа диод открывается напряжением, которое возникает на концах обмотки и шунтирует обмотку. Таким образом, энергия, накопленная в индуктивности, разряжается через диод. При выборе диода необходимо соблюдать выполнение следующих условий: максимально допустимое обратное напряжение диода должно быть больше напряжения питания, максимально допустимый прямой ток через диод должен быть больше максимального тока обмотки.
При подключении конденсатора параллельно обмотке необходимо учитывать следующее при замыкании ключа конденсатор
а б
Рис. 5
начинает разряжаться на землю и через ключ протекает ток разряда конденсатора (в первый момент после замыкания ключа наблюдается резкий импульс тока) и соответственно ключ должен быть в состоянии выдержать этот ток. Ограничить ток разряда можно с помощью резистора, включенного последовательно с конденсатором или с источником напряжения. Когда ключ размыкается, энергия, накопленная в обмотке, заряжает конденсатор до напряжения, превышающего напряжение питания, и ключ должен быть в состоянии выдержать это напряжение.
Изменяя порядок включения силовых ключей, можно получить различные эффекты: реверс, увеличение момента на валу, дробление шага пополам, а также выполнение заданного количества шагов. Возможно также электрическое дробление шага более, чем вдвое, однако для этого придется сочетать коммутацию обмоток и ШИМ.
Для просмотра и изменения внутреннего состояния исследуемого устройства управления шаговым двигателем используется отладчик-программатор JTAG MiniICE 1 и персональный компьютер (ПК) с установленной системой интегрированной разработки AVR Studio. С помощью JTAG MiniICE можно пошагово отлаживать программу, останавливать её в любой момент времени и при этом наблюдать всё, что происходит в регистрах МК. Принципиальная схема отладчика представлена на рис. 6.
Рис. 6. Схема JTAG MiniICE
Основой платы отладчика является микроконтроллер ATMega16 (DD1), выполняющий основные операции по обмену данными между ПК и исследуемым устройством. Архитектура и внутреннее устройство данного МК схожи с ATMega 162, который был описан выше.
Для подключения отладчика к ПК используется последовательный порт, согласование уровней сигналов порта и ТТЛ осуществляется микросхемой DD2 MAX232.
MAX232 интегральная схема, преобразующая сигналы последовательного порта RS-232 в сигналы, пригодные для использования в цифровых логических схемах на транзисторно-транзисторной логике. MAX232 работает приемопередатчиком и преобразует сигналы RX, TX, CTS и RTS. Схема обеспечивает уровень выходного сигнала, принятый в RS-232 (приблизительно ± 7.5 В), преобразуя входное напряжение + 5 В при помощи внутренних генераторов подкачки заряда и внешних конденсаторов. Это упрощает реализацию RS-232 в устройствах, работающих на напряжениях от 0 до + 5 В, так как не требуется усложнять источник питания только для того, чтобы использовать RS-232. Входное напряжение от RS-232, которое может достигать ± 25 В, понижается до стандартных 5 В, используемых в транзисторно-транзисторной логике. Входы имеют средний порог 1.3 В и средний гистерезис 0,5 В.
Полезно понимать, что происходит с уровнями напряжения. Когда схема MAX232 получает на вход логический "0" от ТТЛ, она преобразует его в напряжение от +3 до +15В, а когда получает логическую "1" преобразует её в напряжение от -3 до -15В, и по тому же принципу выполняет обратные преобразования от RS-232 к ТТЛ. В протоколе RS-232 напряжение, используемое для логических состояний при передачи данных, противоположно напряжению, которое используется для тех же логических состояний при передаче команд управления табл. 1.
Связь между отладчиком и исследуемым устройством осуществляется по протоколу JTAG (сокращение англ. Joint Test Action Group) специализированному аппаратному интерфейсу, разработанному для тестирования собранных печатных плат (с использованием стандарта IEEE 1149.1). Из-за широкой функциональности JTAG стал повсеместно использоваться для отладки и программирования. Порт тестирования (англ. Test Access Port) представляет
Таблица 1
Тип линии и логический уровень RS-232 |
Напряжение RS-232 |
Напряжение от ТТЛ к MAX232 или обратно |
Линия данных (Rx/Tx), логический "0" |
от +3 В до +15 В |
0 В |
Линия данных (Rx/Tx), логическая "1" |
от -3 В до -15 В |
5 В |
Управляющие сигналы (RTS/CTS/DTR/DSR), логический "0" |
от -3 В до -15 В |
5 В |
Управляющие сигналы (RTS/CTS/DTR/DSR), логическая "1" |
от +3 В до +15 В |
0 В |
собой четыре или пять выделенных линий микросхемы: ТСК, TMS, TDI, TDO, ~TRST (опционально). Функциональное назначение этих линий:
TDI (вход тестовых данных) вход последовательных данных периферийного сканирования. Команды и данные вдвигаются в микросхему с этого вывода по переднему фронту сигнала TCK;
TDO (выход тестовых данных) выход последовательных данных. Команды и данные выдвигаются из микросхемы с этого вывода по заднему фронту сигнала TCK;
TCK (вход тестового тактирования) тактирует работу встроенного автомата управления периферийным сканированием. Максимальная частота сканирования периферийных ячеек зависит от используемой аппаратной части и на данный момент ограничена 25…40 МГц;
TMS (вход управления тестированием) обеспечивает выбор режима тестирования.
В некоторых случаях к перечисленным сигналам добавляется сигнал TRST для инициализации порта тестирования, что необязательно, так как инициализация возможна путем подачи соответствующей последовательности сигналов на вход TMS.
Работа средств обеспечения интерфейса JTAG подчиняется сигналам автомата управления, встроенного в микросхему. Состояния автомата определяются сигналами TDI и TMS порта тестирования. Определённое сочетание сигналов TMS и TCK обеспечивает ввод команды для автомата и её исполнение.
Рис. 7
Теперь нажмите клавишу F7, пиктограмму Assemble или выберите пункт Build в меню Build, в результате чего начнется трансляция программы. Затем выберите пункт меню Debug Start Debugging или соответствующую пиктограмму для запуска отладки (см. рис. 8). В результате программа из вашего проекта загрузится в память программ МК ATMega 162 и вы получите доступ к ресурсам этого МК для пошаговой отладки.
Напоминание: при отладке программы следует уменьшать интервалы таймеров и коэффициент предделителя относительно расчетных, если они слишком велики, поскольку в процессе отладки в AVR Studio программа выполняется в тысячи раз медленнее, чем внутри МК и вы не дождетесь срабатывания таймера (см. работу № 19).
Рис. ХХ
Рис. 8. Главное меню, выбор средства отладки и исследуемого МК
Табл. ХХ
Бит |
Название |
Краткое описание |
7...5 |
|
Зарезервировано, читается как 0 |
4 |
WDCE |
Разрешение изменения конфигурации |
3 |
WDE |
Разрешение сторожевого таймера (1 включен) |
2 |
WDP2 |
Коэффициент деления предделителя |
1 |
WDP1 |
|
0 |
WDP0 |
Табл. ХХХ
Если сторожевой таймер включен, то он будет выполнять сброс программы МК в момент своего переполнения. Для корректного использования WDT его период должен быть больше периода повторения технологической программы, а программа должна содержать команду WDR, обнуляющую сторожевой таймер. Для выключения сторожевого таймера или для изменения периода тайм-аута необходимо одной командой записать лог. 1 в разряды WDE и WDTCE, а в течение следующих четырех машинных циклов записать тоже одной командой требуемые значения в разряды WDE и/или WDP2…0, одновременно сбрасывая разряд WDCE (режим управления 1) /Евст/. При выполнении данной работы сторожевой таймер должен быть выключен.
Компилятор поддерживает ряд директив. Все директивы предваряются точкой. Директивы не транслируются непосредственно в код они используются для указания положения в программной памяти, определения макросов, инициализации памяти и т.д.
Директива CSEG определяет начало программного сегмента. Исходный файл может состоять из нескольких программных сегментов, которые объединяются в один программный сегмент при компиляции. Программный сегмент является сегментом по умолчанию. Программные сегменты имеют свои собственные счётчики положения, которые считают не побайтно, а пословно. Для размещения кода и констант в необходимом месте сегмента может быть использована директива ORG. Директива CSEG не имеет параметров.
Синтаксис:
.CSEG
Пример:
.DSEG ; Начало сегмента данных
vartab: .BYTE 4 ; Резервирует 4 байта в ОЗУ
.CSEG ; Начало кодового сегмента
const: .DW 2 ; Разместить константу 0x0002
; в памяти программ
mov r1,r0 ; Выполнить действия
Директива DEF позволяет ссылаться на регистр через некоторое символическое имя. Назначенное имя может использоваться во всей нижеследующей части программы для обращений к данному регистру. Регистр может иметь несколько различных имен. Символическое имя может быть переназначено позднее в программе.
Синтаксис:
.DEF Символическое_имя = Регистр
Пример:
.DEF temp=R16
.DEF ior=R0
.CSEG
ldi temp,0xf0 ; Загрузить 0xf0 в регистр temp (R16)
in ior,0x3f ; Прочитать SREG в регистр ior (R0)
eor temp,ior ; Регистры temp и ior складываются по исключающему или
Директива DSEG определяет начало сегмента данных. Исходный файл может состоять из нескольких сегментов данных, которые объединяются в один сегмент при компиляции. Сегмент данных обычно состоит только из директив BYTE и меток. Сегменты данных имеют свои собственные побайтные счётчики положения. Директива ORG может быть использована для размещения переменных в необходимом месте ОЗУ. Директива не имеет параметров.
Синтаксис:
.DSEG
Пример:
.DSEG ; Начало сегмента данных
var1: .BYTE 1 ; зарезервировать 1 байт для var1
table: .BYTE tab_size ; зарезервировать tab_size байт.
.CSEG
ldi r30,low(var1) ; Загрузить младший байт регистра Z
ldi r31,high(var1); Загрузить старший байт регистра Z
ld r1,Z ; Загрузить var1 в регистр r1
Директива определяет конец макроопределения, и не принимает никаких параметров. Для информации по определению макросов смотрите директиву MACRO.
Синтаксис:
.ENDMACRO
Пример:
.MACRO SUBI16 ; Начало определения макроса
subi r16,low(@0) ; Вычесть младший байт первого параметра
sbci r17,high(@0) ; Вычесть старший байт первого параметра
.ENDMACRO
Директива EQU присваивает метке значение. Эта метка может позднее использоваться в выражениях. Метка которой присвоено значение данной директивой не может быть переназначена и её значение не может быть изменено.
Синтаксис:
.EQU метка = выражение
Пример:
.EQU io_offset = 0x23
.EQU porta = io_offset + 2
.CSEG ; Начало сегмента данных
clr r2 ; Очистить регистр r2
out porta,r2 ; Записать в порт A
Встретив директиву EXIT компилятор прекращает компиляцию данного файла. Если директива использована во вложенном файле (см. директиву INCLUDE), то компиляция продолжается со строки, следующей после директивы INCLUDE. Если же файл не является вложенным, то компиляция прекращается.
Синтаксис:
.EXIT
Пример:
.EXIT ; Выйти из данного файла
Встретив директиву INCLUDE, компилятор открывает указанный в ней файл, компилирует его, пока файл не закончится или не встретится директива EXIT, после этого продолжает компиляцию начального файла со строки, следующей за директивой INCLUDE. Вложенный файл может также содержать директивы INCLUDE.
Синтаксис:
.INCLUDE "имя_файла"
Пример:
; файл iodefs.asm:
.EQU sreg = 0x3f ; Регистр статуса
.EQU sphigh = 0x3e ; Старший байт указателя стека
.EQU splow = 0x3d ; Младший байт указателя стека
; файл incdemo.asm
.INCLUDE iodefs.asm ; Вложить определения портов
in r0,sreg ; Прочитать регистр статуса
Директива LIST указывает компилятору на необходимость создания листинга. Листинг представляет из себя комбинацию ассемблерного кода, адресов и кодов операций. По умолчанию генерация листинга включена, однако данная директива используется совместно с директивой NOLIST для получения листингов отдельных частей исходных файлов.
Синтаксис:
.LIST
Пример:
.NOLIST ; Отключить генерацию листинга
.INCLUDE "macro.inc" ; Вложенные файлы не будут
.INCLUDE "const.def" ; отображены в листинге
.LIST ; Включить генерацию листинга
С директивы MACRO начинается определение макроса. В качестве параметра директиве передаётся имя макроса. При встрече имени макроса позднее в тексте программы, компилятор заменяет это имя на тело макроса. Макрос может иметь до 10 параметров, к которым в его теле обращаются через @0-@9. При вызове параметры перечисляются через запятые. Определение макроса заканчивается директивой ENDMACRO.
Макрос в листинге показывается знаком +.
Синтаксис:
.MACRO макроимя
Пример:
.MACRO SUBI16 ; Начало макроопределения
subi @1,low(@0) ; Вычесть младший байт параметра 0 из параметра 1
sbci @2,high(@0) ; Вычесть старший байт параметра 0 из параметра 2
.ENDMACRO ; Конец макроопределения
.CSEG ; Начало программного сегмента
SUBI16 0x1234,r16,r17 ; Вычесть 0x1234 из r17:r16
Директива NOLIST указывает компилятору на необходимость прекращения генерации листинга. Листинг представляет из себя комбинацию ассемблерного кода, адресов и кодов операций. По умолчанию генерация листинга включена, однако может быть отключена данной директивой. Кроме того данная директива может быть использована совместно с директивой LIST для получения листингов отдельных частей исходных файлов
Синтаксис:
.NOLIST
Пример:
.NOLIST ; Отключить генерацию листинга
.INCLUDE "macro.inc" ; Вложенные файлы не будут
.INCLUDE "const.def" ; отображены в листинге
.LIST ; Включить генерацию листинга
Директива ORG устанавливает счётчик положения равным заданной величине, которая передаётся как параметр. Для сегмента данных она устанавливает счётчик положения в SRAM (ОЗУ), для сегмента программ это программный счётчик, а для сегмента EEPROM это положение в EEPROM. Если директиве предшествует метка (в той же строке), то метка размещается по адресу, указанному в параметре директивы. Перед началом компиляции программный счётчик и счётчик EEPROM равны нулю, а счётчик ОЗУ равен 32 (поскольку адреса 0-31 заняты регистрами). Обратите внимание: для ОЗУ и EEPROM используются побайтные счётчики, а для программного сегмента - пословный.
Синтаксис:
.ORG выражение
Пример:
.DSEG ; Начало сегмента данных
.ORG 0x37 ; Установить адрес SRAM равным 0x37
variable: .BYTE 1 ; Зарезервировать байт по адресу 0x37H
.CSEG
.ORG 0x10 ; Установить программный счётчик равным 0x10
mov r0,r1 ; Данная команда будет размещена по адресу 0x10
Директива SET присваивает имени некоторое значение. Это имя позднее может быть использовано в выражениях. Причем в отличии от директивы EQU значение имени может быть изменено другой директивой SET.
Синтаксис:
.SET имя = выражение
Пример:
.SET io_offset = 0x23
.SET porta = io_offset + 2
.CSEG ; Начало кодового сегмента
clr r2 ; Очистить регистр 2
out porta,r2 ; Записать в порт A
Предположим, что мы превратили в плавающее окно одну из вкладок. Посмотрим, как можно поставить ее на место.
Если перемещать это окно при помощи мыши (удерживая его за заголовок), то на основной панели программы появляются специальные указатели размещения, как это показано на рис. 5.3. Они представляют собой стилизованные стрелки синего цвета, расположенные по всему полю главного окна программы. Одновременно появляются восемь таких стрелок. Четыре из них объединены в центральный блок, в который включена еще и круглая кнопка посередине.
Этот блок автоматически располагается в центре того окна, в пределах которого в данный момент перемещается курсор. Оставшиеся четыре стрелки располагаются по краям основного окна программы. Достаточно переместить курсор мыши вместе с перемещаемым плавающим окном на одну из этих стрелок и отпустить кнопку мыши, и окно тут же встроится в одно из вспомогательных окон программы в виде вкладки либо образует новое вспомогательное окно. Причем вы еще до отпускания кнопки мыши можете увидеть, куда окно попадет как только ваш курсор совместится с одной из стрелок, программа закрасит синим цветом эту область. Помните только, что стрелки превращают ваше плавающее окно в еще одно фиксированное дополнительное окно в разных частях интерфейса. А круглая кнопка посреди центрального блока превращает плавающее окно в дополнительную вкладку уже существующего окна.
Рис. 5.3. Перемещение окна (на примере «Memory»)
Литература
[0.1] Теоретические сведения [0.1.1] 1. Структура системы управления
[0.1.2] 2. Описание платы управления, [0.1.3] 3. Описание системы отладки [0.2] Предварительное задание [0.3] Рабочее задание
[1] [1.1] Директивы ассемблера, используемые в данной работе [1.1.1] CSEG - Программный сегмент [1.1.2] DEF - Назначить регистру символическое имя [1.1.3] DSEG - Сегмент данных [1.1.4] ENDMACRO - Конец макроса [1.1.5] EQU - Установить постоянное выражение [1.1.6] EXIT - Выйти из файла [1.1.7] INCLUDE - Вложить другой файл [1.1.8] LIST - Включить генерацию листинга [1.1.9] MACRO - Начало макроса [1.1.10] NOLIST - Выключить генерацию листинга [1.1.11] ORG - Установить положение в сегменте [1.1.12] SET - Установить переменный символический эквивалент выражения [2] ПРИЛОЖЕНИЕ 2 [2.1] Приведение вкладки в состояние Docking [2.2]
[2.3] |
1
Milan Kostomlatsky. AVR miniICE - http://pol-sem.narod.ru/AVRminiICE/jtag.htm
Желтый провод СЛЕВА
Плата отладчика
Плата управления ШД
14
EMBED Unknown