Перейти к содержанию

Управление Шаговым Двигателем С Помощью Stm32


Рекомендуемые сообщения

Добрый день для самообучения решил крутить двигатель 28byj48, с помощью STM32 через L293D.

Схема двигателя http://robocraft.ru/...t/28BYJ-48.pdf.

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

Вывод двигателя 1 подключен к output 1.

Вывод двигателя 3 подключен к output 2.

Вывод двигателя 4 подключен к output 3.

Вывод двигателя 2 подключен к output 4.

Подключение STM32 к L293D:

PC1 подключен к input 1.

PC3 подключен к input 2.

PC5 подключен к input 3.

PC7 подключен к input 4.

Выводы Enable 1 и Enable 2,Vs,Vss драйвера подключены к 5v.Ну соответственно земля есть.

Прошиваю контроллер следующим кодом:

#include "stm32f10x.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"
void Delay(unsigned int t)
{
unsigned int i;
for (i=0;i<t;i++);
}
void GPIOD_Initialize(){
GPIO_InitTypeDef GPIOC_Stepper;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
GPIOC_Stepper.GPIO_Pin=GPIO_Pin_1|GPIO_Pin_3|GPIO_Pin_5|GPIO_Pin_7;
GPIOC_Stepper.GPIO_Mode=GPIO_Mode_Out_PP;
GPIOC_Stepper.GPIO_Speed= GPIO_Speed_50MHz;
GPIO_Init(GPIOC,&GPIOC_Stepper);
}

int main(void)
{
GPIOD_Initialize();
 while(1)
 {
 GPIO_Write(GPIOC,GPIO_Pin_1);
 Delay(100);
 GPIO_Write(GPIOC,GPIO_Pin_1| GPIO_Pin_3);
 Delay(100);
 GPIO_Write(GPIOC,GPIO_Pin_3);
 Delay(100);
 GPIO_Write(GPIOC,GPIO_Pin_5|GPIO_Pin_3);
 Delay(100);
 GPIO_Write(GPIOC,GPIO_Pin_5);
 Delay(100);
 GPIO_Write(GPIOC,GPIO_Pin_5|GPIO_Pin_7);
 Delay(100);
 GPIO_Write(GPIOC,GPIO_Pin_7);
 Delay(100);
 GPIO_Write(GPIOC,GPIO_Pin_7|GPIO_Pin_1);
 Delay(100);
 }
}

В итоге моторчик при подаче тока начинает пищать но не крутится. Уважаемый форумчане подскажите что я делаю не так? Спасибо.

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

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

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

В характеристиках вашего двигателя указана максимальная частота под нагрузкой

Idle In-traction Frequency > 600Hz

без нагрузки

Idle Out-traction Frequency > 1000Hz

А вы судя по вашей программе задаете 100 мкс на шаг, т.е.10 кгц Естественно двигатель крутиться не будет. Кроме того у шагового двигателя существует такой параметр. как частота приемистости, т.е. максимальная частота, при которой двигатель будет крутиться с места. Она обычно намного ниже максимальной рабочей частоты.

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Добрый день для самообучения решил крутить двигатель 28byj48, с помощью STM32 через L293D.

Схема двигателя http://robocraft.ru/...t/28BYJ-48.pdf.

while(1)

{

GPIO_Write(GPIOC,GPIO_Pin_1);

Delay(100);

GPIO_Write(GPIOC,GPIO_Pin_1| GPIO_Pin_3);

Delay(100);

GPIO_Write(GPIOC,GPIO_Pin_3);

Delay(100);

GPIO_Write(GPIOC,GPIO_Pin_5|GPIO_Pin_3);

Delay(100);

GPIO_Write(GPIOC,GPIO_Pin_5);

Delay(100);

GPIO_Write(GPIOC,GPIO_Pin_5|GPIO_Pin_7);

Delay(100);

GPIO_Write(GPIOC,GPIO_Pin_7);

Delay(100);

GPIO_Write(GPIOC,GPIO_Pin_7|GPIO_Pin_1);

Delay(100);

}

}

[/code]

В итоге моторчик при подаче тока начинает пищать но не крутится. Уважаемый форумчане подскажите что я делаю не так? Спасибо.

Приветствую. как ты подключил ШД? :umnik2: у него же 5 проводов. обмотки между собою (красный) нужно разделить. :yes: или разбирай ШД или ищи улн2003 вместо л293.

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

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

судя по вашей программе задаете 100 мкс на шаг, т.е.10 кгц

интересно как вы выщитали 10кГц, не зная не чего о производительности камня :yes:

Изменено пользователем demo1420

Будем двигать прогресс сами. Мои нынишнее дела http://forum.cxem.ne...78#entry1564268

Ссылка на комментарий
Поделиться на другие сайты

Уже верно подсказали - скорость надо уменьшать.

Так же не понял в чем будет существенная разница от замены специализированной 293 на тупую 2003?

Изменено пользователем mail_robot

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

Ссылка на комментарий
Поделиться на другие сайты

интересно как вы выщитали 10кГц, не зная не чего о производительности камня :yes:

