Синхронизация шаговых двигателей

Vasilisk
Offline
Зарегистрирован: 22.09.2017

Есть катушка, и есть каретка, которая подает нить на катушку для равномерного наматывания.

Т.е. Катушка делает оборот, за это время каретка двигается на толщину нити, когда доходит до конца ширины катушки, двигается в обратном направлении.

Думаю что-то вроде этого:


  if (onn == 1 && spen > 0){ //если включена намотка и скорость больше 0
    Stepper4.move(shagN); // катушка делает один оборот
    
    if(Stepper4.distanceToGo()==0){ // если катушка сделала один оборот
      Stepper1.move(shag*dir2); // каретка продвинулась на толщину нити
      shagK++; // ++ к количеству рядов нити на катушке
      if (shagK == shagKol){ // если толщина катушки закончилась, наматываем в другую сторону
        shagK = 0; // обнуляем счетчик
        dir = dir*-1; // меняем направление
      }
      
    }
  }

Само-собой не работает. Не знаю как сделать. Во первых Stepper4.move не работает с distanceToGo, там нужен moveTo, но он не может вращать бесконечно и куда скорость писать. В общем не понимаю. Помогите пожалуйста.

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

Меняю скетч для этой байды на её механику. Давно хочу намоточный станок, но с механикой беда :(

Vasilisk
Offline
Зарегистрирован: 22.09.2017

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

Меняю скетч для этой байды на её механику. Давно хочу намоточный станок, но с механикой беда :(

Ну не думаю, что вам это подойдет )

Есть идея делать через Stepper4.moveTo, если там до миллиардов прибавлять можно.

Vasilisk
Offline
Зарегистрирован: 22.09.2017

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

  if (onn == 1 && spen > 0){
    Stepper4.moveTo(shagNn);
    if(Stepper4.distanceToGo()==0){
      // Работа каретки направляющий нити намотки
      Stepper1.move(shag*dir2);
      shagK++;
      if (shagK == shagKol){
        shagK = 0;
        dir2 = dir2*-1;
      }
      shagNn = shagNn+shagN;
      
    }
  }

 

Vasilisk
Offline
Зарегистрирован: 22.09.2017

Нашел незадокументированную функцию в библиотеки и с ее помощью получилось реализовать.

  if (onn == 1 && spen > 0){
    Stepper4.move(shagNn);
    if(Stepper4.targetPosition()>StepperTime+shagN){
      StepperTime = StepperTime+shagN;
      KatR++;
      // Работа каретки направляющий нити намотки
      Stepper1.move(shag*dir2);
      shagK++;
      if (shagK == shagKol){
        shagK = 0;
        dir2 = dir2*-1;
      }
//      shagNn = shagNn+shagN;
      
    }
  }
  Stepper4.setSpeed(spen);

Теперь появился баг, который не могу найти. В определенный момент каретка перестает изменять направление и просто идет до конца и упирается.

Vasilisk
Offline
Зарегистрирован: 22.09.2017

Сделал вывод счетчика shagK, который показывает, сколько еще раз каретка должна проехать в одну сторону, перед разворотом. И получилось странно. Сначало, как я и говорил ранее, все нормально, но потом...

0
0
0
0
1
1
1
1
2
2
2
2
3
3
3
3
4
4
4
4
0
0
0
0
1
1
1
1
2
2
2
2
3
3
3
3
4
4
4
4
0
0
0
0
1
1
1
1
2
2
1
2
4
3
4
0
4
4
4
4
1
2
0
2
4
2
4
0
2
3
3
4
0
2