- Необходимые компоненты
- Подготовка 3D-печатного робота ARM
- Принципиальная электрическая схема
- Этапы программирования LPC2148 для роботизированной руки
- Кодирование Объяснение
- Выбор серводвигателя для вращения с помощью кнопок
- Работа манипулятора Pick and Place
Роботизированные манипуляторы - одно из увлекательных инженерных творений, и всегда интересно наблюдать, как эти штуки наклоняются и поворачиваются, чтобы выполнять сложные задачи, как это сделала бы человеческая рука. Эти роботизированные манипуляторы обычно используются на сборочных конвейерах, выполняющих интенсивные механические работы, такие как сварка, сверление, окраска и т. Д., Недавно разработанные высокоточные роботизированные манипуляторы также разрабатываются для выполнения сложных хирургических операций. Итак, в этом руководстве давайте создадим простую роботизированную руку с использованием микроконтроллера ARM7-LPC2148 для выбора и размещения объекта с помощью ручного управления несколькими потенциометрами.
В этом уроке мы будем использовать 3D-печатный роботизированный ARM, который был построен в соответствии с процедурой, описанной в thingiverse. ARM использует 4 серводвигателя для движения робота ARM. Если у вас нет принтера, вы также можете собрать свою руку из простого картона, как мы создали для нашего проекта Arduino Robotic Arm. Для вдохновения вы также можете обратиться к роботизированной руке для записи и воспроизведения, которую мы создали ранее с использованием Arduino.
Итак, теперь давайте подготовим вещи для нашего проекта
Необходимые компоненты
- 3D-принтер роботизированный ARM
- ARM7-LPC2148
- Серводвигатель СГ-90 (4)
- Потенциометр 10к (4)
- Кнопка (4)
- Светодиод (4)
- Адаптер питания постоянного тока 5 В (1 А)
- Резисторы (10к (4), 2.2к (4))
- Макетная плата
- Подключение проводов
Подготовка 3D-печатного робота ARM
Роботизированная рука, напечатанная на 3D-принтере, использованная в этом уроке, была сделана в соответствии с дизайном, предоставленным EEZYbotARM, который доступен в Thingiverse. Полная процедура создания 3D-печатной роботизированной руки и детали сборки с видео представлены в ссылке thingiverse, которая указана выше.
Это изображение моей роботизированной руки, напечатанной на 3D-принтере, после сборки с 4 сервомоторами.
Принципиальная электрическая схема
На следующем изображении показаны схемы подключения роботизированной руки на базе ARM.
Схема подключения для проекта проста. Обязательно запитывайте серводвигатели от отдельного адаптера питания 5 В постоянного тока. Для потенциометров и кнопок мы можем использовать 3,3 В, поступающие от микроконтроллера LPC2148.
Здесь мы используем 4 контакта АЦП LPC2148 с 4 потенциометрами. А также 4 вывода PWM LPC2148, соединенные с выводами PWM серводвигателя. Мы также подключили 4 кнопки, чтобы выбрать, какой двигатель работать. Итак, после нажатия кнопки уважаемый потенциометр меняется, чтобы изменить положение серводвигателя.
Один конец кнопок, который подключен к GPIO LPC2148, подтянут через резистор 10 кОм, а другой конец подключен к 3,3 В. Также подключены 4 светодиода, чтобы указать, какой серводвигатель выбран для изменения положения.
Цепные соединения между 4 серводвигателем и LPC2148:
LPC2148 | Серводвигатель |
P0.1 | SERVO1 (ШИМ-оранжевый) |
P0.7 | SERVO2 (ШИМ-оранжевый) |
P0.8 | SERVO3 (ШИМ-оранжевый) |
P0.21 | SERVO4 (ШИМ-оранжевый) |
Цепные соединения между 4 потенциометром и LPC2148:
LPC2148 | Центральный контакт потенциометра Левый контакт - 0 В GND правого контакта LPC2148 - 3,3 В LPC2148 |
P0.25 | Потенциометр1 |
P0.28 | Потенциометр2 |
P0.29 | Потенциометр3 |
P0.30 | Потенциометр4 |
Схема подключения 4 светодиодов к LPC2148:
LPC2148 | Светодиодный анод (катод всех светодиодов - GND) |
P1.28 | LED1 (анод) |
P1.29 | LED2 (анод) |
P1.30 | LED3 (анод) |
P1.31 | LED4 (анод) |
Схема подключения 4-х кнопок с LPC2148:
LPC2148 | Кнопка (с понижающим резистором 10 кОм) |
P1.17 | Кнопка 1 |
P1.18 | Кнопка 2 |
P1.19 | Кнопка 3 |
P1.20 | Кнопка 4 |
Этапы программирования LPC2148 для роботизированной руки
Перед программированием этого робота-манипулятора нам необходимо узнать о генерации ШИМ в LPC2148 и использовании АЦП в ARM7-LPC2148. Для этого обратитесь к нашим предыдущим проектам по взаимодействию серводвигателя с LPC2148 и по использованию ADC в LPC2148.
Преобразование АЦП с использованием LPC2148
Поскольку нам необходимо предоставить значения АЦП для установки значения рабочего цикла для генерации выхода ШИМ для управления положением серводвигателя. Нам нужно найти значения АЦП потенциометра. Поскольку у нас есть четыре потенциометра для управления четырьмя сервомоторами, нам нужно 4 канала АЦП LPC2148. Здесь, в этом руководстве, мы используем выводы АЦП (P0.25, P0.28, P0.29, P0.30) каналов АЦП 4,1,2,3 соответственно, присутствующих в LPC2148.
Генерация сигналов ШИМ для серводвигателя с помощью LPC2148
Поскольку нам нужно генерировать сигналы PWM для управления положением серводвигателя. Нам нужно установить рабочий цикл ШИМ. У нас есть четыре серводвигателя, подключенных к роботизированной руке, поэтому нам нужно 4 канала ШИМ LPC2148. Здесь, в этом руководстве, мы используем выводы ШИМ (P0.1, P0.7, P0.8, P0.21) каналов ШИМ 3,2,4,5 соответственно, присутствующих в LPC2148.
Программирование и прошивка шестнадцатеричного файла в LPC2148
Чтобы запрограммировать ARM7-LPC2148, нам понадобится keil uVision, а для прошивки HEX-кода в LPC2148 необходим инструмент Flash Magic. Здесь используется USB-кабель для программирования ARM7 Stick через порт micro USB. Мы пишем код с помощью Keil и создаем шестнадцатеричный файл, а затем шестнадцатеричный файл записывается на карту ARM7 с помощью Flash Magic. Чтобы узнать больше об установке keil uVision и Flash Magic и их использовании, перейдите по ссылке «Начало работы с микроконтроллером ARM7 LPC2148 и запрограммируйте его с помощью Keil uVision».
Кодирование Объяснение
Полная программа для этого проекта роботизированной руки приведена в конце руководства. Теперь посмотрим подробнее на программирование.
Настройка ПОРТА LPC2148 для использования GPIO, PWM и ADC:
Использование регистра PINSEL1 для включения каналов АЦП - ADC0.4, ADC0.1, ADC0.2, ADC0.3 для контактов P0.25, P0.28, P0.29, P0.30. А также для PWM5 на вывод P0.21 (1 << 10).
#define AD04 (1 << 18) // Выберите функцию AD0.4 для P0.25 #define AD01 (1 << 24) // Выберите функцию AD0.1 для P0.28 #define AD02 (1 << 26) / / Выберите функцию AD0.2 для P0.29 #define AD03 (1 << 28) // Выберите функцию AD0.3 для P0.30 PINSEL1 - = AD04 - AD01 - AD02 - AD03 - (1 << 10);
Использование регистра PINSEL0 для включения каналов ШИМ PWM3, PWM2, PWM4 для контактов P0.1, P0.7, P0.8 LPC2148.
PINSEL0 = 0x000A800A;
Использование регистра PINSEL2 для включения функции вывода GPIO для всех выводов в PORT1, используемых для подключения светодиода и кнопки.
PINSEL2 = 0x00000000;
Чтобы сделать выводы светодиода в качестве выхода, а контакты кнопок в качестве входа, используется регистр IODIR1. (0 для ВХОДА и 1 для ВЫХОДА)
IODIR1 = ((0 << 17) - (0 << 18) - (0 << 19) - (0 << 20) - (1 << 28) - (1 << 29) - (1 << 30) - (1 << 31));
Хотя номера контактов определены как
#define SwitchPinNumber1 17 // (Подключен к P1.17) #define SwitchPinNumber2 18 // (Подключен к P1.18) #define SwitchPinNumber3 19 // (Подключен к P1.19) #define SwitchPinNumber4 20 // (Подключен к P1. 20) #define LedPinNumber1 28 // (Связано с P1.28) #define LedPinNumber2 29 // (Связано с P1.29) #define LedPinNumber3 30 // (Связано с P1.30) #define LedPinNumber4 31 // (Связано с P1.31)
Настройка параметров преобразования АЦП
Затем с помощью регистра AD0CR_setup устанавливается режим преобразования АЦП и часы для АЦП.
беззнаковый длинный AD0CR_setup = (CLKDIV << 8) - BURST_MODE_OFF - PowerUP; // Настройка режима АЦП
В то время как CLCKDIV, Burst Mode и PowerUP определены как
#define CLKDIV (15-1) #define BURST_MODE_OFF (0 << 16) // 1 для включения и 0 для выключения #define PowerUP (1 << 21)
Установка часов для преобразования АЦП (CLKDIV)
Это используется для производства часов для АЦП. Тактовая частота АЦП 4 МГц (ADC_CLOCK = PCLK / CLKDIV), где фактически используется "CLKDIV-1", в нашем случае PCLK = 60 МГц
Пакетный режим (бит-16): этот бит используется для преобразования BURST. Если этот бит установлен, модуль АЦП выполнит преобразование для всех каналов, выбранных (SET) в битах SEL. Установка 0 в этом бите отключит BURST-преобразование.
Режим пониженного энергопотребления (бит 21): используется для включения или выключения АЦП. Установка (1) в этом бите выводит АЦП из режима пониженного энергопотребления и переводит его в рабочий режим. Очистка этого бита отключит АЦП.
Настройка параметров преобразования ШИМ
Сначала сбросьте и отключите счетчик для PWM с помощью регистра PWMTCR и установите регистр предварительного масштабирования таймера PWM со значением предварительного делителя.
PWMTCR = 0x02; PWMPR = 0x1D;
Затем установите максимальное количество отсчетов в одном цикле. Это делается в регистре совпадения 0 (PWMMR0). Поскольку у нас 20000, так как это волна ШИМ 20 мсек.
PWMMR0 = 20000;
После этого установите значение рабочего цикла в регистрах соответствия, мы используем PWMMR4, PWMMR2, PWMMR3, PWMMR5. Здесь мы устанавливаем начальные значения 0 мсек (Toff)
PWMMR4 = 0; PWMMR2 = 0; PWMMR3 = 0; PWMMR5 = 0;
После этого установите регистр управления согласованием ШИМ для сброса счетчика при возникновении регистра согласования.
PWMMCR = 0x00000002; // Сброс при совпадении MR0
После этого регистр включения защелки ШИМ позволяет использовать значение соответствия (PWMLER)
PWMLER = 0x7C; // Разрешение защелки для PWM2, PWM4, PWM4 и PWM5
Сбросьте счетчик таймера, используя бит в регистре управления таймером ШИМ (PWMTCR), а также включите ШИМ.
PWMTCR = 0x09; // Включить ШИМ и счетчик
Затем включите выходы ШИМ и установите ШИМ в режим управления одним фронтом в регистре управления ШИМ (PWMPCR).
PWMPCR = 0x7C00; // Включение PWM2, PWM4, PWM4 и PWM5, ШИМ с одним фронтом
Выбор серводвигателя для вращения с помощью кнопок
У нас есть четыре кнопки, которые используются для вращения четырех различных серводвигателей. Выбирая одну кнопку и изменяя соответствующий потенциометр, значение АЦП устанавливает рабочий цикл, а соответствующий серводвигатель меняет свое положение. Чтобы получить статус кнопочного переключателя
switchStatus1 = (IOPIN1 >> SwitchPinNumber1) & 0x01;
Таким образом, в зависимости от того, какое значение переключателя ВЫСОКОЕ, происходит преобразование АЦП, а затем после успешного преобразования значения АЦП (от 0 до 1023) оно отображается в единицах (от 0 до 2045), а затем значение рабочего цикла записывается в вывод (PWMMRx) PWM, подключенный к серводвигателю. Кроме того, светодиодный индикатор загорается ВЫСОКОМ, чтобы указать, какой переключатель нажат. Ниже приведен пример первой кнопки.
если (switchStatus1 == 1) { IOPIN1 = (1 <
Работа манипулятора Pick and Place
После загрузки кода в LPC2148 нажмите любой переключатель и измените соответствующий потенциометр, чтобы изменить положение манипулятора.
Каждый переключатель и потенциометр управляют каждым движением серводвигателя, которое представляет собой базовое движение влево или вправо, движение вверх или вниз, вперед или назад, а затем захват для удержания и освобождения движения. Полный код с подробным рабочим видео приведен ниже.