Файл: Манипулятор с микроконтроллерным управлением.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 25.10.2023

Просмотров: 92

Скачиваний: 7

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

15
Одной из важнейших частей нашего устройства является сервопривод. Для оптимального выбора цена/качество мы рассмотрели множество вариантов.
Главным критериями для выбора были: тип механизма обратной связи, в нашем случае мы сделали выбор в сторону цифрового сервопривода, металлический механизм, большой крутящий момент, наличие ударной защиты, высокая точность позиционирования, маленькая мертвая зона, большой угол вращения. Наиболее подходящим для нас оказался сервопривод Tower Pro MG996R, имеющий неплохие характеристики при довольно низкой цене: вес 55г, крутящий момент 9,4 kgf·cm
(килограмм силы на сантиметр) при 4,8 В,
11 kgf·cm при 6 В, рабочий вольтаж: 5 –
7,3 В, рабочая скорость: 0,17 с / 60º (5 В), 0,14 с / 60º (6 В), механический механизм, угол вращения в 120 градусов. Для нашего проекта необходимо 5 таких сервоприводов.
Рисунок 10 – Сервопривод Tower Pro MG996R

16
Полная схема электрическая принципиальная вместе с перечнем используемых элементов приведены ниже на рисунке 11. Оформление схемы было осуществлено в системе автоматизированного проектирования КОМПАС-3D.

17
Рисунок 11 – Схема электрическая принципиальная с перечнем элементов

18 2.2. Разработка конструкции устройства
Так как нашей первоочередной задачей является создание демонстрационного стенда, который будет использоваться для практического изучения программирования манипуляторов, что подразумевает быстрое подключение устройства, возможность изменения конфигурации подключаемого оборудования, легкий доступ ко всем компонентам и т.д., было принято решение сделать полностью открытый стенд, где на одной платформе будет расположены манипулятор и все сопутствующие ему детали: блок питания, плата соединения, плата микроконтроллера управления. В программе Компас 3D создали примерный макет конструкции нашего стенда, отталкиваясь от которого будем изготавливать устройство.
Рисунок 12 – Схема конструкции будущего устройства

19 2.3. Практическое изготовление устройства
Итак, приступили к сборке устройства. В качестве платформы для нашего стенда, на которой будут расположены все детали, вплоть до блока питания, мы выбрали пластину стеклотекстолита. Чтобы питать наш манипулятор и плату микроконтроллера мы взяли обычный блок питания от компьютера.
Рисунок 13 – блок питания
Избавились от лишних проводов, оставив только пару проводов GND, 5V для всех сервоприводов и 12V которые могут понадобиться в будущих проектах где может потребоваться внешнее питание для платы ардуино. Также сделали кнопку питания блока для удобного включения / отключения устройства. Закрепили блок питания на пластине предварительно покрасив все в черный цвет. Непосредственно для сборки самого манипулятора мы использовали готовые алюминиевые детали от конструктора, из-за их небольшого веса и наличия готовых отверстий для крепления.


20
Рисунок 14 – детали каркаса манипулятора
Также мы нашли готовое решение захвата, которое имеет совместимость с нашим сервоприводом, возможность захвата предметов довольно больших габаритов и небольшую стоимость, что позволяет с легкостью поменять его в случае выхода из строя.
Рисунок 15 – захват манипулятора

21
Соединив все алюминиевые детали, сервоприводы и захват, собрали манипулятор. Первоначально манипулятор был собран на 6 сервоприводах, но увидев, что самый нижний сервопривод, на котором держится вся остальная конструкция, не выдерживает такой вес, было принято решение убрать один сервопривод, отвечающий за второй верхний сгиб манипулятора. Так же пришлось удлинить провода от сервоприводов и датчика чтобы их длины хватало для свободного перемещения по рабочей траектории манипулятора. Проверили каждый сервопривод на работоспособность.
Далее было принято решение создать отдельную плату, которая будет отвечать за общее питание и землю для сервоприводов. Также добавили на плату общие выводы для соединения сигнальных проводов от сервоприводов со входными пинами на плате микроконтроллера.
Рисунок 16 – Плата соединения

22
Разместили собранный манипулятор, плату соединения и плату микроконтроллера на пластине стеклотекстолита, собрали все провода от сервоприводов в один общий жгут, предварительно промаркировав каждый провод соответствующим номером сервопривода, для того чтобы не запутаться в большом количестве проводов. Подключили все провода в соответствующие разъемы. Также было решено дополнительно добавить в наше устройство ультразвуковой дальномер для возможности в дальнейших проектах с нашим стендом реализовать с помощью него управление захватом манипулятора. Сборка демонстрационного стенда завершена. Ниже будет приведено фото готового устройства.
Рисунок 17 – Собранный стенд

