Автономный контроллер шагового двигателя схема

Балансирующий робот на Arduino Nano и шаговых моторах

Предыстория

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

Постановка задачи

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

Arduino Nano (Keywish BLE-Nano) последовательный порт аппаратно проброшен через Bluetooth, что устраняет расходы процессора на коммуникацию. Можно использовать классический контроллер Arduino Nano, код совместим, но не будет управления

MPU6050 — популярный инерциальный модуль для определения угла наклона робота

A4988 x2 — драйверы шаговых моторов

Nema17 motor x2 — шаговые моторы

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

Мат. модель

Движение робота описывается следующими уравнениями:

где R — радиус колеса; I = 1/2*M*R^2 — момент инерции колеса; b1 — трение в оси колеса; b2 — трение качения.

Моделирование с разными способами управления приводится здесь. Так, например, выглядит свободная модель без трения и управления, и со стабилизацией.

Свободная модель без управления Модель со стабилизацией по положению

Алгоритм стабилизации

Для удержания равновесия нужна обратная связь по углу, а чтобы робот не уехал со стола в процессе отладки, нужно занулить скорость, поэтому схема выглядит так:

Контур скорости задает желаемый угол, а внутренний контур его достигает. В реальности координата X не измеряется, в ходе вычислений уже есть скорость V, которую, как предполагается, шаговый мотор точно выдает.

Управление скоростью

Управление скоростью автоматически получилось по схеме выше: чтобы заставить робот ехать вперед или назад, нужно задать входную скорость.

Но как быть с поворотом? Если добавить константу скорости прямо на двигатель, это не повлияет на равновесие, т.к. ускорение не изменится. Предполагается, что скорость, которую задает пользователь, изменяется гораздо медленее, чем реагирует робот на изменение угла. Тогда для поворота можно добавить скорость к одному двигателю и вычесть у другого. Стоит обратить внимание на насыщение мотора, если поворачивать очень быстро, то при попытке балансировать скорости на одном колесе сложатся, момент упадет, и двигатель начнет пропускать шаги; либо контроллер не будет успевать генерировать импульсы с достаточной частотой.

Сложности реализации

Управлять шаговым мотором просто, когда скорость не критична. В данном случае, нужно управлять ускорением, поэтому следует учесть два параллельных процесса: подача импульсов для шага и пересчет задержки между шагами.

Оценим требуемую частоту импульсов на шаг. Пусть максимальная скорость — 1 оборот в секунду (при колесе от роликов диаметром 72мм,

22 см/с), двигатель настроен в режиме 1/8 шага, 1600 импульсов на оборот, значит, как минимум процесс, отправляющий импульсы на шаг должен работать с частотой 1.6kHz, причем время должно выдерживаться точно, значит, нужно использовать прерывания по таймеру. Но достаточно ли этого?

Здесь возникает понятие — разрешение (resolution) по скорости, т.е. насколько малые приращения по скорости контроллер способен выдать. Задержка между шагами — это целое количество прерываний таймера (1.6kHz, 800Hz, 533Hz, 400Hz, . ) Программой ниже можно оценить насколько точно можно аппроксимировать желаемые изменения скорости в зависимости от частоты прерываний.

тоесть, чем ниже частота, тем хуже можно аппроксимировать скорость в области высоких скоростей, что для робота будет равносильно удару. Я использовал 50kHz. Стоит помнить, что чем выше частота прерываний таймера, тем медленнее работает основной цикл.

Читать еще:  Что такое торможение двигателем teana

Второй процесс — рассчет задержки между шагами, в идеальном случае, если робот движется с ускорением, то после каждого шага нужно пересчитать задержку до следующего шага, т.е. это было бы правильно делать прямо в обработчике прерывания таймера, но формула содержит деление ticks_per_pulse = round(2.0 * pi * frequency / (velocity * PULSES_PER_REVOLUTION)) , и обработчик может не успеть закончить работу до наступления след. прерывания. Поэтому задержка пересчитывается в основном цикле как можно чаще.

Несколько советов, как ускорить программу:

Wire.setClock(1000000UL); — ускоряем коммуникацию с MPU6050

Использовать DMP (Digital Motion Processor) встроенный в MPU6050, а не реализовывать комплиментарный фильтр или фильтр Калмана, это дало ускорение обработки основного цикла в 5 раз (2.5kHz)

