Главная » Статьи » Как подключить

Подключение сервопривода к микроконтроллеру
 
 
 Сервопривод, как и шаговый двигатель, является элементом точной кинематики, позволяющий достигать точное позиционирование механизмов. Но в отличии от шагового двигателя, сервопривод имеет обратную связь, позволяющую в любой момент отследить точный угол поворота вала. В качестве источника обратной связи могут быть использованы различные типы энкодеров и потенциометры. 
 В статье рассмотрим подключение и работу с младшими представителями сервоприводов - т.н. сервомашинками - горячо любимыми среди роботостроителей и моделистов.

 

 Конструктив

 Сервомашинка состоит из корпуса, в котором заключен небольшой коллекторный электромотор, редуктор и управляющая электроника.


 В качестве обратной связи применяются потенциометры. Поэтому эти сервы имеют ограничения по углу поворота вала вокруг оси. Так, в приобретенных мной сервах Futaba S3003, угол поворота выходного вала составляет 225°.


 Технические характеристики Futaba S3003

    Параметр                             Напряжение питания, В                  
  4,8    6,0  
 Усилие на валу   3,2 кг/см    4,1 кг/см   
 Скорость позиционирования     0,23 sec/60°    0,19 sec/60° 
 Размер, Д х Ш х В 41мм х 20мм х 36мм
 Масса, г37 

  Потенциометр обратной связи посажен прямо на выходной вал, благодаря ему блок управления сервомашинки отслеживает точное положение вала: сопротивление потенциометра изменяется пропорционально углу поворота.  Считав сопротивление, блок управления сравнивает это значение с тем, которое должно быть при заданном положении вала. Если эти значения отличаются, блок управления дает команду двигателю повернуть вал в заданном направлении, уменьшая разницу значений. Достигнув положения вала, когда значение с потенциометра совпадает с заданным значением, двигатель останавливается. Считывание значения с потенциометра и его сравнение происходит с большой частотой, поэтому выходной вал будет стремиться занять заданное положение при изменении внешней нагрузки. 
 Конструкция сервомашинки выполнена таким образом, что крутящий момент от двигателя к выходному валу передается через редуктор с большим передаточным числом, поэтому при малых размерах и энергозатратах, сервомашинки могут обеспечивать большую тягу. 


 Управление

  В качестве управляющего сигнала служит импульсный сигнал с периодом 20 мс и с длительностью от 0,8 до 2,2 мс. Это некий стандарт управления сервомашинок. Чем длинее пришел импульс, тем на больший угол повернется вал сервомашинки. Для разгона сервомашинки период следования импульсов можно уменьшить до 10 мс.



  Управляющий сигнал подается на серву по сигнальному проводу S. В моей сервомашинке он белый, в некоторых моделях - желтый. Помимо сигнального провода из сервомашинки выходят два провода - линии питания - земля (черный) и питание (красный)





 Программная часть

 Как видно управлять сервой достаточно просто - достаточно гнать импульсный сигнал с нужной частотой и скважностью. Этот сигнал можно генериовать ШИМ, или написать свою функцию обработки прерывания по таймеру. Но в Bascom-AVR уже есть встроенная команда для управления сервомашинками - Servo. Ее и рассмотрим. 

Для начала необходимо сконфигурировать подключение сервомашинок:


Config Servos = X , Servo1 = Portb., Servo2 = Portb., Reload = Var


Servos = X ;  указывается количество подключаемых сервомашинок, возможно подключение до 14 серв.

Servo1 = Portb.0 ; указывается порт подключения  первой сервы

Servo2 = Portb.1 ; указывается порт подключения  второй сервы

Reload = Var ; здесь   Var  время  в микросекундах, которое проходит между прерываниями от таймера.

 По умолчанию для организации прерываний используется Timer0, поэтому использовать его в своих целях уже не получиться. Bascom-AVR позволяет перебросить обслуживание прерываний на любой другой таймер, например чтобы освободить Timer0 и задествовать Timer1 достаточно указать это в строке конфигурации: 

Config Servos = 2, Servo1 = Portb., Servo2 = Portb., Reload = 10 , Timer = Timer1


 После того как все сконфигурировали остается только рулить нашей сервомашинкой. Это делается следующей командой 

Servo(a) = F

а - порядковый номер сервомашинки

F - переменная, значение которой задает угол поворота вала сервы


Тестовый код целиком:


$regfile = "m8def.dat"                                   'микроконтроллер ATmega8
$crystal = 8000000                                       'частота работы 8МГц

'конфигурируем порты для подключения сервоприводов
Config Portb.= Output
Config Portb.= Output

'настраиваем подключения двух сервомашинок
Config Servos = 2 , Servo1 = Portb., Servo2 = Portb., Reload = 15

Dim F As Byte                                            'переменная для первой сервы
Dim S As Byte                                            'переменная для второй сервы

'разрешаем прерывания
Enable Interrupts

= 15                 'значением переменной задается угол поворота вала сервомашинки
= 70

Do

Servo(1) = F
Servo(2) = S

Loop

