0
Программная библиотека управления пятью сервоприводами на микроконтроллере ATtiny45/85
Проект демонстрирует возможность управления пятью сервоприводами с помощью лишь одного микроконтроллера Atmel AVR ATtiny45 или ATtiny85. Так как готовых подобных решений не было найдено для данных микроконтроллеров и использовать микроконтроллеры с большим количеством выводов не хотелось, автор решил написать собственную библиотеку управления.
![]() 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-файл, пример программы – скачатьНа английском языке: ATtiny45/85 Servo LibraryПеревод: Vadim по заказу РадиоЛоцман По материалам сайта www.rlocman.ru
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии в данной новости. Популярные статьи по ремонту audio - videoНовые статьи по радиоэлектронике |