Skocz do zawartości

Pomocna odpowiedź

Napisano

Drodzy koledzy chciałbym prosić o pomoc:

Hobbistycznie buduje robota na wzór:

image.thumb.png.46c7ab1f588fe798ec7c0b4cabd496e3.png

W zasadzie interesuje mnie samo podwozie. Wydrukowałem i złożyłem wszystko w całość.

Całość waży: 910g (podwozie, okablowanie, arduino uno, PCA9685, kabel do programowania)

Zastosowałem:

1. Źródło energii ogniwa 3x 18650 4,2V DC 1200mA (waga: 150g - na tą chwile jest poza podwoziem)

2. 18x Servo MG-90S specyfikacja:

image.thumb.png.bb308b6068d49667057bfd331f6727a7.png

3. Płyta Arduino UNO

4. Kontroler PCA9685 nakładka na Arduino uno

image.thumb.png.e556d33649dbff247cff207b52647a7b.png

5. Redukcja dla serv: 300W 20A DC-DC Buck Converter Step Down Module

image.thumb.png.d20bfe256c078d03a5c399aca2523bcd.png

image.thumb.png.6d23b048ef84d74f505a6e1235b5268d.png

6. Całość złożona:

image.thumb.png.3334d31926604c3c9605d57b49089944.png

Na potrzeby startu:

Arduino zasilone bateria 9V

PCA9685 zasilone poprzez step down ustawiony na 5,5V

Program:

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

Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver(0x40); // I2C 0x40

#define SERVOMIN  100                   // 0 stopni
#define SERVOMAX  600                   // 180 stopni 400 - 90 stopni
#define SERVO_1 0                       
#define SERVO_2 1
#define SERVO_3 2                       
#define SERVO_4 3
#define SERVO_5 4
#define SERVO_6 5
#define SERVO_7 6
#define SERVO_8 7
#define SERVO_9 8
#define SERVO_10 9
#define SERVO_11 10
#define SERVO_12 11
#define SERVO_13 12
#define SERVO_14 13
#define SERVO_15 14
#define SERVO_16 15

void setup() 
{
  pwm.begin();                          
  pwm.setPWMFreq(60);                   
  delay(10);                            

// pozycja startowa Noga 1

  pwm.setPWM(SERVO_11, 0, 120);
  delay(250);

  pwm.setPWM(SERVO_12, 0, 490);
  delay(250);

  pwm.setPWM(SERVO_13, 0, 400);
  delay(250);

// pozycja startowa Noga 3

  pwm.setPWM(SERVO_1, 0, 350);
  delay(250);

  pwm.setPWM(SERVO_2, 0, 100);
  delay(250);

  pwm.setPWM(SERVO_3, 0, 150);
  delay(250);

// pozycja startowa Noga 6

 pwm.setPWM(SERVO_14, 0, 315);
 delay(250);

 pwm.setPWM(SERVO_15, 0, 600);
 delay(250);

 pwm.setPWM(SERVO_16, 0, 600);
 delay(250);

// pozycja startowa Noga 4

 pwm.setPWM(SERVO_4, 0, 370);
 delay(250);

 pwm.setPWM(SERVO_5, 0, 600);
 delay(250);

 pwm.setPWM(SERVO_6, 0, 575);
 delay(250);

// pozycja startowa Noga 2

//  pwm.setPWM(SERVO_4, 0, 370); // brak wolnego slota
//  delay(250);

 pwm.setPWM(SERVO_7, 0, 150);
 delay(250);

 pwm.setPWM(SERVO_8, 0, 100);
 delay(250);

// pozycja startowa Noga 5

//  pwm.setPWM(SERVO_4, 0, 370); // brak wolnego slota
//  delay(250);

 pwm.setPWM(SERVO_9, 0, 550);
 delay(250);

 pwm.setPWM(SERVO_10, 0, 450);
 delay(250);

}

Mój problem:

Robot podczas zasilenia nie wstaje do końca mimo małej masy

Teraz pytanie czy źle zasilam shield?

Czy dałem za małe opóźnienie pomiędzy serwami podczas podnoszenia się do pozycji startowej i za dużo serw naraz pracuje?

Kod działa poprawnie gdy nie ma obciążenia 

 

Proszę o sugestie z góry dziękuje 

  • Lubię! 1

Na pewno warto zacząć od zmierzenia napięcia, które idzie na serwa podczas ich pracy. Sprawdź czy przy ruchach wszystkich serw napięcie nie siada zbyt mocno 🙂

  • Lubię! 1
(edytowany)

Ja bym dodatkowo sprawdził napięcie na akumulatorach i prąd jaki idzie na przetwornicę - te serwa potrafią szarpnąć ponad amper przy obciążeniu. Oczywiście w czasie ruchu serw.

