Шаговый двигатель и сдвиговый регистр.

Тема в разделе "Глядите, что я сделал", создана пользователем Un_ka, 21 авг 2018.

?

Имеет место быть?

  1. да

    1 голосов
    100,0%
  2. нет

    0 голосов
    0,0%
  1. Un_ka

    Un_ka Гуру

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

     
  2. Un_ka

    Un_ka Гуру

    Вот ещё код для работы шагового двигателя и Н моста через сдвиговый регистр
    Код (C++):
    [code]
    int incomingByte = 0;   // ��� �������� ����������� �����
    const byte shag[4] = {
      0b10010000,
      0b11000000,
      0b01100000,
      0b00110000
    };
    const byte hmost[5] = {
      0b00001001,
      0b00000110,
      0b00001010,
      0b00000101,
      0b00000000
    };
    byte z = 0;
    int R = 4;
    int L = 0;
    byte x = 0;
    long vrema = 2000;     // �����
    const int data_pin = 2;
    const int sh_pin = 4;
    const int st_pin = 3;
    unsigned long senstime = 0;
    int b, e, k;
    int stepp = 0;
    void setup() {
      pinMode(data_pin, OUTPUT);
      pinMode(sh_pin, OUTPUT);
      pinMode(st_pin, OUTPUT);
      Serial.begin(9600);
      Serial.println("hel");
    }
    void loop() {
      b = analogRead(A3);
      e = analogRead(A6);
      k = analogRead(A7);
       if (b > 700 ) {
         stepp = 50;
        } else if ( b < 400) {
         stepp = -50;
        } else {
         stepp = 0;
        }
        if (e > 700 ) {
         R = 0;
        } else if ( e < 400) {
         R = 1;
        } else if ( k > 700) {
         R = 2;
        } else if ( k < 400) {
         R = 3;
        } else {
         R = 4;
        }
        /*if (Serial.available() > 0) {  //���� ���� ��������� ������
         // ��������� ����
         incomingByte = Serial.read();

         // �������� ��, ��� ��������
         Serial.print("I received: ");
         Serial.println(incomingByte, BIN);
         }*/

      //R = 2;     //  ��� �������
      //stepp = -50;

      kompilate(stepp, R);
    }
    int kompilate(int i, int h) {
      senstime = micros();
      if (i > 0) {
        while (i >= 0) {    
          for (int y = 0; y < 4; y++) {
            // senstime = micros();
            if (i = 0) {
              x = 0;
            } else {
              x = shag[y];
            }
            z = hmost[h];
            x = x | z;
            fire(x);
            // Serial.println(" ");
            // Serial.print(x, BIN);
            delayMicroseconds(vrema);
            // Serial.println(micros() - senstime);
          }
          i--;
        }  } else if (i < 0) {
        i = abs(i);
        // Serial.print(" ads ");
        while (i >=0) {
          for (int y = 3; y >= 0; y--) {
            //  senstime = micros();
            if (i = 0) {
              x = 0;
            } else {
              x = shag[y];
            }
            z = hmost[h];
            x = x | z;
            fire(x);
            // Serial.print(z);
            //  Serial.println(" ");
            //  Serial.print(x, BIN);
            delayMicroseconds(vrema);
            // Serial.println(micros() - senstime);

          }
          i--;
        }  
      } else if (i == 0) {
        z = hmost[h];
        fire(z);
      }
    Serial.println(micros() - senstime);
      stepp = 0;
    }

    void fire(byte v) {
      for (int i = 0; i < 8; i++) {
        digitalWrite(sh_pin, LOW);
        digitalWrite(data_pin, v & (1 << i ));
        digitalWrite(sh_pin, HIGH);
      }
      digitalWrite(st_pin, HIGH);
      digitalWrite(st_pin, LOW);
    }
     
    [/code]