- Потрібні компоненти
- Готуємось до 3D-друкованої роботизованої ARM
- Кругова діаграма
- Етапи програмування LPC2148 для роботизованої руки
- Пояснення кодування
- Вибір сервомотора для обертання за допомогою кнопок
- Робота робототехнічної руки підбору та розміщення
Робототехнічна зброя - одне із захоплюючих інженерних творінь, і завжди захоплююче спостерігати, як ці речі нахиляються і рухаються, щоб виконувати складні речі, як це робила б людська рука. Ці роботизовані зброї можна часто зустріти в галузях промисловості на складальній лінії, виконуючи інтенсивні механічні роботи, такі як зварювання, свердління, фарбування тощо, нещодавно вдосконалені роботизовані зброї з високою точністю також розробляються для виконання складних хірургічних операцій. Тож у цьому підручнику давайте створимо просту робототехнічну руку з використанням мікроконтролера ARM7-LPC2148 для вибору та розміщення об’єкта шляхом ручного керування кількома потенціометрами.
У цьому підручнику ми будемо використовувати 3D-друковану роботизовану ARM, яка була побудована, дотримуючись процедури у thingiverse. ARM використовує 4 сервомотори для роботизованого руху ARM. Якщо у вас немає принтера, ви також можете створити свою руку з простих картонів, як ми створили для нашого проекту Arboino Robotic Arm. Для натхнення ви також можете звернутися до роботи і запису Robotic Arm, яку ми створили раніше за допомогою Arduino.
Тож давайте підготуємо речі до нашого проекту
Потрібні компоненти
- 3D-принтер Robotic ARM
- ARM7-LPC2148
- Сервомотор SG-90 (4)
- 10k потенціометр (4)
- Кнопка (4)
- Світлодіодні (4)
- Адаптер живлення постійного струму 5 В (1 А)
- Резистори (10k (4), 2.2k (4))
- Макет
- Підключення проводів
Готуємось до 3D-друкованої роботизованої ARM
3D-друкована Робототехнічна Рука, використана в цьому посібнику, була виконана згідно з дизайном, наданим EEZYbotARM, який доступний у Thingiverse. Повна процедура виготовлення 3D-друкованої роботизованої руки та деталі монтажу разом із відео представлені у посиланні thingiverse, яке наведено вище.
Це зображення моєї 3D-друкованої роботизованої руки після складання з 4 сервомоторами.
Кругова діаграма
На наступному зображенні показано схеми з'єднань роботизованої руки на базі ARM.
Схема підключень для проекту проста. Обов’язково живіть сервомотори за допомогою окремого адаптера живлення постійного струму 5 В. Для потенціометрів та кнопок ми можемо використовувати 3,3 В, доступне від мікроконтролера LPC2148.
Тут ми використовуємо 4 висновки АЦП LPC2148 з 4 потенціометрами. А також 4 ШІМ-контакти LPC2148, з'єднані з ШІМ-контактами сервомотора. Ми також підключили 4 кнопки, щоб вибрати, яким двигуном працювати. Отже, після натискання кнопки відповідний потенціометр змінюється для зміни положення сервомотора.
Кнопки одного кінця, який підключений до GPIO LPC2148, висуваються через резистор 10k, а інший кінець підключається до 3.3V. Також підключено 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) |
Р1.28 | LED1 (анод) |
Р1.29 | LED2 (анод) |
P1.30 | LED3 (анод) |
Р1.31 | LED4 (анод) |
Схема підключення 4-х кнопок з LPC2148:
LPC2148 | Кнопка (з висувним резистором 10k) |
Р1.17 | Кнопка1 |
Р1.18 | Кнопка2 |
Р1.19 | Кнопка 3 |
P1.20 | Кнопка4 |
Етапи програмування LPC2148 для роботизованої руки
Перед програмуванням для цієї роботизованої руки нам потрібно знати про генерацію ШІМ у LPC2148 та використання ADC у ARM7-LPC2148. Для цього зверніться до наших попередніх проектів щодо взаємодії серводвигуна з LPC2148 та як використовувати ADC у LPC2148.
Перетворення АЦП за допомогою LPC2148
Оскільки нам потрібно надати значення АЦП для встановлення значення робочого циклу для генерації ШІМ-сигналу для контролю положення сервомотора. Нам потрібно знайти значення АЦП потенціометра. Оскільки у нас є чотири потенціометри для управління чотирма сервомоторами, нам потрібен 4 ADC-канал LPC2148. У цьому посібнику ми використовуємо висновки ADC (P0.25, P0.28, P0.29, P0.30) каналів ADC 4,1,2,3 відповідно, присутні в LPC2148.
Генерування ШІМ-сигналів для сервомотора за допомогою LPC2148
Оскільки нам потрібно генерувати ШІМ-сигнали для контролю положення серводвигуна. Нам потрібно встановити робочий цикл ШІМ. У нас є чотири сервомотори, підключені до роботизованого важеля, тому нам потрібен 4 ШІМ-канал LPC2148. У цьому посібнику ми використовуємо ШІМ-висновки (P0.1, P0.7, P0.8, P0.21) ШІМ-каналів 3,2,4,5 відповідно, присутні в LPC2148.
Програмування та прошивка шістнадцяткового файлу на LPC2148
Для програмування ARM7-LPC2148 нам потрібен keil uVision і необхідний інструмент Flash Magic для прошивання шістнадцяткового коду до LPC2148 Flash Magic. Тут використовується USB-кабель для програмування ARM7 Stick через порт Micro USB. Ми пишемо код за допомогою Keil і створюємо шістнадцятковий файл, а потім шістнадцятковий файл перепрошивається на ARM7 за допомогою Flash Magic. Щоб дізнатись більше про встановлення keil uVision та Flash Magic та їх використання, перейдіть за посиланням Початок роботи з мікроконтролером ARM7 LPC2148 та запрограмуйте його за допомогою Keil uVision.
Пояснення кодування
Повна програма цього Робототехнічного проекту подана в кінці навчального посібника. Тепер давайте розглянемо програмування докладно.
Налаштування PORT LPC2148 для використання GPIO, ШІМ та АЦП:
Використання регістру PINSEL1 для ввімкнення каналів ADC - ADC0.4, ADC0.1, ADC0.2, ADC0.3 для контактів P0.25, P0.28, P0.29, P0.30. А також, для ШІМ5 для виводу Р0.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 #визначити 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 pin для всіх контактів у 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, режим серійної зйомки та 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) у цьому біті виводить АЦП із режиму відключення живлення та робить його працездатним. Очищення цього біта призведе до вимкнення АЦП.
Налаштування налаштування перетворення ШІМ
Спочатку скиньте та вимкніть лічильник для ШІМ за допомогою реєстру ШІМТКР та налаштуйте ШІМ-таймер Регістру попереднього масштабування зі значенням попереднього масштабування.
PWMTCR = 0x02; PWMPR = 0x1D;
Далі встановіть максимальну кількість підрахунків за один цикл. Це робиться в реєстрі матчів 0 (PWMMR0). Оскільки ми маємо 20000, це ШІМ-хвиля 20 мсек
ШІММР0 = 20000;
Після цього встановіть значення робочого циклу в регістрах відповідності, ми використовуємо ШІММР4, ШІММР2, ШІММР3, ШІММР5. Тут ми встановлюємо початкові значення 0 мс (Тофф)
ШІММР4 = 0; ШІММР2 = 0; ШІММР3 = 0; ШІММР5 = 0;
Після цього встановіть Регістр керування збігом ШІМ, щоб викликати скидання лічильника, коли реєстр збігів відбувається.
ШІММКР = 0x00000002; // Скидання на збігу MR0
Після цього фіксатор ШІМ увімкнути реєстр, щоб дозволити використання значення відповідності (ШІМЛЕР)
ШІЛМЕР = 0x7C; // Увімкнення засувки для ШІМ2, ШІМ4, ШІМ4 та ШІМ5
Скиньте лічильник таймера, використовуючи біт в реєстрі керування таймером ШІМ (PWMTCR), а також він вмикає ШІМ.
PWMTCR = 0x09; // Увімкнути ШІМ та лічильник
Далі увімкніть ШІМ-виходи та встановіть ШІМ в режимі управління одним краєм у регістрі керування ШІМ (PWMPCR).
PWMPCR = 0x7C00; // Увімкнути ШІМ2, ШІМ4, ШІМ4 та ШІМ5, ШІМ з керованістю одним краєм
Вибір сервомотора для обертання за допомогою кнопок
У нас є чотири кнопки, які використовуються для обертання чотирьох різних сервомоторів. Вибравши одну кнопку та змінюючи відповідний потенціометр, значення АЦП встановлює робочий цикл, а відповідний серводвигун змінює своє положення. Щоб отримати статус кнопкового перемикача
switchStatus1 = (IOPIN1 >> SwitchPinNumber1) & 0x01;
Отже, залежно від того, яке значення перемикача є ВИСОКИМ, відбувається перетворення АЦП, а потім після успішного перетворення значення АЦП (від 0 до 1023) воно відображається у вигляді (від 0 до 2045), а потім значення робочого циклу записується в ШИМ (PWMMRx) ШІМ, підключений до серводвигуна. А також, світлодіод повертається ВИСОКО, щоб вказати, на який перемикач натиснуто. Далі наведено приклад для першої кнопки
якщо (switchStatus1 == 1) { IOPIN1 = (1 <
Робота робототехнічної руки підбору та розміщення
Після завантаження коду на LPC2148 натисніть будь-який перемикач і змініть відповідний потенціометр, щоб змінити положення роботизованої руки.
Кожен перемикач і потенціометр керують кожним рухом сервомотора, який є базовим рухом ліворуч або праворуч, рухом вгору або вниз, вперед або назад, а потім захоплювачем для утримання та відпуску руху. Повний код із докладним робочим відео наведено нижче.