Подключение сервопривода к PIC16F628A

Сервопривод (часть 2)

Устройство сервомашинки было описано в предыдущей статье.

Теперь рассмотрим, как подключить его к контроллеру.
Подключение цифрового сервопривода к контроллеру выглядит очень просто, достаточно подать на сервомашинку питание, а цифровой вход подключить напрямую к выходу МК.

Подключение сервопривода к микроконтроллеру

Подключение сервопривода к микроконтроллеру

Для демонстрации работы сервопривода была собранна простая схема.

Схема

Схема

Схема содержит микроконтроллер PIC16F628A с 2 кнопками, кварцем и обвязкой в вид пары конденсаторов для кварца и трёх резисторов для кнопок и MCLR. Большинство сервоприводов спокойно работают от 5 В, так что посадим его на один источник с микроконтроллером (хотя лучше развязать, т.к. при работе серва может сильно просаживать напряжение). Красный провод + питания, чёрный (или коричневый) – земля, а жёлтый (или белый) – сигнальный, который подключаем к выходу RB6 МК.

Перейдём к разбору программы. Для начала посмотрим константы и функцию вычисления длины управляющего импульса:


const unsigned int MAX=837; 		//	максимальная длина импульса
const unsigned int MIN=237; 		//	минимальная длина импульса
const unsigned int DIFFERENCE=600; 	//	разница между минимальным и максимальными импульсами
const unsigned int INTERVAL=5730; 	//	интервал одной посылки
const unsigned int STEPS=200; 		//	шагов

unsigned int calk(unsigned int i)
{
return MIN+DIFFERENCE/STEPS*i;
}

Константа DIFFERENCE задаёт разницу между минимальным и максимальным импульсами, её можно задавать в ручную или высчитывать как разницу MAXMIN. Константа STEPS (количество шагов) должна быть кратная константе DIFFERENCE, иначе серва не будет доходить до конца.

Временная диаграмма

Временная диаграмма

Перейдём к основному коду программы:

void main()
{
unsigned int n,m;
unsigned int step=STEPS/2; 	//	установка начального положения
low_init();					//	инициализация МК
n=calk(step); 				//	расчёт начального положения
m=INTERVAL-n;
while(1==1)
{
  SetBit(PORTB,6); 	//	формирование управляющего импульса
  delay(n);
  ClrBit(PORTB,6); 	//	формирование остатка посылки
  delay(m);
  if(BUTTON1==0&&step!=STEPS) 	//	обработка кнопки
  {
    step++;
    n=calk(step); 			//	расчёт положения
    m=INTERVAL-n;
    delay(1000); 			//	задержка и антидребезг
  }
  if(BUTTON2==0&&step!=0) //	обработка кнопки
  {
    step--;
    n=calk(step); 			//	расчёт положения
    m=INTERVAL-n;
    delay(1000); 			//	задержка и антидребезг
  }
}
}

В самом начале происходит инициализация микроконтроллера и расчёт начального положения вала сервопривода. В бесконечном цикле главная задача – это формирование управляющего импульса и всей посылки. Также происходит обработка нажатий кнопок. Первая кнопка BUTTON1 увеличивает значение текущего шага, тем самым поворачивая вал привода в одну сторону, вторая кнопка BUTTON2 уменьшает текущий шаг привода, что приводит к повороту в другую сторону.

Ниже приведены осциллограммы управляющего сигнала сервопривода и зависимость положения вала сервопривода от них.

Осциллограмма 1 Положение движка вала 1

Осциллограмма 2 Положение движка вала 2

Осциллограмма 3 Положение движка вала 3

Осциллограмма 4 Положение движка вала 4

Осциллограмма 5 Положение движка вала 5

Осциллограммы зависимости положения движка
вала сервопривода от длины импульсов.

И напоследок небольшое видео, демонстрация работы сервопривода.

Видео

Скачать файлы исходника и прошивки

Но этот метод подходит для управления одной – двумя сервомашинками, для управления множеством сервоприводов нужно уже использовать другой алгоритм, который рассмотрен в следующей статье — управление множеством сервомашинок с PIC16F628A.

38 комментариев »

Alex_EXE | 19.03.2011 | Робототехника | 26 057 просмотров

38 комментариев на « Подключение сервопривода к PIC16F628A»

  1. Alex_EXE пишет 25.11.2013 в 22:49 #

    Схема собрана правильно? Если серва чуток дергается при включении, то это она так срабатывает на подачу питания, а вот от МК сигнала нет.
    Так же возможно микроконтроллер неправильно прошит, с программатором помочь не смогу — не знаком с ним. Другие МК и другие прошивки нормально прошиваются и работают?

  2. Alex пишет 26.11.2013 в 22:28 #

    схема собрана правильно. проверял уже все. микросхемы 3 штуки перепробовал, прошивал разными программаторами и программами. не работает. собрал все на 555 таймере, все работает. прошивку шил что в теме приклеена. может что с прошивкой? ничего не менял. единственное что, так это кварц поставил на 16 вместо 20.

  3. Alex_EXE пишет 27.11.2013 в 00:11 #

    От кварца идёт тактирование, изменяя его частоту Вы меняете все интервалы задержек и опросов внутри программы, с другой стороны: уменьшение тактовой частоты должно исказить работу, а не прекратить. Но луч же бы поставить 20МГц.
    Ещё, как вариант, Ваш программатора не может считать конфигурационные биты, в этом случае их нужно будет прописать вручную — 3D6A (Кварц — HS, Master Clear Enable, Brown Out Detect).

  4. lucifern пишет 29.11.2013 в 09:51 #

    Уважаемый автор,могу я вас попросить дополнить данную схему еще одним выходом для управления второй сервомашинкой? Чтобы по портам rb0 rb1 управление осуществлялось первой серво на rb6, а по портам rb2 rb3 — второй серво. И как вариант сделать управление не кнопками, а уровнями по входу. Например, пришла «1» на rb0 серво начало движение,пока присутствует «1»,серва выполняет те жже функции,что и при нажатой кнопке S1. И так для всех управляющих портов?

  5. lucifern пишет 29.11.2013 в 09:58 #

    Хочу на одном контроллере сделать повротную установку для камеры.Настройки пумть остануться такими же,но уже для двух сервомашинок. Благодарю!

  6. 3bit пишет 25.10.2014 в 00:42 #

    Cобрал схему, прошил при помощи pickit3 при старте двиг дергается но на кнопки не реагирует, прочитал комментарии и сменил перед повторной прошивкой Configuration bit, в итоге получилось (216A), прошил и заработало!!!

  7. Евгений пишет 06.09.2016 в 14:31 #

    Здравствуйте
    а можно добавить еще две сервомашинки с 4 кнопками ?
    и чтобы управление было независимое

  8. Alex_EXE пишет 06.09.2016 в 15:08 #

    Читайте дальше, следующая статья из этого цикла посвящена 4 независимым сервоприводам. А если посмотрите код, то нужное количество кнопок сможете сами задать.

Комментарии RSS

Оставьте отзыв