czwartek, 7 września 2017

Serwomechanizm TowerPro SG90

TowerPro SG90 to jeden z najtańszych i najpopularniejszych serwomechanizmów. Znajduje zastosowanie głównie w modelarstwie, ale może również z powodzeniem obracać nim niewielką kamerą, czy jakimś czujnikiem. Mi posłużył do obracania ultradźwiękowego miernika odległości HC-SR04. Zakupiony na Aliexpress zestaw zawierał komplet trzech orczyków i trzech wkrętów. Jego ceny zaczynają się od 1,3 euro.

Serwo i dodatki


Specyfikacja
  • wymiary: 22 x 11.5 x 22,5 mm
  • waga: 9 g
  • zasilanie: 4,8V
  • pobór prądu: 550 mA
  • napięcie sygnału sterującego: 3,3 V lub 5 V
  • sterowanie: PWM, częstotliwość sygnału 50Hz
  • zakres wypełnienia PWM: 500 - 2400 mikrosekund
  • szybkość: obrót o 60 stopni w 0.12 s (4,8V bez obciążenia)
  • siła: 1 kg / cm ramienia (4.8V)
  • obrót w zakresie 0 - 180 stopni

Opis

Wracając jeszcze do specyfikacji, trzeba dodać, że jest ona dość specyficzna dla tego urządzenia, bo patrząc na różne strony, można znaleźć  różne informacje, np siłę czy zakres napięć zasilania. W przypadku zasilania, być może jest to problem mieszania napięcia sterowania z napięciem zasilania. Póki co sprawdzałem serwo przy zasilaniu i sterowaniu 5V, przy którch działa ono bezproblemowo.

Serwo można zmodyfikować, tak aby obracało się o pełne 360 stopni. Opisane jest to w artykule "Hack a TowerPro Micro Servo to Spin 360 / Continuous Rotation". Z kolei schemat elektryczny i schemat obwodu drukowanego znajdziemy w artykule "T-Pro SG90 Micro Servo - Autopsy". Elektronika opiera się na sterowniku AA51880.

Ustawienie pozycji serwa zależy od czasu trwania impulsu:
  • środek (0 stopni) - 1,5ms
  • skrajna lewa (-90 stopni) - 1ms
  • skrajna prawa (+90 stopni) - 2ms
przy okresie 20ms (50Hz) sygnału sterującego.


Piny
  • zasilanie (Vcc, przewód czerwony
  • masa (GND, przewód brązowy)
  • sterowanie PWM (przewód pomarańczowy)

Uruchomienie

Użyłem tu kod  z tutoriala Sweep dostępny na stronie Arduino oparty o bibliotekę Servo. Biblioteka ta pozwala na jednoczesną obsługę do 12 serw.

#include <servo.h>

Servo myservo;  //tworzy obiekt serwo do kontrolujący serwo

int pos = 0;    //pozycja serwo

void setup() {
  myservo.attach(13);  //sterowanie serwo na pinie 13
}

void loop() {
  for (pos = 0; pos <= 180; pos += 1) { //obrót od 0 do 180 stopni z krokiem 1 stopnia
    myservo.write(pos); //ustawienie pozycji na serwie
    delay(15); //czas 15ms na ustawienie pozycji
  }
  for (pos = 180; pos >= 0; pos -= 1) { //obrót od 180 do 0 stopni z krokiem 1 stopnia
    myservo.write(pos);
    delay(15);
  }
}

Uruchomienie serwo
Odnośnie podłączania pinów, warto zwracać uwagę na poprawność połączenia. Mi późnym wieczorem zdarzyło się podłączyć serwo odwrotnie, tj zamieniłem pin masy i pwm, co mu mocno zaszkodziło. Okazało się, że przy dotychczasowym pos 0 zaczął kręcić się w kółko, poza tym jest trochę "głośniejszy". Mimo to, nadal można na nim pracować z tą różnicą, że aby uzyskać dawne kąty muszę teraz zmieniać wartość zmiennej pos w węższym przedziale od 30 do 150.



Źródła
1) Specyfikacja TowerPro SG90 (pdf)
2) How To Control the Tower Pro SG90 Servo with Arduino UNO
3) Biblioteka "Servo" - dokumentacja
4) Hack a TowerPro Micro Servo to Spin 360 / Continuous Rotation
5) SERVOS: Information - Electrical and mechanical
6) Specyfikacja AA51880
7) Biblioteka "Servo" - kod źródłowy

1 komentarz: