воскресенье, 5 октября 2014 г.

Управление шаговыми двигателями через USB порт.

Реализация связи ПК с внешним устройством через USB порт сложнее чем такая же реализация через LPT порт (даже не смотря на наличие готовых библиотек (например v-usb и libusb используемых в данном случае как самые простые для начинающих) для написания программ) но использование USB в данном случае всё же предпочтительнее, в первую очередь это связано с распространённостью USB. Информации из предыдущих статей (включение светодиода через usbusb светофор) достаточно для реализации управления шаговыми двигателями через USB, рассмотрим схему:
Рисунок 1 - Управление шаговыми двигателями через USB порт

Последовательно с диодами VD1, VD2 очень желательно поставить предохранитель (например на 500мА) для защиты порта от короткого замыкания.
Шаговые двигатели управляются микроконтроллером через драйверы L293DD. Эти драйверы можно использовать только для маломощных шаговых двигателей каждая обмотка которых потребляет ток не более 600 мА. Для более мощных шаговых двигателей можно применить более мощные драйверы или самодельный драйвер на транзисторах. При управлении маломощными шаговыми двигателями также можно использовать простой способ управления:
Рисунок 2 - Простой способ управления шаговым двигателем

Можно получить большее количество шагов если использовать другой способРанее также упоминалось о том что программу управляющую драйвером лучше хранить в микроконтроллере а на компьютере лучше хранить программу задающую направление и скорость вращения ротора двигателя из за того что на компьютере труднее реализовать точные таймеры для управления двигателем, однако при использовании библиотеки v-usb возникают некоторые трудности с использованием прерываний (они должны иметь более низкий приоритет по сравнению с прерываниями участвующими в связи микроконтроллера с usb) но эти трудности, при желании, легко решаются. Если высокая скорость работы шаговых двигателей не требуется то можно реализовать основную логику работы двигателя (см. рисунок 2) на компьютере к тому же если микроконтроллеру оставить простую задачу вывода на порты принятой информации можно уменьшить объём памяти занимаемой программой в микроконтроллере (для ATmega8 это не критично т.к. реализация связи (при использовании v-usb) занимает не более 2 кб а в ATmega8 всего доступно 8кб) и сократить количество перезаписей программы в микроконтроллер т.к. основная логика всё же в компьютере то экспериментировать со способами управления проще. Программу для микроконтроллера также как и в предыдущий раз будем писать переделывая готовый пример поставляемый вместе с v-usb рассмотрим код:

Для вывода используются: весь порт C, весь порт B, биты 7,6,5 порта D. На всякий случай для ввода (для отправки информации на ПК) используется бит 3 порта D. Биты 0 и 1 порта D не трогаются т.к. они (судя по строкам DBG2(0x02, 0, 0); DBG1(0x01, 0, 0); DBG1(0x50, &rq->bRequest, 1);) используются для связи по UART для отладки. Итого получается можно управлять 3мя шаговыми двигателями, ещё останется 3 бита для управления чем нибудь ещё и один бит на всякий случай для обратной связи. Для управления всем достаточно 2 байт, первый бит первого байта соответствует выводу 28, второй бит первого байта выводу 27, далее аналогично до вывода 23 потом начиная с 19 до 12. Компилируется как обычно (см. пред. статьи) командой make. Пример команды для прошивки hex файла (расположенного в корне диска C) в микроконтроллер через LPT:
avrdude -c stk200 -P lpt1 -p m8 -U lfuse:w:0x9f:m -U hfuse:w:0xc9:m -U flash:w:main.hex
Ещё раз напомню что при прошивке важно правильно установить фюзы, это и является одной из причин реже перепрограммировать микроконтроллер для чего и вынесена основная логика на ПК.
 Код для ПК длинный поэтому приводится не будет но его можно скачать здесь. Напомню что для работы программы использующей libusb необходимо чтобы на компьютере (или другом устройстве) который связывается через USB с микроконтроллером был установлен драйвер фильтра.


  КАРТА БЛОГА (содержание)

Подходящие микроконтроллеры ATmega8a-pu (можно заказать по ссылке).