Использовать пин прерывания на IMU и читать данные только тогда, когда закончена обработка, чтобы не опрашивать его постоянно, это ускорило основной цикл еще в 8 раз до 19kHz

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

Код проекта доступен здесь.

Схема

Ниже схема, по которой я заказал печатную плату в JLPCB. Хотелось бы получить обратную связь от опытных схемотехников, особенно по части разведения питания.

Результат

Т.к. в BLE-Nano встроен Bluetooth, и не надо писать дополнительный код, легко добавить управление. Я переделал SerialTerminal под Android и сделал из него пульт управления.

План дальнейшего развития:

Сделать расширяемую платформу (другой контроллер или Raspberry будет делать всю высокоуровневую работу, а Nano будет предоставлять API по настройке и управлению)

Добавить сенсоры (препятствий, линии под роботом, микрофон, камеру)

Добавить индикаторы (заряда батареи, угла, скорости)

Присоединить телефон и установить конференц-связь

Буду рад, если кто-то захочет присоединиться.

ОБОРУДОВАНИЕ
ТЕХНОЛОГИИ
РАЗРАБОТКИ

Блог технической поддержки моих разработок

Простой контроллер шагового двигателя на PIC12F629

В статье приводятся принципиальные схемы вариантов простого, недорогого контроллера шагового двигателя и резидентное программное обеспечение (прошивка) для него.

Общее описание.

Контроллер шагового двигателя разработан на PIC контроллере PIC12F629. Это 8 выводной микроконтроллер стоимостью всего 0,5 $. Несмотря на простую схему и низкую стоимость комплектующих, контроллер обеспечивает довольно высокие характеристики и широкие функциональные возможности.

  • Контроллер имеет варианты схем для управления как униполярным, так и биполярным шаговым двигателем.
  • Обеспечивает регулировку скорости вращения двигателя в широких пределах.
  • Имеет два режима управления шаговым двигателем:
    • полношаговый;
    • полушаговый.
  • Обеспечивает вращение в прямом и реверсивном направлениях.
  • Задание режимов, параметров, управление контроллером осуществляется двумя кнопками и сигналом ВКЛ (включение).
  • При выключении питания все режимы и параметры сохраняются в энергонезависимой памяти контроллера и не требуют переустановки при включении.

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

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

Схема контроллера униполярного шагового двигателя с драйвером на биполярных транзисторах.

Объяснять в схеме особенно нечего. К PIC контроллеру подключены:

  • кнопки «+» и «–» (через аналоговый вход компаратора);
  • сигнал ВКЛ (включение двигателя);
  • драйвер ( транзисторы VT1-Vt4 , защитные диоды VD2-VD9).

PIC использует внутренний генератор тактирования. Режимы и параметры хранятся во внутреннем EEPROM.

Схема драйвера на биполярных транзисторах КТ972 обеспечивает ток коммутации до 2 А, напряжение обмоток до 24 В.

Я спаял контроллер на макетной плате размерами 45 x 20 мм.

Если ток коммутации не превышает 0,5 А, можно использовать транзисторы серии BC817 в корпусах SOT-23. Устройство получится совсем миниатюрным.

Программное обеспечение и управление контроллером.

Резидентное программное обеспечение написано на ассемблере с циклической переустановкой всех регистров. Программа зависнуть в принципе не может. Загрузить программное обеспечение (прошивку) для PIC12F629 можно здесь.

Управление контроллером достаточно простое.

  • При активном сигнале «ВКЛ» (замкнут на землю) двигатель крутится, при неактивном (оторван от земли) – остановлен.
  • При работающем двигателе ( сигнал ВКЛ активен) кнопки «+» и «–» меняют скорость вращения.
    • Каждое нажатие на кнопку «+» увеличивает скорость на минимальную дискретность.
    • Нажатие кнопки «–» — уменьшает скорость.
    • При удержании кнопок «+» или «–» скорость вращения плавно увеличивается или уменьшается, на 15 значений дискретности в сек.
  • При остановленном двигателе ( сигнал ВКЛ не активен).
    • Нажатие кнопки «+» задает режим вращения в прямом направлении.
    • Нажатие кнопки «–» переводит контроллер в режим реверсивного вращения.
  • Для выбора режима – полношаговый или полушаговый необходимо при подаче питания на контроллер удерживать кнопку «–» в нажатом состоянии. Режим управления двигателем будет изменен на другой (проинвертирован). Достаточно выдержать кнопку – нажатой в течение 0,5 сек.
