Система управления роботизированной платформой перемещения предметов
Функциональная схема контроллера, управляющего роботизированной платформой перемещения предметов. Модули управления двигателями, структуры микросхем драйверов. Алгоритм функционирования программы, обеспечивающей управление по заданному алгоритму.
Рубрика | Коммуникации, связь, цифровые приборы и радиоэлектроника |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 28.12.2012 |
Размер файла | 1,7 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru
Размещено на http://www.allbest.ru
Содержание
Введение
Техническое задание
1. Функциональная схема
2. Разработка принципиальной схемы устройства
2.1 Выбор управляющего контроллера
2.2 Управление двигателями
2.3 Выбор входных датчиков
2.4 Работа с I2C
3. Программное обеспечение МПС
3.1 Алгоритм функционирования программы
3.2 Описание алгоритма программы
Заключение
Литература
Приложения
Введение
Несмотря на то что современная технология переводит все на уровень сверхбольших чипов и микросхем и в большинстве случаев ремонт представляет собой замену блоков или в крайнем случае чипов. Современному специалисту системотехнику все таки нужны достаточно глубокие знания в области микропроцессоров и электроники которые позволят ему как квалифицированно ремонтировать электронику так и правильно её эксплуатировать.
Исходя из выше представленных доводов, в курсе обучения предусмотрены соответствующие предметы. И по курсу микропроцессоры мне было предложено выполнить разработку цифрового устройства. Для получения более глубоких знаний и практических навыков.
Задание робот пылесос поставленное в рамках данной работы, хотя и ориентированное бытовой аспект но рассматривает интересные аспекты схемотехники и робототехники, а также предполагает интересное решение проблем управления движением и обхода препятствий.
Техническое задание
В курсовой работы необходимо разработать систему управления роботизированной платформой перемещения предметов.
Интерфейс с пользователем обеспечивается с помощью ЖК индикатора на котором отображается информация о состоянии платформы: заряд аккумулятора, номер поворота расстояние от пункта назначения пройденное роботом. Управление контроллером ведется через инфракрасную восьмиклавишную клавиатуру или через специальную программу по инфракрасному последовательному интерфейсу. Помимо этого имеется две кнопки ВКЛ и Стоп/Старт движение.
Для обеспечения движения устройства по комнате и предотвращения столкновения с четырех сторон устанавливаются инфракрасные датчики приближения к препятствию. А также данные датчики используются для позиционирования на инфракрасный маяк на зарядном устройстве. Зарядное устройство индукционного типа и располагается под площадкой стоянки робота.
Еще два оптических датчика позволяют отслеживать светлые полосы указатели направления движения.
Для контроля заряженности аккумулятора используется простейшее АЦП разрядностью от 4-8 бит.
Для обеспечения движения используется электропривод с помощью шаговых двигателей на два ведущих колеса третье колесо опорное.
Перед движением необходимо в ручном режиме через клавиатуру или с помощью компьютера загрузить маршрут после чего робот по команде или по нажатию на клавишу придет в движение и будет обходить по маршруту препятствия.
1. Функциональная схема
Системы управления роботизированной платформы
Размещено на http://www.allbest.ru
Размещено на http://www.allbest.ru
Рис.1.1 Функциональная схема управляющего контроллера
Блоки датчиков:
ДЛП1 - левый датчик препятствия. Предназначен для определения препятствия слева.
ДЛП2 - правый датчик препятствия. Предназначен для определения препятствия справа.
ДП1 - датчик препятствия 1. Предназначен для определения препятствия.
ДП2 - датчик препятствия 2. Предназначен для определения препятствия.
Блок клавиатуры - клавиатура предназначена для управления устройством. Нажатая клавиша обрабатывается микроконтроллером, который выполняет необходимые действия. Клавиатура состоит из 1 кнопки: «START/PAUSE», Кнопка «START/ PAUSE» приводит роботизированную платформу в движение, либо останавливает ее.
БУД1 - блок управления двигателем 1.
БУД2 - блок управления двигателем 2.
БУД3 - блок управления двигателем 3
БРС - блок радио связи. Предназначен для ручного управления роботизированной платформой
ФПЗУ - в которой производиться фиксация передаваемая компьютером программы управления платформой, после получения программы платформа уже в автономном режиме может выполнить заданные действия.
2. Разработка принципиальной схемы устройства
2.1 Выбор управляющего контроллера
Для выбора контроллера я решил провести анализ след серий микроконтроллеров широко представленных на рынке и используемых в аналогичных устройствах: AVR, PIC, MK-51.
Перед тем как выбирать контроллер я определится, каким критериям должен соответствовать контроллер для нашего устройства. Основные требования к контроллеру: достаточное количество портов, объем памяти, простая реализация, стоимость, число таймеров и реализуемые функции, так же желательно выбирать контроллер со знакомой архитектурой и др.
Краткий обзор AVR
AVR-микроконтроллер фирмы Атмел - это 8-разрядные RISC микроконтроллер для встраиваемых приложений. Они привлекают внимание наилучшим соотношением показателей быстродействие/энергопотребление, удобными режимами программирования, доступностью программно-аппаратных средств поддержки и широкой номенклатурой выпускаемых кристаллов. Микроконтроллеры обычно поставляются со стертыми встроенными FLASH и EEPROM блоками памяти (содержимое всех ячеек = $FF), готовыми к программированию.
Улучшенная RISC (enhanced RISC) архитектура AVR-микроконтроллеров объединяет в себе комплекс решений, направленных на повышение быстродействия микропроцессорного ядра AVR. Арифметико-логическое устройство (ALU), в котором выполняются все вычислительные операции, имеет доступ к 32-м оперативным регистрам, объединенным в регистровый файл. Выборка содержимого регистров, выполнение операции и запись результата обратно в регистровый файл выполняются за один машинный цикл. Для сравнения полезно вспомнить, что большинство встраиваемых микроконтроллеров имеют только один такой регистр, непосредственно доступный ALU, - аккумулятор, что требует включения в программу дополнительных команд его загрузки и считывания.
Обзор PIC
Альтернативой может быть контроллер другой серии например PIC 16С745. PIC16C745 - это 8-pазpядные микpоконтpоллеpы с RISC аpхитектуpой, пpоизводимые фиpмой Microchip Technology. Это семейство микpоконтpоллеpов отличается низким энеpгопотpеблением и высокой скоpостью. Микpоконтpоллеpы имеют встpоенное ЭППЗУ пpогpаммы, ОЗУ данных и выпускаются в 18 и 28 выводных коpпусах.
Высокая скоpость выполнения команд в PIC достигается за счет использования двухшинной Гаpваpдской аpхитектуpы вместо тpадиционной одношинной Фон-Hеймановской. Гаpваpдская аpхитектуpа основывается на набоpе pегистpов с pазделенными шинами и адpесным пpостpанством для команд и для данных. Hабоp pегистpов означает, что все пpогpаммные объекты, такие как поpты ввода/вывода, ячейки памяти и таймеp, пpедставляют собой физически pеализоваенные аппаpатные pегистpы.
Память данных (ОЗУ) для PIC16CXX имеет pазpядность 8 бит, память пpогpамм (ППЗУ) имеет pазpядность 12 бит для PIC16C5X и 14 бит для PIC16CXX. Использование Гаpваpдской аpхитектуpы позволяет достичь высокой скоpости выполнения битовых, байтовых и pегистpовых опеpаций. Кpоме того, Гаpвадская аpхитектуpа допускает конвейеpное выполнение инстpукций, когда одновpеменно выполняется текущая инстpукция и считывается следующая. В тpадиционной же Фон-Hеймановской аpхитектуpе команды и данные пеpедаются чеpез одну pазделяемую или мультиплексиpуемую шину, тем самым огpаничивая возможности конвейеpизации.
Третий известный и доступный мне вариант это серия 51 контроллеров. Помимо того что эта серия имеет большое количество разновидностей и МК семейства МК-51 используют гарвардскую архитектуру: память программ (ПЗУ) и память данных (ОЗУ) имеют раздельное адресное пространство. И, как следствие, для обращения к ячейкам памяти разного типа должны быть использованы разные типы команд но в определенных условиях эта технология является плюсом. Другое достоинство использование CISK архитектуры что позволяет упростить программу за счет поддержки команд умножения и деления. Максимальный размер адресного пространства для каждого типа памяти составляет 64 Кбайта. Однако непосредственно на кристалле МК 8051 АН располагаются только 4 Кбайта ПЗУ и 128 или 256 байт регистрового ОЗУ. МК семейства MCS-51 имеют открытую архитектуру, т.е. позволяют подключать внешнюю память, что реализовано аппаратно. МК-51 имеет четыре 8-разрядных параллельных порта ввода/вывода и два 16-разрядных программируемых таймера.
Рассматривая все вышеперечисленные микроконтроллеры и учитывая все необходимые параметры для разрабатываемого устройства, я остановил свой выбор на серии МК-51. Мой выбор основывается во первых, на наиболее доступной цене при достаточности портов, памяти и функций, во вторых архитектура данного контролера мной изучена в курсе лабораторных работ и поэтому более доступна для разработки курсовой работы. А также важно что у меня имеются средства программирования (язык PLM) и средство моделирования элементов программы - лабораторный стенд на ADUC812.
Окончательно мной выбран AT89C52 имеющий четыре восьми разрядных порта 4кб ПЗУ 256байт регистрового ОЗУ, три таймера встроенный последовательный канал но при этом имеющий небольшую цену.
Использование встроенного канала последовательной передачи данных позволяет подключить радио модуль и легко обеспечит связь платформы и компьютера.
2.2 Управление двигателями
В данной курсовой работе используются радио модули:
1. MOD RF AC-RX (приемник)
Рис 2.1 Общий вид MOD RF AC-RX
Таблица 2.1. Конфигурация пинов
Таблица 2.2. Технические характеристики
2. MOD RF TX-4MSIL (передатчик)
Рис. 2.2 Общий вид MOD RF TX-4MSIL
Конфигурация пинов:
1) RF Output
2) Data input
3) Ground
4) +V
Таблица 2.3. Технические характеристики
Так же в данной курсовой работе используются 3 вида двигателей: мощные шаговые (для поднятия и выдвижения стрелы манипулятора), маломощные шаговые двигатели (зажим манипулятора) и мощные простые двигатели (для движения платформы). Двигатели взяты из старых дисководов, так же оттуда были взяты микросхемы драйвера двигателей. В качестве базы взята радиоуправляемая игрушка, представляющая собой танк. Соответственно нужно выполнить алгоритм управления движением с учетом специфики движения гусеничного привода. В базе требуется сохранить электронику обеспечивающую привод - это мощные 10-12V двигатели которые представляют собой обычные коллекторные двигатели достаточной мощностью.
1. Мощные простые двигатели управляются через специализированную микросхему драйвера, которая имеет двуполярные усилители, внутренние системы защиты токоограничения и позволяет задавая соответствующее управляющее состояние выполнить включение двигателя с заданным направлением вращения (вперед\назад). С помощью этого обеспечивается направление движения устройства - когда устройство двигается вперед, один двигатель крутится вправо, другой влево; при движении назад наоборот - один влево, другой вправо. При поворотах устройства оба двигателя крутятся в одинаковом направлении. Преимуществом гусеничной платформы является то, что можно разворачивать ее на месте.
Микросхема драйвера двигателей L293D рассчитана на ток нагрузки до 600 мА на каждый канал. Иногда 600 мА бывает недостаточно. Особенно в тех случаях, когда ротор мотора встречает серьезную нагрузку вплоть до полной остановки. Наиболее часто такая ситуация встречается у роботов для мини-сумо. В этом случае ток потребления мотора сильно возрастает и микросхема драйвера двигателей начинает перегреваться. В результате у L293D срабатывает тепловая защита, и она отключает управление нагрузкой.
Одним из самых простых способов борьбы с этой проблемой является сдваивание каналов драйвера (рис. 2.1). В этом случае допустимый ток нагрузки увеличивается вдвое и может достигать 1,2 А.
Рис. 2.3 Сдваивание каналов драйвера
Каждая микросхема L293D имеет четыре канала управления. При сдваивании каналов мы получим два усиленных канала управления двигателем, что позволит построить полнофункциональный драйвер двигателя с возможностью реверса. При этом для управления каждым мотором на практике используют отдельную микросхему L293D. В этом случае можно подключить мотор так, как это показано на следующей схеме (рис. 2.2)
Рис. 2.4 Подключение двигателя на примере драйвера L239D
Еще одним способом является сдваивание микросхем.(рис. 2.3) Так поступают в тех случаях, когда необходимо сэкономить место на плате или плата уже готова и при этом необходимо увеличить ее "силы". Микросхемы кладутся, как бутерброд, одна на одну, и соответствующие выводы припаиваются друг к другу.
При таком способе может понадобиться дополнительное охлаждение, которое выполняют в виде небольшого радиатора. (рис. 2.3) Радиатор, вырезанный из металлической полоски, прокладывают между микросхемами. А для лучшего теплоотвода соединяют с корпусами микросхем при помощи термоклея. Кроме того, на радиаторе делают небольшие "усы", которые припаивают к "земляным" (GND) выводам микросхемы.
Рис 2.6 Внутренняя структура микросхемы драйвера LB1656
3. Мощные шаговые двигатели управляются через специализированные микросхемы драйвера. Шаговый электродвигатель - это электромеханическое устройство, преобразующее сигнал управления в угловое перемещение ротора с фиксацией его в заданном положении. Современные шаговые двигатели являются, по сути, синхронными двигателями без пусковой обмотки на роторе, что объясняется частотным пуском шагового двигателя. Последовательная активация обмоток двигателя вызывает дискретные угловые перемещения (шаги) ротора. Отличительная особенность шаговых двигателей - это возможность осуществлять позиционирование без датчика обратной связи по положению. Эти двигатели в данной курсовой работе используются для управления манипулятором. Работает следующим образом: при вытягивании червячного штока двигателя, происходит: на нижнем двигателе - поднятие манипулятора, на верхнем двигателе - выдвижение манипулятора и наоборот, при втягивании штока манипулятор движется обратно, возвращаясь в начальное положение.
Для управления мощным шаговым двигателем используется микросхема драйвера M54534B, ранее установленная вместе с ним на плате дисковода.
Рис 2.7 Внутренняя структура микросхемы драйвера M54534B
Рис 2.8 Внутренняя структура каждого контура микросхемы драйвера M54534B
Данная ячейка имеет эмиттерный повторитель и диодный ключ.
2.3 Выбор датчиков
Входные датчики, обеспечивают позиционное обнаружение препятствий. Проверка на наличие препятствий производится четырьмя датчиками, в которых излучающие диоды VD2, VD4, VD6 и VD8, расположенные по дуге, посылаются в пространство перед бампером. Как только отраженный свет, попадая на фотодиод, открывает его до определенного уровня. Уровень дальности настраивается путем расположения излучающих и фото диодов. срабатывания настраивается резистивными элементами на входе элемента И-НЕ. Логические элементы работают по схеме компараторов в определенном уровне сигнала, который поступает со светодиода. Второй элемент И-НЕ служит буфером и конвертором, который обеспечивает преобразование логики. Т.о. в первом датчике используются два элемента микросхемы DD1 (К561ЛА7).
Так же имеются 3 датчика конечных положений. Один для захвата манипулятора - VD10, второй для начального положения по второму двигателю (локтевой) - VD12, третий - по третьему (плечевой) - VD14. Каждый датчик аналогичен предшествующим, отличие заключается в том, что этот датчик представляет собой щелевой зазор, в который входит заслонка, перекрывающая фото- и светодиод, засчет этого происходит обнаружение момента срабатывания. Таким образом такая система позволяет.определить начальное положение манипулятора и в дальнейшем по числу шагов точно позиционировать манипулятор
1) Принцип работы датчика основан на свойстве поверхностей по-разному отражать падающий на них свет. Черные или темные поверхности отражают свет намного хуже, чем белые или светлые. Улавливая отраженный свет, мы определяем тип поверхности, находящейся под датчиком.
Рис 2.9 Конструкция датчиков
Для изготовления датчика границы мы используем фототранзистор и яркий светодиод. На приведенном рисунке изображена конструкция датчика. Светодиод и фототранзистор направлены в сторону исследуемой поверхности. Расстояние до поверхности зависит от силы свечения светодиода и чувствительности фототранзистора. Обычно оптимальное расстояние равно 1-1,5см.
Использование фототранзистора обусловлено тем, что скорость его срабатывания высока и достаточна даже при очень быстром движении робота. Фоторезисторы имеют невысокую скорость срабатывания, и ее может быть недостаточно при высокой скорости движения робота.
Схема датчика очень проста, состоит непосредственно из фототранзистора, светодиода и ограничивающих резисторов.
При срабатывании фототранзистора на выходе формируется сигнал низкого уровня, который и подается на один из свободных входов микроконтроллера.
Щелевые оптические датчики имеют разнесенные на определенном расстоянии друг от друга фото излучатель и свето приемник (фотодиод, фототранзистор), оптические оси которых направлены друг на друга. Расстояние между излучателем и приемником (щель в корпусе датчика) и составляет рабочую область датчика. В обычном рабочем режиме излучатель светит на фотоприемник, который поддерживает на выходе высокий ток. При появлении непрозрачного объекта в рабочей области датчика луч прерывается и ток на фотоприемнике падает. Если в качестве фотодетектора использован не фототранзистор, а интегрированный фотодетектор, то подключение датчика в рабочую схему значительно упрощается, поскольку он уже включает в себя фотодиод, усилитель, регулятор напряжения, триггер Шмидта и NPN транзистор с нагрузочным резистором. В результате, на выходе датчика снимается уже не ток, а цифровые уровни "1" или "0". Такие сигналы полностью совместимы с микросхемами TTL логики или микроконтроллерами.
2.4 Работа с I2C
Для того чтобы программно реализовать функционирование используемой в моей работе шины следует более детально рассмотреть особенности работы с шиной. I?C -- последовательная шина данных для связи интегральных схем, разработанная фирмой Philips как простая шина внутренней связи для создания управляющей электроники. Используется для соединения низкоскоростных периферийных компонентов с материнской платой, встраиваемыми системами и мобильными телефонами. Название представляет собой аббревиатуру слов Inter-Integrated Circuit. 1 октября 2006 года отменены лицензионные отчисления за использование протокола I?C. Однако, отчисления сохраняются для выделения эксклюзивного подчинённого адреса на шине I?C.
I?C использует две двунаправленных линии, подтянутые к напряжению питания и управляемые через открытый коллектор или открытый сток -- последовательная линия данных (SDA) и последовательная линия тактирования (SCL), обе нагруженные резисторами. Стандартные напряжения +5 В или +3,3 В, однако допускаются и другие.
Классическая адресация включает 7-битное адресное пространство с 16 зарезервированными адресами. Это означает до 112 свободных адресов для подключения периферии на одну шину.
Основной режим работы -- 100 кбит/с; 10 кбит/с в режиме работы с пониженной скоростью. Заметим, что стандарт допускает приостановку тактирования для работы с медленными устройствами.
После пересмотра стандарта в 1992 году становится возможным подключение ещё большего количества устройств на одну шину (за счёт возможности 10-битной адресации), а также большую скорость до 400 кбит/с в скоростном режиме. Соответственно, доступное количество свободных узлов выросло до 1008. Максимальное допустимое количество микросхем, подсоединенных к одной шине, ограничивается максимальной емкостью шины в 400 пФ.
Рис.2.10 Основные параметры формируемых сигналов при обмене по шине
Рис.2.11 Основные особенности отработки сигнала ответа ACK от устройства
контроллер роботизированный перемещение предмет
На представленном из технической документации рисунке наглядно видно что обмен начинается с формирования стартового импульса при SCL=1 SDA опускается в 0. Далее в процессе обмена SDA переключается только в моменты когда сигнал тактирования SCL=0 иначе при SCL=1 перевод сигнала SDA из 0 в 1 будет восприниматься как завершение цикла обмена и наоборот даже без завершения новый стартовый сигнал будет служить для того, чтобы обеспечить начало нового цикла. После стартового импульса выполняется передача первого байта префикса, далее мастер ждет от ведомого появление на шине сигнала ответа ACK и так данный сигнал формируется после каждого переданного байта ведомым, или после принятого байта мастером.
Таблица 2.4. Величины основных таймаутов при обмене данными по шине I2C
3. Программное обеспечение МПС
3.1 Алгоритм функционирования программы
При старте программы выполняется инициализацию параметров.
Далее происходит инициализация последовательного канала I2C для принятия данных через радио модуль. Чтение или запись проходят по 10 байт: первые 6 байт указывают на начальное положение манипулятора, следующие 2 байта указывают на направление движения, и оставшиеся 2 байта указывают на длительность движения (в десятках мс).
3.2 Описание алгоритма программы
В объявлении переменных:
Через имена sbit s1, s2, s3 привязывают соответствующие порты контроля датчиков начального положения зажима, выноса и раскрытия стрелы; ll - левое препятствие, rr- датчик правого препятствия; scl, sda - используются для тактирования обмена через последовательные каналы I2С c флеш памятью; k1, k2 - порты, к которым подключены управляющие клавиши: клавиша 1 - Start\stop, для контроля состояния используется флаг Startstop; так же используется еще один флаг Readwrite, который нужен для указания направления передачи во флеш-ПЗУ; pozin - номер загружаемого элемента; счетчики i, j, k, n, p; keyold - предшествующее состояние клавиатуры для отслеживания момента нажатия; p1, p2, p3 - задаваемое положение по каждому из шаговых двигателей; p11, p21, p31 - предшествующие положения по каждому из двигателей; command - команда от компьютера; hadrl - старшая младшая часть адреса при записи\чтении во флеш-ПЗУ; dd1, dd2, dd3, dd4, dd5 - используют только младшую тетраду для задания управляющего слова.
Рассмотрим основные процедуры и обработчики прерываний, используемых в программе.
Процедура dalay организует задержку, кратную 5мс, чтобы тактировать передачу данных по последовательному каналу I2C.
Readwritei2c - данная процедура выполняет, в зависимости от флага readwrite, запись или чтение блоков данных в массиве din, при этом выполнятся последовательность инициализации канала через формирование стартового импульса. Далее в переменную P заносятся префиксный адрес - указатель на то, что это флеш-ПЗУ, так же добавляется бит записи\чтения. Передача выполняется путем контроля младшего бита и если он равен 1, то в момент когда сигнал scl равен 0, линию sda устанавливаем равной 1. После этого производится подвижка передаваемого байта и выдерживается пауза тактирования, равное 25 мкс, и сигнал scl выставляется в состояние 1, указывая устройству, что необходимо считать передаваемые данные, после чего сигнал scl снова переводится в 0. Таким образом выполняется 8 циклов передачи. Далее необходимо принять сигнал подтверждения со стороны ПЗУ о том, что префикс принят и обработан. Для этого мы в течении необходимого времени меняем состояние сигнала scl с 1 на 0 и если при единичном сигнале scl считывается 0, это означает что чип ПЗУ сформировал сигнал ответа, подтверждающий факт обработки данных. Далее выполняется таким же образом передача адреса старшей и младшей части. Далее идут процедуры чтения или записи, по 10 байт, массив din.
Учитывая формат пакета управления, когда первые 6б указывают следующее положение манипулятора, 4 и 5 записи по 2 байта задают: направление движения (7-ой бит старшего байта, 1 правое вращение, 0 - левое вращение) и длительность движения в десятках миллисекунд (оставшиеся 7 бит старшего байта) и младший байт задает число повторов(max 255сек) в движении в текущем направлении.
Чтение производится следующим образом: выполняем формирование тактирующего сигнала с периодом, примерно равным 100 микросек. Данный период определен техническими параметрами микросхемы и если на шине при нулевом сигнале выставляется единица и тактируя единичным сигналом scl мы проверяем состояние сигнала sda, если он равен 1, то мы в промежуточную переменную устанавливаем 7-ой бит, равный 1. После чего сдвигаем ее на 1 вправо. Таким образом выполняя весь цикл мы осуществляем прием 8-ми бит, после чего эти данные переносятся в массив din. Sda устанавливается в 0, формируя сигнал подтверждения для ПЗУ, после чего пауза в 50 микросек. и еще на 50 микросек. scl=1. Так организуется сигнал ответа ACK со стороны мастера для флеш-ПЗУ, говоря ей, что можно продолжить обмен.
Если флаг readwrite=0, выполняем запись 10 байт данных, присланных компьютером. Процедура аналогична приему, только теперь мы формируем записываемый бит сами, и передаем так 8 бит начиная с младшего. Если младший бит больше 0, то тогда sda=1, иначе sda=0. Выдержка нужных задержек: scl=0 - 50 мкс, scl=1 - 50 мкс. Далее повторяем процедуру ACK от ПЗУ. Так записывается 10 байт. По окончанию выполняется формирование стопового импульса, когда при scl=1.
Далее рассмотрим процедуру обработчика прерывания таймера.
Устанавливаем начальное значение счетчика th, tl
В переменной yprdvig: 0000 (стоп), 0110 (вперед), 1001 (назад), 0101 (вправо), 1010 (влево). Далее задана переменная, определяющая время движения в заданном направлении - timedvig - int. Если предыдущее состояние timedvig равно 0, то тогда платформа выполняет команду стоп - if(--timedvig=0) napr = 0
Делаем обнуление адресов для начала приема данных. Если обнаружено, что команда равна ff, то тогда далее ведется прием блока данных. Для этого дополнительно команду назначаем равной ff. По каждому событию RI проверяем, пока команда равна ff и данные, записанные не во всю ПЗУ каждый следующий байт принимаем, если принято 10 байт, записываем их.
Часть наиболее интересных алгоритмов представлено в виде графических схем, а рис.3.1, 3.2.
Заключение
Поставленная задача в данном курсовом проекте была реализована, разработана функциональная схема. После анализа функциональной схемы рассмотрение множества разработок и отдельных электронных узлов была разработана схема контроллера, которая реализует поставленную задачу на аппаратном уровне. При схемотехнической реализации блока был произведен выбор наиболее оптимального контроллера для решения задачи. Также были выбраны датчики и исполнительные ключи и устройства(шаговые двигатели). А также обеспечено сопряжение интерфейсов компьютера и контроллера через радио модули.
Вторым этапом реализации проекта стало написание программной части, которая обеспечивает управление оборудованием по заданному алгоритму. Для реализации функций обмена с ПЗУ был изучен протокол I2C, который и был далее реализован в виде части программного кода. Также было выполнено описание программы и представлен её код.
После окончания разработки проекта, он был представлен в виде отчета имеющего приложения: листинг программы и принципиальная схема.
Таким образом отметить, что поставленная задача выполнена и проект реализован как схемотехнически так и программно.
Приложение (Схема устройства)
Приложение (Листинг программы)
#include <REG52.H> /* special function register declarations8052*/
#include <stdio.h> /* prototype declarations for I/O functions */
//********************* pereimenovanie bitov*******************
sbit s1 = P2^2;
sbit s2 = P2^3;
sbit s3 = P2^4;
sbit fr = P3^4;
sbit fl = P3^5;
sbit rr = P2^0;
sbit ll = P2^1;
sbit scl= P3^6;
sbit sda= P3^7;
sbit k1 = P2^5; //key start_stop
sbit k2 = P2^6;
//*******************Flagi *********************************
bit StartStop; // flag Start stop platform
bit readwrite; // flag read --- write
bit key;
bit avtoradio;
//*******************Peremennie*****************************
unsigned char i,j,k,n,p,
unsigned int tiket;
unsigned char keyold;
unsigned char command; // komanda ot komputera
nsigned char pozin[]={0}; //nomer zagruz elementa
unsigned int timedvig; // vremya dgigenia platformu
unsigned char uprd56;
unsigned int p1,p2,p3,p11, p21, p31
unsigned char adrh,adrl;
unsigned char din[]={0,0,0,0,0,0,0,0,0,0};
//*************************upr byte************************
unsigend char dd1,dd2,dd3,dd4,dd5;
void delay (void chart t0)
{
unsigned char t1;
for (t1=0;t1<t0;t1++);// zadergka 5*t mks
}
void readwriteI2C (void unsigned char adresh,adresl)
{
sda=1;
scl=1;
sda=0; // impulse START
p=0xa0; //I2C prefix adres PZU
if (readwrite) p=p+1;
scl=0;
for (i=0;i<8;i++) //*****************perdacha prefiksa*********
{
delay(5);
sda=1;
if ((p&1)>0) sda=1;
p=p>>1;
delay(5);
scl=1;
delay(10);
scl=0;
}
sda=1;
while(sda) //ogidanie otveta PZU
{
scl=0;
delay(10);
scl=1;
delay(10);
};
p=adrh; //*****************peredacha starh adresa**********
for (i=0;i<8;i++)
{
delay(5);
sda=1;
if ((p&1)>0) sda=1;
p=p>>1;
delay(5);
scl=1;
delay(10);
scl=0;
}
sda=1;
while(sda) //ogidanie otveta PZU
{
scl=0;
delay(10);
scl=1;
delay(10);
};
p=adrl; //**************peredacha mladhy adresa*********
for (i=0;i<8;i++)
{
delay(5);
sda=1;
if ((p&1)>0) sda=1;
p=p>>1;
delay(5);
scl=1;
delay(10);
scl=0;
}
sda=1;
while(sda) //ogidanie otveta PZU
{
scl=0;
delay(10);
scl=1;
delay(10);
};
//************************procedua chtenia***********************
if (readwrite)
{
for (j=0;j<10;j++)
{ scl=0;
p=0;
for(i=0;i<8;i++)
{
delay(10);
scl=1;
if (sda) p=p|0x80;
p=p>>1;
delay(10);
scl=0;
}
din[j]=p;
sda=0;
delay(10);
scl=1;
delay(10);
scl=1;
}
else //************************write blok dannih********************
{
for(j=0;j<10;j++)
{
p=din[j];
scl=0;
for (i=0;i<8;i++)
{
delay(10);
sda=0;
if ((p&1)>0) sda=1;
p=p>>1;
delay(10);
scl=1;
delay(10);
scl=0;
}
scl=0;
sda=1;
while(sda) //ogidanie otveta ACK ot PZU
{
scl=0;
delay(10);
scl=1;
delay(10);
}
}
//**********************stop pulse*****************************
scl=0;
sda=0;
scl=1;
sda=1;
}
}
void uart_interrupt (void) interrupt 4 using 2
{
if (RI) // input data for uart
{
RI=0;
if (SBUF==0xff) // command prinyat ypravl programma
{
adresh=0;
adresl=0;
readwrite=0; //pihem dannie
command=0xff;
pozin=0;
}
else
{
if (!((adresh==0x20)&&(adresl==0xff))&&(command=0xff))
{
din[pozin]=SBUF;
pozin++;
}
else
{
if(SBUF=33)
{
command=33;
pozin=0;
}
else
{
if(command=33) din[++pozin]=SBUF; // priem odnogo ypravl bloka
else
{
if(SBUF=0) startstop=0;
else
{
startstop=1;
}
while(!RI);
datao[pozin]=SBUF;
pozin++;
adrl++;
if (CY)
adrh++;
}
i2C(adresh,adresl);
}
readwrite=1;
adresh=0;
adresl=0;
}
if (SBUF==0x00) StartStop=0; //pausa
if (SBUF==0x01) p11++; //X++
if (SBUF==0x02) p11--; //X--
if (SBUF==0x03) p21++; //Y++
if (SBUF==0x04) p21--; //Y--
if (SBUF==0x05) p31++; //Z++
if (SBUF==0x06) p31--; //Z--
}
void timer_interrupt (void) interrupt 1 using 1
{
Unsigned char dd1,dd2,dd3;
TH0=0xfc;
TL0=0x4f; // dla 11.592MGc 1ms - 1000perepoln/sek
tiket++;
{
if ((!k1)&&(keyold!=1)
{
startstop=!startstop;
keyold=1;
}
else if ((!k2)&&(keyold!=2))
{
keyold=2;
avtoradio=!avtoradio;)
}
Else keyold=0;//
if (p1<p11)
{
if (dd1==1) dd1=2;
else if (dd1==2) dd1=4;
else if (dd1==4) dd1=8;
else if (dd1==8) dd1=1;
}
if (p1>p11)
{
if (dd1==1)dd1=8;
else if (dd1==2)dd1=1;
else if (dd1==4)dd1=2;
else if (dd1==8)dd1=4;
}
if (p2<p21)
{
if (dd2==1)dd2=2;
else if (dd2==2)dd2=4;
else if (dd2==4)dd2=8;
else if (dd2==8)dd2=1;
}
else
{
if (dd2==1)dd2=8;
else if (dd2==2)dd2=1;
else if (dd2==4)dd2=2;
else if (dd2==8)dd2=4;
}
if (p31>p3)
{
if (dd3==1)dd3=8;
else if (dd3==2)dd3=1;
else if (dd3==4)dd3=2;
else if (dd3==8)dd3=4;
}
Else
{
if (dd3==1)dd3=2;
else if (dd3==2)dd3=4;
else if (dd3==4)dd3=8;
else if (dd3==8)dd3=1;
}
If (startstop)
{
Timedvig--;
P1=((P1&0xf8)|(dd1));p1++;
P1=((P1&0xc7)|(dd2<<3));
P1=((P1&0x3f)|(dd3<<6));
If((dd3&4)>0) P0=P0|1;
Else P0=P0&0xfe;
If (timedvig>0) P0=((P0&0xe1)|(uprd56<<1);
Else P0=(P0&0xe1);
}
}
void main (void)
{
SCON = 0x50; /* SCON: mode 1, 8-bit UART, enable rcvr */
TMOD |= 0x21; /* TMOD: timer 1, mode 2, 8-bit reload */
TH1 = 0xfd; /* TH1: reload value for 9600 baud @ 11,0592MHz */
TR1 = 1; /* TR1: timer 1 run */
ES = 1;
TR0 = 1;
ET0 = 1;
TI = 1; /* TI: set TI to send first char of UART */
EA = 1;
TI = 0;
Command=1;
P3=P3|0x30;
P2=0xff;
while(s1){p11--;smehen();} //zadaem start poziciu
while(s2){p21--;smehen();}
while(s3){p31--;smehen();}
while (1)
{
if((din[7]==0)&&(din[6]==0))
{
readwrite=1;
readwritei2c();
}
if((din[7]>0)&&(din[6]>0))
{
adresl=adresl+8;
if((din[7]&0xe0)==0) yprdvig=0;
if((din[7]&0xe0)==1) yprdvig=6;
if((din[7]&0xe0)==2) yprdvig=9;
timedvig=(din[7]&0x1f)+din[6]*256;
while(timedvig>0);
}
smehen();
//*********
}
}
Размещено на Allbest.ru
Подобные документы
Описание примера изготовления простой, многофункциональной роботизированной системы. Выбор комплектующих, платформы, периферийных устройств, сервоприводов и дальномеров. Пример изготовления корпуса и алгоритмы написания программы для управления системой.
курсовая работа [178,4 K], добавлен 27.08.2017Алгоритм функционирования управляющего устройства. Система управления как совокупность управляемого объекта и управляющего устройства, ее обобщенная структура. Понятие технологического объекта управления. Этапы циркуляции информации в процессе управления.
реферат [46,9 K], добавлен 11.06.2010Система автоматизированного управления технологическим процессом в котле малой мощности модели Е-50 на основе программируемого контроллера; модули и датчики для снятия показаний уровня воды в котле; обеспечение надежности функционирования котлоагрегата.
курсовая работа [2,1 M], добавлен 13.12.2010Схема солнечной фотоэлектрической установки. Выбор электродвигателя и определение передаточных функций. Моделирование системы автоматического управления средствами MATLAB. Подбор микроконтроллера, драйвера двигателя и датчика уровня освещенности.
курсовая работа [7,0 M], добавлен 11.08.2012Функциональная схема микропроцессорной системы управления, алгоритм ее работы. Инициализация микроконтроллера и листинг соответствующей программы. Преобразование напряжения от датчика температуры. Обработка прерываний. Расчет электрических параметров.
дипломная работа [1,7 M], добавлен 23.05.2012Разработка системы, предназначенной для управления поворотом устройства перемещения робота. Выбор и расчет передаточной функции микропроцессора, усилителя, электромагнитного клапана, гидроцилиндра. Расчет датчика обратной связи и устойчивости системы.
курсовая работа [972,1 K], добавлен 20.10.2013Разработка блока управления турникетом общественного транспорта с функциями ограничения прохода людей и преграждения пути перед теми, кто не прошел авторизацию. Функциональная спецификация, структурная схема и алгоритм программы. Выбор элементной базы.
курсовая работа [1,2 M], добавлен 26.12.2013Функциональная схема устройства стабилизации скорости перемещения схвата манипулятора промышленного робота. Математическое описание составных элементов системы автоматического регулирования (САР). Расчет корректирующих устройств, методика D-разбиения.
курсовая работа [2,0 M], добавлен 09.04.2013Результаты моделирования системы управления. Функциональная схема системы управления углом поворота нагрузки и алгоритм работы ЭВМ. Влияние периода квантования сигналов управления в контуре регулирования скорости на качество переходного процесса.
курсовая работа [2,2 M], добавлен 11.12.2012Структурная схема микропроцессорной системы управления. Разработка принципиальной схемы блока чтения информации с датчиков. Алгоритм работы блока обмена данными по последовательному каналу связи. Электрические параметры системы, листинг программы.
курсовая работа [1,4 M], добавлен 21.11.2013