- Необходимые компоненты
- Описание контактов серводвигателя
- Принципиальная электрическая схема
- Управление серводвигателем с помощью AVR ATmega16
- Программирование Atmega16 с помощью USBasp
Сервомоторы широко используются там, где требуется точное управление, например, в роботах, автоматизированном оборудовании, роботизированном манипуляторе и т. Д. Однако объем серводвигателя не ограничивается этим и может использоваться во многих приложениях. Чтобы узнать больше об основах, теории и принципе работы серводвигателя, перейдите по ссылке.
Ранее мы сопрягали серводвигатель со многими микроконтроллерами:
- Подключение серводвигателя к ARM7-LPC2148
- Подключение серводвигателя к MSP430G2
- Подключение серводвигателя к STM32F103C8
- Взаимодействие серводвигателя с микроконтроллером PIC с использованием MPLAB и XC8
- Взаимодействие серводвигателя с Arduino Uno
- Сервомотор, взаимодействующий с микроконтроллером 8051
В этом руководстве мы будем сопрягать микро-сервомотор с микроконтроллером AVR Atmega16 с помощью Atmel Studio 7.0. Серводвигатель рассчитан на работу при 4,8-6 В. Мы можем контролировать его угол поворота и направление, применяя последовательность импульсов или сигналы ШИМ. Обратите внимание, что серводвигатели не могут вращаться на 360 градусов, поэтому они используются там, где непрерывное вращение не требуется. Угол поворота составляет 0–180 градусов или (-90) - (+90) градусов.
Необходимые компоненты
- Микро-серводвигатель SG90 Tower Pro
- Микроконтроллер Atmega16 IC
- Кристаллический осциллятор 16 МГц
- Два конденсатора по 100 нФ
- Два конденсатора 22 пФ
- Нажать кнопку
- Перемычки
- Макетная плата
- USBASP v2.0
- Светодиод (любой цвет)
Описание контактов серводвигателя
- Красный = положительный источник питания (от 4,8 В до 6 В)
- Коричневый = Земля
- Оранжевый = управляющий сигнал (вывод ШИМ)
Принципиальная электрическая схема
Подключите все компоненты, как показано на схеме ниже, чтобы вращать серводвигатель, используя микроконтроллер AVR. Имеется четыре вывода ШИМ, мы можем использовать любой вывод ШИМ Atmega16. В этом руководстве мы используем контакт PD5 (OC1A) для генерации ШИМ. PD5 напрямую подключен к оранжевому проводу серводвигателя, который является контактом входного сигнала. Подключите любой цветной светодиод для индикатора питания. Кроме того, подключите одну кнопку к контакту сброса для сброса 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 в качестве быстрого режима PWM, нам понадобится значение TOP ICR1 (Input Capture Register1). Чтобы найти ТОП-значение, используйте приведенную ниже формулу:
f pwm = f cpu / nx (1 + TOP)
Это можно упростить до
TOP = ( f процессора / ( f pwm xn)) - 1
Где, N = значение набора предделителя
f cpu = частота процессора
f pwm = ширина импульса серводвигателя, равная 50 Гц
Теперь вычислите значение ICR1, поскольку у нас есть все необходимые значения, N = 1, f cpu = 1 МГц, f pwm = 50 Гц
Просто введите значения в формулу выше, и мы получим
ICR1 = 1999
Это означает, что для достижения максимальной степени, т.е. 180 0, ICR1 должен быть 1999.
Для кристалла 16 МГц и предделителя, установленного на 16, у нас будет
ICR1 = 4999
Теперь перейдем к обсуждению эскиза.
Программирование Atmega16 с помощью USBasp
Полный код АРН для управления серводвигателем приведен ниже. Код прост и понятен.
Здесь мы закодировали 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. Просто создайте эскиз и загрузите его с помощью внешнего инструментария.
Полный код с демонстрационным видео приведен ниже. Также узнайте больше о серводвигателях, зная их важность в робототехнике.