При чем тут производительность? Сколько будет тактовая частота 1МГц или 10МГц Delay фиолетово. Если в настройках компиллятора тактовая частота указана правильно, то Delay будет давать ровно такую задержку, какую ему задали.

Delay(100);
GPIO_Write(GPIOC,GPIO_Pin_3);
Delay(100);

Если у интервал между шагами 100 мкс, то сколько по вашему будет частота?

Изменено пользователем Sergey-Ufa
Ссылка на комментарий
Поделиться на другие сайты

Не Сергей. В данном случае не фиолетово. Определение в начале текста и будет зависеть не только от тактовой частоты, но и от степени оптимизации компилятора. А частота в данном случае легко может быть и 48 и 72 и даже больше мегагерц

Изменено пользователем mail_robot

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

Ссылка на комментарий
Поделиться на другие сайты

Уже верно подсказали - скорость надо уменьшать.

Так же не понял в чем будет существенная разница от замены специализированной 293 на тупую 2003?

Схема подключения двигателя в случае с 293, это два Н моста.. следовательно две обмотки двигателя должны быть биполярны и развязаны друг от друга (нужно 4 провода, 2 одной обмотки и 2 другой). На каждую обмотку поочереди подается то в одну сторону то в противоположную ток.

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

Преимущество биполярного (л293, 297) двигателя что работает целая обмотка а не лишь её половинка, следовательно и момент можна дать выше. Но схемотехника сильно усложняется.

ПС. Игрался с 297, тупая она однако. греется что дурная, там биполяры на выходе с высоким сопротивлением канала.

Изменено пользователем demo1420

Будем двигать прогресс сами. Мои нынишнее дела http://forum.cxem.ne...78#entry1564268

Ссылка на комментарий
Поделиться на другие сайты

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

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

Ссылка на комментарий
Поделиться на другие сайты

Тут же скоммутировано с общей точкой (красный провод)

Вот разжевано ;)

На форумах принято общаться на "ты", что не является оскорбительным и подразумевает равноправие

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
  • Сообщения

    • Ну так а в чем проблема сравнить те символы которые определяют команду/ответ. Приведите пример команды и ответа, а я вам покажу как сравнивать.
    • Для домашних измерений можно ограничиться определением уровня свечения лампочки  "на глаз" - всё равно это будет точнее амперметров на снимке вверху .  Метод фотоамперметра применяется в метрологических лабораториях  для сложных и ВЧ сигналов . 
    • @korsajЧего то я не совсем понимаю как данную функцию вызывать проверять с конкретными данными. Тем более что у меня в большей части данные которые я буду получать я не знаю полученную информацию там только известны первые символы и последние символы, а в середине хранятся данные которые каждый раз разные. Вот в том то и вся суть приёма данных. Чтобы можно было получить данные и вывести на индикаторы. Так что вариант сравнения строк тут наверное мало поможет. Тут как я понимаю нужно сравнивать конкретные символы и всю информацию между этими символами отдавать уже в обработку программе для вывода на индикацию. Потому как известно что сколько символов занимают данные то есть длинна принятой посылки всегда одинакова для определённого типа информации. Сейчас разбираюсь с UART в меге на передачу я уже всё сделал и оно работает, но на приём пока есть некоторые сложности.
    • И в чем проблема? управлять модулем атмегой16 смог?
    • Наверное существуют, но как реализовать данный алгоритм для самодельной конструкции ? Но постоянный и пульсирующий то же не одно и то же. В том то и проблема . КАК его мерить ?
    • Переменный и пульсирующий постоянный ток- не одно и то же.
    • Я не плавную регулировку тока. Я про увеличить ток заряда с 6 до 10 ампер, и всё. Подобрать ёмкости C14/C15 - по каким параметрам? Поменять ключи на более низкоомные - я хотел поставить например BUV48A или 2SC3320. Пойдут на замену 2SC2335 которые сейчас стоят? А вот этот самый "резистор обмоток связи R19" уже достал! На всех зарядках он набран из 8, бывает из 10 SMD резисторов под которыми выгорает текстолит. Падла греется до 150 градусов. В этом экземпляре, стыдно даже писать его название, Striver PW-150 всё по другому. Зарядка собрана этажеркой, да так криво и нелепо, что выглядит в 100 раз хуже многих самоделок. Так вот этот "резистор обмоток связи R19" тут стоит обычный на 1 или 2 Вт - кетайский, его хрен поймёшь. Я поставил керамический - цементный на 5 Вт - нагрев 75 градусов при 5 амперах. Что ж туда ставить то? 10-20 ваттные проволочные? А вот с делителем R4/R5/R6 я не согласен! Тут за пороги вкл-выкл циклов заряд - пауза отвечает другая часть микросхемы. В этом я уже убедился, регулировку порогов делаю подстроечным резистором на 2 ноге 393. В этих зарядках и схемах часто перепутаны компараторы. Ваше утверждение про 5, а точнее 6 ногу относиться к другим схемам и зарядкам.  Резистором R7 определяется разница между напряжением окончания и начала зарядки. А вот это ценная информация - никак не мог понять как сократить минимальный и максимальный порог заряда.
×
×
  • Создать...