Прошу помощ насчет библиотек

Zulu Alpha
Offline
Зарегистрирован: 01.10.2016

   Здравствуйте!

Я новичок в этом деле и не русский, поэтому прошу сильно не ругайте.

Хочу управлять скоростью вращения шагового двигателя (Nema 17, 200 шагов за оборот, 0,4А) помощью Ардуино Уно, драйвера А4988 (MS1=L; MS2=H; MS3=L. т.е. микрошаг на 1/4) и потенциометра.

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

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

Вот и сам код:


#include <AccelStepper.h>

AccelStepper motorR(1,6,5);

int sstep=6;
int dir=5;
int pot=A1;
int enablePin=3;
int motSpeed;


void setup (){
pinMode(sstep,OUTPUT);
pinMode(dir,OUTPUT);  
pinMode(pot,INPUT);
pinMode(enablePin,OUTPUT);
motorR.setMaxSpeed(1600);}

void loop() {
  
if (analogRead(pot)<=492) {                      //левая половина диапазона потенциометра
motSpeed = map(analogRead(pot),0,492,1600,0);
motorR.setSpeed(motSpeed);
motorR.runSpeed();
}

if (analogRead(pot)>=532) {                     //правая половина диапазона потенциометра
motSpeed = map(analogRead(pot),532,1023,10000,0);
    
digitalWrite(dir,LOW);
digitalWrite(sstep,HIGH);
delayMicroseconds(motSpeed);
digitalWrite(sstep,LOW);
delayMicroseconds(motSpeed);}


if (analogRead(pot)>493 && analogRead(pot)<531  ) // если потенциометр около нуля
{digitalWrite(enablePin,HIGH);}                   //вал ротора можно вращать вручную
  
else {digitalWrite(enablePin,LOW);}}

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

Надеюсь, успел объяснить проблемму.

Помогите пожалуйста разобраться в чем дело!

Заранее спасибо! 

 

 

vvadim
Offline
Зарегистрирован: 23.05.2012

эта библиотека не позволяет потенциометром регулировать скорость шаговика плавно и в большом диапазоне

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

кнопками менять скорость получится

играйтесь со скоростью вращения с dc моторами

Zulu Alpha
Offline
Зарегистрирован: 01.10.2016

Спасибо, vvadim, за ответ!

Это полезно знать, что этой библиотекой нельзя потенциометром плавно управлять шаговик.

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

Спасибо еще раз!

vladimir62
vladimir62 аватар
Offline
Зарегистрирован: 10.11.2015

Добрый день. А что за проект?

Zulu Alpha
Offline
Зарегистрирован: 01.10.2016

Приспособление для сварки и наплавки. Более-менее автоматизированое.

vladimir62
vladimir62 аватар
Offline
Зарегистрирован: 10.11.2015

И какие скорости в об/сек  требуются при подаче сварочной проволоки? Вопрос связан с тем, что из вашего скетча это совершенно не понятно. Да и вообще, там  "каша". Например в строчках с 21 по 24 в пытаетесь использовать Accelstepper при этом переменная motSpeed есть частота сигналов Step и если посчитать без деления шагов, то вы регулируете примерно от 1 до 8 об/сек. ???  А в строчках с 27 по 34 то motSpeed уже время в микросекундах записываемое в делеимкс и если считать, то вы пытаетесь крутить мотор от 0.25 до 2500 об/сек(опять же пока не учитываем деление шага)???

Zulu Alpha
Offline
Зарегистрирован: 01.10.2016

Здравствуйте, vladimir62 !

Спасибо за Ваш интерес к моей работе!

Скетч мой к подаче проволки отношения не имеет. Кроме этого, это "опытный" скеч, в котором обороты, достигаемые шаговым двигателем к моему проекту тоже никчему. Вопрос вообще был не про это. Цель этого скетча - сравнить регулирование скорости вращения помощью потенциометра С библиотекой и БЕЗ нее. Поэтому, как объяснял в первом моем посту, код написан таким образом. Так что,можно сказать, эта "каша" умышлено там стоит.

Спасибо!