Управление шаговыми двигателями через компьютер

FL57STH76

В уроке разработаем драйвер шагового двигателя с управлением от компьютера. Я расскажу о текстовом протоколе обмена данными с использованием AT команд. Научимся управлять двигателем через монитор последовательного порта Arduino IDE и с помощью программы  верхнего уровня StepMotor.

Предыдущий урок     Список уроков     Следующий урок

Я поставил задачу разработать интеллектуальный драйвер шагового двигателя на базе платы Ардуино. Драйвер должен позволять управлять двигателем от компьютера через стандартный кабель подключения платы Ардуино или через любой другой последовательный порт.

 

Функциональные возможности устройства определяются библиотекой StepMotor из урока 29.

 

Аппаратная часть драйвера.

Для подключения униполярного двигателя к плате Ардуино я использовал схему из Урока 28.

Схема подключения биполярного шагового двигателя

Но можно  применить любую другую схему для униполярного или биполярного шаговых двигателей.

Я подключил достаточно мощный двигатель FL57STH76-1006. У него 400 шагов на полный оборот, ток фазы 1 А.

Управление шаговым приводом от компьютера

Сопротивление обмоток двигателя позволяет обойтись без ограничительных резисторов. Для других типов приводов может потребоваться либо снизить напряжение питания, либо добавить в каждую фазу ограничительный резистор. Об этом написано в Уроке 28 для униполярного двигателя и будет рассказано в ближайших уроках для биполярного.

 

Обмен данными между платой Ардуино и компьютером.

Разработка программной части драйвера сводится к получению данных от компьютера и вызове функций библиотеки StepMotor из Урока 29. Работу с библиотекой StepMotor мы подробно разбирали в этом уроке. А вот полноценным обменом данными с компьютером мы еще не занимались.

Прежде всего, необходимо определить протокол обмена. С помощью последовательного порта мы можем обмениваться байтами. А нам надо посылать команды, числа. Протокол и определяет то, как интерпретировать последовательность байтов.

Протокол обмена данными – это набор правил, соглашений, которые определяют компьютер обмен данными между программами. В нашем случае между программой драйвера платы Ардуино и программой верхнего уровня на компьютере.

Протоколы бывают текстовыми и числовыми. Например, число ”231” в текстовом протоколе будет передано как 3 байта с кодами символов ”2”,”3” и ”1”. А в числовом протоколе для передачи этого же числа достаточно передать один байт с двоичным кодом 231. Из этого примера видно главное достоинство числовых протоколов – для передачи одинакового объема информации требуется значительно меньше передаваемых данных.

Но у текстовых протоколов есть свое преимущество, благодаря которому они применяются чаще, чем числовые.  Это возможность контроля, отладки их стандартными средствами – текстовыми терминалами. Когда мы отлаживали программы на Ардуино с помощью последовательного порта, мы посылали данные на компьютер в текстовом формате. Запускали монитор последовательного порта и видели на экране компьютера напряжение, или температуру, или какое-нибудь другое данное в понятном нам виде. Но ведь мы могли послать данные в двоичном коде командой Serial.write(byte). Данных было бы значительно меньше, но для их расшифровки пришлось бы использовать специальную программу, которая понимает, что это за данные и как их интерпретировать.

Лично я сторонник числовых протоколов, особенно на устройствах с ограниченными ресурсами. Но для разработки драйвера я выбрал текстовый протокол из-за его универсальности, простоты демонстрации и отладки.

 

Текстовый протокол обмена через AT команды.

AT команды это простой текстовый протокол обмена данными, в котором каждая команда начинается символами “AT”.  Далее следуют параметры и коды также в текстовом виде.

Последовательность символов “AT” происходит от английского “Attention”  (внимание) и означает, что пришла новая команда. Стандартным ответом AT протокола является последовательность “OK” (все нормально).

AT команды широко используются для обмена данными с модемами, в том числе и с модулями GSM, с модулями WiFi, GPS и многими другими устройствами. Мы вернемся к AT командам в уроках о беспроводных технологиях связи.

 

AT команды драйвера шагового двигателя.

Разработаем наш протокол обмена.

Какие команды нам нужны? Если мы используем библиотеку StepMotor, то нам нужны команды для каждой функции библиотеки:

  • инициировать вращение на заданное количество шагов;
  • задать режимы коммутации и остановки двигателя;
  • задать скорость вращения;
  • считать число оставшихся шагов;
  • проверить связь.

