KEEN SIDE успешно заменяет аналогичные продукты таких известных брендов, как Phoenix Contact, Weidmueller, Degson, Winstar, Hsuan Mao, KLS, G-NOR, Mean Well и др.

Программная библиотека управления пятью сервоприводами на микроконтроллере ATtiny45/85

Проект демонстрирует возможность управления пятью сервоприводами с помощью лишь одного микроконтроллера Atmel AVR ATtiny45 или ATtiny85. Так как готовых подобных решений не было найдено для данных микроконтроллеров и использовать микроконтроллеры с большим количеством выводов не хотелось, автор решил написать собственную библиотеку управления.

Управление 5 сервоприводами на ATtiny45/85

Библиотека получила имя Servo8Bit, она поддерживает работу с 5 сервоприводами на микроконтроллере ATtiny45 и ATtiny85, из ресурсов микроконтроллера использует только 8-разрядный таймер. С ее помощью можно генерировать импульсы управления серво длительностью от 512 до 2560 мкс с 8-битным разрешением (256 значений) и, самое главное, данная библиотека очень проста в использовании.

ATtiny85 это 8-выводный не дорогой микроконтроллер с богатой периферией. В сети Интернет имеется несколько решений для управления сервоприводами, однако некоторые имеют недостаточное разрешение, другие рассчитаны на микроконтроллеры с большим количеством выводов и используют в своей работе 16-битный таймер.

Библиотека написана по образцу библиотеки Arduino для управления сервоприводом и имеет идентичный интерфейс. Для компиляции используется WinAVR.

Вот короткий пример программы, демонстрирующий, как использовать библиотеку Servo8Bit.

#include "Servo8Bit.h" 
int main()
{
Servo8Bit myServo; //создаем объект myServo
//максимальное количество - 5 сервоприводов
myServo.attach(1); //подключаем серво к порту PB1
//управление сервоприводом
while(1)
{
for(int pos = 0; pos < 180; pos++) // меняем положение от 0 градусов до 180 градусов
{ // с шагом 1 градус
myServo.write(pos); // команда сервоприводу установки штока в позицию 'pos'
delay(15); // ждем 15 мс пока сервопривод отработает команду
}
for(int pos = 180; pos > 1; pos--) // меняем положение шткоа от 180 градусов до 0 градусов
{
myServo.write(pos); //
команда сервоприводу установки штока в позицию 'pos'
delay(15); //
ждем 15 мс пока сервопривод отработает команду
}
}
}

В данном примере опущено определение функции delay(), которая необходима, т.к. используются временные задержки в тексте программы. В секции загрузок имеется сама библиотека и полная программа-пример для управления серводвигателем.

Библиотека содержит несколько функций. Рассмотрим их назначение.

  • функция attach() – функция, назначающая переменной Servo вывод микроконтроллера для управления сервоприводом. Например, myServo.attach(1) – порт микроконтроллера PB1 используется для управления сервоприводом;
  • функция write() – запись значения в градусах в сервопривод, соответственно управление исполнительным механизмом сервопривода, т.е. поворот штока сервопривода на заданную величину;
  • функция writeMicroseconds() – запись значения в микросекундах в сервопривод, соответственно управление валом сервопривода;
  • функция read() - функция предназначена для получения информации о текущем положении вала сервопривода (это значение функция получает с последнего вызова функции write());
  • функция attached() – проверяется назначен ли переменной Servo вывод микроконтроллера;
  • функция detach() – отключение переменной Servo от вывода микроконтроллера.

Когда назначается вывод микроконтроллера для управления сервоприводом - функция attach(), на этом выводе микроконтроллера начинается генерация управляющего ШИМ сигнала. Функция detach() останавливает генерацию ШИМ сигнала, т.е. после выполнения данной фуннкци указанный в функции порт микроконтроллера не будет использоваться для управления сервоприводом. Для повторного включения потребуется вызов функции attach().

Управляющий сигнал – это импульсный сигнал с ШИМ (широтно-импульсной модуляцией), представляющий собой последовательность прямоугольных импульсов с амплитудой 3 В - 5 В и длительностью от 0.9 до 2.1 мс. Собственно длительность импульса в ШИМ сигнале и определяет положение исполнительного механизма. Минимальное значение – означает разворот в крайнее левое положение, среднее – центральное положение штока, а максимальное значение – крайнее правое положение. Однако существуют некоторых различия управляющих параметров, в зависимости от модели сервопривода.

По умолчанию, это команда сервоприводу для перемещения в среднее положение. Пользователь управляет сервоприводом посредством функции write() с числом в диапазоне от 0 до 180. Это число – положение штока сервопривода в градусах. Микроконтроллер формирует в соответствии с этим значением нужный ШИМ сигнал.

Так как выпускаются различные модели сервоприводов и параметры у них разные, то обязательно потребуется конфигурирование – изменение длительности импульсов ШИМ сигнала. С этой целью возможно использование функции write() с несколькими аргументами:  write(pin, min, max), где, pin – вывод микроконтроллера, предназначенный для управления сервоприводом, min – минимальное значение длительности импульса для генерации команды установки штока в положение 0 градусов, max – максимальное значение длительности импульса для генерации команды установки штока в положение 180 градусов. Значения по умолчанию – 544 мкс и 2400 мкс. Кроме того, возможно использование функции writeMicroseconds() для ручной установки длительности импульса.

Ограничение текущей версии библиотеки:

  • работает только с микроконтроллером ATtiny45 и ATtiny85. Возможно библиотека будет работать и с другими микроконтроллерами AVR, но автором это проверено не было;
  • поддерживается работа только с 5 сервоприводами*;
  • работа возможна только при тактовой частоте 8 МГц;
  • подключение сервоприводов возможно только на порт B микроконтроллера (это один порт доступный в ATtiny45/85);
  • используется 8-битный таймер микроконтроллера Timer0, возможность выбора другого таймера имеется, но слишком затруднена настройка в этом случае.

* драйвер можно легко сконфигурировать для работы с более чем 5 сервоприводами, см. комментарии в тексте программной библиотеки.

В планах:

  • поддержка различных тактовых частот;
  • поддержка конфигурирования таймера для использования драйвером сервопривода.

Демонстрация работы

Загрузки
Программная библиотека Servo8bit, make-файл, пример программы – скачать

Перевод: Vadim по заказу РадиоЛоцман

На английском языке: ATtiny45/85 Servo Library

Электронные компоненты. Бесплатная доставка по России
Для комментирования материалов с сайта и получения полного доступа к нашему форуму Вам необходимо зарегистрироваться.
Имя