Управление серводвигателями с помощью микроконтроллеров AVR AtMega32

Servoдвигатели - это тип электромеханических приводов, которые не вращаются постоянно,как DC / AC или шаговый двигателей, а перемещаются в определенное положение исохраняют его. Они применяются там, где не требуется непрерывное вращение. Серво приводы применяют там , где необходимоперейти к конкретной позиции ,а затем остановиться и сохранять положение.Наиболеечасто серво двигатели используются для управлением положением руля воздушныхсудов и лодок т.д. Сервоприводы эффективно используются в этих областях, потомучто руль не нужно перемещать на 360 градусов и не требуют непрерывного вращениякак например колеса. В сервоприводахтакже используется механизм обратной связи, поэтому он может обрабатыватьошибки и при позиционировании их исправить. Такая система называется следящей. Такимобразом, если поток воздуха оказывает давление на руль и отклоняет его, тосервопривод будет применять силу в противоположном направлении и попытаетсяисправить ошибку. Например, есливы скажете серво пойти и заблокироваться  на 30 градусах, а затем попытаетесь повернутьего рукой, серво будут стараться , чтобы преодолеть силу и сохранить заданныйугол.

Сервоприводыприменяются также для контроля руля RC- автомобилей, робототехники и т.д.Существует много видов сервоприводов, но здесь мы сосредоточимсяна малых сервоприводы так называемых hobby. Hobby двигатель и его механизм управления встроен в один блок.Подключение осуществляеться спомощью трех присоединительных проводов.Мы будем использовать сервопривод FutabaS3003.

FutabaS3003 проводки.

1.RED -> Управление позицией ,питание +4.8В до 6В

2.BLACK-> Земля

3.WHITE -> Сигнал управления. 

Управление Сервоприводом.

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

 

  Для FutabaS3003яузнал следующие синхронизацию. Соотношение между шириной импульса иуглом поворота сервопривода, приводится ниже. Заметим,что этот сервопривод способен вращаться только между 0 и 180 градусов.

 

  •   0.388ms= 0 градусов.
  • 1.264ms= 90 градусов.
  •  (Нейтральнаяпозиция)2.14ms= 180 градусов.

 

Управление Серво двигателем.

Вы можете использовать микроконтроллер AVR с функцией PWM дляуправления сервомоторов. Таким образом, PWM автоматически сгенерирует сигналыблокировки сервопривода и центральный процессор контролера освободится длядругих задач. Чтобы понять, как можно настроить и использовать PWM необходимоиметь базовые знания аппаратных таймеров и PWM модулей в AVR.

     Здесь мы будемиспользовать AVR Timer модуль, который является 16bit таймером  и имеет два канала PWM (А и B). 

  Частота центрального процессора составляет 16 МГц,эта частота - максимальная частота,на которой большинство AVR способны работать.Так же будем использовать делитель частоты на 64.Так таймера получат 16MHz/64 =250khz (4 мкс).Таймер установим в режим 14. 

Функциитаймера в режими 14 

  •  РежимFAST PWM 
  •  TTOP Значение = ICR1

 

 

Так таймер будет считать от 0 до ICR1. Формуладля частоты ШИМ и расчеты по значению TOP приводится ниже.

      Такимобразом, мы устанавливаем  ICR1A = 4999,это дает нам PWM периода 20мс (50 Гц).Убедитесь что в режими выводаустанавленны правильные настройки COM1A1, COM1A0 (для PWM канала) и COM1B1,COM1B0 (для PWM канал B)

COM1A1= 1 и COM1A0 = 0 (PWM Источник)

COM1B1= 1 и COM1B0 = 0 (PWM канал B)

 

Теперь рабочий цикл может быть установлен путем настройки OCR1A иOCR1B регистров. Эти два регистрауправления PWM периодом Так как период таймера 4мкс(помните 16 МГц разделили на 64), Мы можем вычислить значения, необходимые для поворотасервопривод на определенный угол.

 

§  Servoугол 0 градусов требуется ширина импульса 0.388ms (388uS), поэтому значениеOCR1A = 388us/4us = 97

§  Servoугол 90 градусов требуется ширина импульса 1.264ms (1264uS), поэтому значениеOCR1A = 1264us/4us = 316

§  Servoугол 180 градусов требуется ширина импульса 2.140ms (2140uS), поэтому значениеOCR1A = 2140us/4us = 535

 

Такимобразом, мы можете вычислить значение OCR1A (или OCR1B для второгосервопривода) для любого угла. Заметимчто  значение OCR1x колеблются от 97 до535 для углов от 0 до 180 градусов.

 

Программа управления двигателем.

  Демонстрационнаяпрограмма приведена ниже, показано, как использовать сервомоторов смикроконтроллером AVR. Работы программы очень проста, она начинается синициализации таймера и PWM.В начале фиксируеться сервопривод на 0 градусов, азатем перемещается на 90 градусов и подождатв некоторое время перемещается на135 градусов, и  наконец, на 180градусов. Этот процесс повторяется до тех пор, пока привод подключен к питанию.

 

Параметрыдля правильной работы программы. 

  •  LOW Fuse = 0xFF  и HIGH Fuse = 0xC9
  •  Частота= 16 МГц.
  •  Сервомоторклеймо Futaba S3003.
  • MCUявляется AtMega32 или однокристальный микроконтроллер ATmega16.

Схема

 

 

 

ПРИЛОЖЕНИЯ: 
 
  - Полный проект в AVR Studio