Проблемы с программированием мотор шилда

Тема в разделе "Моторы, сервоприводы, робототехника", создана пользователем Юра, 5 апр 2016.

  1. Юра

    Юра Нуб

    Снимок.JPG всем, добрый день!
    Имею такой мотор шилд
    Никак не получается заставить его крутить двигатели в обратном направлении.
    Т.е. запускать и регулировать скорость вращения получается, а менять полярность нет

    Скетч прилагаю

    При посылке через последовательный порт "W" мотор крутится допустим по часовой
    При посылке через последовательный порт "S" мотор крутится с меньшей скоростью, но опять по часовой

    Т.е. ШИМ работает, а полярность не меняется
    Пробовал переписывать скетч под мотор А тоже самое

    В чем засада не пойму


    Код (C++):

    #define MOTOR_GO_A            3   //  PWMA
    #define MOTOR_GO_B           11   //  PWMB
    #define MOTOR_DIR_A          12   //  DIRA
    #define MOTOR_DIR_B          13   //  DIRB
    #define MOTOR_BRAKE_A         9   //  BRAKE A
    #define MOTOR_BRAKE_B         8   //  BRAKE B
     
     
    void setup()
    {
      pinMode (MOTOR_GO_A, OUTPUT);
      pinMode (MOTOR_GO_B, OUTPUT);
     
      pinMode (MOTOR_DIR_A, OUTPUT);
      pinMode (MOTOR_DIR_A, OUTPUT);
     
      pinMode (MOTOR_BRAKE_A, OUTPUT);
      pinMode (MOTOR_BRAKE_B, OUTPUT);
     
      Serial.begin(9600);
    }
     
    void loop()
    {
     
      if (Serial.available() > 0) {
        int vled = Serial.read();
        if (vled == 'W')
          analogWrite(MOTOR_GO_B, 240);
          digitalWrite(MOTOR_DIR_B, HIGH);
       
        if (vled == 'S')
          analogWrite(MOTOR_GO_B, 100);
          digitalWrite(MOTOR_DIR_B, LOW);
        if (vled == 'Z')
          digitalWrite(MOTOR_GO_B, LOW);
     
      }
    }
     
  2. vvr

    vvr Инженерище

    в коде
    pinMode (MOTOR_DIR_A, OUTPUT);
    pinMode (MOTOR_DIR_A, OUTPUT);

    два DIR_A
     
  3. Юра

    Юра Нуб

    сорри
    собственно это не спасает, это у меня в процессе перебирания различных вариантов закралась ошибка, а так изначально я подключал моторчик и на клемму А и на В...перебирая пины...не хочет крутить в разные стороны...
     
  4. vvr

    vvr Инженерище

    я вижу ваш код и в нём указал на ошибку
    что вы там ещё делаете не знаю
    сегодня хрустальный шар не брал...
     
  5. Юра

    Юра Нуб

    да я ж не с претензиями... спасибо, что пытаетесь помочь
    код исправил, проблема остается....
    сам склоняюсь к аппаратной проблеме...
    просьба подсказать в каком направлении двигаться
    Код (C++):

    #define MOTOR_GO_A            3   //  PWMA
    #define MOTOR_GO_B           11   //  PWMB
    #define MOTOR_DIR_A          12   //  DIRA
    #define MOTOR_DIR_B          13   //   DIRB
    #define MOTOR_BRAKE_A         9   //  BRAKE A
    #define MOTOR_BRAKE_B         8   //  BRAKE B
     
     
    void setup()
    {
      pinMode (MOTOR_GO_A, OUTPUT);
      pinMode (MOTOR_GO_B, OUTPUT);
     
      pinMode (MOTOR_DIR_A, OUTPUT);
      pinMode (MOTOR_DIR_B, OUTPUT);
     
      pinMode (MOTOR_BRAKE_A, OUTPUT);
      pinMode (MOTOR_BRAKE_B, OUTPUT);
       
      Serial.begin(9600);
    }
     
    void loop()
    {
     
      if (Serial.available() > 0) {  
        int vled = Serial.read();
        if (vled == 'W')
          analogWrite(MOTOR_GO_B, 240);
          digitalWrite(MOTOR_DIR_A, HIGH);
          digitalWrite(MOTOR_DIR_B, HIGH);
         
        if (vled == 'S')
          analogWrite(MOTOR_GO_B, 100);
          digitalWrite(MOTOR_DIR_A, LOW);
          digitalWrite(MOTOR_DIR_B, LOW);
        if (vled == 'Z')
          digitalWrite(MOTOR_GO_B, LOW);
     
      }
    }
     
  6. ostrov

    ostrov Гуру

    Для теста запустите такой скетч:
    Код (C++):
    #define MOTOR_GO_A            3   //  PWMA
    #define MOTOR_GO_B           11   //  PWMB
    #define MOTOR_DIR_A          12   //  DIRA
    #define MOTOR_DIR_B          13   //   DIRB
    #define MOTOR_BRAKE_A         9   //  BRAKE A
    #define MOTOR_BRAKE_B         8   //  BRAKE B


    void setup() {
      pinMode (MOTOR_GO_A, OUTPUT);
      pinMode (MOTOR_GO_B, OUTPUT);
      pinMode (MOTOR_DIR_A, OUTPUT);
      pinMode (MOTOR_DIR_B, OUTPUT);
      pinMode (MOTOR_BRAKE_A, OUTPUT);
      pinMode (MOTOR_BRAKE_B, OUTPUT);
     
      analogWrite(MOTOR_GO_A, 240);
      analogWrite(MOTOR_GO_B, 240);
    }

    void loop() {
      digitalWrite(MOTOR_DIR_A, !digitalRead(MOTOR_DIR_A));
      digitalWrite(MOTOR_DIR_B, !digitalRead(MOTOR_DIR_B));
      delay(2000);
    }
    Он просто будет менять направление каждые 2 сек. Посмотрите напряжение на клеммах моторов. Если полярность не меняется, значит какие то проблемы с шилдом.
     
  7. Юра

    Юра Нуб

    Ostrov, спасибо, ваш код работает - шилд переключает полярность!:)
    Осталось мне разобраться, что не так было в моем скетче