Skocz do zawartości

Sterownik TB6612 FNG z dwoma silnikami DC - nie uruchamiają się.


Eobs

Pomocna odpowiedź

Dzień dobry,

Próbuję stworzyć platformę jeżdżącą dzięki dwóm silnikom DC sterowanym dzięki sterownikowi TB 6612 FNG. Resztę czujników mam oprogramowaną, brakuje mi tylko właśnie tego stesrownika z DC

Silniki: https://botland.com.pl/pl/silniki-dc-katowe-z-przekladnia/3696-kolo-silnik-65x26mm-5v-z-przekladnia-481.html

Sterownik: https://botland.com.pl/pl/sterowniki-silnikow-moduly/32-pololu-tb6612fng-dwukanalowy-sterownik-silnikow-135v1a.html

Zdjęcie sterownika:

TB6612FNG-zoomed.thumb.jpg.36be326f90ddaf9cc2d84076be1f4e3c.jpg

Sterownik - Pin z arduino do którego jest wpięty 

PWMA - Digital 5

AIN2 - Digital 7

AIN1 - Digital 6

PWMB - Digital 10

BIN2 - Digital 9

BIN1 - Digital 8

STBY - Digital 13

Wszystkie GND - GND

VCC - 5V z  arduino.

A/B[01/02] -- silniki

VMOT - 5V z arduino

Kod:

#include <SparkFun_TB6612.h>

//Motor 1
int pinAIN1 = 6; //Direction
int pinAIN2 = 7; //Direction
int pinPWMA = 5; //Speed

//Motor 2
int pinBIN1 = 8; //Direction
int pinBIN2 = 9; //Direction
int pinPWMB = 10; //Speed

//Standby
int pinSTBY = 13;

//Constants to help remember the parameters
static boolean turnCW = 0;  //for motorDrive function
static boolean turnCCW = 1; //for motorDrive function
static boolean motor1 = 0;  //for motorDrive, motorStop, motorBrake functions
static boolean motor2 = 1;  //for motorDrive, motorStop, motorBrake functions


void setup()
{
//Set the PIN Modes
  pinMode(pinPWMA, OUTPUT);
  pinMode(pinAIN1, OUTPUT);
  pinMode(pinAIN2, OUTPUT);

  pinMode(pinPWMB, OUTPUT);
  pinMode(pinBIN1, OUTPUT);
  pinMode(pinBIN2, OUTPUT);

  pinMode(pinSTBY, OUTPUT);

}

void loop()
{
 
  //Drive both motors CW, full speed
  motorDrive(motor1, turnCW, 255);
  motorDrive(motor2, turnCW, 255);
 
  //Keep driving for 2 secs
  delay(2000);

  //Turn towards motor1: Stop Motor1, slow Motor2
  motorStop(motor1);
  motorDrive(motor2, turnCW, 192);
 
  //Keep turning for 2 secs
  delay(2000);

  //Turn in opposite direction: Stop Motor2, slow Motor1
  motorDrive(motor1, turnCW, 192);
  delay(250);
  motorStop(motor2);

  //Keep turning for 2 secs
  delay(2000);

  //Straighten up
  motorDrive(motor2, turnCW, 192);
  delay(500);
 
  //Put motors into Standby
  motorsStandby();
  delay(1000);
 
  //Do a tight turn towards motor1: Motor2 forward, Motor1 reverse
  motorDrive(motor1, turnCCW, 192);
  motorDrive(motor2, turnCW, 192);
 
  //Keep turning for 2 secs
  delay(2000);
 

  //Apply Brakes, then into Standby
  motorBrake(motor1);
  motorBrake(motor2);
  motorsStandby();

  //Stand still for 5 secs, then we do it all over again...
  delay(5000);

}

