Skocz do zawartości

Brak reakcji serw podłączonych do PCA9685


Bachu

Pomocna odpowiedź

Witam!
Mam problem z kontrolerem serw PCA9685. Serwa po podłączeniu do kontrolera nie reagują, nawet nie trzymają pozycji. Na szynę zasilającą serwa jest podłączona bateria 9V przez stabilizator L7805.
Połączenia:

SCL ---> SCL
SDA --->SDA
VCC ---> 5V
GND --->GND

Program:

/*************************************************** 
  This is an example for our Adafruit 16-channel PWM & Servo driver
  Servo test - this will drive 8 servos, one after the other on the
  first 8 pins of the PCA9685

  Pick one up today in the adafruit shop!
  ------> http://www.adafruit.com/products/815
  
  These drivers use I2C to communicate, 2 pins are required to  
  interface.

  Adafruit invests time and resources providing this open source code, 
  please support Adafruit and open-source hardware by purchasing 
  products from Adafruit!

  Written by Limor Fried/Ladyada for Adafruit Industries.  
  BSD license, all text above must be included in any redistribution
 ****************************************************/

#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>

// called this way, it uses the default address 0x40
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();
// you can also call it with a different address you want
//Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver(0x41);
// you can also call it with a different address and I2C interface
//Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver(&Wire, 0x40);

// Depending on your servo make, the pulse width min and max may vary, you 
// want these to be as small/large as possible without hitting the hard stop
// for max range. You'll have to tweak them as necessary to match the servos you
// have!
#define SERVOMIN  150 // this is the 'minimum' pulse length count (out of 4096)
#define SERVOMAX  600 // this is the 'maximum' pulse length count (out of 4096)

// our servo # counter
uint8_t servonum = 0;

void setup() {
  Serial.begin(9600);
  Serial.println("8 channel Servo test!");

  pwm.begin();
  
  pwm.setPWMFreq(60);  // Analog servos run at ~60 Hz updates

  delay(10);
}

// you can use this function if you'd like to set the pulse length in seconds
// e.g. setServoPulse(0, 0.001) is a ~1 millisecond pulse width. its not precise!
void setServoPulse(uint8_t n, double pulse) {
  double pulselength;
  
  pulselength = 1000000;   // 1,000,000 us per second
  pulselength /= 60;   // 60 Hz
  Serial.print(pulselength); Serial.println(" us per period"); 
  pulselength /= 4096;  // 12 bits of resolution
  Serial.print(pulselength); Serial.println(" us per bit"); 
  pulse *= 1000000;  // convert to us
  pulse /= pulselength;
  Serial.println(pulse);
  pwm.setPWM(n, 0, pulse);
}

void loop() {
  // Drive each servo one at a time
  Serial.println(servonum);
  for (uint16_t pulselen = SERVOMIN; pulselen < SERVOMAX; pulselen++) {
    pwm.setPWM(servonum, 0, pulselen);
  }

  delay(500);
  for (uint16_t pulselen = SERVOMAX; pulselen > SERVOMIN; pulselen--) {
    pwm.setPWM(servonum, 0, pulselen);
  }

  delay(500);

  servonum ++;
  if (servonum > 7) servonum = 0;
}

Wszystko wcześniej działało. Nie mam pojęcia co mogło się stać. Próbowałem zamieniać SDA z A4 i SCL z A5, ale niestety bez efektów. 

Link do komentarza
Share on other sites

14 godzin temu, Bachu napisał:

Na szynę zasilającą serwa jest podłączona bateria 9V przez stabilizator L7805.

Takie zasilanie może się sprawdzić przy krótkich testach jednego, małego serwa. Jeśli masz ich kilka to zapomnij o takim podejściu. Nawet nie patrzę w kod, bo na pewno główny problem leży w zasilaniu. Musisz wymienić baterię 9V na odpowiedni zasilacz, minimum 5 baterii AA lub ewentualnie możesz zasilać serwa bezpośrednio z 3xAA (z pominięciem stabilizatora). Nawet jeśli problem leży gdzieś w kodzie to i tak należy zacząć od wymiany zasilania 😉

Link do komentarza
Share on other sites

Cześć Treker. 

Żechciałbyś może wyjaśnić  na swój przystępny sposób od podstaw jak ogarnąć sterownik pca9685? Znalazłem kilka źródeł odnośnie tego zagadnienia ale jakoś Twoje objaśnienia zagadnień jest najbardziej przystępne. 

Z góry dzięki i pozdrawiam. 

Link do komentarza
Share on other sites

@Bemol niestety aktualnie nie planuje tworzenia materiałów na temat tego układu, jeśli coś się zmieni to ewentualny artykuł na pewno pojawi się na blogu 🙂 W między czasie polecam jednak sprawdzić artykuł od Adafruit, który tłumaczy wszystko w dość klarowny sposób: https://learn.adafruit.com/16-channel-pwm-servo-driver?view=all

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

@Bemol poczytaj poradnik, spróbuj coś uruchomić, a w razie problemów pytaj na forum 😉 Nie zmienia to jednak faktu, że musisz zacząć od wymiany zasilania, bo zasilanie kilku serw z baterii 9V nie jest możliwe.

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.