- Потрібні компоненти
- Опис штифта сервомотора
- Кругова діаграма
- Керування сервомотором за допомогою AVR ATmega16
- Програмування Atmega16 за допомогою USBasp
Сервомотори широко використовуються там, де потрібен точний контроль, такий як роботи, автоматизовані механізми, роботизована рука та ін. Однак сфера дії сервомотора не обмежена цим і може бути використана в багатьох додатках. Щоб дізнатись більше про основи, теорію та принцип роботи сервомотора, перейдіть за посиланням.
Раніше ми поєднували сервомотор з багатьма мікроконтролерами:
- Зв'язок сервомотора з ARM7-LPC2148
- Зв'язок сервомотора з MSP430G2
- Взаємозв'язок сервомотора з STM32F103C8
- Взаємозв'язок серводвигуна з мікроконтролером PIC за допомогою MPLAB та XC8
- Зв'язок сервомотора з Arduino Uno
- Інтерфейс сервомотора з мікроконтролером 8051
У цьому посібнику ми будемо взаємодіяти мікросервомотор з мікроконтролером Atmega16 AVR за допомогою Atmel Studio 7.0. Сервомотор розрахований на роботу в напрузі 4,8-6В. Ми можемо контролювати його кут повороту та напрямок, застосовуючи імпульсний сигнал або ШІМ-сигнали. Зверніть увагу, що серводвигуни не можуть рухатися при повному обертанні на 360 градусів, тому вони використовуються там, де не потрібно постійне обертання. Кут повороту становить 0 -180 градусів або (-90) - (+90) градусів.
Потрібні компоненти
- Мікросервовий двигун SG90 Tower Pro
- Мікроконтролер мікросхеми Atmega16
- Кристалічний генератор 16 МГц
- Два конденсатори 100 нФ
- Два конденсатори 22pF
- Нажимна Кнопка
- Провід перемички
- Макет
- USBASP v2.0
- Led (будь-який колір)
Опис штифта сервомотора
- Червоний = Позитивне джерело живлення (від 4,8 В до 6 В)
- Коричневий = Земля
- Помаранчевий = сигнал керування (ШІМ-контакт)
Кругова діаграма
Підключіть усі компоненти, як показано на схемі нижче, щоб обертати сервомотор за допомогою мікроконтролера AVR. Є чотири ШІМ-висновки, ми можемо використовувати будь-який ШІМ-штифт Atmega16. У цьому посібнику ми використовуємо Pin PD5 (OC1A) для генерації ШІМ. PD5 безпосередньо підключений до помаранчевого дроту сервомотора, який є вхідним сигнальним штифтом. Підключіть будь-який кольоровий світлодіодний індикатор живлення. Крім того, підключіть одну кнопку в кнопці Reset pin для скидання Atmega16, коли це потрібно. Підключіть Atmega16 до належної схеми генератора кристалів. Вся система буде живитися від джерела живлення 5 В.
Повне налаштування буде виглядати нижче:
Керування сервомотором за допомогою AVR ATmega16
Як і кроковий двигун, сервомотору не потрібен зовнішній драйвер, наприклад драйвер двигуна ULN2003 або L293D. Для керування сервомотором достатньо лише ШІМ, і генерувати ШІМ з мікроконтролера дуже просто. Крутний момент цього сервомотора становить 2,5 кг / см, тому, якщо вам потрібен більший крутний момент, цей сервопривід не підходить.
Як ми знаємо, сервомотор шукає імпульс кожні 20 мс, а довжина позитивного імпульсу визначатиме кут повороту сервомотора.
Частота, необхідна для отримання імпульсу 20 мс, становить 50 Гц (f = 1 / T). Отже, для цього сервомотора специфікація говорить, що для 0 градусів нам потрібно 0,388 мс, для 90 градусів нам потрібно 1,264 мс, а для 180 градусів нам потрібно 2,14 мс імпульсу.
Для генерації заданих імпульсів ми будемо використовувати Timer1 Atmega16. Частота процесора становить 16 МГц, але ми будемо використовувати лише 1 МГц, оскільки у нас не так багато периферійних пристроїв, підключених до мікроконтролера, і на мікроконтролер немає великого навантаження, тому 1 МГц зробить свою роботу. Значок попереднього масштабування встановлений на 1. Отже, годинник ділиться на 1 МГц / 1 = 1 МГц (1 мкСм), що чудово. Таймер1 буде використовуватися як Швидкий ШІМ-режим, тобто Режим 14. Ви можете використовувати різні режими таймерів, щоб генерувати бажаний імпульсний шлейф. Посилання наведено нижче, і ви можете знайти додатковий опис в офіційному паспорті Atmega16.
Щоб використовувати Timer1 як швидкий ШІМ- режим, нам знадобиться ТОП значення ICR1 (Input Capture Register1). Щоб знайти верхнє значення, використовуйте формулу, наведену нижче:
f pwm = f cpu / nx (1 + TOP)
Це можна спростити, ВЕРХ = ( f cpu / ( f pwm xn)) - 1
Де, N = Значення встановленого прескалера
f процесор = частота процесора
f pwm = ширина імпульсу сервомотора, яка становить 50 Гц
Тепер обчисліть значення ICR1, оскільки у нас є все необхідне значення, N = 1, f процесор = 1 МГц, f pwm = 50 Гц
Просто вкажіть значення у наведеній вище формулі, і ми отримаємо
ICR1 = 1999
Це означає досягнення максимального ступеня, тобто 180 0 ICR1 повинен бути 1999.
Для кристала 16 МГц і прескалера встановлено на 16, ми будемо мати
ICR1 = 4999
Тепер перейдемо до обговорення ескізу.
Програмування Atmega16 за допомогою USBasp
Повний код AVR для управління сервомотором наведено нижче. Код простий і легко зрозумілий.
Тут ми закодували Atmega16 для обертання сервомотора з 0 0 до 180 0 і повернення назад із 180 0 до 0 0. Цей перехід завершиться за 9 кроків, тобто 0 - 45 - 90 - 135 - 180 - 135 - 90 - 45 - 0. Для затримки ми будемо використовувати внутрішню бібліотеку Atmel Studio, тобто
Підключіть свій USBASP v2.0 і дотримуйтесь інструкцій у цьому посиланні, щоб програмувати мікроконтролер Atmega16 AVR за допомогою USBASP та Atmel Studio 7.0. Просто побудуйте ескіз та завантажте його, використовуючи зовнішній ланцюжок інструментів.
Повний код із демонстраційним відео наведено нижче. Також дізнайтеся більше про сервомотори, знаючи їх значення в робототехніці.