11 комментариев:

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

    ОтветитьУдалить
    Ответы
    1. В программе первые 4 столбца для управления одним двигателем, вторые 4 для управления другим. Первые 4 можно заполнить значениями как на рисунке 2, вторые оставить пустыми тогда первый двигатель будет работать а второй не будет, можно сделать наоборот. Можно удлинить импульсы в 2 раза устанавливая 2 чекбокса в (одном столбце) подряд для более медленного вращения. Можно в первых 4 выставить как на рис.2 а во вторых наоборот тогда первый будет вращаться в одну сторону а второй в другую. Для этой программы вариантов много но она не удобная т.к. писалась просто для того чтобы проверить работоспособность схемы. Эту программу можно разобрать и на её основе написать другую для какой либо конкретной цели. В первых 4 битах информация для управления первым двигателем, во вторых для управления вторым двигателем. Платы в электронном виде нет т.к. она представляет собой просто расширитель для ATmega8 а остальные элементы (кроме драйверов) напаяны на этот расширитель, так сделано просто для проверки работоспособности схемы и выяснения возможностей такого способа управления через USB. Можно сделать плату под определённые нужды.

      Удалить
    2. set-led.c как его запустить? через визуал подскажи

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

    ОтветитьУдалить
    Ответы
    1. Два диода нужны для снижения напряжения питания микроконтроллера, если они греются то это очень плохо, это означает что через них идёт большой ток, возможно перегорел микроконтроллер или схема собрана не правильно. Для usb порта это тоже плохо (в нём нет защиты от к.з.) его можно перегрузить поэтому перед первым подключением надо проверять сопротивление устройства мультиметром и/или ставить предохранитель последовательно (я его на схеме не изобразил прошу прощения). Очень важно делать всё аккуратно, внимательно и не торопиться тогда всё заработает! Аккуратность в этом деле возможно даже важнее знаний. Питание для драйверов и микроконтроллера д.б. отдельными. Прежде чем управлять шаговыми двигателями лучше разобраться на более простых примерах например:включение светодиода через usb там написано более подробно. Там есть ссылки на сайт посвещённый взаимодействию USB и микроконтроллера. Есть ещё очень хороший и полезный сайт с которого я начинал изучать микроконтроллеры: myrobot.ru в разделе "шаг за шагом" объяснено очень понятно!

      Удалить
  3. Смысл изобретать велосипед, когда есть grbl с исходниками. Там куча настроек под свои нужды (например, вместо фрезы можно поставить лазер с ШИМ или без последнего). Единственно, желательно знать английский, т.к. все настройки на нем описаны. Очень удобно. Arduino недорогая, драйвера, которые я применял, A4988 тоже недорогие. Могу скинуть примерную схему в сборе с ШИМ управлением фрезой или лазером, и опторазвязкой от порта USB, т.к. помехи сильно влияют на работу драйверов.

    ОтветитьУдалить
    Ответы
    1. Я понимаю что "изобретать велосипед" каждый раз трудно и есть такая замечательная и простая вещь как ардуино и даже обзавёлся контроллером RAMPS и успешно использовал (см. видео на странице youtu.be/ivmNb4nrBYk) но всё таки иногда возникают случаи когда некоторым людям просто не обойтись именно без такого решения.

      Удалить
    2. как set-led.c запустить с компа? через Визуал?

      Удалить
    3. set-led.c -можно открыть через любой редактор и изменить. Для компиляции я использовал make файл который прилагался к примеру со светодиодом поэтому никакими специальными IDE не пользовался, что такое "визуал" я даже не знаю. О том как скомпилировать проект смотрите статью "включение светодиода через usb" по ссылке вверху данной статьи.

      Удалить
  4. Добрый день, коллеги!
    Подскажите, пожалуйста, как останавливать по концевику шаговый двигатель с помощью velleman K8096

    ОтветитьУдалить
    Ответы
    1. Здравствуйте! Я такой платой не пользовался поэтому не знаю. Можете попробовать спросить кого нибудь из группы vk.com/club61951699 или посмотреть в документации www.velleman.eu/downloads/0/illustrated/illustrated_assembly_manual_k8096.pdf

      Удалить