Skocz do zawartości

Zasilanie Arduino jednocześnie z 12V i USB


BaxterJR

Pomocna odpowiedź

Odłączyliśmy 2 silniki, podłączyliśmy pod mostek i napisaliśmy program:

#define LEFT     0
#define RIGHT    1

void setup() {

  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(12, OUTPUT);

}

void loop() {
  
  startMotor(LEFT, 255, 5, 6, 7);
  delay(2000);
  stopMotor(5, 6, 7);
  delay(500);
  startMotor(RIGHT, 255, 5, 6, 7);
  delay(2000);
  stopMotor(5, 6, 7);
  delay(500);
  startMotor(LEFT, 255, 10, 11, 12);
  delay(2000);
  stopMotor(10, 11, 12);
  delay(500);
  startMotor(RIGHT, 255, 10, 11, 12);
  delay(2000);
  stopMotor(10, 11, 12);
  
}


void startMotor (boolean dir, uint8_t _speed, int pin_pwm, int pin_silnikA, int pin_silnikB) {

    if(dir) {
      
      digitalWrite(pin_silnikA, LOW);
      digitalWrite(pin_silnikB, HIGH);
      analogWrite(pin_pwm, _speed);
      
      }
    else {

      digitalWrite(pin_silnikB, LOW);
      digitalWrite(pin_silnikA, HIGH);
      analogWrite(pin_pwm, _speed);
      
      }
  }

void stopMotor(int pin_pwm, int pin_silnikA, int pin_silnikB) {

      digitalWrite(pin_silnikA, LOW);
      digitalWrite(pin_silnikB, LOW);
      analogWrite(pin_pwm, 0);
      
  
  }

Ramię zachowuje się dość nieprzewidywalnie. Prąd jaki wychodzi z mostka to 5V oraz 0,5 A  +/-, zasilacz mamy 6V 1A. Ramię na początku działa normalnie, a po chwili jeden silnik przestaje w ogóle działać, a drugi obraca się w jedną stronę.

Link do komentarza
Share on other sites

Jesteś w sytuacji typowej dla każdego konstruktora: coś zbudowałeś, oczekiwania były spore a urządzenie nie działa poprawnie. Coś jest więc nie tak i zachodzą zjawiska których nie przewidziałeś i których nie widzisz. Zwyczajnie musisz je odkryć - tak robi każdy kto idzie nową (dla siebie) ścieżką. Zacznij od początku planując kroki, które po kolei będą potwierdzać poprawność czegoś, na czego podstawie będziesz mógł wykonać następne. Prawdopodobnie na którymś etapie znajdziesz przyczynę problemów. Zatem:

Wbuduj w Arduino mechanizm upewniający Cię, że w trakcie pracy programu nie doszło do "zagłodzenia" procesora, spadku jego zasilania i restartu programu. Najprostsze to zapalenie diodki LED (ten wbudowanej w płytkę) np. na 0.5 sekundy zaraz po starcie programu (jeszcze w setup). Wtedy powinna zapalić się tylko raz po włączeniu a jej błyśnęcie w czasie pracy silników będzie oznaczało, że procek dostał po głowie i program - żeby nie wiem jak wyrafinowany - nie ma szans działać poprawnie.

Napisz prostszy program. Zacznij od jednego silnika, jednej prędkości i prostego ruchu: np. 1 sekunda w jedną stronę, sekunda przerwy, sekunda powrotu i znów sekunda przerwy. Pamiętaj, że w zasadzie nie wolno zmieniać kierunku "w locie", na pracującym silniku. Zawsze musisz poczekać na jego zatrzymanie. Puść to, niech chodzi a Ty przez kilka minut obserwuj zachowanie ramienia, mechaniki, obciążaj to czymś lekko, zmierz napięcia, prądy, kontroluj tempraturę zasilacza, stabilizatorów itp. To pierwszy test upewniający, że przynajmniej jeden silnik może chodzić dowolnie długo i nie zawala systemu zasilania ani sterowania. 

