
- •Содержание
- •1 Основная часть 4
- •2 Техническая часть 13
- •3 Реализация алгоритмов управления роботом 25
- •Введение
- •1 Основная часть
- •1.1 Описание платформы Hexapod.
- •1.1.1 Описание работы сервомоторов cds5516
- •1.1.2 Микроконтроллер Arduino Mega 2560
- •1.2 Последовательный порт (com)
- •1.3 Средства Visual Studio для работы с com портом
- •2 Техническая часть
- •2.1 Основные инструкции для управления сервомоторами
- •2.2 Инверсная кинематика
- •2.3 Вычисление углов для сервомоторов
- •3 Реализация алгоритмов управления роботом
- •Заключение
- •Список использованных источников
1.2 Последовательный порт (com)
Плата Arduino Mega соединяется с компьютером по средством USB кабеля, при этом устройство отображается в компьютере в виде последовательного порта (COM – порта). Особенность последовательного порта в том, что данные по нему передаются последовательно, бит за батом, чем и обеспечена его связь с UART протоколом. Самым распространённым интерфейсом для работы с ком портом является RS-232 и представляет собой 9-ти контактный разъем типа DB-9M, представленный на рисунке 3. Назначение выводов представлено в таблице 2.
Рисунок 3. Распиновка интерфейса типа DB-9M
Таблица 2. Назначение выводов 9-ти контактного разъема
Контакт |
Сигнал |
Направление |
Описание |
1 |
CD |
Вход |
Обнаружена несущая |
2 |
RXD |
Вход |
Принимаемые данные |
3 |
TXD |
Выход |
Переданные данные |
4 |
DTR |
Выход |
Хост готов |
5 |
GND |
– |
Общий провод |
6 |
DSR |
Вход |
Устройство готово |
7 |
RTS |
Выход |
Хост готов к передаче |
8 |
CTS |
Вход |
Устройство готово к передаче |
9 |
RI |
Вход |
Обнаружен вызов |
На сегодняшний день COM морально устарел, его место занимает интерфейс USB – (Universal Serial Bus). При этом плата подключенная по USB выступает в качестве виртуального COM порта. Плюс интерфейса в том, что он имеет встроенные линии питания, а следовательно позволяет подключать периферийные устройства без собственного источника питания. Распиновка контактов USB представлена на Рисунке 4.
Рисунок 4. Контакты USB интерфейса
Таблица 3. Назначение выводов USB интерфейса
Номер контакта |
Обозначение |
Цвет провода |
Описание |
1 |
+5 В |
Красный |
Питание |
2 |
D- |
Белый |
Принимаемые данные |
3 |
D+ |
Зеленый |
Отправляемые данные |
4 |
GND |
Черный |
Общий провод (земля) |
Исходя из назначений выводов интерфейса USB можно сделать вывод, что контакт 2 выступает в качестве аналога сигнала RXD, осуществляется прием данных, а сигнал 3 выступает в качестве TXD, передача данных. Согласно спецификации Arduino, аналогами RXD и TXD выступают контакты, RX и TX соответственно. Важной особенностью является тот факт, что RX микроконтроллера подключается к TXD компьютера (D+), RX компьютера к TX микроконтроллера.
Работу с виртуальным драйвером COM рассмотрим в следующем разделе.
1.3 Средства Visual Studio для работы с com портом
Для управления роботом было написано приложение на языке С#. Основной функционал программы связан с пространством имен System.IO.Ports, который содержит классы для управления последовательными портами. Класс SerialPort предоставляет средства для синхронного и управляемого ввода-вывода, доступа к состоянию подключения-отключения устройства, а также доступа к свойствам драйвера последовательного порта. В качестве драйвера последовательного порта в системах типа Windows NT выступает SERIAL.SYS. Взаимодействие Visual Studio и драйвера показано на рисунке 5.
Рисунок 5. Взаимодействие Visual Studio и драйвера
Особенность драйвера в том, что он работает с последовательным портом как с файлами. Для открытия последовательного порта в Visual Studio реализован метод SerialPort.Open. Данный метод вызывает функцию CreateFile в драйвере SERIAL.SYS.
Прототип функции выглядит так:
HANDLE CreateFile(
LPCTSTR lpFileName,
DWORD dwDesiredAccess,
DWORD dwShareMode,
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
DWORD dwCreationDistribution,
DWORD dwFlagsAndAttributes,
HANDLE hTemplateFile
);
1) lpFileName.Указатель на строку с именем открываемого или создаваемого файла. Особенность строки в том, что можно указывать сетевые имена для доступа к файлам на других компьютерах. Можно открывать логические разделы или физические диски и работать в обход файловой системы. Последовательные порты имеют имена "COM1", "COM2".
2) dwDesiredAccess. Задает тип доступа к файлу. Возможно использование следующих значений:
0 Опрос атрибутов устройства без получения доступа к нему.
GENERIC_READ Файл будет считываться.
GENERIC_WRITE Файл будет записываться.
GENERIC_READ|GENERIC_WRITE Файл будет и считываться, и записываться.
3) dwShareMode. Задает параметры совместного доступа к файлу. Коммуникационные порты нельзя делать разделяемыми, поэтому данный параметр должен быть равен 0.
4) lpSecurityAttributes. Задает атрибуты защиты файла. Поддерживается только в Windows NT. Однако при работе с портами должен в любом случае равняться NULL.
4) dwCreationDistribution. Управляет режимами автосоздания, автоусечения файла и им подобными. Для коммуникационных портов всегда должно задаваться OPEN_EXISTING.
5) dwFlagsAndAttributes. Задает атрибуты создаваемого файла. Так же управляет различными режимами обработки. При работе с портом этот параметр должен быть или равным 0, или FILE_FLAG_OVERLAPPED. Нулевое значение используется при синхронной работе с портом, а FILE_FLAG_OVERLAPPED при асинхронной, или, другими словами, при фоновой обработке ввода/вывода.
6) hTemplateFile. Задает описатель файла-шаблона. При работе с портами всегда должен быть равен NULL.
Прием и передача данных выполняется функцией ReadFile и WriteFile. Метод SerialPort.Read вызывает данные функции в драйвере
BOOL ReadFile(
HANDLE hFile,
LPVOID lpBuffer,
DWORD nNumOfBytesToRead,
LPDWORD lpNumOfBytesRead,
LPOVERLAPPED lpOverlapped
);
А для метода SerialPort.Write функция WriteFile:
BOOL WriteFile(
HANDLE hFile,
LPVOID lpBuffer,
DWORD nNumOfBytesToWrite,
LPDWORD lpNumOfBytesWritten,
LPOVERLAPPED lpOverlapped
);
1) hFile. Описатель открытого файла коммуникационного порта.
2) lpBuffer. Адрес буфера. Для операции записи данные из этого буфера будут передаваться в порт. Для операции чтения в этот буфер будут помещаться принятые из линии данные.
3) nNumOfBytesToRead, nNumOfBytesToWrite. Число ожидаемых к приему или предназначенных к передаче байт.
4) nNumOfBytesRead, nNumOfBytesWritten. Число фактически принятых или переданных байт. Если принято или передано меньше данных, чем запрошено, то для дискового файла это свидетельствует об ошибке, а для коммуникационного порта совсем не обязательно.
5) lpOverlapped. Адрес структуры OVERLAPPED, используемой для асинхронных операций. Подробнее как с структурой, так и с асинхронными операциями мы познакомимся позже. Для синхронных операций данный параметр должен быть равным NULL.
Рассмотрение инструкций по работе с последовательным портом, сервомоторами, а также принципы и алгоритмы передвижения робота будут рассмотрены во второй главе.