- •1 Ответы на контрольные вопросы заданий и их краткое содержание
- •Тема 1.1. Что такое микроконтроллер.
- •Тема 1.2.Схемотехника современных микроконтроллеров
- •Тема 1.3.Обзор языков программирования для микроконтроллеров
- •Тема 1.4.Среды программирования
- •Тема 1.5. Отладка и запуск программы для мк
- •Тема 2.1.Виды команд в процессоре. Ортогональная архитектура.
- •Тема 2.2.Адресное пространство мк msp430
- •Тема 2.3. Внутренняя структура mk msp430
- •Тема 3.1.Битовые операции
- •Тема 3.2. Аналогово-цифровой преобразователь
- •2 Описание выполнения учебного проекта
- •Программная часть
- •3 Результат выполнения учебного проекта
Программная часть
Как видно управлять сервой достаточно просто - достаточно гнать импульсный сигнал с нужной частотой и скважностью. Этот сигнал можно генериовать ШИМ, или написать свою функцию обработки прерывания по таймеру. Но в 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
