[C][Atmega32] Opis serwonapędu + TWORZENIE v2.0

Dyskusje na temat silników krokowych i sterowników silników krokowych.
Awatar użytkownika

ursus_arctos
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 25
Posty: 2083
Rejestracja: 11 cze 2011, 18:29
Lokalizacja: Warszawa / Lublin

#71

Post napisał: ursus_arctos » 04 cze 2013, 16:27

Wiem, że Twój test był przy prędkości 500mm/s i przyśpieszeniu 3000mm/s^2 - ale nie wiem, jak to się ma do maksymalnej prędkości silnika (silnik bez obciążenia, PWM 100%) i maksymalnego przyśpieszenia rozruchowego (silnik w spoczynku i pełny prąd, który sterownik może wymusić).



Tagi:


Autor tematu
volkhen
Sympatyk forum poziom 1 (min. 40)
Sympatyk forum poziom 1 (min. 40)
Posty w temacie: 33
Posty: 45
Rejestracja: 03 mar 2007, 10:44
Lokalizacja: Bydgoszcz

#72

Post napisał: volkhen » 04 cze 2013, 17:59

Silnik ma 2400RPM by 24V. Ja zasilam go 20V. Przyspieszenie maksymalne sprawdzę. Zadam mu obrót 360 stopni i zapiszę trajektorię bo mogę rejestrować 200ms ruchu i później przesłać to przez RS232.

[ Dodano: 2013-06-04, 23:53 ]
Już wiem dlaczego układ działa tak jak działa. Dziś już nie mam siły tego opisywać, ale zaskoczenie dla mnie było spore. Najlepsze jest to, że w ten sposób układ działa jeszcze lepiej. Jestem ciekaw czy fabryczne serwa tak działają.

Awatar użytkownika

ursus_arctos
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 25
Posty: 2083
Rejestracja: 11 cze 2011, 18:29
Lokalizacja: Warszawa / Lublin

#73

Post napisał: ursus_arctos » 05 cze 2013, 10:31

Heh, a mnie się udało poprawić (przez strojenie członu predykcyjnego) oś Y - no i w ogóle przestało mnie dziwić, że uchyb tam jest, jaki jest - tarcie na śrubie jest olbrzymie, miejscami trudno ją obrócić palcami (!) i bardzo się zmienia w ramach jednego obrotu. Nic dziwnego, że serwo ma problem. Co do samego tarcia, to myślę o zastosowaniu nieliniowej predykcji - np. człon zależny od prędkości z progiem w zerze. - tak, aby nawet minimalna zadana prędkość pozwalała ruszyć z miejsca. To zmniejszyłoby czas odpowiedzi układu przy ruszaniu z miejsca lub zmianie kierunku.


Autor tematu
volkhen
Sympatyk forum poziom 1 (min. 40)
Sympatyk forum poziom 1 (min. 40)
Posty w temacie: 33
Posty: 45
Rejestracja: 03 mar 2007, 10:44
Lokalizacja: Bydgoszcz

#74

Post napisał: volkhen » 05 cze 2013, 20:00

Zrozumiałem dlaczego i jak działa moje serwo po zmianach w kodzie, które przyniosły niespodziewane i dobre efekty.

Od czego by tu zacząć...

Może od tego, że wypełnienia PWM od 0 do 60% były bezużyteczne przy sterowaniu gdyż silnik po prostu nie reagował na przyłożone napięcie. Dopiero powyżej wypełnienia 60% dostawał kopa. I to naprawdę nagłego. Tak jakby siła przyrastała wykładniczo do wypełnienia.

Jak wiadomo głównym czynnikiem odpowiedzi regulatora PID jest akcja proporcjonalna. Gdy błąd jest mały odpowiedź również jest mała i błąd nie jest kasowany - dlatego potrzebujemy członu całkującego. Taka charakterystyka powodowała, że serwo w okolicy punktu zadanego było "miękkie" a gdy dochodziło do owych 60% to nagle przesuwając silnik napotykało się jakby ścianę - nagły duży opór silnika. Takie rozluźnienie w okolicach punktu zadanego było usuwane przez akcję całkującą jednak ta nieliniowość siły była mocno wyczuwalna. Mam nadzieję, że opisuję to w miarę jasno.

