espiridion Napisano Maj 12, 2019 Udostępnij Napisano Maj 12, 2019 Cześć, Nie jestem osobą wykształconą technicznie, jestem artystą, ale potrzebuję porady. Mam dwa sterowniki 16-kanałowe do serw Adafruit PCA9685 oraz drugi PCA9685 innej firmy (tańszy). Jako pwm0 mam podłączony ten tańszy i zasila on moje małe serwa i duże serwa (razem 16 sztuk) płynnie przy zasilaniu 5V i 2A Jako pwm1 mam podłączony Adafruit (jako 0x41 - zaadresowałem cyną punkt A0) i wszystkie kabelki są podłączone zgodnie ze schematem, sprawdzałem nawet prąd wyjściowo jest 4.75V i do małych 4-5 serw, ale jednak nie działają, ale dioda się świeci, więc chyba z zasileniem nie ma problemu? Nie wiem ile A? Ale jeśli miałbym zasilacz 5V i 10A to by lepiej działało? Chyba, że to kwestia kodu? Zastanawiam się nad funkcją "uint8_t" przy parametrach servo. #include <Wire.h> #include <Adafruit_PWMServoDriver.h> Adafruit_PWMServoDriver pwm0 = Adafruit_PWMServoDriver(0x40); Adafruit_PWMServoDriver pwm1 = Adafruit_PWMServoDriver(0x41); // 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 servo1 = 0; uint8_t servo2 = 1; uint8_t servo3 = 2; uint8_t servo4 = 3; uint8_t servo5 = 4; uint8_t servo6 = 5; uint8_t servo7 = 6; uint8_t servo8 = 7; uint8_t servo9 = 8; uint8_t servo10 = 9; uint8_t servo11 = 10; uint8_t servo12 = 11; uint8_t servo13 = 12; uint8_t servo14 = 13; uint8_t servo15 = 14; void setup() { Serial.begin(9600); Serial.println("32 channel Servo test!"); pwm0.begin(); pwm0.setPWMFreq(60); // Analog servos run at ~60 Hz updates pwm1.begin(); pwm1.setPWMFreq(1600); // This is the maximum PWM frequency 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); pwm0.setPWM(n, 0, pulse); pwm1.setPWM(n, 0, pulse); } void loop() { for (uint16_t pulselen = SERVOMIN; pulselen < SERVOMAX; pulselen++) { pwm0.setPWM(servo1, 0, pulselen); pwm0.setPWM(servo2, 0, pulselen); pwm0.setPWM(servo3, 0, pulselen); pwm0.setPWM(servo4, 0, pulselen); pwm0.setPWM(servo5, 0, pulselen); pwm0.setPWM(servo6, 0, pulselen); pwm0.setPWM(servo7, 0, pulselen); pwm0.setPWM(servo8, 0, pulselen); pwm0.setPWM(servo9, 0, pulselen); pwm0.setPWM(servo10, 0, pulselen); pwm0.setPWM(servo11, 0, pulselen); pwm0.setPWM(servo12, 0, pulselen); pwm0.setPWM(servo13, 0, pulselen); pwm0.setPWM(servo14, 0, pulselen); pwm0.setPWM(servo15, 0, pulselen); pwm1.setPWM(servo1, 0, pulselen); pwm1.setPWM(servo2, 0, pulselen); pwm1.setPWM(servo3, 0, pulselen); pwm1.setPWM(servo4, 0, pulselen); pwm1.setPWM(servo5, 0, pulselen); } delay(500); for (uint16_t pulselen = SERVOMAX; pulselen > SERVOMIN; pulselen--) { pwm0.setPWM(servo1, 0, pulselen); pwm0.setPWM(servo2, 0, pulselen); pwm0.setPWM(servo3, 0, pulselen); pwm0.setPWM(servo4, 0, pulselen); pwm0.setPWM(servo5, 0, pulselen); pwm0.setPWM(servo6, 0, pulselen); pwm0.setPWM(servo7, 0, pulselen); pwm0.setPWM(servo8, 0, pulselen); pwm0.setPWM(servo9, 0, pulselen); pwm0.setPWM(servo10, 0, pulselen); pwm0.setPWM(servo11, 0, pulselen); pwm0.setPWM(servo12, 0, pulselen); pwm0.setPWM(servo13, 0, pulselen); pwm0.setPWM(servo14, 0, pulselen); pwm0.setPWM(servo15, 0, pulselen); pwm1.setPWM(servo1, 0, pulselen); pwm1.setPWM(servo2, 0, pulselen); pwm1.setPWM(servo3, 0, pulselen); pwm1.setPWM(servo4, 0, pulselen); pwm1.setPWM(servo5, 0, pulselen); } delay(500); } Cytuj Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Maj 12, 2019 Udostępnij Maj 12, 2019 4 minuty temu, espiridion napisał: Jako pwm0 mam podłączony ten tańszy i zasila on moje małe serwa i duże serwa (razem 16 sztuk) płynnie przy zasilaniu 5V i 2A 2A przy 16 serwera to podejrzanie mało, co to za napędy? 5 minut temu, espiridion napisał: Jako pwm1 mam podłączony Adafruit (jako 0x41 - zaadresowałem cyną punkt A0) i wszystkie kabelki są podłączone zgodnie ze schematem, sprawdzałem nawet prąd wyjściowo jest 4.75V i do małych 4-5 serw, ale jednak nie działają, ale dioda się świeci, więc chyba z zasileniem nie ma problemu? Nie wiem ile A? Ale jeśli miałbym zasilacz 5V i 10A to by lepiej działało? Z czego zasilasz dokładnie ten układ w takim razie i jakimi serwami próbujesz sterować? 6 minut temu, espiridion napisał: Zastanawiam się nad funkcją "uint8_t" przy parametrach servo. "uint8_t" to typ danych (8 bitów bez znaku), jest to praktycznie to samo co zmienna typu "byte" w Arduino. 1 Cytuj Link do komentarza Share on other sites More sharing options...
ethanak Maj 12, 2019 Udostępnij Maj 12, 2019 16 minut temu, espiridion napisał: pwm1.setPWMFreq(1600); // This is the maximum PWM frequency To na pewno tak ma być? 2 Cytuj Link do komentarza Share on other sites More sharing options...
espiridion Maj 12, 2019 Autor tematu Udostępnij Maj 12, 2019 (edytowany) @Treker Dziękuje Ci za odpowiedź. Wiem, sam jestem zdziwiony, że jednak dają radę działać przy 2A, ale mam w planach kupić jakiś zasilacz 5V z 10A albo 20A ale dlaczego takiego nie ma na Botlandzie? Od czego to zależy? Micro serwa to TowerPro SG-90 Standard serwa to TowerPro SG 5010 EDIT: Jednak była pomyłka w kodzie bo przy parametrze pwm1.setPWMFreq(); dałem 1600 zamiast 60 i teraz działa jak należy, nie ma żadnych zacięć. @ethanak Właśnie już to zauważyłem. Dziękuje za pomoc. EDIT: Serwa przy 2A działają wolniej niż pojedynczy, dlatego przymierzam się do kupna 5V z 18-20A zasilacza. Serdecznie pozdrawiam. Edytowano Maj 12, 2019 przez espiridion Cytuj Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. 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
Pomocna odpowiedź
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!