Читать еще:  Что это за двигатель 602980

Схема контроллера униполярного шагового двигателя с драйвером на MOSFET транзисторах.

Низкопороговые MOSFET транзисторы позволяют создать драйвер с более высоким параметрами. Применение в драйвере MOSFET транзисторов, например, IRF7341 дает следующие преимущества.

  • Сопротивление транзисторов в открытом состоянии не более 0,05 Ом. Значит малое падение напряжения (0,1 В при токе 2 А), транзисторы не греются, не требуют радиаторов охлаждения.
  • Ток транзисторов до 4 А.
  • Напряжение до 55 В.
  • В одном 8 выводном корпусе SOIC-8 размещены 2 транзистора. Т.е. на реализацию драйвера потребуется 2 миниатюрных корпуса.

Таких параметров невозможно достичь на биполярных транзисторах. При токе коммутации свыше 1 А настоятельно рекомендую вариант утройства на MOSFET транзисторах.

Подключение к контроллеру униполярных шаговых двигателей.

В униполярном режиме могут работать двигатели с конфигурациями обмоток 5, 6 и 8 проводов.

Схема подключения униполярного шагового двигателя с 5 и 6 проводами (выводами).

Для двигателей FL20STH, FL28STH, FL35ST, FL39ST, FL42STH, FL57ST, FL57STH с конфигурацией обмоток 6 проводов выводы промаркированы следующим цветами.

Обозначение вывода на схеме Цвет провода
A черный
желтый
C зеленый
B красный
0* белый
D синий

Конфигурация с 5 проводами это вариант, в котором общие провода обмоток соединены внутри двигателя. Такие двигатели бывают. Например, PM35S-048.

Документацию по шаговому двигателю PM35S-048 в PDF формате можно загрузить здесь.

Схема подключения униполярного шагового двигателя с 8 проводами (выводами).

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

Как выбирать напряжение для шагового двигателя.

По закону Ома через сопротивление обмотки и допустимый ток фазы.

U = Iфазы * Rобмотки

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

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

Как определить обмотки шаговых двигателей, если нет справочных данных.

В униполярных двигателях с 5 и 6 выводами, средний вывод можно определить, измерив, сопротивление обмоток. Между фазами сопротивление будет в два раза больше, чем между средним выводом и фазой. Средние выводы подключаются к плюсу источника питания.

Дальше любой из фазных выводов можно назначить фазой A. Останется 8 вариантов коммутаций выводов. Можно их перебрать. Если учесть, что обмотка фазы B имеет другой средний провод, то вариантов становится еще меньше. Попутка обмоток фаз не ведет к выходу из строя драйвера или двигателя. Двигатель дребезжит и не крутится.

Только надо помнить, что к такому же эффекту приводит слишком высокая скорость вращения (выход из синхронизации). Т.е. надо скорость вращения установить заведомо низкую.

Схема контроллера биполярного шагового двигателя с интегральным драйвером L298N.

Биполярный режим дает два преимущества:

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

Создавать схему биполярного драйвера на дискретных элементах – дело неблагодарное. Проще использовать интегральный драйвер L298N. Описание на русском языке есть здесь.

Схема контроллера с биполярным драйвером L298N выглядит так.

Драйвер L298N включен по стандартной схеме. Такой вариант контроллера обеспечивает фазные токи до 2 А, напряжение до 30 В.

Подключение к контроллеру биполярных шаговых двигателей.

В этом режиме может быть подключен двигатель с любой конфигурацией обмоток 4, 6, 8 проводов.

Схема подключения биполярного шагового двигателя с 4 проводами (выводами).

Для двигателей FL20STH, FL28STH, FL35ST, FL39ST, FL42STH, FL57ST, FL57STH с конфигурацией обмоток 4 провода выводы промаркированы следующим цветами.

Читать еще:  Чем отмыть внутренности двигателя
Обозначение вывода на схеме Цвет провода
A черный
C зеленый
B красный
D синий

Схема подключения биполярного шагового двигателя с 6 проводами (выводами).