Po zmianach w kodzie programu serwa, które wprowadziłem i opisywałem jakiś czas temu okazało się, że miękkość serwa wokoło punktu zadanego zniknęła. Co ciekawe odkryłem dziwne zachowanie serwa gdyż wartość PIDa zatrzymywała się i oscylowała wokół wartości 512 a nie jak było wcześniej wokół 0. Winę za to brała akcja całkująca, która miała wartość około 512. Z tego powodu przy włączeniu serwa zawsze było szarpnięcie, którego wtedy nie potrafiłem zrozumieć. Gdy wyłączałym akcję całkującą to serwo zatrzymywało się na 52 kroku przy wzmocnieniu P = 10 mimo punktu zadanego w 0. Wyglądało to tak jakby punktem równowagi było wyjście PIDa około 520 czyli wypełnienie równe około 50%. Było to dla mnie sporym zaskoczeniem. Przy takim sterowaniu końcówka mocy na L298 była zupełnie zimna po wielu testach i zabawach z napędem. Wcześniej przed tą zmianą bardzo mocno się grzała. Nie rozumiejąc dlaczego mój serwonapęd działa tak dobrze ;) zacząłem dochodzić o co w tym chodzi. Okazało się, że funkcje, które ustalały kierunek pracy serwa w oprogramowaniu są bezużyteczne a silnik samoistnie zatrzymuje się w miejscu przy wypełnieniu 50%. Wróćmy tutaj do tego, że wypełnienia od 0 do powiedzmy 50% były bezużyteczne gdyż silnik w ogóle nie reagował na takie napięcie. Zakładając oczywiście, że napięcie wahało się pomiędzy, 0 a U zasilania. Wtedy sterowanie odbywało się za pomocą jednego przebiegu PWM. Teraz mam dwa odwrotne przebiegi podane na mostek H nazwijmy to na przeciwległe po skosie tranzystory.

W tym momencie tak wygląda przebieg na silniku w stanie spoczynku.
Obrazek

Tym razem napięcie w + i - znosi się i silnik stoi w miejscu. Końcówka mocy nie grzeje się, silnik mimo pozostawienia na 4h również nie zagrzał się nawet w najmniejszym stopniu. Pobierany prąd jest bardzo mały. Właśnie? Dlaczego? Czyż silnik nie powinien walczyć ze sobą? co prawda przy częstotliwości 15kHz jakikolwiek ruch w prawo lewo zgodnie z napięciem jest niemożliwy.

OK, więc mamy wypełnienie 50% i silnik stoi. Już wiecie dlaczego zniknęła nazwijmy to ta strefa miękkości wokół pozycji zadanej? Bo w ten sposób wycięliśmy wartości wyjściowe PIDa, zależnego od członu proporcjonalnego proporcjonalnie do błędu (jak sama nazwa wskazuje ;)), które wynosiły od 0 do 50%. Poprzednio silnik w wartościach PIDa od -500 do +500 był bezwładny - nie reagował. Teraz stoimy w miejscu 50%, więc wypełnienie 0% oznacza pełną moc powiedzmy w prawo a 100% pełną moc w lewo. Jednocześnie PID oscyluje od 0 do 1023 (równowaga w 511), a nie jak było wcześniej od -1023 do +1023 (równowaga w 0). W tej chwili w ogóle nie ma efektu miękkości silnika wokół pozycji zadanej, ponieważ akcja proporcjonalna od razu wchodzi w zakres działania silnika.
Poniżej rysunek poglądowy, na czerwono jak wcześniej działało serwo, siła wolno przyrastała wokół punktu zadanego po czym nagle mocno rosła. Na zielono jak to działa teraz:
Obrazek

Mam nadzieję, że jest to zrozumiałe.

Czy takie podejście do tematu jest w jakikolwiek sposób błędne? Testy pokazują, że działanie jest ok.
Widzicie jakieś złe strony takiego sterowania?

Czy moje rozumowanie jest prawidłowe?

ursus_arctos, a u Ciebie jak to działa? Tak jak to opisałem?

Awatar użytkownika

ursus_arctos
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 25
Posty: 2083
Rejestracja: 11 cze 2011, 18:29
Lokalizacja: Warszawa / Lublin

#75

Post napisał: ursus_arctos » 06 cze 2013, 00:39

U mnie silnik (bez obciążenia) reaguje nawet na wypełnienia na poziomie pojedynczych %, czyli czasy włączenia na poziomie 1µs. Reakcja jest na tyle liniowa, że jak robiłem testy (znów bez obciążenia) z samym członem predykcyjnym, na 5 obrotach w jedną stronę i powrocie do 0 miałem uchyb na poziomie 40imp (1/20 obrotu) - bez żadnego sprzężenia zwrotnego, na samym liniowym sterowaniu prędkością i przyśpieszeniem!
Sterowanie mostkiem odbywa się za pomocą 2 wykluczających się sygnałów - jeden steruje "lewym dolnym" tranzystorem, drugi "prawym dolnym". Sterowanie górnymi jest podciągnięte do stanu wysokiego a wyłączaniem tranzystorów zajmuje się sterownik mostka i jego logika antyprzestrzeleniowa. Zatem silnik u mnie zawsze jest albo zasilany, albo hamowany. Prąd jest gaszony w trybie "slow decay" - wyłącznie na rezystancję uzwojenia.
Jeżeli u Ciebie jest problem z wypełnieniem poniżej 50% to (w moim mniemaniu) znaczy, że częstotliwość PWM jest o wiele za wysoka i po prostu mostek nie nadąża się włączać w odpowiednim czasie. Z szybkiego spojrzenia w notę katalogową wynika, że opóźnienie włączenia górnej gałęzi L298 to 2µs i czas narastania prądu 0.7µs. W moim sterowniku te czasy są ok 20x krótsze. Częstotliwość PWM mam 30kHz, min. wypełnienie 1/666 ;)


Autor tematu
volkhen
Sympatyk forum poziom 1 (min. 40)
Sympatyk forum poziom 1 (min. 40)
Posty w temacie: 33
Posty: 45
Rejestracja: 03 mar 2007, 10:44
Lokalizacja: Bydgoszcz

#76

Post napisał: volkhen » 06 cze 2013, 08:15

Ale na oscyloskopie nie widziałem, żeby przebieg pwm na silniku był zniekształcony. Przebieg był taki sam jak na wejściu, ale wzmocniony.

Jak jest różnica pomiędzy wypełnieniami poniżej 50% i powyżej? z punktu widzenia szybkości mostka.

PWM ma częstotliwość 15,625kHz.

Ale czy takie sterowanie jest błędne?

Na końcówce mocy L6203, która jest szybsza, nie mam czasu teraz spojrzeć w datasheet, ale ten "problem" tak samo występuje.

Awatar użytkownika

ursus_arctos
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 25
Posty: 2083
Rejestracja: 11 cze 2011, 18:29
Lokalizacja: Warszawa / Lublin

#77

Post napisał: ursus_arctos » 06 cze 2013, 10:20

Jak rozumiem, u Ciebie po prostu silnik jest zasilany w 1 stronę przez jakiś czas t i w 2 stronę przez T-t, gdzie T jest okresem PWM. Jeżeli t=T/2, to prąd jest efektywnie 0, bo w ciągu połowy okresu PWM nie zdąży za bardzo narosnąć w żadną ze stron. Silnik prawdopodobnie potwornie piszczy na częstotliwości 15.6kHz (nie każdy to słyszy). Takie sterowanie nie jest jakoś fundamentalnie błędne i może poprawiać liniowość reakcji układu w okolicach 0.


Autor tematu
volkhen
Sympatyk forum poziom 1 (min. 40)
Sympatyk forum poziom 1 (min. 40)
Posty w temacie: 33
Posty: 45
Rejestracja: 03 mar 2007, 10:44
Lokalizacja: Bydgoszcz

#78

Post napisał: volkhen » 06 cze 2013, 11:41

To co napisałeś idealnie ma się do rzeczywistości i tłumaczy dlaczego działa to jak działa. Dzięki. Uważam, że jestem raczej początkującym programistą i elektronikiem stąd takie może czasem głupie pytania.

OK, ja słyszę bardzo dobrze wysokie częstotliwości (stare telewizory, przetwornice), ale silnik nie piszczy szczególnie mocno. Trochę go słychać, ale prawdę mówiąc głośniejszy jest zasilacz od kompa ze swoim piskiem oraz dysk twardy (łożysko). Inni jak wchodzą to tego pomieszczenia to nic nie słyszą ;)

Jak przebywam dłużej w tym małym pomieszczeniu >4h to głowa mnie zaczyna boleć od tych pisków gdzie normalnie głowa mnie boli raz na rok.

[ Dodano: 2013-06-06, 19:11 ]
Końcówka mocy w stanie spoczynku pobiera 50mA wraz z częścią logiczną, gdy odciągam silnik na bok to maksymalnie zaobserwowałem 1,5A.

ODPOWIEDZ Poprzedni tematNastępny temat

Wróć do „Silniki Krokowe / Sterowniki Silników Krokowych”