void motorDrive(boolean motorNumber, boolean motorDirection, int motorSpeed)
{
  /*
  This Drives a specified motor, in a specific direction, at a specified speed:
    - motorNumber: motor1 or motor2 ---> Motor 1 or Motor 2
    - motorDirection: turnCW or turnCCW ---> clockwise or counter-clockwise
    - motorSpeed: 0 to 255 ---> 0 = stop / 255 = fast
  */

  boolean pinIn1;  //Relates to AIN1 or BIN1 (depending on the motor number specified)

 
//Specify the Direction to turn the motor
  //Clockwise: AIN1/BIN1 = HIGH and AIN2/BIN2 = LOW
  //Counter-Clockwise: AIN1/BIN1 = LOW and AIN2/BIN2 = HIGH
  if (motorDirection == turnCW)
    pinIn1 = HIGH;
  else
    pinIn1 = LOW;

//Select the motor to turn, and set the direction and the speed
  if(motorNumber == motor1)
  {
    digitalWrite(pinAIN1, pinIn1);
    digitalWrite(pinAIN2, !pinIn1);  //This is the opposite of the AIN1
    analogWrite(pinPWMA, motorSpeed);
  }
  else
  {
    digitalWrite(pinBIN1, pinIn1);
    digitalWrite(pinBIN2, !pinIn1);  //This is the opposite of the BIN1
    analogWrite(pinPWMB, motorSpeed);
  }
   
 

//Finally , make sure STBY is disabled - pull it HIGH
  digitalWrite(pinSTBY, HIGH);

}

void motorBrake(boolean motorNumber)
{
/*
This "Short Brake"s the specified motor, by setting speed to zero
*/

  if (motorNumber == motor1)
    analogWrite(pinPWMA, 0);
  else
    analogWrite(pinPWMB, 0);
   
}


void motorStop(boolean motorNumber)
{
  /*
  This stops the specified motor by setting both IN pins to LOW
  */
  if (motorNumber == motor1) {
    digitalWrite(pinAIN1, LOW);
    digitalWrite(pinAIN2, LOW);
  }
  else
  {
    digitalWrite(pinBIN1, LOW);
    digitalWrite(pinBIN2, LOW);
  } 
}


void motorsStandby()
{
  /*
  This puts the motors into Standby Mode
  */
  digitalWrite(pinSTBY, LOW);
}

W kodzie nic nadzwyczajnego nie powinno się znajdować. Korzystam z biblioteki "Sparkfun'a". Sam kodo pochodzi z jego gita. @up kod działa. Jest ok.

Piny są podpięte jak w zestawieniu powyżej. Z kodem się zgadzają, z tego co rozumiem ten kod. To silniki powinny się uruchomić, wykonać sekwencję opisane w komentarzach w kodzie i się zatrzymać.

Nie mam pojęcia co może być nie tak. Kable do silników są przylutowane. Napięcie w bateriach, na płytce się zgadza, sprawdzone multimetrem. Mogę jeszcze spróbować dać 6V (z 4 paluszków) na sterownik, jako napięcie dla silników i może wtedy ruszy. (Zakres dla sterownika to od 4.5V do 13.5V, na napięcie dla silników).

Czy możliwe, że mam złą bibliotekę do sterownika? Próbowałem napisać własne funkcje sterownika. Które ustawiały bity i sterowały silnikami przez mostki na sterowniku (nawiązując do tabelki ze strony 4 ze specyfikacji producenta  -> https://www.sparkfun.com/datasheets/Robotics/TB6612FNG.pdf)

@up

Problem rozwiązałem. Zlutowałem piny w sterowniku (gdzieś w internecie widziałem jak ktoś tak korzystał bez zlutowanych, no mu to jakoś wyszło, nie polecam). Źródło zasilania silników zmieniłem na 4baterie AA, potem na 6baterii AA i zaczęło działać. W razie pytań zapraszam do kontaktu PW.

@@up Temat do zamknięcia

 

Edytowano przez Eobs
  • Lubię! 1
Link do komentarza
Share on other sites

21 godzin temu, Eobs napisał:

Problem rozwiązałem. Zlutowałem piny w sterowniku (gdzieś w internecie widziałem jak ktoś tak korzystał bez zlutowanych, no mu to jakoś wyszło, nie polecam). Źródło zasilania silników zmieniłem na 4baterie AA, potem na 6baterii AA i zaczęło działać. W razie pytań zapraszam do kontaktu PW.

Dobrze, że temat rozwiązany 🙂 Na przyszłość warto zapamiętać, aby nigdy nie wierzyć w takie połączenia bez lutowania (jak na Twoim zdjęciu) - to prawie nigdy nie działa poprawnie. Zawsze warto przylutować goldpiny do modułów. Nic na tym nie tracimy, a mamy pewność, że układ będzie działał poprawnie.

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.