К командам соответствующим методам библиотеки добавлена команда проверки обмена. Надо иметь возможность узнать, включен ли драйвер.

Общий формат команды выглядит так:

  • Каждая команда должна начинаться с ”AT”.
  • Далее следует последовательность символов – кодов, чисел, параметров.
  • Заканчивать команду принято управляющими символами ”\r” (возврат каретки, код 13) и ”\n” (перевод строки, код 10). Об этих символах написано в предыдущем уроке. Монитор последовательного порта автоматически добавляет ”\r\n” к любым данным. Т.е. когда Вы набираете в мониторе ”AT” и нажимаете клавишу “Enter”, то монитор передает 4 символа ”AT\r\n”.
  • В ответе используется последовательность ”OK\r\n”. Благодаря управляющим символам каждый ответ в окне монитора последовательного порта будет печататься с новой строки.

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

Команда Ответ Описание AT
( “AT”, 13, 10 ) OK
( “OK”, 13, 10 ) Проверка связи. Возвращает “OK”. ATS= steps
( “ATS=”, steps, 13, 10 ) OK
( “OK”, 13, 10 ) Инициирует вращение двигателя на указанное число шагов steps. ATM= mode, fix
( “ATM=”, mode, “,”, fix, 13, 10 ) OK
( “OK”, 13, 10 ) Задает режим управления двигателем:

mode:

  • 0 – шаговый режим;
  • 1 – полу шаговый режим;
  • 2 – между шаговый режим.

fix:

  • 0 – без фиксации двигателя при остановке;
  • 1 – фиксация ротора остановленного двигателя.

 

ATD= divider
( “ATD=”, divider, 13, 10 ) OK
( “OK”, 13, 10 ) Задает частоту переключения фаз, т.е. скорость вращения. ATR?
( “ATR”, 13, 10 ) steps, OK
(steps, “OK”, 13, 10 ) Считывает число шагов, оставшихся до остановки двигателя.

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

Еще в протоколе отсутствует защита целостности данных контрольными кодами. Но AT команды, как правило, используются для устройств, расположенных вблизи друг от друга и в контрольных кодах нет необходимости. К тому же наличие контрольных сумм сведет на нет главное достоинство текстового протокола – возможность управления с любого текстового терминала. Не будете же Вы рассчитывать контрольные коды вручную.

 

Реализация резидентной программы драйвера.

Программу можете загрузить по этой ссылке. Должны быть установлены библиотеки TimerOne.h  и StepMotor.h. Обе библиотеки есть в Уроке 29. Как установить написано в Уроке 9.

О работе с библиотекой StepMotor я подробно писал в уроке 29. Остается пояснить блок обмена данными с компьютером.

В цикле loop() расположен программный блок выделения команды.

