шаговые моторы

yrik8407
yrik8407 аватар
Offline
Зарегистрирован: 08.03.2016

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

[code] int p1=8; int p2=9; int p3=10; int p4=11; int p11=4; int p21=5; int p31=6; int p41=7; void setup() { pinMode(p1, OUTPUT); pinMode(p2, OUTPUT); pinMode(p3, OUTPUT); pinMode(p4, OUTPUT); pinMode(p11, OUTPUT); pinMode(p21, OUTPUT); pinMode(p31, OUTPUT); pinMode(p41, OUTPUT);

}

void loop() { digitalWrite(p2, LOW); digitalWrite(p3, LOW); digitalWrite(p4, LOW); digitalWrite(p1, HIGH); digitalWrite(p21, LOW); digitalWrite(p31, LOW); digitalWrite(p41, LOW); digitalWrite(p11, HIGH); delay(2); digitalWrite(p1, LOW); digitalWrite(p2, LOW); digitalWrite(p4, LOW); digitalWrite(p3, HIGH); digitalWrite(p11, LOW); digitalWrite(p21, LOW); digitalWrite(p41, LOW); digitalWrite(p31, HIGH); delay(2); digitalWrite(p1, LOW); digitalWrite(p3, LOW); digitalWrite(p4, LOW); digitalWrite(p2, HIGH); digitalWrite(p11, LOW); digitalWrite(p31, LOW); digitalWrite(p41, LOW); digitalWrite(p21, HIGH); delay(2); digitalWrite(p1, LOW); digitalWrite(p2, LOW); digitalWrite(p3, LOW); digitalWrite(p4, HIGH); digitalWrite(p11, LOW); digitalWrite(p21, LOW); digitalWrite(p31, LOW); digitalWrite(p41, HIGH); delay(2); } [/code] дарйвер L298N

yrik8407
yrik8407 аватар
Offline
Зарегистрирован: 08.03.2016

может пригодится кому

inspiritus
Offline
Зарегистрирован: 17.12.2012

Спасибо конечно, но это правильнее делать с помощью этого

yrik8407
yrik8407 аватар
Offline
Зарегистрирован: 08.03.2016

для меня это сложно , и по этому я придерживаюсь текста arduino ide понятную для новичков 

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

yrik8407 пишет:
вот скетч
int p1=8;
int p2=9;
...[/code]

Зарегистрирован: 08.03.2016

Ахренеть!

yrik8407
yrik8407 аватар
Offline
Зарегистрирован: 08.03.2016

Зато точно работает ) два шаговых мотора крутятся вместе
Я конечно понимаю что это все равно происходит не совсем одновременно . И скетч толькодля того чтобы увидеть что два мотора крутятся без всяких толчков и зависания.

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

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

ЕвгенийП пишет:

yrik8407 пишет:
вот скетч
int p1=8;
int p2=9;
...[/code]

Зарегистрирован: 08.03.2016

Ахренеть!

не всем же быть такими прогрессивными как я к примеру )))

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

yrik8407 пишет:
нужно все привязать ко времени выполнения программы
https://www.youtube.com/watch?v=Qexje1g6ZV8

Morroc
Offline
Зарегистрирован: 24.10.2016

yrik8407 пишет:

Я конечно понимаю что это все равно происходит не совсем одновременно .

Что вы ими такое крутить собрались чтобы эта разница сказалась ?

Цитата:

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

Без толчков, зависаний и одновременно - это в прерывание таймера засовывать и лучше без digitalwrite. loop с миллис точности не гарантирует - оно срабатывает не "сразу" как таймер, а "как только так сразу", так сказать и если есть куски кода, выполняющиеся долго - вариант с delay -> millis для шд не очень.

Savchenko_V_A_1992 (не проверено)
Здравствуйте. Собрал схему регулирования скорости шагового двигателя NEMA17 потенциометром. Столкнулся с 
 
малым диапазоном регулирования с тем что скорость изменяется в недостаточно больших пределах. Можете 
 
подсказать как это исправить? Скетч и видео прилагаю. Заранее спасибо.
 
КОД:
#include <AccelStepper.h>
AccelStepper Stepper1(1,5,4); //использует пин 5 и 4 для dir (4) и step (5), 1 - режим "external driver" 
 
(A4988)
#define potPin A0 //пин для подключения потенциометра
#define pinRun 9 //Кнопка вперед
#define pinRev 10 //Кнопка назад
#define pinEN 6 //Отключение драйвера
 
int stepsPerSecond; //переменная для хранения значений текущей скорости
int dir; //используется для смены направления
 
void setup() {
Stepper1.setMaxSpeed(1500); //устанавливаем максимальную скорость вращения ротора двигателя (шагов/секунду)
Stepper1.setAcceleration(50); //устанавливаем ускорение (шагов/секунду^2)
 
pinMode(pinRun, INPUT);
pinMode(pinRev, INPUT);
Serial.begin(9600);
}
 
void loop() {
//Направление вращения двигателя в зависимости от состояния кнопок
if (digitalRead(pinRun)==HIGH&&digitalRead(pinRev)==LOW) {dir=1; digitalWrite(pinEN, LOW);}
if (digitalRead(pinRun)==LOW&&digitalRead(pinRev)==HIGH) {dir=-1; digitalWrite(pinEN, LOW);}
if (digitalRead(pinRun)==LOW&&digitalRead(pinRev)==LOW) {dir=0; digitalWrite(pinEN, HIGH);}
 
//Считываем и масштабируем значение с потенциометра
stepsPerSecond=analogRead(potPin);
 
Serial.println(stepsPerSecond*dir);
Stepper1.setSpeed(stepsPerSecond*dir); //Устанавливаем скорость и направление вращения
Stepper1.run(); //запуск шагового двигателя. Эта строка повторяется вновь и вновь для непрерывного вращения 
 
двигателя
}
ВИДЕО:
 

 

b707
Offline
Зарегистрирован: 26.05.2017

если у вас мотор работает через драйвер А4988 - не нужна никакая библиотека. Драйвер управляется двумя пинами - STEP и DIR. Пином DIR выбираете направление, на STEP подаете импульсы для шагов. Чем чаще импульсы. тем быстрее крутится мотор...

Densl
Offline
Зарегистрирован: 28.11.2018

Пока Serial.print из цикла не уберете, скорость будет ограничена... А вообще там есть примерчик в библиотеке для управления с помошью потенциометра.