Potem wprowadzaj kolejne rozbudowy, za każdym razem upewniając się, że wszystko działa OK. To może być drugi silnik - taki sam ruch jak pierwszego i znów kilka minut pracy wahadłowej. Tym razem startują już dwa silniki więc i obciążenia systemu są dwa razy większe. Pamiętaj, że silnik pobierający normalnie 0.5A, podczas startu potrzebuje kilka razy więcej prądu (np. 3A). Jeżeli dostarczasz 6V to margines na "zapad" jest bardzo mały i start napędu może być tym kluczowym momentem gdy wysiada zasilanie. Jeśli tak się dzieje i widzisz RESETy komputerka, dziwną ospałość silników lub zwyczajnie zmierzysz spadki napięć na szynie 6V, to potwierdź to. Wystarczy zmienić program tak, by nie ruszał "z kopyta" od zera do 100% a powoli zmieniał PWM w czasie np. 1 sekundy. Jeśli to pomoże już wiesz, że to prąd rozruchowy i musisz wymienić zasilacz na mocniejszy. Swoją drogą od razu Ci powiem, że do takiego ramienia i tylu napędów to szacowałbym potrzebną wydajność na 8-10A właśnie z uwagi na prądy startowe. Musisz być pewien przyczyn i skutków, bo z powierzchownych obserwacji możesz wyciągać ruskie wnioski (mucha ogłuchła..). Rozpisz sobie plan badań i konsekwentnie go realizuj za każdym razem notując co zauważyłeś. Nie udawaj, że w danym kroku wszystko działa dopóki na 100% nie masz pewności, że tak jest. W końcu dojdziesz przyczyn problemów a przy okazji dobrze zrozumiesz działanie projektu i jego ograniczenia. Tak się robi niezalezanie od tego czy robisz zabawkę na Arduino czy profesjonalny sprzęt. Żaden nietrywialny projekt nie działa w 100% od razu. Do roboty.

  • Lubię! 1
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

Kochani,

Ruszyłem z testami Ramienia KRS10 Vellman i mam pytanie czy mogę zwiększać PWM dla jednego z pięciu silniczków wszystkie są takie same od 0 do 255 z delay(500). Gdy robię do 150 to prąd rośnie od 0 do 230mA i potem zeruję i od nowa w pętli for.

Czy mi się silniczek nie przepali? chyba inne silniki mogą mieć inne prądy jeszcze tego nie sprawdziłem?




#define LEFT     0
#define RIGHT    1

void setup() {

  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);

}

void loop() {
for(int i=0; i<=150; i++)
  {
  startMotor(RIGHT, i);
  delay(500);
  }
  /*
  startMotor(LEFT, 127);
  delay(1000);
  startMotor(RIGHT, 255);
  delay(1000);
  startMotor(RIGHT, 127);
  delay(1000);
  stopMotor();
  delay(1000);
  */
}


void startMotor (boolean dir, uint8_t _speed) {

    if(dir) {
      
      digitalWrite(6, LOW);
      digitalWrite(7, HIGH);
      analogWrite(5, _speed);
      
      }
    else {

      digitalWrite(7, LOW);
      digitalWrite(6, HIGH);
      analogWrite(5, _speed);
      
      }
  }

void stopMotor() {

      digitalWrite(6, LOW);
      digitalWrite(7, LOW);
      analogWrite(5, 0);
      
  
  }

 

Link do komentarza
Share on other sites

Szanowni Koledzy,

Podłączyliśmy zasilacz 6V do arduino oprócz zasilania USB chcieliśmy wysterowąć silniczkiem pojedynczym Ramienia robota KSR10 Vellman. Niestety napięcie na Vin jest 0V i tylko ciągnie z USB. Może te 6V to za mało ale czy większe napięcie wytrzyma pojedynczy silniczek z pięciu w tym Ramieniu? Prosilibyśmy o pomoc co zrobić?

Link do komentarza
Share on other sites

Dzień dobry,

Chcieliśmy sterować przez Arduino, ramieniem robota KSR10 Vellman. Po naszych doświadczeniach z jednym silniczkiem, widzimy, że czasem trudno jest sterować jednym, a co dopiero pięcioma. Jeśli zwiększamy pwm do od 0 do 255 z przerwą 50 ms, silnik nie reaguje, tylko słychać gotowość, a nie ma obrotów silnika. Natomiast jeśli zadziałamy od razu pwm 255, a potem zmniejszymy do 127 z przerwą 1 s, wszystko działa. Zmiana pwm w sposób łagodny, skutkuje brakiem obrotów. Prosilibyśmy o opinię, czy w ogóle jest sens sterowania tymi silniczkami przez Arduino.

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.