Аппаратная вычислительная платформа Arduino
Возможности платформы Arduino. Загрузка микроконтроллера прерываниями. Подтягивающие (нагрузочные) резисторы. Аналого-цифровой преобразователь, цоколевка. Прерывание по таймеру, память. Библиотеки Servo, SPI, Stepper. Комбинация фазы синхронизации.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 23.12.2014 |
Размер файла | 53,4 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Введение
Arduino - аппаратная вычислительная платформа, состоящая из двух основных компонентов: плата ввода-вывода и среда разработки на языке Processing/Wiring. Arduino удобна для разработки электронных устройств как для новичков, так и для профессионалов. Эта платформа пользуется огромной популярностью во всем мире из-за простого языка программирования, открытой архитектуры и программного кода. Особенность данной платформы является то что она программируется без использования программаторов через USB. С помощью Arduino компьютер может выйти за рамки виртуального мира в физический, благодаря множеству датчиков которые можно подключить к плате. Датчики могут получать информацию об окружающей среде, а также управлять различными исполнительными устройствами.
Может и взаимодействовать с программным обеспечением на компьютере (например, Flash,Processing,MaxMSP).
Плата Arduino состоит из микроконтроллера и элементов обвязки для программирования и интеграции с другими схемами. На многих платах так же имеется линейный стабилизатор напряжения. Тактирование осуществляется на частоте 16 или 8 МГц кварцевым резонатором ( прибор, в котором пьезокристаллический эффект и явление механического резонанса используется для построения высокодобротного (свойство колебательной системы, определяющее полосу резонанса и показывающее, во сколько раз запасы энергии в системе больше, чем потери энергии за один период колебаний ) резонансного элемента электронной схемы. В микроконтроллер предварительно прошивается загрузчик( программа отвечающая за загрузку исполнительных файлов и запуск новых процессов ) BootLoader, поэтому внешний программатор не нужен. Плата Arduino содержит инвертирующую схему для конвертирования уровней сигналов RS-232( Recommended Standart 232, физический уровень для асинхронного интерфейса ) в уровни ТТЛ (Транзисторно-транзисторная логика-разновидность цифровых логических микросхем, построенных на основе биполярных транзисторов (трёхэлектродный полупроводниковый прибор) и резисторов.), и наоборот.
Интегрированная среда разработки Arduino - это кросплотформенное приложение на Java, включающая в себя редактор кода, компилятор и модуль передачи прошивки в плату. Язык программирования используемый для Arduino очень похож на СИ++, дополненный некоторыми библиотеками. Обработка программ осуществляется с помощью препроцессора, а компилируется с помощью AVR-GCC.
1. Начало работы с Arduino
Для того что бы начать работать с Arduino понадобится следующее:
1) Плата Arduino
2) USB-кабель
3) Среда разработки для Arduino.
После того как приобретено всё необходимое подключаем плату к компьютеру. Arduino Uno, Mega, Duemilanove и Arduino Nano получают питание автоматически от любого USB-подключения к компьютеру или другому источнику питания. При использовании Arduino Diecimila необходимо убедиться, что плата сконфигурирована для получения питания через USB-подключение. Источник питания выбирается с помощью маленького пластикового джампера, надетого на два из трех штырьков между разъемами USB и питания. Необходимо проверить, чтобы он был установлен на два штырька, ближайших к разъему USB. Подсоедините плату Arduino к компьютеру, используя USB-кабель. Должен загореться зеленый светодиод питания, помеченный PWR. Следующим шагом будет установка драйверов, для имеющейся модели. После того как драйвера были установлены, запускаем среду разработки Arduino. Во многих средах разработки Arduino уже есть готовый пример скетча, который можно запустить и проверить правильность подключения платы к компьютеру. В настройках среды разработки необходимо указать модель платы Arduino, иначе даже при правильно написанном скетче, плата будет работать неправильно. Так же необходимо выбрать последовательный порт. Выберите устройство последовательной передачи платы Arduino из меню Tools | Serial Port. Вероятно, это будет COM3 или выше (COM1 и COM2 обычно резервируются для аппаратных COM-портов). Чтобы найти нужный порт, можно отсоединить плату Arduino и повторно открыть меню; пункт, который исчез, и будет портом платы Arduino. Вновь подсоедините плату и выберите последовательный порт. Далее проверяем работоспособность платы.
Нажимаем кнопку «Upload» в программе - среде разработки. Ждём несколько секунд - начинают мигать светодиоды RX и TX на плате. В случае успешной загрузки в строке состояния появится сообщение «Done uploading (Загрузка выполнена). (Замечание. Если имеется в виду плата Arduino Mini, NG или другая плата, то необходимо физически кнопкой подать команду reset непосредственно перед нажатием кнопки «Upload»). Несколько секунд спустя после окончания загрузки будет видно как светодиод вывода 13 (L) на плате начнет мигать оранжевым цветом. Это свидетельствует о правильно подключении платы к компьютеру, её работоспособности и правильной установке программного обеспечения.
1.1 Цифровые выводы
Выводы платформы Arduino могут работать как входы или как выходы. В данном разделе описывается функционирование выводов в этих режимах. Также необходимо обратить внимание на то, что большинство аналоговых входов Arduino (Atmega) могут конфигурироваться и работать так же как и цифровые порты ввода/вывода. Свойства порта вводы/вывода (pin), сконфигурированного как порт ввода. Выводы Arduino (Atmega) стандартно настроены как порты ввода, таким образом, не требуется явной декларации в функции pinMode(). Сконфигурированные порты ввода находятся в высокоимпедансном состоянии. Это означает то, что порт ввода дает слишком малую нагрузки на схему, в которую он включен. Эквивалентом внутреннему сопротивлению будет резистор 100 МОм подключенный к выводу микросхемы. Таким образом, для перевода порта ввода из одного состояния в другое требуется маленькое значение тока. Это позволяет применять выводы микросхемы для подключения емкостного датчика касания, фотодиода, аналогового датчика со схемой, похожей на RC-цепь.
С другой стороны, если к данному выводу ничего не подключено, то значения на нем будут принимать случайные величины, наводимые электрическими помехами или емкостной взаимосвязью с соседним выводом.
1.1.1 Подтягивающие (нагрузочные) резисторы
Если на порт ввода не поступает сигнал, то в данном случае рекомендуется задать порту известное состояние. Это делается добавлением подтягивающих резисторов 10 кОм, подключающих вход либо к +5 В (подтягивающие к питанию резисторы), либо к земле (подтягивающие к земле резисторы). Микроконтроллер Atmega имеет программируемые встроенные подтягивающие к питанию резисторы 20 кОм. Программирование данных резисторов осуществляется следующим образом.
pinMode(pin, INPUT); // назначить выводу порт ввода
digitalWrite(pin, HIGH); // включить подтягивающий резистор
Подтягивающий резистор пропускает ток достаточный для того, чтобы слегка светился светодиод подключенный к выводу, работающему как порт ввода. Также легкое свечение светодиодов означает то, что при программировании вывод не был настроен как порт вывода в функции pinMode(). Подтягивающие резисторы управляются теми же регистрами (внутренние адреса памяти микроконтроллера), что управляют состояниями вывода: HIGH или LOW. Следовательно, если вывод работает как порт ввода со значением HIGH, это означает включение подтягивающего к питанию резистора, то конфигурация функцией pinMode() порта вывода на данном выводе микросхемы передаст значение HIGH. Данная процедура работает и в обратном направлении, т.е. если вывод имеет значение HIGH, то конфигурация вывода микросхемы как порта ввода функцией pinMode() включит подтягивающий к питанию резистор. Примечание: Затруднительно использовать вывод микросхемы 13 в качестве порта ввода из-за подключенных к нему светодиода и резистора. При подключении подтягивающего к питанию резистора 20 кОм на вводе будет 1.7 В вместо 5 В, т.к. происходит падение напряжения на светодиоде и включенном последовательно резисторе. При необходимости использовать вывод микросхемы 13 как цифровой порт ввода требуется подключить между выводом и землей внешний подтягивающий резистор. Свойства порта ввода/вывода, сконфигурированного как порт вывода. Выводы, сконфигурированные как порты вывода, находятся в низкоимпедансном состоянии. Данные выводы могут пропускать через себя достаточно большой ток. Выводы микросхемы Atmega могут быть источником (положительный) или приемником (отрицательный) тока до 40 мА для других устройств. Такого значения тока достаточно чтобы подключить светодиод (обязателен последовательно включенный резистор), датчики, но недостаточно для большинства реле, соленоидов и двигателей.
Короткие замыкания выводов Arduino или попытки подключить энергоемкие устройства могут повредить выходные транзисторы вывода или весь микроконтроллер Atmega. В большинстве случаев данные действия приведут к отключению вывода на микроконтроллере, но остальная часть схемы будет работать согласно программе. Рекомендуется к выходам платформы подключать устройства через резисторы 470 Ом или 1 кОм, если устройству не требуется больший ток для работы.
1.2 Аналоговые входы
Описание портов, работающих как аналоговые входы, платформы Arduino (Atmega8, Atmega168, Atmega328, или Atmega1280)
1.2.1 Аналого-цифровой преобразователь
Микроконтроллеры Atmega, используемые в Arduino, содержат шестиканальный аналого-цифровой преобразователь (АЦП). Разрешение преобразователя составляет 10 бит, что позволяет на выходе получать значения от 0 до 1023. Основным применением аналоговых входов большинства платформ Arduino является чтение аналоговых датчиком, но в тоже время они имеют функциональность вводов/выводов широкого применения (GPIO) (то же, что и цифровые порты ввода/вывода 0 - 13).
Таким образом, при необходимости применения дополнительных портов ввода/вывода имеется возможность сконфигурировать неиспользуемые аналоговые входы.
1.2.2 Цоколевка
Выводы Arduino, соответствующие аналоговым входам, имеют номера от 14 до 19. Это относится только к выводам Arduino, а не к физическим номерам выводов микроконтроллера Atmega. Аналоговые входы могут использоваться как цифровые выводы портов ввода/вывода. Например, код программы для установки вывода 0 аналогового входа на порт вывода со значением HIGH:
1)pinMode(14,OUTPUT);
2)digitalWrite(14, HIGH);
1.2.3 Подтягивающие резисторы
Выводы аналоговые входов имеют подтягивающие резисторы работающие как на цифровых выводах. Включение резисторов производится командой digitalWrite(14, HIGH); // включить резистор на выводе аналогового входа 0 пока вывод работает как порт ввода. Подключение резистора повлияет на величину сообщаемую функцией analogRead() при использовании некоторых датчиков. Большинство пользователей использует подтягивающий резистор при применении вывода аналогового входа в его цифровом режиме.
1.2.4 Подробности и предостережения
Для вывода, работавшего ранее как цифровой порт вывода, команда analogRead будет работать некорректно. В этом случае рекомендуется сконфигурировать его как аналоговый вход. Аналогично, если вывод работал как цифровой порт вывода со значением HIGH, то обратная установка на ввод подключит подтягивающий резистор. Руководство на микроконтроллер Atmega не рекомендует производить быстрое переключение между аналоговыми входами для их чтения. Это может вызвать наложение сигналов и внести искажения в аналоговую систему. Однако после работы аналогового входа в цифровом режиме может потребоваться настроить паузу между чтением функцией analogRead() других входов.
1.3 Широтно-импульсная модуляция
Широтно-Импульсная модуляция, сокращенно ШИМ (англ. PWM). Пример использования аналогового выхода (ШИМ) для управления светодиодом доступен из меню File->Sketchbook->Examples->Analog программы Arduino. Широтно-Импульсная модуляция, или ШИМ, это операция получения изменяющегося аналогового значения посредством цифровых устройств. Устройства используются для получения прямоугольных импульсов - сигнала, который постоянно переключается между максимальным и минимальным значениями. Данный сигнал моделирует напряжение между максимальным значением (5 В) и минимальным (0 В), изменяя при этом длительность времени включения 5 В относительно включения 0 В. Длительность включения максимального значения называется шириной импульса. Для получения различных аналоговых величин изменяется ширина импульса. При достаточно быстрой смене периодов включения-выключения можно подавать постоянный сигнал между 0 и 5 В на светодиод, тем самым управляя яркостью его свечения. На графике зеленые линии отмечают постоянные временные периоды. Длительность периода обратно пропорциональна частоте ШИМ. Т.е. если частота ШИМ составляет 500 Гц, то зеленые линии будут отмечать интервалы длительностью в 2 миллисекунды каждый. Вызов функции analogWrite() с масштабом 0 - 255 означает, что значение analogWrite(255) будет соответствовать 100% рабочему циклу (постоянное включение 5 В), а значение analogWrite(127) - 50% рабочему циклу. Для примера можно взять платформу и начать трясти ее взад и вперед. Для наших глаза человека данное движение превращает в светящиеся линии мигание светодиода. Наращивание или уменьшение ширины импульса на светодиоде будет увеличивать или уменьшать светящиеся линии светодиода.
1.4 Память в Arduino
В микроконтроллере ATmega168, используемом на платформах Arduino, существует три вида памяти:
1) Флеш-память: используется для хранения скетчей.
2) ОЗУ (Статическая оперативная память с произвольным доступом): используется для хранения и работы переменных.
3) EEPROM (энергонезависимая память): используется для хранения постоянной информации.
Флеш-память и EEPROM являются энергонезависимыми видами памяти (данные сохраняются при отключении питания). ОЗУ является энергозависимой памятью.
Микроконтроллер ATmega168 имеет:
1) 16 Кб флеш-памяти (2 Кб используется для хранения загрузчика)
2) 1024 байта ОЗУ
3) 512 байт EEPROM
Необходимо обратить внимание на малый объем ОЗУ, т.к. большое число строк в скетче может полностью ее израсходовать. Например, следующая объявление: char message[] = "I support the Cape Wind project."; занимает 32 байта из общего объема ОЗУ (каждый знак занимает один байт). При наличии большого объема текста или таблиц для вывода на дисплей возможно полностью использовать допустимые 1024 байта ОЗУ. При отсутствии свободного места в ОЗУ могут произойти сбои программы, например, она может записаться, но не работать. Для определения данного состояния требуется превратить в комментарии или укоротить строки скетча (без изменения кода). Если после этого программа работает корректно, то на ее выполнение был затрачен весь объем ОЗУ. Существует несколько путей решения данной проблемы:
При работе скетча с программой на компьютере можно перебросить часть данных или расчетов на компьютер для снижения нагрузки на Arduino.
При наличии таблиц поиска или других больших массивов можно использовать минимальный тип данных для хранения значений. Например, тип данных занимает два байта, а byte - только один (но может хранить небольшой диапазон значений).
Неизменяемые строки и данные во время работы скетча можно хранить во флеш-памяти. Для этого необходимо использовать ключ PROGMEM. Для использования EEPROM обратитесь к библиотеке EEPROM.
1.5 Аппаратные прерывания в Arduino
Как подсказывает название, прерывания - это сигналы, прерывающие нормальное течение программы. Прерывания обычно используются для аппаратных устройств, требующих немедленной реакции на появление событий. Например, система последовательного порта или UART (универсальный асинхронный приемопередатчик) микроконтроллера должен быть обслужен при получении нового символа. Если этого не сделать быстро, новый символ может быть потерян. При поступлении нового символа UART генерирует прерывание. Микроконтроллер останавливает выполнение основной программы (приложения) и перескакивает на программу обработки прерываний (ISR), предназначенную для данного прерывания. В данном случае это прерывание по полученному символу. Эта ISR захватывает новый символ из UART, помещает в буфер, затем очищает прерывание и выполняет возврат. Когда ISR выполняет возврат, микроконтроллер возвращается в основную программу и продолжает её с точки вызова. Все это происходит в фоновом режиме и не влияет напрямую на основной код вашего приложения. Если запускается много прерываний или прерывания генерирует быстродействующий таймер, основная программа будет выполняться медленнее, так как микроконтроллер распределяет свое машинное время между основной программой и всеми функциями обработки прерываний. Давайте вычислим пример, чтобы увидеть, насколько важны процессы прерывания. Скажем, у есть последовательный порт со скоростью передачи данных 9600 бод. Это означает, что каждый бит символа посылается с частотой 9600 Гц или около 10 кГц. На каждый бит уходит 100 мкс. Около 10 бит требуется, чтобы послать один символ, так что мы получаем один полный символ каждую миллисекунду или около того. Если наш UART буферизован, мы должны извлечь последний символ до завершения приема следующего, это дает на всю работу 1 мс. Если UART не буферизован, необходимо избавиться от символа за 1 бит или 1 мкс. Рассмотрим для начала буферизованный пример. Нужно проверять получение байта быстрее, чем каждую миллисекунду, чтобы предотвратить потерю данных. Применительно к Arduino это означает, что наша функция цикла должна обращаться для чтения статуса UART и возможно, байта данных, 1000 раз в секунду. Это легко выполнимо, но сильно усложнит код, который вам нужно написать. До тех пор, пока функция цикла не требует больше 1 мс до завершения, это может сойти с рук. Но возможно, что нужно обслуживать несколько устройств ввода-вывода, или что необходимо работать на гораздо большей скорости передачи. Такие неприятности это вскоре может принести. С прерываниями не нужно отслеживать поступление символа. Аппаратура подает сигнал с помощью прерывания, и процессор быстро вызовет ISR, чтобы вовремя захватить символ. Вместо выделения огромной доли процессорного времени на проверку статуса UART, вы никогда не должны проверять статус, просто устанавливается аппаратное прерывание и выполняете необходимые действия в ISR. Главная программа напрямую не затрагивается, и от аппаратного устройства не требуется особых возможностей.
1.5.1 Прерывание по таймеру
В данном разделе будет описано на использование программного таймера 2 для периодических прерываний. Исходная идея состояла в использовании этого таймера для генерации частоты биений в звуковых проектах Arduino. Чтобы выводить тон или частоту нам нужно переключать порт ввода-вывода на согласованной частоте. Это можно делать с использованием циклов задержки. Это просто, но означает, что наш процессор будет занят, ничего не выполняя, но ожидая точного времени переключения вывода. С использованием прерывания по таймеру мы можем заняться другими делами, а вывод пусть переключает ISR, когда таймер подаст сигнал, что время пришло.
Необходимо только установить таймер, чтобы подавал сигнал с прерыванием в нужное время. Вместо прокрутки бесполезного цикла для задержки по времени, главная программа может делать что-то другое, например, контролировать датчик движения или управлять электроприводом. Что бы ни требовалось проекту, больше нам не нужно процессорное время для получения задержек. Далее будет описано ISR в общем только то, что касается прерываний таймера 2. Более подробно об использовании прерываний в процессорах AVR можно прочитать в руководстве пользователя avr-libc(англ). На данном этапе не требуется полного понимания, но, в конечном счете, вы можете захотеть получить возможность ускорить использование прерываний, раз это важный инструмент для приложений на микроконтроллерах.
1.5.2 Таймеры на Arduino
Arduino пользуется всеми тремя таймерами ATMega168:
1) Таймер 0 (Системное время, ШИМ 5 and 6)
Используется для хранения счетчика времени работы программы. Функция millis() возвращает число миллисекунд с момента запуск программы, используя ISR глобального приращения таймера 0. Таймер 0 также используется для реализации ШИМ на выводах 5 и 6.
2) Таймер 1 (ШИМ 9 и 10)
Используется для реализации ШИМ для цифровых выводах 9 и 10.
3)Таймер 2 (ШИМ 3 и 11)
Используется для управления выходами ШИМ для цифровых выводов 3 и 11.
Хотя все таймеры используются, только Таймер 0 имеет назначенную таймеру ISR. Это означает, что можно захватить Таймер 1 и/или Таймер2 под свои нужды. Однако в результате нельзя будет использовать ШИМ на некоторых портах ввода-вывода. Если планируется использовать ШИМ, необходимо помнить об этом.
1.5.3 Загрузка микроконтроллера прерываниями
Чтобы дать представление об эффекте, предположим, что таймер ISR запускался бы каждые 20 мкс. Процессор, работающий на 16 МГц, может выполнить около 1 машинной команды каждые 63 мс или около 320 машинных команд для каждого цикла прерывания (20 мкс). Предположим также, что исполнение каждой строки программы на С может занять много машинных команд. Каждая инструкция, используемая в ISR, отнимает время, доступное для исполнения любой другой программы. Если бы ISR использовала около 150 машинных циклов, было бы потрачено половина доступного процессорного времени. При активных прерываниях главная программа откладывалась бы около ? времени, занимаемого ей в других случаях. 150 машинных команд - не очень большая программа на С, поэтому необходимо быть внимательны.
Если будет слишком длинная ISR, то главная программа будет исполняться крайне медленно, если же ISR будет длиннее, чем продолжительность цикла таймера, то практически никогда не выполнится ваша главная программа, и, кроме того, в конце концов произойдет сбой системного стека.
1.5.4 Измерение загрузки прерываниями
Поскольку необходимо иметь очень быстрый таймер ISR, то нужно измерить, насколько загружены доступные ресурсы. Для этого необходим некоторый метод.
Таймер не был установлен в режим, когда он перезагружается автоматически. Это значит, что ISR должна перезагрузить таймер для следующего интервала счета. Было бы точнее иметь автоматически перезагружаемый таймер, но, используя этот режим, можно измерить время, проводимое в ISR, и соответственно исправить время, загружаемое в таймер. Ключ в том, что при помощи этой коррекции при разумной точности, также получаем и число, показывающее, сколько времени проводим в ISR.
Метод заключается в том, что таймер хранит время, даже если он переполнен и прерван. В конце ISR можно захватить текущее значение счетчика таймера. Это значение представляет то время, которое он отнял у разработчика до следующей точки программы. Это суммарное время, затраченное на переход в процедуру прерывания и выполнение программы в ISR. Небольшая ошибка будет оттого, что не подсчитывается время, затраченное на команду перезагрузки таймера, но эту ошибку можно исправить эмпирически. Фактически именно поэтому используется в формуле подсчета загружаемого значения 257 вместо 256. Было обнаружено опытным путем, что это дает лучший результат. Лишний такт компенсирует команду перезагрузки таймера.
1.5.5 Использование прерываний в Arduino
Часто при работе с проектами на микроконтроллерах требуется запускать фоновую функцию через равные промежутки времени. Это часто реализуется установкой аппаратного таймера для выработки прерывания. Это прерывание запускает программу обработки прерываний (Interrupt Service Routine, ISR) для управления периодическим прерыванием. В настоящей статье я описываю установку 8-битного таймера 2 для выработки прерываний на микроконтроллере ATMega168 Arduino. Я пройдусь по этапам, требуемым для установки программы обработки прерываний и внутри нее самой. Arduino подразумевает процессор ATMega168. Этот микроконтроллер имеет несколько систем ввода-вывода, которые доступны каждому пользователю Arduino, поскольку библиотека Arduino облегчает их использование. К примеру, цифровой ввод-вывод, ШИМ, аналого-цифровые входы и последовательный порт. ATMega168 также имеет три внутренних аппаратных таймера. Хотя библиотека Arduino позволяет использовать некоторые свойства таймеров, нельзя напрямую использовать таймер для выработки периодических прерываний.
таймер память цоколевка stepper
2. Библиотеки Arduino
2.1 Библиотека Servo
Эта библиотека функций для Arduino контроллера предоставляет набор функций для управления сервоприводами. Стандартные сервоприводы позволяют поворачивать привод на опредленный угол от 0 до 180 градусов обычно. Некоторые сервоприводы позволяют совершать полные обороты на заданной скорости. Библиотека Servo позволяет одновременно управлять 12-ю сервоприводами на большинстве плат Arduino и 48-ю на Arduino Mega. На контроллерах отличных от Mega использование библиотеки отключает возможность использовать выходы 9 и 10 в режиме ШИМ даже если привод не подключен к этим выводам. На плате Mega могут быть использованы до 12 сервоприводов без потери функционала ШИМ. При использовании Mega для управления от 12 до 23 сервоприводов нельзя будет использовать выходы 11 и 12 для ШИМ.
Функции:
1) attach()
2) write()
3) writeMicroseconds()
4) read()
5) attached()
6) detach()
В общем случае сервопривод подключается 3-мя проводами : питание, земля и сигнальный. Обычно питание - красный провод и может быть подключен к выводу +5V на плате Arduino. Черный провод земля подключается к GND выводу Arduino, сигнальный, обычно желты, провод подключается к цифровому выводу котроллера Arduino. Следует отметить, что мощные сервоприводы могут создавать большую нагрузку, в этом случает он должен быть запитан отдельно (не через выход +5V Arduino). Тоже самое верно для случая подключения сразу нескольких сервоприводов. Убедитесь, что привод и контроллер подключены к общей земле.
2.2 Библиотека EERPOM
Микроконтроллеры ATmega имеют свою энергонезависимую память, то есть у пользователей Ардуино есть возможность сохранять данные в этой памяти и они могут быть использованы после выключения-включения или перезагрузки контроллера. Arduino библиотека EERPOM предоставляет удобный и простой интерфейс работы с этой памятью. Разные модели микроконтроллеров различаются объемом EERPOM памяти, так ATMega328 имеет 1024 байт, 512 байт у ATmega168 и ATmega8 и по 4Кб (4096 байт) у ATmega1280 и ATmega2560.
Функции
1) read()
2) write()
2.3 Библиотека SPI
Библиотека SPI позволяет контроллеру Arduino взаимодействовать с устройствами поддерживающими SPI протокол. Arduino в данном случае выступает в качестве ведущего устройства. Последовательный периферийный интерфейс (SPI) -- это последовательный синхронный протокол передачи данных используемый микроконтроллерами для обмена данными с одним или несколькими периферийными устройствами на небольших расстояниях. Для организации соединения SPI необходимо одно ведущее устройство, обычно это микроконтроллер, которое управляет соединением с ведомыми устройствами. Обычно подключение осуществляется тремя общими линиями и линией выбора периферийного (ведомого) устройства:
1) Master In Slave Out (MISO), переводится как "вход ведущего выход ведомого", используется для передачи данных от ведомого к ведущему.
2) Master Out Slave In (MOSI) -- выход ведущего вход ведомого, для передачи данных от ведущего к периферийным устройствам.
3) Serial Clock (SCK) -- синхронизирующая линия, синхросигнал генерируется ведущим устройством.
4) Slave Select pin -- вход на ведомых устройствах с помощью которого ведущий может инициировать обмен данными с периферийным устройством. Если на этом входе LOW, то ведомый взаимодействует с ведущим, если HIGH, то ведомый игнорирует сигналы от ведущего.
При работе с SPI устройствами надо учитывать следующие моменты:
1) Какой порядок вывода данных используется: Most Significant Bit (MSB - старший бит (разряд)) or Least Significant Bit (LSB - младший бит) первый. Порядок может быть изменен функцией SPI.setBitOrder().
2) Уровень сигнала синхронизации -- по какому синхронизирующему сигналу (HIGH или LOW) передаются данные.
3) Фаза синхронизации -- влияет на последовательность установки и выборки данных. Фаза синхронизации SPI и уровень сигнала задается функцией SPI.setDataMode().
4) Скорость на которой работает SPI устанавливается функцией SPI.setClockDivider().
Производители SPI устройств несколько по разному реализуют протокол, поэтому необходимо внимательно ознакомиться с техническим описанием к устройству. Комбинация фазы синхронизации (CPHA) и уровня сигнала синхронизации (CPOL) задают режим логики работы интерфейса SPI. Режим устанавливается функцией SPI.setDataMode(). На контроллерах Arduino Duemilanove и других на базе ATmega168 /328, шина SPI использует выходы 10 (SS), 11 (MOSI), 12 (MISO), и 13 (SCK). На Arduino Mega -- 50 (MISO), 51 (MOSI), 52 (SCK), и 53 (SS). Обратите внимание, что даже если вы не используете выход SS, он должен быть установлен как выход, в противном случае интерфейс может оказаться в режиме ведомого и библиотека не будет работать как надо. В качестве SS выхода может быть использован выход отличный от 10-го. Например, при работе с Arduino Ethernet shield контроллер использует выход 4 для взаимодействия с SD картой по SPI и выход 10 для работы с Ethernet контроллером.
Функции
1) begin()
2) end()
3) setBitOrder()
4) setClockDivider()
5) setDataMode()
6) transfer()
2.4 Библиотека Stepper
Библиотека Stepper предоставляет удобный интерфейс управления биполярными и униполярными шаговыми двигателями. Для управления шаговым двигателем, в зависимости от его типа (биполярный или униполярный) и выбранного способа подключения, понадобятся некоторые дополнительные электронные компоненты.
Заключение
В рамках курсовой работы были выполнены основные этапы:
1) Возможности платформы Arduino;
2) Основные решения проектирования простых устройств на базе микроконтроллеров;
3) Были написаны тестовые примеры программ.
В дальнейшем планируется усовершенствовать примеры описанные в курсовой работе, а так же написать новые более функциональные и сложные примеры, для прошивки платформ Arduino.
Литература
1. Голубцов, М.С. Микроконтроллеры AVR от простого к сложному / М.С. Голубцов - М.: Салон-Пресс, 2003. - 288 с.
2. МакРобертс, М. Начала Arduino / М. МакРобертс - London: CUP, 2010. - 459 с.
3. Массимо, Б. Arduino для начинающих волшебников / Б. Массимо - М.: VSD, 2012. - 128 с.
4. Соммер, У. Программирование микроконтроллерных плат Arduino / У. Соммер - Philadelphia: SIAM, 2012. - 241 с.
5. Эванс, Б. Arduino блокнот программиста / Б. Эванс - London: CUP, 2007. - 40 с.
6. Белов, А.В. Конструирование устройств на микроконтроллерах. / А.В. Белов - СПБ.: Наука и Техника, 2005. - 256 с.
7. Гололобов, В.Н. С чего начинаются роботы ? / В.Н. Гололобов - 2011. - 189 с.
8. Предко, М. 123 эксперимента по робототехнике / М. Предко - М.: НТ Пресс, 2007. - 271 с.
9. Суэмацу, Ё. Микрокомпьютерные системы управления. Первое знакомство / Ё. Суэмацу - М.: Издательский дом «Додека - XXI», 2002. -256 с.
10. Белов, А.В. Микроконтроллеры AVR в радиолюбительской практике / А.В. Белов - СПБ.: Наука и Техника, 2007. - 339 с.
11. Иванов, Ю.И. Микропроцессорные устройства систем управления: Учебное пособие / Ю.И. Иванов - Таганрог: Издательство ТРТУ, 2005. - 135 с.
12. Кнут, Д. Э. T.2. Получисленные алгоритмы. Глава 3. Случайные числа / Дональд Э. Кнут // Искусство программирования. - 3-е изд. - М.: Вильямс, 2000. - 832 с.
13. Корабельников, Е.А. Самоучитель по программированию PIC контроллеров для начинающих / Е.А. Корабельников - М.: Салон-Пресс, 2008. - 287 с.
14. Трамперт, В. Измерение, управление и регулирование с помощью AVR-микроконтроллеров / В.Трамперт - К.: «МК-Пресс», - 2006. - 208 с.
15. Парр, Э. Программируемые контроллеры: руководство для инженера / Э. Парр - М.: БИНОМ. Лаборатория знаний, - 2007. - 516 с.
Приложение А
Полные листинги примеров
Листинг А1- Моргание светодиода
/* Мигание LED
* ------------
*
* Включает и выключает светодиод (LED) подсоединенный
* к выходу 13, с интервалом в 2 секунды
*
*/
int ledPin = 13; // LED подсоединен к выводу 13
void setup()
{
pinMode(ledPin, OUTPUT); // устанавливаем вывод 13 как выход
}
void loop()
{
digitalWrite(ledPin, HIGH); // включаем LED
delay(1000); // пауза 1 секунда
digitalWrite(ledPin, LOW); // выключаем LED
delay(1000); // пауза 1 секунда
}
Листинг А2 - Вывод сообщения на LCD дисплей
#include <LiquidCrystal.h>
//Создаем объект для работы с дисплеем.
//При создании указываем номера портов
//в порядке RS, E, DB4, DB5, DB6, DB7
LiquidCrystal lcd(12, 10, 5, 4, 3, 2);
void setup() {
//Выставлем число столбцов и строк
lcd.begin(16, 2);
//Выводим текст
lcd.print("hello, world!");
}
void loop() {
//Выставляем курсор во 2-ю строку,
//1й столбец (счет идет с 0, поэтому
//строка номер 1, стобец номер 0)
lcd.setCursor(0, 1);
//Выводим число секунд со старта
Размещено на Allbest.ur
Подобные документы
Анализ GPS-навигаторов для животных. Использование плат и среды программирования Arduino для разработки ошейника с GPS-навигатором для отслеживания маршрута, проделанного животным, и уведомления об этом пользователя. Выбор модели микроконтроллера.
курсовая работа [2,4 M], добавлен 18.10.2015Представление о системе Arduino. Структура платформы Android. Выбор средств разработки. Разработка структур данных и алгоритмов. Характеристика Bluetooth модуля, блок реле, резисторов, диодов. Графический интерфейс приложения. Написание кода программы.
дипломная работа [4,0 M], добавлен 19.01.2017Обзор существующих технологий разработки программного обеспечения. Описание платформы NET Framework. Принцип работы платформы: компиляция исходного кода; процесс загрузки и исполнения кода; IL-код и верификация. Новые возможности платформы NET Framework.
реферат [30,7 K], добавлен 01.03.2011Классификация колесных наземных мобильных роботов. Обзор приводов мобильных платформ. Особенности стабилизации скорости мобильной платформы Rover 5 с дифференциальным приводом. Разработка алгоритмов управления на основе микроконтроллера Arduino.
курсовая работа [1,3 M], добавлен 04.05.2017Понятие и принципы построения компьютерной памяти, ее двоичная структура. Архитектура фон Неймана как широко известный принцип совместного хранения команд и данных в памяти компьютера. Аналого-цифровой преобразователь на основе двойного интегрирования.
контрольная работа [166,0 K], добавлен 10.02.2015Написание алгоритма приема 10 пакетов по 12 байт из последовательного порта и размещение их в памяти PRAM. Создание управляющего блока PTSCB для режима блоковой передачи данных. Аппаратная обработка прерываний в режима аналого-цифрового сканирования.
практическая работа [2,0 M], добавлен 25.04.2012Преобразование аналоговой формы первичных сигналов для их обработки с помощью ЭВМ в цифровой n-разрядный код, и обратное преобразование цифровой информации в аналоговую. Практическая реализация схем аналого-цифровых и цифро-аналоговых преобразователей.
реферат [89,2 K], добавлен 02.08.2009Разработка структурной и функциональной схем устройства, в основе которой лежит аналого-цифровой преобразователь. Выбор и обоснование элементной базы для реализации устройства, разработка конструкции. Расчеты, подтверждающие работоспособность схемы.
курсовая работа [656,0 K], добавлен 05.12.2012Отличительные черты смартфонов и коммуникаторов от обычных мобильных телефонов, их дополнительные возможности. Назначение и конфигурация платформы J2ME, ее функции. Порядок проектирования приложения для мобильного телефона на основе платформы J2ME.
дипломная работа [3,6 M], добавлен 05.09.2009Создание рабочего модуля аналого-цифрового преобразователя с минимальным количеством микросхем на основе микроконтроллера ATmega8L. Описание блок-схемы АЦП. Схема запуска преобразования. Программа микроконтроллера в среде программирования CodeVision.
курсовая работа [1,2 M], добавлен 04.10.2013