Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ivannikova.docx
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
1 Мб
Скачать
☆

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

 Как видно управлять сервой достаточно просто - достаточно гнать импульсный сигнал с нужной частотой и скважностью. Этот сигнал можно генериовать ШИМ, или написать свою функцию обработки прерывания по таймеру. Но в 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

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

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

      

А) В) С)

Рисунок 4- Работа сервопривода А) Servo(a) =0,  В) Servo(a) =75,   С) Servo(a) =150  

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]