Silniki się "zawieszają"

Masz problem, z którym nie możesz sobie poradzić? Pisz śmiało!
ODPOWIEDZ
Mimal9999
Majsterkowicz
Posty: 64
Rejestracja: 6 wrz 2016, 18:24

Silniki się "zawieszają"

Post autor: Mimal9999 » 26 gru 2017, 12:57

Witam! Używam sterownika Motor Drive Shield L293D
https://www.banggood.com/Motor-Drive-Sh ... rehouse=UK
oraz silników podobnych do tych:
https://abc-rc.pl/Naped-DC-6V-kolo-65mm
Mam problem, gdyż zbudowany przy ich urzyciu pojazd sterowany przez nrf24 nie działa poprawnie. To znaczy jazda w przód i tył działa, ale przy skręcaniu pojazd kręci się jak powinien dopiero po puszczeniu gałki skręcania coś się psuje. I tu są 2 możliwośći: albo pojazd się zatrzymuje i nie reaguje na żadne polecenia, albo ciągle się kręci mimo że gałka jest zwolniona. Zauważyłem, że problem nie występuje gdy jeżdżę tym pojazdem na kablu połączonym z komputerem tylko na baterii. Załączam kod jeżeli będzie taka potrzeba mogę nagrać film ukazujący problem.

Kod: Zaznacz cały

#include <AFMotor.h>
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>


AF_DCMotor motor1(1);
AF_DCMotor motor2(2);
AF_DCMotor motor3(3);
AF_DCMotor motor4(4);

RF24 radio(22, 23);
const byte rxAddr[6] = "00001";

int pre[5];


int predkosc;
int xPosition;
int yPosition;
int xPos;
int yPos;

void setup() {
  // put your setup code here, to run once:
   motor1.setSpeed(0);
   motor2.setSpeed(0);
   motor3.setSpeed(0);
   motor4.setSpeed(0);
   
    motor1.run(RELEASE);
    motor2.run(RELEASE);
    motor3.run(RELEASE);
    motor4.run(RELEASE);
    
    Serial.begin(9600);
    
  radio.begin();
  radio.openReadingPipe(0, rxAddr);
  
  radio.startListening();
}

void loop() {
  // put your main code here, to run repeatedly:
      if (radio.available())
      {
         radio.read(&pre, sizeof(pre));
         
          xPosition = pre[0];
          yPosition = pre[1];
          
        
          
          xPos = (xPosition - 510) /2;
          
          yPos = (yPosition - 499) /2;
          
          if (xPos > 0){ //prawo
            
          motor1.run(BACKWARD);
          motor2.run(BACKWARD);
          motor3.run(FORWARD);
          motor4.run(FORWARD);
          
          motor1.setSpeed(255);
          motor2.setSpeed(255);
          motor3.setSpeed(255);
          motor4.setSpeed(255);
          }
          
          
          if (xPos < 0){ //lewo
            motor1.run(RELEASE);
          motor2.run(RELEASE);
          motor3.run(RELEASE);
          motor4.run(RELEASE);
          
          motor1.setSpeed(0);
          motor2.setSpeed(0);
          motor3.setSpeed(0);
          motor4.setSpeed(0);
          delay(1);
          motor1.run(FORWARD);
          motor2.run(FORWARD);
          motor3.run(BACKWARD);
          motor4.run(BACKWARD);
          
          motor1.setSpeed(250);
          motor2.setSpeed(250);
          motor3.setSpeed(250);
          motor4.setSpeed(250);
           Serial.println("lewo");
          }
          
      if (yPos > 0){ //przod
           predkosc = yPos;
           
          if (predkosc > 255)
                   { predkosc = 255;} 
                   
                   
          motor1.run(FORWARD);
          motor2.run(FORWARD);
          motor3.run(FORWARD);
          motor4.run(FORWARD);
          
          motor1.setSpeed(predkosc);
          motor2.setSpeed(predkosc);
          motor3.setSpeed(predkosc);
          motor4.setSpeed(predkosc);
      }
      
      if (yPos < 0){ //tyl
        
          predkosc = yPos * (-1);
          if (predkosc > 255)
          predkosc = 255;
          
          
          motor1.run(BACKWARD);
          motor2.run(BACKWARD);
          motor3.run(BACKWARD);
          motor4.run(BACKWARD);
          
          motor1.setSpeed(predkosc);
          motor2.setSpeed(predkosc);
          motor3.setSpeed(predkosc);
          motor4.setSpeed(predkosc);
      }
      
      if (yPos == 0){
         motor1.run(RELEASE);
         motor2.run(RELEASE);
         motor3.run(RELEASE);
         motor4.run(RELEASE);
         motor1.setSpeed(0);
         motor2.setSpeed(0);
         motor3.setSpeed(0);
         motor4.setSpeed(0);
      }
          
     
      }
}

