Skocz do zawartości

Eobs

Użytkownicy
  • Zawartość

    1
  • Rejestracja

  • Ostatnio

Reputacja

1 Neutralna

O Eobs

  • Ranga
    1/10
  1. 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: 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
×
×
  • Utwórz nowe...