Кодирование Аурдино для управления двигателем - PullRequest
0 голосов
/ 14 апреля 2020
//Motor A
const int motorpin1  = 6; // Pin  6 of L293
const int motorpin2  = 9;  // Pin  3 of L293

void setup() {
  pinMode(motorpin1, OUTPUT);
  pinMode(motorpin2, OUTPUT);

  digitalWrite(motorpin1, LOW);
  digitalWrite(motorpin2, LOW);
  Serial.begin(9600);
}


  // put your main code here, to run repeatedly:
void loop(){
  if(Serial.available()>0)
  {
    char incomingByte = Serial.read();
    Serial.println(incomingByte);
    if(incomingByte=='a'){
      digitalWrite(motorpin1, LOW);
      digitalWrite(motorpin2, LOW);
      delay(200);
      digitalWrite(motorpin1, LOW);
      digitalWrite(motorpin2, HIGH);

      Serial.println("one way");
    }
    else if(incomingByte=='s'){
      digitalWrite(motorpin1, LOW);
      digitalWrite(motorpin2, LOW);
      delay(200);
      digitalWrite(motorpin1, HIGH);
      digitalWrite(motorpin2, LOW);

      Serial.println("other way");
    }
    else{
      digitalWrite(motorpin1, LOW);
      digitalWrite(motorpin2, LOW);
    }
  }
}

Если мы введем a в последовательном мониторе, двигатель должен вращаться в одном направлении, и если мы введем s, двигатель должен вращаться в другом направлении, но этого не происходит, двигатель работает на холостом ходу, но я получаю выходную мощность следующим образом:

a
one way


s
other way

Нет проблем с подключением оборудования.

Не могли бы вы помочь мне с этим. Спасибо заранее

Ответы [ 2 ]

0 голосов
/ 14 апреля 2020

Согласно комментариям в вашем коде, вы подключаете arduino-pin-6 к l293-pin-6 и arduino-pin-9 к l293-pin-3.

Согласно этой таблице , управляющие контакты в L293: 2, 7, 10, 15. Итак, я полагаю, что вы подключаете это неправильно. Также импульсы выполняются в неправильном порядке (от HIGH до LOW и т. Д.).

Это должен быть правильный код ( пожалуйста, посмотрите комментарии в коде ):

//Motor A
const int motorpin1  = 6; // Pin  7 of L293
const int motorpin2  = 9;  // Pin  2 of L293
const int motorenablepin = 10; // Pin 1 of L293

void setup() {
  pinMode(motorpin1, OUTPUT);
  pinMode(motorpin2, OUTPUT);
  pinMode(motorenablepin, OUTPUT);
  digitalWrite(motorpin1, LOW);
  digitalWrite(motorpin2, LOW);
  digitalWrite(motorenablepin, HIGH); // we can let it enabled
  Serial.begin(9600);
}


  // put your main code here, to run repeatedly:
void loop(){

  if(Serial.available()>0)
  {
    char incomingByte = Serial.read();
    Serial.println(incomingByte);
    if(incomingByte=='a'){
      digitalWrite(motorpin1, HIGH);
      digitalWrite(motorpin2, LOW);

      Serial.println("one way");
    }
    else if(incomingByte=='s'){
      digitalWrite(motorpin1, HIGH);
      digitalWrite(motorpin2, LOW);

      Serial.println("other way");
    }
    delay(200);
    digitalWrite(motorpin1, LOW);
    digitalWrite(motorpin2, LOW);
  }
}

Обратите внимание, что я добавил пропущенный motorenablepin. Он должен быть связан с l293-pin-1.

Кроме того, поскольку состояния LOW и LOW являются общими для кода, вы можете упростить его, как и я.

0 голосов
/ 14 апреля 2020

В логике произошла небольшая ошибка c:

if(incomingByte=='a'){
     digitalWrite(motorpin1, LOW);
digitalWrite(motorpin2, HIGH);//changed to high
   delay(10000);
digitalWrite(motorpin1, LOW);
digitalWrite(motorpin2, LOW);//changed to low
Serial.println("one way");
   }
   else if(incomingByte=='s'){

digitalWrite(motorpin1, LOW);
digitalWrite(motorpin2, HIGH);//changed to high
delay(2000);
digitalWrite(motorpin1, LOW);//changed to low
digitalWrite(motorpin2, LOW);
...