Co miesiąc do wygrania nagrody o wartości ponad 1600 zł!


kamdz
Młodszy majsterkowicz
Posty: 2
Rejestracja: 27 paź 2016, 10:54

Re: Silniki się "zawieszają"

Post autor: kamdz » 30 gru 2017, 18:08

Ja miałem bardzo podobny problem na bt. Nie wiem, czy dobrze to sobie wyjaśniłem, ale mi działa: poprostu gdy zasilasz z kompa, to masz stabilniejsze źródło prądu i wszystko gra. A gdy z baterii, to przy skręcie silniki pobierają tak dużo prądu (bo trochę ze sobą wojują, jeden do tyłu, a drugi do przodu to jednak są duże opory), że w pewnym momencie nie starcza energii dla modułu bezprzewodowego i traci połączenie. Jeżeli wtedy w programie było, że ma skręcać (nie znam Twojego programu, ale ja np kierunek jazdy przetrzymywałem w zmiennej) to już skręca, bo dalej ma to polecenie, a jak akurat miał w programie, że ma stać, to stoi. U mnie sprawdziło się zastosowanie pakietu lipol dla silników i powerbanka dla elektroniki. Nie traci już połączenia, a przede wszystkim silniki mają bardzo dużo mocy. To oczywiście zależy też od tego, jaką wydajność ma układ, którym sterujesz silniki.

Edit: nie zauważyłem, że podałeś program :D no tak, masz tam zmienną, czyli moja hipoteza by pasowała.
Mimal9999
Majsterkowicz
Posty: 64
Rejestracja: 6 wrz 2016, 18:24

Re: Silniki się "zawieszają"

Post autor: Mimal9999 » 31 gru 2017, 16:06

kamdz pisze:
30 gru 2017, 18:08
Ja miałem bardzo podobny problem na bt. Nie wiem, czy dobrze to sobie wyjaśniłem, ale mi działa: poprostu gdy zasilasz z kompa, to masz stabilniejsze źródło prądu i wszystko gra. A gdy z baterii, to przy skręcie silniki pobierają tak dużo prądu (bo trochę ze sobą wojują, jeden do tyłu, a drugi do przodu to jednak są duże opory), że w pewnym momencie nie starcza energii dla modułu bezprzewodowego i traci połączenie. Jeżeli wtedy w programie było, że ma skręcać (nie znam Twojego programu, ale ja np kierunek jazdy przetrzymywałem w zmiennej) to już skręca, bo dalej ma to polecenie, a jak akurat miał w programie, że ma stać, to stoi. U mnie sprawdziło się zastosowanie pakietu lipol dla silników i powerbanka dla elektroniki. Nie traci już połączenia, a przede wszystkim silniki mają bardzo dużo mocy. To oczywiście zależy też od tego, jaką wydajność ma układ, którym sterujesz silniki.

Edit: nie zauważyłem, że podałeś program :D no tak, masz tam zmienną, czyli moja hipoteza by pasowała.
Tak już rozumiem dziękuję za odpowiedź :)
ODPOWIEDZ

Strony partnerskie: