Управление шаговым мотором stm32

Видео:Шаговый двигатель. Управление ШИМ. Stm32 CubeIDE.Скачать

Шаговый двигатель. Управление ШИМ. Stm32 CubeIDE.

STM32 управления шаговым двигателем ускорения и замедления

Видео:Управление шаговым двигателем. Драйвер A4988, подключение и настройкаСкачать

Управление шаговым двигателем. Драйвер A4988, подключение и настройка

1. Функции для реализации

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

Ускорение-равномерная скорость-замедление-остановка-реверс-ускорение-равномерная скорость-остановка

Видео:Шаговый двигатель. Простейшая программа. Stm32 CubeIDE.Скачать

Шаговый двигатель. Простейшая программа. Stm32 CubeIDE.

2. Аппаратная часть

На этот раз двигатель представляет собой двухфазный четырехпроводный шаговый двигатель, двухфазный: двигатель имеет две катушки (обмотки), четырехпроводные: двигатель имеет четыре провода, обычно A + A- B + B-. Некоторые двигатели не отмечают полярность провода. Фактически, это может быть измерено мультиметром. Короткое замыкание — та же самая обмотка, или двигатель вращается очень сильно после короткого замыкания, что означает ту же самую обмотку.

Движение двигателя требует большего тока, который зависит от самого двигателя и нагрузки, поэтому обычно требуется приводить чип в движение. А микросхема драйвера может реализовывать множество дополнительных функций, включая подразделение, режим сна, защиту и т. Д. На этот раз используется модуль драйвера DRV8825. Схема внедрения модуля показана на рисунке:

1. ENABLE /: включить вывод, высокий уровень перестает работать, низкий уровень работает нормально;

2. M0-M2: представляет подразделение, максимум может достигать 32 подразделения, эта часть может ссылаться на таблицу данных;

3. RESET /, SLEEP /: низкий уровень будет спать и сбрасываться, поэтому, когда двигатель работает нормально, два контакта подключены к высокому уровню;

4. ШАГ: Самый важный вывод, через MCU, чтобы подать на этот вывод сигнал ШИМ для управления движением двигателя;

5. DIR: 0 и 1 контролируют направление двигателя;

6. VMOT: контакт питания, обычно используется 12-20В;

7. B2-A1: подключите четыре провода двигателя;

8. НЕИСПРАВНОСТЬ /: подключение к работе высокого уровня;

Фотоэлектрический ограничитель принимает отражающий тип, модель sy1200, а расстояние срабатывания составляет 1-4 мм. Когда нет препятствий, выходной сигнал низкий, когда есть препятствие, это означает, что свет отражается назад, а выходной сигнал высокий, во время теста наиболее Для лучшего эффекта лучше использовать отражение в белой плоскости.

Видео:На что способен NEMA 17. Тест работы шаговых двигателейСкачать

На что способен NEMA 17. Тест работы шаговых двигателей

3. Программная часть

ШИМ генерируется таймером, а частота в основном определяется значением перезагрузки arr и значением предварительного масштабирования psc. Конечная выходная частота ШИМ составляет 72000k / (обр. * Шт.).

Ускорение и замедление
Поскольку требуются ускорение и замедление, это означает, что частота ШИМ изменяется, поэтому необходимо изменить значение arr. Обращайтесь к некоторым методам ускорения и замедления в Интернете: в основном это ускорение и замедление T-типа, а также ускорение и замедление S-типа. Методы реализации включают в себя метод формулы или метод поиска в таблице. Так как метод формул более сложен, метод поиска таблиц принимается напрямую. Поэтому в соответствии с требуемой частотой рассчитайте значение arr на разных частотах и ​​запишите его в массив для изменения частоты. Однако при этом методе частотные изменения являются линейными или S-образными изменениями в зависимости от времени. Является ли этот метод правильным? Или изменить в зависимости от количества шагов?

