Малаток-меню
Авторизация

Наш опрос
Сколько ВАМ лет?

Всего ответов: 84
Мини-чат
200
Статистика


Наш линк
Malatok.at.ua
Полезные ссылки
Это может быть интересно
[
Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Модератор форума: Stalker753, Викр, Дмытрохан 
Форум » РАДИОТЕХНИКА » Полезные устройства » Подключение сервопривода к микроконтроллеру
Подключение сервопривода к микроконтроллеру
incubus Дата: Суббота, 14.12.2013, 22:21 | Сообщение # 1
Почетный друг сайта
Группа: Модераторы
Сообщений: 190
Награды: 4
Репутация: 200
Замечания: 0%
Статус: Офлайн
 
 
Сервопривод, как и шаговый двигатель, является элементом точной кинематики, позволяющий достигать точное
позиционирование механизмов. Но в отличии от шагового двигателя,
сервопривод имеет обратную связь, позволяющую в любой момент отследить
точный угол поворота вала. В качестве источника обратной связи могут
быть использованы различные типы энкодеров и потенциометры.
  
В статье рассмотрим подключение и работу с младшими представителями
сервоприводов - т.н. сервомашинками - горячо любимыми среди
роботостроителей и моделистов.

 
 Конструктив

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


 В качестве обратной связи применяются потенциометры. Поэтому эти сервы
имеют ограничения по углу поворота вала вокруг оси. Так, в приобретенных мной сервах 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.0 , Servo2 = Portb.1 , Reload = Var

Servos = X ;  указывается количество подключаемых сервомашинок, возможно подключение до 14 серв.
Servo1 = Portb.0 ; указывается порт подключения  первой сервы
Servo2 = Portb.1 ; указывается порт подключения  второй сервы
Reload = Var ; здесь  Var  время  в микросекундах, которое проходит между прерываниями от таймера.
 По умолчанию для организации прерываний используется Timer0, поэтому
использовать его в своих целях уже не получиться. Bascom-AVR позволяет
перебросить обслуживание прерываний на любой другой таймер, например
чтобы освободить Timer0 и задествовать Timer1 достаточно указать это в
строке конфигурации: 

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

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

Servo(a) = F
а - порядковый номер сервомашинки

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

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

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

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

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

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

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

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

Do

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

Loop

End

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

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

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


С дураком спорить бесполезно!
 
Гость Дата: Четверг, 30.01.2014, 01:21 | Сообщение # 2
Группа: Гости





Заострите внимание, что альтернативная цоколевка сервоприводов других фирм, когда управляющий вывод - крайний.
 
Форум » РАДИОТЕХНИКА » Полезные устройства » Подключение сервопривода к микроконтроллеру
Страница 1 из 11
Поиск:
Новый ответ
Имя:
Текст сообщения:
Опции сообщения:
Код безопасности:
Яндекс.Метрика
24 log 24 LOG statistick
счетчик посещений
Если вы видите это,
то ваш браузер устарел
и не поддерживает технологий
CSS 3.0