- 1. Функции для реализации
- 2. Аппаратная часть
- 3. Программная часть
- AVR Урок 18. Подключаем шаговый двигатель. Часть 3
- Подключаем шаговый двигатель
- STM32F3DISCOVERY, акселерометры, шаговые двигатели и немного магии
- Закупка:
- Потихонечку разбираемся:
- Хотел как проще, оказалось как всегда
- Тише едешь – дальше будешь
- Общение по USB
- Заключение
- 🔥 Видео
Видео:Шаговый двигатель. Простейшая программа. Stm32 CubeIDE.Скачать
1. Функции для реализации
Он в основном управляет движением ползунка. Его нужно ускорять, когда он начинает двигаться. Когда он стабилен на максимальной скорости, он движется с постоянной скоростью. Когда обнаруживается сигнал нижнего предела, он начинает замедляться до тех пор, пока не остановится, а затем ускоряется в обратном направлении, с постоянной скоростью, когда обнаруживается верхний предел. Хватит тренироваться.
Ускорение-равномерная скорость-замедление-остановка-реверс-ускорение-равномерная скорость-остановка
Видео:Шаговый двигатель. Управление ШИМ. 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 мм. Когда нет препятствий, выходной сигнал низкий, когда есть препятствие, это означает, что свет отражается назад, а выходной сигнал высокий, во время теста наиболее Для лучшего эффекта лучше использовать отражение в белой плоскости.
Видео:Управление шаговым двигателем. Драйвер A4988, подключение и настройкаСкачать
3. Программная часть
ШИМ генерируется таймером, а частота в основном определяется значением перезагрузки arr и значением предварительного масштабирования psc. Конечная выходная частота ШИМ составляет 72000k / (обр. * Шт.).
Ускорение и замедление
Поскольку требуются ускорение и замедление, это означает, что частота ШИМ изменяется, поэтому необходимо изменить значение arr. Обращайтесь к некоторым методам ускорения и замедления в Интернете: в основном это ускорение и замедление T-типа, а также ускорение и замедление S-типа. Методы реализации включают в себя метод формулы или метод поиска в таблице. Так как метод формул более сложен, метод поиска таблиц принимается напрямую. Поэтому в соответствии с требуемой частотой рассчитайте значение arr на разных частотах и запишите его в массив для изменения частоты. Однако при этом методе частотные изменения являются линейными или S-образными изменениями в зависимости от времени. Является ли этот метод правильным? Или изменить в зависимости от количества шагов?
Ускорение и замедление типа S:
Т-образное ускорение означает равномерное ускорение, фиксированное ускорение. Ускорение S-типа необходимо рассчитывать по формуле, как описано ниже:
где 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
Видео:Как подключить шаговый двигатель к ArduinoСкачать
Подключаем шаговый двигатель
Продолжаем работать с шаговым двигателем.
В прошлой части занятия мы его подключили и уже начали писать исходный код, написав инициализацию ножек порта, отвечающих за управление нашим шаговым двигателем.
Продолжим писать остальные функции в файле 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 можно приобрести здесь:
Смотреть ВИДЕОУРОК (нажмите на картинку)
Видео:Использование SFC в STM32 для управления шаговым двигателемСкачать
STM32F3DISCOVERY, акселерометры, шаговые двигатели и немного магии
Добрый день, уважаемый Хабровчанин. Хочу рассказать тебе о своей работе, которой обычно занимаются студенты последних курсов технических ВУЗов (да-да, именно то нехорошее слово на букву «Д»).
Целью работы была разработка системы очувствления и управления мобильным роботом. За сими громкими словами стоит не очень большая, но для меня интересная задача.
Ближе к сути. Имеем микропроцессор, пачку датчиков, шаговый движок и необходимо, чтобы микропроцессор считывал данные с датчиков (акселерометры и гироскопы), отсылал данную информацию на ПК, принимал с компьютера команду управления движком, вращал движок.
Закупка:
Свой выбор остановил на следующих комплектующих:
• STM32F3DISCOVERY, так как имеет на борту уже установленный акселерометр и гироскоп. Да и под STM32 имеется уже много готовых примеров, что должно было облегчить задачу (отчасти облегчило).
• Цифровые акселерометры LIS331DH, 3ех осевые, высокоточные (от 2g до 8g). Вообще почти вся серия LIS* очень хороша и подходит под требования.
• Шаговый движок FL42STH25-0404A, ну тут что на любимой кафедре завалялось, то и пошло в дело.
Интересный момент, что в процессе работы искал статьи и информацию именно по STM32F3, и удивился, что ее не так много, как ожидалось (к примеру, по STM32F4 в разы больше примеров и информации). Да вы скажите, что там почти никакой разницы, и будете отчасти правы, но работа с периферией у них оказывается в некоторых местах разная. Поэтому я и решил внести свои 5 копеек по работе с этим микропроцессором.
Потихонечку разбираемся:
Достаем 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:
Заключение
В данной статье я опустил многие моменты по распиновке и подключению устройств друг к другу, схемы плат и некоторые другие детали (работа с АЦП) и постарался сделать акцент на работу с периферией. К сожалению, собранный рабочий макет был сдан в ВУЗ (будем надеяться, что последующие поколения заинтересуются данной работой и продолжат ее), в результате чего я не могу продемонстрировать его работу, но у меня сохранилось несколько фото. Вот к примеру фото, когда мы проводили эксперимент по определению амплитуды ускорения при перемещении физической модели транспортного средства по синусоидальной поверхности с разной жесткостью пневмоподвески.
Также приложу проект для IAR под STM32F3. Там присутствует много «дурного» кода, так как писалось в большей части по принципу «лишь бы заработало, да поскорее». За любые комментарии по коду, и не только, буду благодарен.
Хочется выразить благодарность ВУЗу, который научил меня многому за эти долгие 6 лет и своему дипломному руководителю, который был в меру отзывчив и всегда помогал мне с «научной» деятельностью.
- Свежие записи
- Чем отличается двухтактный мотор от четырехтактного
- Сколько масла заливать в редуктор мотоблока
- Какие моторы бывают у стиральных машин
- Какие валы отсутствуют в двухвальной кпп
- Как снять стопорную шайбу с вала
🔥 Видео
STM32: PWM шаг за шагом на STM32CubeIDEСкачать
На что способен NEMA 17. Тест работы шаговых двигателейСкачать
NEMA17 Управление шаговым двигателем - Stepper motor with ArduinoСкачать
Простое управление оборотами шагового двигателя.Скачать
Подключение двигателя без электроники и Ардуино!Скачать
⚙️Управляем двигателем😁 Шаговый двигатель подключениеСкачать
Шаговый драйвер и stm32Скачать
STM32 Урок №4 - Подключение шагового двигателя к плате STM32 при помощи STM32Cube IDE #STM32Скачать
💯🔥 Генератор импульсов и шаговый двигатель. Неизвестная схема подключения 👍😁Скачать
Обзор копеечной платы управления шаговым двигателем.Скачать
Как работает управление шаговым двигателемСкачать
Подключение шагового двигателяСкачать
STM32+step motorСкачать
Универсальный блок управления шаговым двигателем. (Рабочий вариант)Скачать