Ускорение и замедление типа S:
Управление шаговым мотором stm32
Т-образное ускорение означает равномерное ускорение, фиксированное ускорение. Ускорение S-типа необходимо рассчитывать по формуле, как описано ниже:
Управление шаговым мотором stm32
где Fcurrent представляет частоту определенной точки: Fmin представляет минимальную частоту; Fmax представляет максимальную частоту; Flexible — это коэффициент интервала S-кривой, чем больше значение, тем больше мощность сжатия, а средняя (координата x равна точке 0 Окружение) чем больше ускорение, тем меньше, тем ближе к равномерному ускорению. Значение идеальной кривой S составляет 4-6; num: частота точки / 2;
Например, если вы хотите ускориться с 1 кГц до 40 кГц, после 40 точек в середине, Fmin = 1 кГц, Fmax = 40 кГц, num = 40/2 = 20 и, наконец, рассчитать каждое значение частоты с помощью Excel, Можно обнаружить, что ускорение в конце очень медленное, а ускорение в середине относительно большое. Проблема в том, что начальная скорость не равна 1 кГц, это зависит от значения коэффициента, когда оно равно 6, чем ниже начальная скорость.

Читайте также: Генерал мотор в новосибирске

Реализовано в программном обеспечении:
Таймер 3 используется для вывода импульсов ШИМ, а таймер 2 используется для подсчета прерываний (более точное управление можно использовать для вычисления количества импульсов, выданных таймером 2, который является шагом движения двигателя. В этом случае движение двигателя можно точно контролировать, чтобы сформировать обратную связь с обратной связью)

// Часть реализации ускорения и замедления
void TIM2_IRQHandler(void) //
Источник

Видео:Шаговые двигатели, и как ими управлять с помощью микроконтроллераСкачать

Шаговые двигатели, и как ими управлять с помощью микроконтроллера

AVR Урок 18. Подключаем шаговый двигатель. Часть 3

Видео:STM32: PWM шаг за шагом на STM32CubeIDEСкачать

STM32: PWM шаг за шагом на STM32CubeIDE

Подключаем шаговый двигатель

Продолжаем работать с шаговым двигателем.

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

Продолжим писать остальные функции в файле stepmotor.c.

Так как мы будем использовать полушаговый режим, в котором основных положений у ротора нашего шагового мотора будет 8, то и создадим мы целых 8 функций, то есть для каждого положения функция будет своя. Можно, конечно, обойтись и одной функцие, но мы попробуем именно 8 ради научного эксперемента.

void SM_set1 ( void )

SM_port |= 1 IN1 ;

Данная функция включает 1-ю ножку порта, тем самым подаёт напряжение на 1 катушку мотора, остальные лапки мы здесь отключаем.

void SM_set2 ( void )

SM_port |= 1 IN1 ;

SM_port |= 1 IN4 ;

Судя по алгоритму тела данной функции, при её вызове ротор мотора устремится в положение между первой и второй катушкой.

Я думаю, теперь мы, понимая принцип управления шаговым двигателем, без труда напишем и остальные функции для остальных 6 положений ротора

void SM_set3 ( void )

SM_port |= 1 IN4 ;

void SM_set4 ( void )

SM_port |= 1 IN4 ;

SM_port |= 1 IN3 ;

void SM_set5 ( void )

SM_port |= 1 IN3 ;

void SM_set6 ( void )

SM_port |= 1 IN3 ;

SM_port |= 1 IN2 ;

void SM_set7 ( void )

SM_port |= 1 IN2 ;

void SM_set8 ( void )

SM_port |= 1 IN2 ;

SM_port |= 1 IN1 ;

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

void SM_set1 ( void );

void SM_set2 ( void );

void SM_set3 ( void );

void SM_set4 ( void );

void SM_set5 ( void );

void SM_set6 ( void );

void SM_set7 ( void );

void SM_set8 ( void );

Вернёмся в файл реализации функций и напишем там функцию, которая будет проворачивать наш мотор сразу на 8 положений вперёд

void SM_forvard ( void )

Ну и напишем такую же функцию для проворачивания двигателя на 8 шагов назад, или правильно сказать, полушагов

void SM_back ( void )

Я думаю, код функций понятен, он очень прост.

Также создадим для данных функций прототипы в хедере

void SM_forvard ( void );

void SM_back ( void );

В функции main() создадим переменную для счётчика

В бесконечном цикле напишем цикл и попробуем повернуть мотор на все 360 градусов.

Для этого мы делим 4096 на 8, получаем 512, вот столько мы полных циклов по 8 полушагов должны и сделать. Ну считаем мы конечно от 0 до 511

for ( i =0; i i ++)

SM_forvard ();

_delay_ms (300);

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

Читайте также: Мотор от печки газ 3302

Ну, собственно теперь повернём его на столько же шагов назад, используя вторую функцию

