Библиотека для драйвера ШМ GeckDrive g210Х

Dr_grizzly
Dr_grizzly аватар
Offline
Зарегистрирован: 07.12.2015

Добрый день господа! Столкнулся с проблемкой работы с драйвером шагового двигателя GeckDrive g210Х. По сути управление происходит двумя сигналами - первый направление вращения(dir), второй Шаг(step). Опытным путем определил, что если на дир подать +5, то шаговик вращается по часовой. Сам шаг у меня сделан так:

   digitalWrite(GeckDirPin,HIGH); // сменили направление шагового двигателя
     for (int xob=0; xob <= 500; xob++) // запустили цикл сигнала на степ 500 раз
      {
       digitalWrite(GeckStepPin,HIGH);       
       digitalWrite(GeckStepPin,LOW); 
       delay(5); 
      }  

Уменьшая delay - теряю мощность двигателя. Двигатель поднимает железный дозатор через редуктор. По сути если delay меньше 10 то двигатель колбасится и не может поднять дозатор, если delay больше 10 то все у него получается. Природу явления я не совсем понял... Но суть в том, что хочу избавится от delay. Чтобы не висела система пока выполняется цикл. Если помножить количество на делей то получаем 2,5 сек висяк... а это критично... Может кто какой библиотечкой пользовал в таких ситуациях? Или что-нибудь подскажите по опыту?

http://www.npoatom.ru/upload/5_G201X_Manual_RU.pdf

vosara
vosara аватар
Offline
Зарегистрирован: 08.02.2014

Начнем с того что пока не выполнится цыкл "for" будет висяк. Я бы сделал на таймере или в крайнем случае, если с таймером тяжело, на милис. А зачем на такой код библиотека не знаю. Чуть позже напишу пример

vosara
vosara аватар
Offline
Зарегистрирован: 08.02.2014
int pause = 5;
unsigned long shag = 500;
unsigned long time = millis();

void setup()
{
pinMode(GeckStepPin, OUTPUT);
pinMode(GeckDirPin, OUTPUT);
}

void loop(){
digitalWrite(GeckDirPin,HIGH); // сменили направление шагового двигателя
 
 if (shag > 0)
 {
  if (millis() - time >= pause) 
  {
    digitalWrite(GeckStepPin, !digitalRead(GeckStepPin));
    time = millis();   
   --shag; 
  }
 }
}

 

Dr_grizzly
Dr_grizzly аватар
Offline
Зарегистрирован: 07.12.2015

Ща попробуем этот код применить на практику ))

Dr_grizzly
Dr_grizzly аватар
Offline
Зарегистрирован: 07.12.2015
if (fwd==true) 
{
 digitalWrite(GeckDirPin,HIGH); // сменили направление шагового двигателя
 if (shag > 0)
 {
  if (millis() - timegek >= pausegek) 
  {
    digitalWrite(GeckStepPin, !digitalRead(GeckStepPin));
    timegek = millis();   
   --shag; 
  }
 }  
 else
 fwd=false;
}

Все работает!!! Спасибо большое!!!!))))