ШД биполяр драйвер три кнопки стоп влево вправо два потенциометра скорость и длина пути

Нет ответов
Nazarett
Offline
Зарегистрирован: 23.11.2018

Добрый день суть проэкта такова , есть поворотный стол от фрезера , поставил на него ШД , использую его для сварки, то есть ставлю деталь нажал педаль (кнопка), стол поехал варю круглую трубу по кругу. Второй вариант деталь положил прихватил  .. нажал педаль, стол на 180 градусов развернулся , прихватил, нажал педаль стол на 180 поварил .. нажал 180 поварил...

проэкт 

1.    3шт кнопки ( в моем случае педали) Влево Вправо Стоп 

2.    Переменный резистор1 (потенциометр) регулировка скорости ШД

3.    Переменный резистор2 (потенциометр) регулировка пройденнного пути (количества шагов) ШД.

4.    Светодиод (пока схему паяю удобно на нем тестировать работоспособность всех компонентов,

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

теперь к теме

Использую  AccelStepper (библиотека 1.57.1

использую ускорение stepper.setAcceleration

Вот рабочий скетч на 3кнопки и потэнциометр (регулировка скорости) работет все ок!


   #include<AccelStepper.h>

   // создаем экземпляр AccelStepper

AccelStepper stepper1(1, 10, 5); // pin 10 = step, pin 5 = direction



   // клавиши выбора режима

   int pinBut []={2,6,4};

   int lBut []={0,0,0};

   int cBut[]={0,0,0};

    int led = 9; //svetodiod
   //

   boolean go=false;
   #define PEREMENIIRESISTOR A1 // PEREMENII RESISTOR NA ANALOG VHOD A1

   void setup(){     // читает один раз при старте

   pinMode(led, OUTPUT);
   stepper1.setAcceleration(2000);

   }
    

   void loop() {
     
   // проверка нажатия кнопок выбора программ
   
   for(int i=0;i<3;i++) {

        cBut[i] = deb(lBut[i],pinBut[i]);

        // если нажатие...

        if (lBut[i] == 0 && cBut[i] == 1) {

           switch(i) {

              case 0:   // против часовой

                   // stepper1.setSpeed(1200);
                    stepper1.move(-100000);  //proidenaya dlina
                    go=true;
                    digitalWrite(led, HIGH);
                   // Serial.println("CW");

                 break;    

              case 1:   // стоп
                   
                    stepper1.stop();
                   stepper1.setCurrentPosition (0);
                    go=false;
                    { int r; 
                   r = analogRead(PEREMENIIRESISTOR) * 3;
                  stepper1.setMaxSpeed(r); // МАКСИМАЛЬНАЯ СКОРОСТЬ
                  digitalWrite(led, LOW);
    }
                   // Serial.println("stop");
                   
                 break;    

              case 2:   // по часовой
              
                    stepper1.move(100000); //proidenaya dlina
                    go=true;
                    digitalWrite(led, HIGH);
                  //  Serial.println("CCW");

                 break;    

              default:  

                 break;

           }   

        }   

        lBut[i] = cBut[i];

   }


   if(go==true)             
    stepper1.run();

   }


   // устранение дребезга

   int deb (int l,int pin){

   int c = digitalRead(pin);  

   if (l != c) { // если изменение


       delay(10);                            

       c = digitalRead(pin);        

       return c;                     

       }

   }

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

  #include<AccelStepper.h>

   // создаем экземпляр AccelStepper

AccelStepper stepper1(1, 10, 5); // pin 10 = step, pin 5 = direction



   // клавиши выбора режима

   int pinBut []={2,6,4};

   int lBut []={0,0,0};

   int cBut[]={0,0,0};

    int led = 9; //svetodiod
   //

   boolean go=false;
   
   void setup(){     // читает один раз при старте

   pinMode(led, OUTPUT);
   stepper1.setAcceleration(2000);

   }
    

   void loop() {
     
   // проверка нажатия кнопок выбора программ
   
   for(int i=0;i<3;i++) {

        cBut[i] = deb(lBut[i],pinBut[i]);

        // если нажатие...

        if (lBut[i] == 0 && cBut[i] == 1) {

           switch(i) {

              case 0:   // против часовой

                  int r; 
                   r = analogRead(A1) * 3;
                   
                  if (r > 0)   {stepper1.setMaxSpeed(r);}
                  int sensorReading = analogRead(A2);
                  int dlina = map(sensorReading, 0, 1023, 0, 10000);
                 if (dlina > 0) {
                  // МАКСИМАЛЬНАЯ СКОРОСТЬ
                   // stepper1.setSpeed(1200);
                    stepper1.move(dlina);}  //proidenaya dlina
                    go=true;
                    digitalWrite(led, HIGH);
                   // Serial.println("CW");

                 break;    

              case 1:   // стоп
                   
                    stepper1.stop();
                   stepper1.setCurrentPosition (0);
                    //go=false;
                    go=true;
                   // Serial.println("stop");
                   digitalWrite(led, LOW);
                 break;    

              case 2:   // по часовой
              
                    stepper1.move(100000); //proidenaya dlina
                    go=true;
                    digitalWrite(led, HIGH);
                  //  Serial.println("CCW");

                 break;    

              default:  

                 break;

           }   

        }   

        lBut[i] = cBut[i];

   }


   if(go==true)             
    stepper1.run();

   }


   // устранение дребезга

   int deb (int l,int pin){

   int c = digitalRead(pin);  

   if (l != c) { // если изменение


       delay(10);                            

       c = digitalRead(pin);        

       return c;                     

       }

   }

Пробывал по разному три вечера результата нет.. прошу помощи.