23 3. Программная часть
3.1. Описание алгоритма работы устройства
Алгоритм работы устройства в двух словах представляет собой обработку данных от связанных между собой интерфейсом передачи данных микроконтроллера управления, клавиатуры, мыши и сервоприводов. Обработанные данные нормализуются и посылаются обратно на отработку сервоприводов. Для более детального описания алгоритма работы устройства необходимо рассмотреть принцип работы и устройство каждого компонента, связанного с интерфейсом передачи данных.
Сервопривод – актуатор, который и будет приводить в действие наш манипулятор. Сервопривод или сервомашинка довольно сложное устройство обратной связи по сравнению с обычным электромотором. Представляет из себя: двигатель постоянного тока, шестеренный редуктор, управляющую электронную схему и потенциометр. Шестеренный редуктор используется для понижения скорости мотора, который преобразует большой крутящий момент в более маленький из-за взаимодействия меньшей шестерни с малым количеством зубцов с большей шестерней с соответственно большим количеством зубцов. Электронная схема отвечает за поддержание обратной связи, за получение и сравнение значений со встроенного потенциометра прикрепленного к выходному валу со внешними численными значениями от других управляющих систем и за запуск и остановку мотора. Сервопривод имеет три вывода: VCC – 5 вольт (постоянный ток), GND – земля, PWM (Pulse Width Modulation)/ ШИМ (широтно-импульсная модуляция). – вывод управляющего сигнала.


24
Рисунок 18 – Устройство сервопривода
Одной из основных частей сервопривода является потенциометр, который обладает 3 выводами, из них на два боковых подается питание, между каждым выводом находится резистивное вещество, которое позволяет двигаться ползунку, соединенному со средним выводом, с которого снимается значение напряжения.
Рисунок 19 – Устройство потенциометра в сервоприводе

25
Вал сервопривода соединен с валом потенциометра, если мы вращаем одно, то вращается и другое. Когда мы вращаем ручку потенциометра по часовой стрелке от плюса к минусу, увеличивается сопротивление, а напряжение уменьшается.
Напряжение будет уменьшаться до минимального, которое зависит от максимального сопротивления потенциометра в нашем сервоприводе, у каждого сервопривода может быть разный номинал максимального сопротивления потенциометра, однако в большинстве моделей используется потенциометры на 5 кОм. Допустим мы хотим повернуть наш сервопривод на 75 градусов, условно в этом положение на выходе потенциометра будет 2 вольта. В какой-то момент времени вал находится в положение, например, 10 градусов что условно равно 0,3 вольт. Чтобы повернуть сервопривод в желаемое положение нам нужно подать на управляющую плату управляющий импульс, который содержит в себе информацию в какое положение мы хотим повернуть вал. В дело вступает электронная начинка на управляющей плате, которая сравнивает показания напряжения на потенциометре при положении вала (0,3 вольта) с требуемыми показаниями (2 вольта), которые пришли на управляющую плату. При несовпадении показаний микропроцессор на управляющей плате принимает решение отправлять с помощью кварцевого генератора управляющие импульсы определенной длины, что позволяет вращать в нужном направление вал потенциометра, пока показания напряжения на нем не сравняются с требуемым напряжением при 75 градусах. То есть положение вала потенциометра зависит от длины импульса. Курс вращение определяется более коротким из двух импульсов. Одна часть управляющей микросхемы производит сигнал, продолжительность которого устанавливается потенциометром, а другая часть сравнивает эти два импульса.

26
Рисунок 20 – Диаграмма управляющих импульсов сервопривода
На большинстве сервоприводов используются одинаковая частота импульсов в 50 Гц (отправка и получение импульса происходит каждые 20 миллисекунд) и одинаковые границы длительности импульсов: нижняя граница длительности импульса, когда сервопривод находится в положение 0 градусов, равна 544 микросекундам, а верхняя граница – 180 градусов равна 2400 микросекундам. Зная граничные значения, мы можем определить длительность импульса для любого положения сервопривода. Стандартная библиотека Servo.h, которая будет использоваться в нашей программе, как раз имеет общепринятые значения границ.
В тексте выше я упомянул о внешних численных значениях от других управляющих систем. Внешними численными значениями и являются параметры, которые мы можем изменять с помощью мыши и клавиатуры, так же эти параметры изменяет и ультразвуковой датчик. Для этих целей была написана специальная терминальная программа, которая производит вычисления и нормализует параметры со входа мыши и клавиатуры для дальнейшего сравнения с параметрами, заданными в константах в отдельном написанном скетче на платформе arduino. Эти внешние значения мы отправляем на сервоприводы, которые выполняют процессы, которые мы подробно описали выше.


27
Так же в двух словах опишем принцип работы ультразвукового дальномера
HC-SR04, который может нам понадобиться в будущих проектах с нашим устройством. Ультразвуковой дальномер использует в своей работе принцип эхолокации, как у летучих мышей. На плате дальномера расположены два пъезоизлучателя, один работает как излучатель (динамик), а второй как приемник
(микрофон). Для подключения датчика используется четыре вывода: VCC – 5 вольт
(DC), GND – земля, Trig – Триггер (INPUT), Echo – Эхо (OUTPUT). Интерфейс связи работает следующим образом: на выводе Trig формируется короткий импульс длительностью 10-15 микросекунд, после которого на выходе создается некоторое количество сигналов частотой 40 килогерц, которые посредством динамика будут отправлены в сторону препятствия. В тот же момент времени на выводе Echo образуется логическая единица высокого уровня длинной от 150 микросекунд до 25 миллисекунд. Как только отраженная от препятствия волна дойдет до приемника на выводе Echo появится логический ноль. Расстояние до объекта прямо пропорционально ширине сигнала Echo. Другими словами, зная время присутствия логической единицы высокого уровня на выводе Echo, получиться определить расстояние до какого-либо объекта, воспользовавшись специальной формулой.