Druga sprawa - nie używałem tego konkretnego shielda tylko modułu, ale tam jest jakiś mosfet na zasilaniu (który zresztą poszedł z dymem bardzo szybko). Dlatego serwa zasilam bezpośrednio z przetwornic, a z modułu biorę tylko PWM/GND (sygnałowe).

Edytowano przez ethanak
  • Lubię! 1
42 minuty temu, ethanak napisał:

Ja bym dodatkowo sprawdził napięcie na akumulatorach i prąd jaki idzie na przetwornicę - te serwa potrafią szarpnąć ponad amper przy obciążeniu. Oczywiście w czasie ruchu serw.

Druga sprawa - nie używałem tego konkretnego shielda tylko modułu, ale tam jest jakiś mosfet na zasilaniu (który zresztą poszedł z dymem bardzo szybko). Dlatego serwa zasilam bezpośrednio z przetwornic, a z modułu biorę tylko PWM/GND (sygnałowe).

Może zasadne było by w takim razie rozdzielenie serw na 2 moduły w ten sposób:

image.thumb.png.aea3673d4ba98a4eb7043caca8145b29.png

Co myślicie? 

1 godzinę temu, Treker napisał:

Na pewno warto zacząć od zmierzenia napięcia, które idzie na serwa podczas ich pracy. Sprawdź czy przy ruchach wszystkich serw napięcie nie siada zbyt mocno 🙂

Sprawdzę pomiary jak tylko wieczorem uśpię dzieci, i napisze ile jest

3 minuty temu, ethanak napisał:

Ja mam 11 serw (różnych), zasilanie z dwóch przetwornic.

No i przewody od przetwornic do serw to 2mm²...

Boje się o wagę  czy te serwa to podniosą?

niby 2.1 - 2.5 kg

Tu nie pomogę, moja konstrukcja to animek (głowa i ręka). Mam tam dwa SG6010, ale nawet do szybkiego podniesienia 12 cm ręki muszę kombinować...

  • Lubię! 1
(edytowany)
4 godziny temu, Treker napisał:

Na pewno warto zacząć od zmierzenia napięcia, które idzie na serwa podczas ich pracy. Sprawdź czy przy ruchach wszystkich serw napięcie nie siada zbyt mocno 🙂

Hej 

@TrekerJuż mam pomiary

Podłączenie:

image.thumb.png.b0f6e69db24baad6a2fdd1944c7d1b7a.png

Pomiar ile idzie na servo:

image.thumb.png.b3eb8b6458cc1c840f253270949a1eb1.png

Pomiar ile wychodzi z Step down:

image.thumb.png.c12425bff7c2fda7fb117648593359ef.png

Czyli wychodzi, że serwa dostają za mało 

1. Podkręcić trochę V wychodzące z Step down?

Przy 6V wychodzących ze Step down

Na serwach mam 4,57V w tym przypadku

 

BEZ obciążenia Step down 6,00V serwa 5,99V

 

* nie wiem czy mogę więcej dawać na shield

2. Rozdzielenie serw na 2 moduły - wydaje się zasadne

 

Edytowano przez KamilKolesnik

Jakie dwa moduły? Daj im porządne zasilanie i to wszystko.

Jak mniemam, nie potrafisz podłaczyc zasilania serw poza wtyknięciem wtyczki w moduł i patrzeniem jak się ścieżki jarają przy 20A? Zrób sobie przejściówkę.

25 minut temu, ethanak napisał:

Jakie dwa moduły? Daj im porządne zasilanie i to wszystko.

Jak mniemam, nie potrafisz podłaczyc zasilania serw poza wtyknięciem wtyczki w moduł i patrzeniem jak się ścieżki jarają przy 20A? Zrób sobie przejściówkę.

Jaką przejściówkę masz na myśli?

  • Lubię! 1
12 godzin temu, KamilKolesnik napisał:

Jaką przejściówkę masz na myśli?

Ja mam po prostu goldpiny wlutowane w płytkę. W Twoim przypadku dałbym jeden komplet na każdą nogę (czyli po trzy gniazda). Do tego wystarczy przewód nawet 0.75² bezpośrednio do przetwornicy.

Aha, przy rozdzieleniu zasilania na kilka przetwornic może być lekki problem jeśli przetwornice mają rezystorek na OUT-.

  • Lubię! 1
  • 2 tygodnie później...

Aktualizacja

PCA9685 Arduino uno Shield zastąpiłem dwoma 

Moduł sterownika PWM 16 kanałów PCA9685:

image.thumb.png.0c66318f23f17e9876c73e80b8a5bacc.png

Zasiliłem je każdy oddzielnie z 300W 20A DC-DC Buck Converter Step Down Module

Dodatkowo do każdego podłączone jest tylko po 9 serw 

image.thumb.png.cbb90ba174d1de2caeb13e4e801fdfe8.png

Robot stoi stabilnie na 3 nogach i bez problemu wstaje

Teraz czas na zaprogramowanie ruchu

 

  • Lubię! 1

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...