Для двигателей FL20STH, FL28STH, FL35ST, FL39ST, FL42STH, FL57ST, FL57STH с такой конфигурацией обмоток выводы промаркированы следующим цветами.

Обозначение вывода на схеме Цвет провода
A черный
C зеленый
B красный
D синий

Такая схема требует напряжения питания в два раза большего по сравнению с униполярным включением, т.к. сопротивление обмоток в два раза больше. Скорее всего, контроллер надо подключать к питанию 24 В.

Схема подключения биполярного шагового двигателя с 8 проводами (выводами).

Может быть два варианта:

  • с последовательным включением
  • с параллельным включением.

Схема последовательного включения обмоток.

Схема с последовательным включением обмоток требует в два раза большего напряжения обмоток. Зато не увеличивается ток фазы.

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

Схема с параллельным включением обмоток увеличивает в 2 раза фазные токи. К достоинствам этой схемы можно отнести, низкую индуктивность фазных обмоток. Это важно на больших скоростях вращения.

Т.е. выбор между последовательным и параллельным включением биполярного шагового двигателя с 8 выводами определяется критериями:

  • максимальный ток драйвера;
  • максимальное напряжение драйвера;
  • скорость вращения двигателя.

Программное обеспечение (прошивка) для PIC12F629 можно загрузить здесь.

Промышленные шаговые двигатели

dsPICDEM MCSM Development Board

The Microchip dsPICDEM™ MCSM Development Board is targeted to control both unipolar and bipolar stepper motors in open-loop or closed-loop (current control) mode. The hardware is designed in such a way that no hardware changes are necessary for 8-, 6- or 4-wire stepper motors in either bipolar or unipolar configurations. Software to run motors in open-loop or closed-loop with full or variable micro-stepping is provided. A GUI for controlling step commands, motor parameter input, and operation modes is included. This flexible and cost-effective board can be configured in different ways for use with Microchip’s specialized dsPIC33F Motor Control Digital Signal Controllers (DSCs). The dsPICDEM MCSM Development Board offers a mounting option to connect either a 28-pin SOIC device or a generic 100-pin Plug-In Module (PIM). A dsPIC33FJ32MC204 DSC PIM (MA330017) is included.

The dsPICDEM MCSM Development Board supports terminal voltages up to 80V and currents up to 3A. The dsPIC33F device uses the MOSFET driver to drive the two full-bridge inverters that power the motor windings. The board includes various circuitries to perform the following functions:

  • Drive two motor windings with the two on-board full-bridge inverters
  • Measure feedback and other analog signals (i.e., current, DC voltage, Potentiometer and Fault signals)
  • Communicate with a host computer or an external device via USB

The dsPIC DSC devices feature an 8-channel, high-speed PWM with Complementary mode output, a programmable ADC trigger on the PWM reload cycle, digital dead time control, internal shoot-through protection and hardware fault shutdown. These features make the dsPIC DSC an ideal solution for high-performance stepper motor control applications where control of the full-bridge inverter is required.

The MCSM Development Board is available in two configurations:

  • dsPICDEM MCSM Development Board : DM330022
  • dsPICDEM MCSM Development Board Kit : DV330021

    Motor control interfaces:
  • Two full-bridge inverters
  • Two phase current sense resistors
  • DC bus voltage sense resistor
  • Over-current protection

Built-in power supplies:

  • 15V power supply, maximum power available 11 W
  • 3.3V power supply, maximum power available 2 W

    Power supply connectors:

  • 24V power input connector (J6) for the controller and power stage
  • Auxiliary Power Tab Fast-On connectors (BP1 and BP2) for the power stage
    Motor control device (U2) socket:
  • The dsPIC33FJ12MC202 Motor Control device in SOIC package (U3) footprint

    User Interfaces:

  • One push button (S1)
  • Reset push button (RESET)
  • 10K Ohm Potentiometer (POT)
  • LED indicators for PWM outputs arranged in a full-bridge format
  • LED indicator for over current

    Communication Ports:
    UART communication via USB (J4)

    Programming Connectors:

  • ICSP™ connector for programming a dsPIC DSC device (J2)
  • RJ11 connector for programming a dsPIC DSC device (J1)
  • ICSP connector for programming the PIC18LF2450 USB-to-UART Bridge (J3)
  • Ссылка на основную публикацию
    Adblock
    detector