End

 Схему подключения не привожу, думаю один сигнальный провод проблем не вызовет ;) Его можно подключать к порту микроконтроллера напрямую, а можно через резистор сопротивлением пару сотен ом - для перестраховки.

 Меняя значения перемменных F и S можем менять угол поворота первой и второй сервомашинок соответственно. Чем меньше значение параметра Reload, тем шустрее наши сервомашинки будут поворачиваться на нужный угол. 

 Для своих серв подобрал рабочий диапазон значений Servo(a), в которых вал может вращаться. Крайнее положения вал занимает при значении 0 и 150, соответственно при значении 75 вал занимает промежуточное положение.

      

Servo(a) =0                                     Servo(a) =75                               Servo(a) =150  

        



Категория: Как подключить | Добавлено: 25.02.2012
Просмотров: 47357 | Комментарии: 16 | Теги: двигатель, Futaba S3003, Servo | Рейтинг: 5.0/3
Всего комментариев: 16
0  
16 exersizze   (18.08.2014 09:40) [Материал]
Исходник ниже смотрели? там есть эта строчка, а также конфигурация двух портов на выход. К каждому из них и подключается сигнальный провод сервомашинки

15 123ksn   (17.08.2014 20:49) [Материал]
1)"Это делается следующей командой
Servo(a) = F"
А куда вводится эта команда?
2)"Схему подключения не привожу". Очень зря. Пожалуйста, приведите полную схему к данной статье или ссылку на схему.
Я предполагаю, что команда подается из терминальной программы? Но опять же в исходнике не вижу кода по приему команды.

14 Alpino   (30.01.2014 08:45) [Материал]
А как можно проверить работоспособность Servo? Неожиданно перестал работать сервопривод ld-2015 (locked-rotor torque 17 kg/cm 7.4 V, по строению - один в один как на второй картинке http://avrproject.ru/servo/servo_construction.png) - стал очень туго ходить (по сравнению с другими) и при попытке его запустить с контроллера - выбивает предохранитель на плате. Подача на моторчик 7,4 вольт напрямую ничего не дала - напружно гудит и все. На плате явных признаков неисправности - нет. Куда копать?

13 exersizze   (29.07.2013 16:31) [Материал]
domrustika, там крепления достаточно крепкие, вебку легко выдержат. В соседней теме Polle выложил видео, как раз цеплял камеру к серве http://avrproject.ru/publ....ent2686

12 domrustika   (26.07.2013 12:11) [Материал]
там видимо никто не читает тему. напишу тут)
можно на эти машинки нацепить обычную web камеру для обзора своей квартиры?
крепления позволяют?

11 amv2000   (24.06.2013 14:21) [Материал]
Поворотом на определенный угол от 0 до 150, где 75 это середина.

10 marss70   (23.06.2013 23:42) [Материал]
Не совсем понятно, как управлять направлением вращения?

9 exersizze   (28.07.2012 22:10) [Материал]
на входе передатчика данные не прыгают? может помехи?

8 Valera18   (28.07.2012 14:48) [Материал]
Подскажите, я пытаюсь считывать сигналы "серво" с радиоприёмника, но почему-то считанные данные имеют высокий разброс (сервоприводы не дрыгаются, но данные считываются с высоки разбросом)?
Я считываю с помощью команд: Timer (измеряю импульс) или ADC (измеряю напряжение).
Самое интересное, то что измерял напряжение цифровым мультиметром и напряжение "на канале серво" было стабильно (всё отлично), но при считывание напряжения с помощью Atmega8 (команда ADC), микросхема постоянно выдаёт данные с большим разбросом. Не знаете, почему не удаётся верно считать напряжение с помощью Atmega8? Подключал так-же и гасящие резисторы, но считанное напряжение всё равно гуляет.

Может, есть ещё способ считать сигналы "серво" от радиоприёмника?

7 trim   (15.06.2012 01:12) [Материал]
поигрался с программой вощем не знаю как ваша машинка а моя HITEC HS 422 ,на отрез отказалась работать на 8 мегагерц ,правда запустил на атюни 2313 но 4 хорошо стабильно и 2 мегагерца очень живенько так ,вот хотелось бы чтоб было описание по подробнее ну что еще можно в прогу втюхать ,там может регулировка угла от резистора там или от дальномера например вот СПАСИБО ВАМ

6 amv2000   (12.06.2012 12:11) [Материал]
фьюзы на 8 Мгц, можно от внутреннего генератора

5 trim   (12.06.2012 11:40) [Материал]
ребят подскажите фьюзы в баском для этой статьи

4 exersizze   (26.02.2012 20:27) [Материал]
Взял ради интереса, посмотреть как оно вообще работает. А применение нашлось само собой - буду внедрять автоматизацию в процесс выращивания овощей в парнике) сервы будут регулировать открытие створок для поддержания заданной влажности

3 4ester   (26.02.2012 02:02) [Материал]
да теперь все нормально. А вы для чего то особенного покупали сервы, или так поиграть? я тоже подумываю купить поиграться, а вот куда применить в дело, в голову не приходит.

2 exersizze   (25.02.2012 22:16) [Материал]
проверил страницу в огнелисе, косяк с отображением был да. Подправил, теперь должно быть нормально.

1 4ester   (25.02.2012 21:58) [Материал]
интересная статья, спасибо!!! У меня одного текст статьи немного залазит за ленту с новостями и облаком тегов?

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]






авторизация
Логин:
Пароль: