Skocz do zawartości

Serwo cyfrowe sterowanie


Rayu85

Pomocna odpowiedź

Witam,

Mam pytanie, posiadam 3 serwa cyfrowe https://botland.com.pl/serwa-typu-standard/3576-serwo-powerhd-lf-20mg-standard.html

i mam pytanie czy nimi steruje się w inny sposób niż serwem analogowym?

Szukając informacji o serwach cyfrowych, znalazłem wiele artykułów mówiących o różnicach między serwem analogowym a cyfrowym ale wszystkie wskazują na to że steruje się tak samo.

Tymczasem podłączając serwo nic się nie dzieje, napięcie 5V ze stabilizatora LM7805. Układ podłączony zgodnie z schematem z kursu:

prosty kod sterujący dla sprawdzenia czy działa:

#include <Servo.h> // biblioteka serwa
Servo servo; // obiekt serwa
int pozycja;
int pozycjaWyjsciowa = 90;
String odebraneDane;
boolean pauza=false;


void setup() {
servo.attach(9);
servo.write(pozycjaWyjsciowa);
pinMode(10, OUTPUT);
digitalWrite(10, HIGH);
Serial.begin(9600);
}

void loop() 
 {
   if (pauza==false){
     Serial.println("Podaj kat wychylenia od 0-180");
     pauza=true;
   }
      if(Serial.available() > 0){
           odebraneDane = Serial.readStringUntil('\n');
           pozycja = odebraneDane.toInt();
        if (pozycja <=180 && pozycja >= 0) 
           {servo.write(pozycja);//wykonaj ruch
           Serial.println(pozycja);
           delay(100);}
        else
           {Serial.println("Pozycja poza zakresem!");}
            }
 }

Dla próby podłączam tanie micro serwo i wszystko działa poprawnie.

W czym może leżeć problem? Serwa cyfrowe są sterowane sygnałem do 333Hz a analogowe stałym 50Hz czy tu szukać problemu?

Robiłem również próbę podłączając serwo przez stabilizator z 2x18650 i również nic. Podejrzewałem że może bateria 9V nie jest wystarczająca dla takiego serwa.

Dodam że serwo jest raczej sprawne bo mam nowe 3 sztuki takiego serwa i żadne nie działa.

Link do komentarza
Share on other sites

Rayu85, prawdopodobnie wina leży w zasilaniu. W kursie korzystaliśmy z baterii 9V jedynie demonstracyjnie (do tamtego malutkiego serwa wystarcza). Przy projektach, które mają działać dłużej z serwami lepiej byłoby wykorzystać akumulator lub 6 baterii AA. Chociaż nawet przy tym zasilaniu serwo powinno trochę drgać lub "tykać"... Ciężko gdybać na odległość, masz możliwość sprawdzenia układu z innym źródłem zasilania?

Link do komentarza
Share on other sites

Dzięki za odpowiedz:) Mieliście racje, udało mi się wczoraj skończyć mój moduł zasilania na ogniwach 18650, i działają wszystkie 3 serwa:)

Jedno co zauważyłem to, że podłączając np 3 serwa sterowane nawet tym samym PWN nie reagują jednocześnie tylko często któreś rusza wcześniej niż 2 pozostałe.

Czy to też może być spowodowane zasilaniem czy już raczej samym serwem? (Serwa są identyczne)

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

To nadal może być problem przysiadania napięcia. W czasie startu silnik serwa może pobierać bardzo dużo prądu i nie starcza go - nawet z 7805 - na trzy na raz. Spróbuj z dwoma, bo nie zdziwiłbym się, gdyby jedno wciągało przez chwilę >1A. Do serwomechanizmów cyfrowych - w których ceną za szybkość i dokładność jest właśnie pobór prądu - potrzebujesz naprawdę potężnego zasilacza.

Link do komentarza
Share on other sites

Podpinam się pod temat sterowania serwa Tower Pro MG995 digi hi-speed. Serwo w miare dobrze działa jeśli w pętli ciągle jest sterowane, natomiast jeśli np chcę nim sterować czyli np za pomocą klawiatury to serwo drga gdy czeka na komendę. Zasilanie ciągne z zasilacza komputerowego 5V i mam wspólną masę z raspberry pi zero.

import RPi.GPIO as GPIO
import time 
# use P1 header pin numbering convention
GPIO.setmode(GPIO.BOARD)

GPIO.setup(11,GPIO.OUT)
pwm = GPIO.PWM(11,50)
pwm.start(2)
time.sleep(1)

try:
dane = -1

while (dane != "0"):			
	dane = raw_input("Wprowadz cyfre:");		
	pwm.ChangeDutyCycle(float(dane))	
	time.sleep(.03)


except KeyboardInterrupt:
pwm.stop()
GPIO.cleanup()

pwm.stop()
GPIO.cleanup()
print "Konic"
Link do komentarza
Share on other sites

Serwo nie może być "nieciągle" sterowane. Zawsze musisz do niego wysyłać ciąg impulsów PWM. Nie ma tu czegoś takiego jak "komendy". Jeśli zatrzymujesz generację sygnału dla serwa to ten stan jest przez nie traktowany jak awaryjny - jak utrata łączności radiowej lub urwanie kabelka. I tak masz dużo szczęścia, że nie zwariowało i w tym czasie nie ukręciło sobie np. potencjometru tylko w miarę spokojnie czekało na powrót impulsów. Nie każde jest takie mądre.

Link do komentarza
Share on other sites

Z tego, co wiem, to serwa cyfrowe przy utracie sygnału albo się wyłączają (tak jak analogowe), albo po prostu trzymają poprzednią pozycję. I nie ma tym nic złego -- sam tak robię z serwami, kiedy nie muszą trzymać pozycji, a nie chcę, żeby brały prąd albo hałasowały.

Natomiast patrząc na przedstawiony kod nie widzę nigdzie "wyłączania sygnału" (poza tym przy KeyboardInterrupt, ale to jest przy przerywaniu działania programu).

Podejrzewam, że problemem jest raczej albo jak zwykle nieadekwatne zasilanie, albo nierówny sygnał PWM generowany przez software na Raspberry Pi na którym jest Linux, który jakby nie patrzeć systemem czasu rzeczywistego nie jest.

Przedałoby się zmierzyć napięcie zasilania na tym serwie i/lub popatrzeć na ten sygnał PWM jakimś oscyloskopem albo analizatorem logicznym -- ale pewnie nie ma co na to liczyć.

Link do komentarza
Share on other sites

Oczywiście masz rację, słabe zasilanie to powód większości problemów z serwami, ale "zasilacz komputerowy" to zwykle kawał elektronicznego mięcha.

Swoją drogą nie zauważyłem, by producenci jakoś opisywali zachowanie się swoich serw w przypadku braku sygnału PWM. Dalekowschodnie karty katalogowe są lakoniczne i specyfikują tylko oczywiste parametry. Mówię tu o tanich, nieprogramowalnych serwach, nawet "cyfrowych" takich jak wspomniane TowerPro MG995 czy 996. Z pewnością wbudowują w nie jakieś mechanizmy obronne żeby nie robiły tego co starsze modele, ale standardu tu raczej nie ma. Lepiej nie liczyć na takie cechy przed zakupem jeśli nie ma tego wyraźnie opisanego w dokumentacji. Ty to wiesz, sprawdziłeś na swoich sztukach i OK, można to wykorzystać. Tutaj też się udało o tyle, że żadna maskara się nie wydarzyła, ale lekkomyślne wyłączanie PWM bez specjalnej przyczyny to moim zdaniem jednak błąd w sztuce.

Link do komentarza
Share on other sites

tzn miałem na myśli, że gdy w pętli jest zmianieniany dutyCycle czyli wypełnienie to serwo nie wydaje dziwnych dzwięków i chodzi płynnie (ciągle zmienia pozycję). Gdy stoi w jednej pozycji to słychać niepokojące dzwięki i trochę szaleje.Co do napięcia na serwach to na mierniku pokazuje mi 6.14V w stanie spoczynku,a podczas ruchu serw spada do 5.5V.

Zastanawiam się nad ustawioną częstotliwością czy powinna ona wynosić 50 Hz

Link do komentarza
Share on other sites

Możesz próbować coś na oślep:

- lepszy/inny zasilacz - strasznie spada napięcie, komputerowy to myślałem, że jakiś ATX z 5V/15A a to jakiś cienias,
- lepsze kabelki, dobra masa, dodatkowy kondensator z 1000uF/16V przy zasilaczu itp

ale bez obejrzenia sygnału PWM na oscyloskopie będzie trudno coś poprawić. Być może programowa generacja w Malinie pozostawia wiele do życzenia i serwo powtarza jitter tego co dostaje. Może spróbuj podłączyć serwo do sprzętowego PWM z jakiegoś Arduino lub 555?

EDIT: Tak, powinno być 50Hz. Na pewno oglądałeś już kartę katalogową tego serwa. Stoi tam jak byk 20ms.

Link do komentarza
Share on other sites

Zasilacz ATX 300 niby 30A przy 5V wszelki wypadek spróbuje inny. Spróbuje też z kondensatorem ewentualnie pod Arduino potestuje i pod hardwareowym pwm. Ewentualnie myślałem nad sterownikiem do serw KLIK

z tym że przy niektórych pisze, że obsługują tylko analogowe serwa

Link do komentarza
Share on other sites

Wszystko, co obsługuje analogowe serwa obsłuży też to serwo cyfrowe. Tam, gdzie piszą, że nie obsługuje cyfrowych nie mają na myśli zwykłych serw od zabawek ze zdalnym sterowaniem, tylko specjalistyczne serwa do robotów w rodzaju AX-12 -- tak zwane "smart servo". Tego nie obsłuży, bo to jest sterowane komendami po half-duplexowym serialu, a nie sygnałem PWM.

Na raspberry pi możesz jeszcze spróbować sterownika "servo blaster" w trybie demona użytkownika (https://github.com/richardghirst/PiBits/tree/master/ServoBlaster) -- w przeciwieństwie do biblioteki GPIO on robi PWM prawie całkiem sprzętowo -- z wykorzystaniem DMA -- więc powinien dawać lepsze efekty. Ja tego używałem w jednym z moich pająkowatych robotów.

Link do komentarza
Share on other sites

Dzięki wielkie, będę wykonywał testy i dam znać jaki rezultat.

Edit: Na arduino znacznie lepiej działają te serwa, teraz przejdę do testów z servoBlaster na malinie

[ Dodano: 13-03-2017, 08:56 ]

Jeszcze jedno mam pytanie co do podłączanie serw pod arduino a sterowanie z pi zero. Połączyłem przez port USB płytki i dane przesyłam przez Serial o prędkości 9600. Nadaje liczby jako kąt obrotu silników z klawiatury w pętli i jest następujący problem. Około 3 razy udaje się szybko odebrać dane przez arduino (silniki obracają się bez opóźnień), ale później każde kolejne wysłanie kąta powoduje, że serwo reaguje po około 2s. Jak wyłącze i włącze program to znowu 2 lub 3 razy szybko serwo reaguje, a później z opóźnieniem. Ktoś ma pomysł czym może być spowodowane dane opóźnienie?

Może być, że malina jest za bardzo obciążona lub ma jakieś przerwania?

[ Dodano: 13-03-2017, 18:16 ]

Podczas kolejnych prób w połączeniu raspberry pi -> Arduino udało mi się dziwnym trafem uzyskać płynną transmisję (bez opóźnień) kabel od GND odłączyłe podłączyłem i coś jeszcze. Niestety po odłączeniu arduino i podłączeniu jeszcze raz znowu zaczęło działać powoli połączenie i nie potrafiłem powrócić do dobrego stanu. Wydaje mi się że może problem być z napięciami lub zbyt niskim prądem, dlatego też załączam schemat może ktoś pomoże.

Link do komentarza
Share on other sites

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...

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.