for ( i =0; i i ++)

_delay_ms (300);

В конце также вставим задержку.

Вот теперь соберём код, прошьём контроллер и посмотрим на поведение ротора по движению нашей прикрепленной скрепочки.

Мы видим, что мотор будет медленно вращаться на 360 градусов сначала по часовой стрелке, а затем против часовой стрелки (видим мы это конечно только в видеоверсии, поэтому я не буду здесь это показывать на рисунке, так как это показать на рисунке невозможно, видеоверсия находится ниже на данной странице).

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

Программатор и шаговый двигатель 28YBJ-48 с драйвером ULN2003 можно приобрести здесь:

Смотреть ВИДЕОУРОК (нажмите на картинку)

Видео:Как подключить шаговый двигатель к ArduinoСкачать

Как подключить шаговый двигатель к Arduino

STM32F3DISCOVERY, акселерометры, шаговые двигатели и немного магии

Добрый день, уважаемый Хабровчанин. Хочу рассказать тебе о своей работе, которой обычно занимаются студенты последних курсов технических ВУЗов (да-да, именно то нехорошее слово на букву «Д»).

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

Ближе к сути. Имеем микропроцессор, пачку датчиков, шаговый движок и необходимо, чтобы микропроцессор считывал данные с датчиков (акселерометры и гироскопы), отсылал данную информацию на ПК, принимал с компьютера команду управления движком, вращал движок.

Закупка:

Свой выбор остановил на следующих комплектующих:

• STM32F3DISCOVERY, так как имеет на борту уже установленный акселерометр и гироскоп. Да и под STM32 имеется уже много готовых примеров, что должно было облегчить задачу (отчасти облегчило).
• Цифровые акселерометры LIS331DH, 3ех осевые, высокоточные (от 2g до 8g). Вообще почти вся серия LIS* очень хороша и подходит под требования.
• Шаговый движок FL42STH25-0404A, ну тут что на любимой кафедре завалялось, то и пошло в дело.

Интересный момент, что в процессе работы искал статьи и информацию именно по STM32F3, и удивился, что ее не так много, как ожидалось (к примеру, по STM32F4 в разы больше примеров и информации). Да вы скажите, что там почти никакой разницы, и будете отчасти правы, но работа с периферией у них оказывается в некоторых местах разная. Поэтому я и решил внести свои 5 копеек по работе с этим микропроцессором.

Потихонечку разбираемся:

Управление шаговым мотором stm32

Достаем STM32F3DISCOVERY из коробочки, подключаем к ПК и запускаем. Демопрограмма показывает, что при отклонениях лампочки мигают, то есть датчики работают. Кричим «Ура!» и лезем в код разбираться и собственно реализовывать необходимое.

А необходимого много, но сначала решил остановиться на том, чтобы достучаться до внешних датчиков (не бортовых). Распаяли акселя, подключаем. У акселей есть 2 интерфейса для подключения: SPI и I2C. Решил остановиться на SPI, т.к. с ним уже приходилось иметь дело на ATTINY2313 (реализовывал его программно) и думал, что уж с аппаратным SPI вообще проблем не должно быть.

Хотел как проще, оказалось как всегда

Подключение: MISO – MISO, MOSI – MOSI, SCK – SCK, CS можно вешать на любую ногу, так как будем дергать его программно.
Сначала нам надо проинициализировать SPI. В данном примере работа идет с SPI2, так как через первый SPI работает встроенный гироскоп (или аксель, точно не помню):

Пытаемся прочитать данные с регистра WHO_AM_I:
getValue = getRegisterValue(&AXELx, 0x0F);
где

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

Читайте также: Какое сопротивление у катушки зажигания лодочного мотора

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

С датчиками закончили, ура! Теперь давайте перейдем к управлению шаговыми двигателями.

Тише едешь – дальше будешь

Для управления ШД использовался драйвер VNH3SP30. Правда он позволяет управлять только одной из двух обмоток шагового двигателя, поэтому нам понадобится 2 таких платки.

Таким образом, для управления одной обмоткой нам понадобится 3 выхода с микроконтроллера (один несущей частоты и 2 направления), на весь двигатель – 6.

Дефайним порты для удобства:

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

Маска управляющих сигналов следующая:

А теперь делаем шаг в нужном направлении. Направление в данном случае определяется направлением обхода по маске управляющих сигналов:

Определим еще для удобства шаг против часовой и шаг по часовой стрелке:

А теперь напишем функцию, с помощью которой будем вращать двигатель на нужное количество шагов в нужном направлении:

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

Власти в наших руках становится все больше и больше и мы переходим к следующему этапу – отправка данных на ПК и управление ШД с ПК.

Общение по USB

Для работы с USB использовал один из примеров работы с USB, а именно VirtualComport_Loopback (искать на просторах интернета в комплекте STM32 USB-FS-Device development kit). В данном демо подключённый stm32 к ПК определялся как виртуальный ком-порт, и отправлял в обратную все получаемые данные. Ну что же, это нам отлично подходит! Берем данный пример, разрываем петлю обмена и вуаля – пользуемся.

Единственная проблема, которая возникла – приложение на .Net не хотело подключаться к виртуальному ком-порту, если микропроцессор постоянно опрашивал датчик и слал данные на ПК (интересно, что сторонняя программа Hercules, которой я пользовался для отладки отлично открывала порт). Поэтому я решил добавить ожидание нажатия User Button, после которого уже начинался постоянный опрос датчиков и обмен информацией с ПК.

Собственно получился примерно следующий код:
Инициализация USB:

Ждем пока не нажмем User Button:

Обработчик на нажатие UserButton:

Заключение

Управление шаговым мотором stm32

В данной статье я опустил многие моменты по распиновке и подключению устройств друг к другу, схемы плат и некоторые другие детали (работа с АЦП) и постарался сделать акцент на работу с периферией. К сожалению, собранный рабочий макет был сдан в ВУЗ (будем надеяться, что последующие поколения заинтересуются данной работой и продолжат ее), в результате чего я не могу продемонстрировать его работу, но у меня сохранилось несколько фото. Вот к примеру фото, когда мы проводили эксперимент по определению амплитуды ускорения при перемещении физической модели транспортного средства по синусоидальной поверхности с разной жесткостью пневмоподвески.

Также приложу проект для IAR под STM32F3. Там присутствует много «дурного» кода, так как писалось в большей части по принципу «лишь бы заработало, да поскорее». За любые комментарии по коду, и не только, буду благодарен.

Управление шаговым мотором stm32

Хочется выразить благодарность ВУЗу, который научил меня многому за эти долгие 6 лет и своему дипломному руководителю, который был в меру отзывчив и всегда помогал мне с «научной» деятельностью.

  • Свежие записи
    • Чем отличается двухтактный мотор от четырехтактного
    • Сколько масла заливать в редуктор мотоблока
    • Какие моторы бывают у стиральных машин
    • Какие валы отсутствуют в двухвальной кпп
    • Как снять стопорную шайбу с вала


    📽️ Видео

    Использование SFC в STM32 для управления шаговым двигателемСкачать

    Использование SFC в STM32 для управления шаговым двигателем

    Простое управление оборотами шагового двигателя.Скачать

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

    Шаговый драйвер и stm32Скачать

    Шаговый драйвер и stm32

    ⚙️Управляем двигателем😁 Шаговый двигатель подключениеСкачать

    ⚙️Управляем двигателем😁 Шаговый двигатель подключение

    Подключение двигателя без электроники и Ардуино!Скачать

    Подключение двигателя без электроники и Ардуино!

    NEMA17 Управление шаговым двигателем - Stepper motor with ArduinoСкачать

    NEMA17 Управление шаговым двигателем  - Stepper motor with Arduino

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

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

    STM32 Урок №4 - Подключение шагового двигателя к плате STM32 при помощи STM32Cube IDE #STM32Скачать

    STM32 Урок №4 - Подключение шагового двигателя к плате STM32 при помощи STM32Cube IDE #STM32

    Подключение шагового двигателяСкачать

    Подключение шагового двигателя

    Как работает управление шаговым двигателемСкачать

    Как работает управление шаговым двигателем

    💯🔥 Генератор импульсов и шаговый двигатель. Неизвестная схема подключения 👍😁Скачать

    💯🔥 Генератор импульсов и шаговый двигатель.  Неизвестная схема подключения 👍😁

    Универсальный блок управления шаговым двигателем. (Рабочий вариант)Скачать

    Универсальный блок управления шаговым двигателем. (Рабочий вариант)

    STM32+step motorСкачать

    STM32+step motor
Поделиться или сохранить к себе:
Технарь знаток