28 3.2. Разработка программной части устройства
Программная платформа для нашего устройства будет состоять из двух частей:
1. Терминальной программы, написанной на языке C# (C Sharp) в программе
SharpDevelop 5.1, так как этот язык идеально подходит для быстрого написания настольных приложений.
2. Программы для платы управления (скетч), написанного в программе
Arduino IDE, которая специально создана для написания программ для плат Arduino.
Терминальная программа запускается на PC, а скетч загружается на плату управления Arduino Mega.
Программа для платы управления представляет собой алгоритм последовательных действий, представленный ниже.

29
Рисунок 21 – алгоритм работы программы для платы управления
Рассмотрим основные моменты кода. С полным кодом программы можно ознакомиться в приложение А.
Рисунок 22 – Фрагмент кода программы платы управления
Так как при передаче и считывание с последовательного порта будет задействован большой набор данных нам следует воспользоваться массивами данных. Массив данных это своего рода участок памяти разделенный на некоторое число элементарных ячеек, каждая из которых имеет свой порядковый номер. И чтобы получить доступ к информации, которая храниться в определенной ячейке, нужно всего лишь знать ее номер. В нашем случае нам понадобятся два одномерных массива типа int. Тип данных int используется для хранения числовых данных и занимает 2 байта памяти. Каждому массиву мы присвоили название data и value, также обозначили размеры этих массивов. Массиву data обозначили размер в 9 элементов, а массиву value в 4, тем самым дав инструкцию компилятору на выделение памяти 9*2=18 байт для data и соответственно 4*2=8 байт для value, то есть на каждый элемент массива выделяется по 2 байта.
Рисунок 23 – Фрагмент кода программы платы управления


30
Создали объекты типа Servo. Данный тип объекта имеет свои свойства, которые уже описали за нас в подключенной библиотеке Servo.h.
Рисунок 24 – Фрагмент кода программы платы управления
Задали константы, которые будут доступны только для чтения, то есть нельзя будет изменить значение переменных. Выбирая между define и const int, выбрали второе, так как для работы с массивами необходимо использовать const по нескольких основным причинам: компилятор выдаст отчет об ошибке, в случае использования константы другого типа, на константы действуют единые правила области видимости переменных в отличие от define. Для каждого сервопривода задано по 3 константы к каждой из который присвоено значение, отвечающее за максимальный, минимальный и начальный угол положения сервоприводов.

31
Рисунок 25 – Фрагмент кода программы платы управления
Присоединяем каждый серво к необходимому входу, через который будет производиться управление.
Рисунок 26 – Фрагмент кода программы платы управления
Сравниваем все значения value из последовательного порта с константами, если все условия соблюдаются, то выполняется запись на соответствующий порт соответствующего значения value.
Сравнивает значение value[3] с константами povorotzahvataMax и povorotzahvataMin, если условия соблюдаются, то выполняется запись на порт
Povorotzahvata значения (value[3].

32
Рисунок 27 – Фрагмент кода программы платы управления
Сравнивает значение data[8] с 0x01, data[8] с 0x10 (обращением к регистру микропроцессора arduino которое хранит целое число) и сравнивает значения zahvat с zahvatMax и zahvatMin, если все условия соблюдены то на порт Zahvat пишутся значения из переменных, прибавляя единицу в первом случае и вычитая единицу во втором. data[8] = 0 обнуляет значение 9 члена массива данных.
Рисунок 28 – Фрагмент кода программы платы управления
ReadSerial – функция которая отвечает за заполнения массива данных в шестнадцатеричной системе. Включаем процесс, который ждет появление данных в

33
Serial (в последовательном порте от терминальной программы, отправленный пакет содержит 11 байт). Если данные прочитаны, то выполняется следующий фрагмент кода. Первый байт всегда 0xFF, второй байт всегда 0xAA. Далее заполняются по очереди все 10 членов массива из последовательного порта.
Рисунок 29 – Фрагмент кода программы платы управления
Нормализуются значения data: 1) из константы naklonnizhniiNormal вычитаем значения четвертого члена массива data, 2) к разности первого и второго члена массива data прибавляем константу osnovaNormal, 3) к разности пятого и шестого члена массива data прибавляем константу naklonverhniiNormal, 4) к разности седьмого и восьмого члена массива data прибавляем константу povorotzahvataNormal. В двух словах код можно описать так: считываются значения с ком порта, нормализуются и сравниваются с константами.