// обмен с компьютером
  letterNum= Serial.available(); // чтение числа принятых символов

  if ( letterNum == 0 ) {
    // данных нет
    timeOutCount= 0;
  }
  else  { 
    // есть данные   
    if ( letterNum!= prevDataNum ) timeOutCount= 0;  // новое данное   
    prevDataNum= letterNum; // перегрузка числа принятых символов
  }

  if ( timeOutCount > TIME_OUT )  {
    // пауза между данными больше тайм-аута
   
    // команда принята, расшифровка

Блок работает по следующему алгоритму:

  • Определяет, поступило ли в порт новое данное.
  • Если данное пришло, то сбрасывает счетчик времени timeOutCount.
  • Если счетчик времени timeOutCount превысил значение TIME_OUT, т.е. данные перестали поступать, то определяет, что команда принята и переходит к расшифровке команды.

По сути, блок выделяет паузы между символами более 30 мс (TIME_OUT). Затем символы считываются из буфера последовательного порта и расшифровываются.

Обратите внимание, что программа драйвера не подвешивает программу. В цикле loop() можно еще выполнять другие задачи параллельно.

Блок расшифровки команды я описывать не буду. В нем совершаются последовательные действия: сравниваются символы, преобразуются числа, формируются ответы. Комментариев достаточно, можно разобраться.

 

Проверка работы драйвера.

Загружаем скетч в плату, запускаем монитор последовательного порта Arduino IDE. Проверяем команды. Я указываю параметры для моего двигателя (400 шагов на оборот).

Отправляем Получаем Действие AT OK Проверка обмена ATD=20 OK Устанавливаем скорость ATS=400 OK Сделать оборот против часовой стрелки ATS=-400 OK Сделать оборот по часовой стрелке ATS=1 OK Сделать шаг против часовой стрелки ATS=-1 OK Сделать шаг по часовой стрелки ATM=1,0 OK Установить полу шаговый режим ATS=800 OK Сделать оборот против часовой стрелки ATS=-800 OK Сделать оборот против часовой стрелки ATS=30000 OK Вращение против часовой срелки ATR? 3772OK Чтение оставшихся шагов ATR? 3410OK Чтение оставшихся шагов ATR? 3052OK Чтение оставшихся шагов ATS=0 OK Остановка

Как видите, управлять двигателем можно с помощью стандартной программы – монитора последовательного порта. Существует много подобных мониторов, терминалов, с помощью которых можно подавать команды. Только надо установить скорость 9600 и режим добавления в конце команды управляющих символов “возврат каретки”, “перевод строки”. В мониторе последовательного порта режим выбирается справа в низу окна и называется ”NL & CR”.

 

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

Я написал простенькую программу для управления от компьютера шаговым двигателем через драйвер на плате Ардуино. Программа поддерживает все доступные режимы.

Загрузить программу можно по этой ссылке.

Подключение, первый запуск, выбор порта происходит так же, как в программе Thermometer из Урока 24. Скажу только, что для начала удобнее использовать виртуальный порт, который формирует драйвер платы Ардуино при подключении платы к компьютеру. Запускать Arduino IDE необязательно. При первом включении в программе StepMotor необходимо выбрать номер порта. Программа запомнит его и будет использовать при последующих запусках.

Основное окно программы выглядит так.

Окно программы StepMotor

Панель ”Шаги” позволяет инициировать вращение двигателя на заданное число шагов. Шаги задаются ползунком или в редактируемом окошке и отсылаются в драйвер кнопкой ”-->” справа от панели.

С помощью панели ”Скорость” задается значение делителя коммутации шагов, а значит и скорость вращения. Загружается в драйвер кнопкой ”-->” справа от панели.

Панель ”Режим” позволяет задать режим коммутации фаз и выбрать режим остановки двигателя.

Надо помнить, что параметры, заданные в этих трех панелях посылаются в драйвер при нажатии кнопок ”-->” справа от соответствующих панелей.

Панель ”Параметры двигателя” задает число шагов двигателя на полный оборот и период коммутации фаз при делителе равном 1. В моей резидентной программе для драйвера выбран период 250 мкс (прерывание по таймеру), но Вы можете задать другую частоту коммутации. Тогда этот параметр надо изменить в программе верхнего уровня. Данные из панели ”Параметры двигателя” не загружаются в драйвер, а используются для вычисления скорости в панели ”Скорость”.

В панели ”Драйвер” :

  • Отображается число оставшихся шагов. Этот параметр постоянно, в цикле считывается из драйвера.
  • Кнопка ”Стоп” останавливает двигатель в любом режиме.
  • Кнопка ”<<” запускает двигатель в режиме непрерывного вращения против часовой стрелки.
  • Кнопка ”>>” запускает двигатель в режиме непрерывного вращения по часовой стрелке.
  • Кнопка ”+1 шаг” заставляет двигатель сделать один шаг против часовой стрелки.
  • Кнопка ”-1 шаг” заставляет двигатель сделать один шаг по часовой стрелке.
  • Светодиод “Обмен” индицирует состояние связи. Красный цвет означает ошибку, зеленый – нормальную работу.

Программа позволяет легко проверить работу драйвера во всех режимах. Но главная цель – показать принцип управления контроллером Ардуино от компьютера по протоколу AT команд. Мы будем использовать эту программу в последующих уроках о подключении к Ардуино биполярного двигателя и драйвера на основе модуля TB6560-V2.

 

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

Предыдущий урок     Список уроков     Следующий урок

. Вы можете добавить


Источник: http://mypractic.ru/urok-31-drajver-shagovogo-dvigatelya-na-arduino-s-upravleniem-ot-kompyutera-protokol-obmena-dannymi-s-ispolzovaniem-at-komand.html



Рекомендуем посмотреть ещё:


Закрыть ... [X]

Управление шаговым двигателем без применения компьютера - RC Форум Поделки елок в школу

Управление шаговыми двигателями через компьютер Управление шаговыми двигателями через компьютер Управление шаговыми двигателями через компьютер Управление шаговыми двигателями через компьютер Управление шаговыми двигателями через компьютер Управление шаговыми двигателями через компьютер

Похожие новости