[C][Atmega32] Opis serwonapędu + TWORZENIE v2.0
-
Autor tematu - Sympatyk forum poziom 1 (min. 40)
- Posty w temacie: 33
- Posty: 45
- Rejestracja: 03 mar 2007, 10:44
- Lokalizacja: Bydgoszcz
Temat braku mocy w jedną stronę został rozwiązany. L298 był uszkodzony.
[youtube][/youtube]
dalej testuję napęd. W tej chwili przerabiam dekodowanie enkodera na czterokrotne aby zwiększyć dokładność. Nie jestem zadowolony z niej ponieważ wynosi ona około 10 imp. z enkodera i nie mogę jej zmiejszyć. Jeśli po zmianie dokładności odczytu enkodera spróbuję dodać pętlę prędkości (kaskadowy PID).
I tu się pojawia pytanie. Jak to zrobić
[youtube][/youtube]
dalej testuję napęd. W tej chwili przerabiam dekodowanie enkodera na czterokrotne aby zwiększyć dokładność. Nie jestem zadowolony z niej ponieważ wynosi ona około 10 imp. z enkodera i nie mogę jej zmiejszyć. Jeśli po zmianie dokładności odczytu enkodera spróbuję dodać pętlę prędkości (kaskadowy PID).
I tu się pojawia pytanie. Jak to zrobić

-
- Lider FORUM (min. 2000)
- Posty w temacie: 25
- Posty: 2083
- Rejestracja: 11 cze 2011, 18:29
- Lokalizacja: Warszawa / Lublin
Nie wiem, co to kaskadowy PID, ale mówię: spróbuj pobawić się z feedforward. Na razie mam tylko prędkościowy FF i efekt jest naprawdę niezły - mogę miotać silnikiem z wymuszeniem sinusoidalnym o pełny obrót kilka razy na sekundę i mam uchyb na poziomie 0.01 obrotu. Przy 1Hz uchyb jest na poziomie 3 zliczeń (używam wszystkich zboczy, czyli mam 800 zliczeń na obrót).
U mnie wygląda to tak:
Mam max. prędkość silnika dla danego napięcia zasilającego (K) (docelowo będzie pełna charakterystyka) - prędkość idzie dość ładnie liniowo ze wsp. wypełnienia (przy prędkościach <5% max. jest to mocno zaburzone ze względu na tarcie statyczne szczotek i niedokładność czasu przewodzenia mostka).
Znam w danym momencie prędkość (V) i położenie (X). Znam również położenie z enkodera (x) i oszacowaną prędkość silnika (v).
Wyjście regulatora to po prostu v/K+PID(X, V, x, v).
Jak widać, regulator "zgaduje", że powinien dać wypełnienie v/K, bo mamy uzyskać prędkość v, PID zajmuje się tylko błędem tego oszacowania. Docelowo będzie jeszcze oszacowanie wyjścia dla określonego przyśpieszenia.
Zakładając, że przy pełnym wysterowaniu uzyskujemy prędkość K lub przyśpieszenie rozruchowe M, możemy oszacować wyjście regulatora jako:
v/K+ a/(M*(abs(v)-K))
dla zadanych v i a.
człon abs(v)-K wynika stąd, że moment zmniejsza się do zera w miarę zbliżania się do prędkości bez obciążenia.
Problem w tym, że o ile łatwo wyznaczyć K (po prostu puszczamy silnik wysterowany na 100% i patrzymy na prędkość) o tyle wyznaczenie M nie jest takie proste - najlepiej, jak sterownik zrobi to jakoś automatycznie, np. badając czas potrzebny do osiągnięcia połowy maksymalnej prędkości.
W ogóle, to dostrzegam pewien problem z serwami i enkoderami jako takimi: estymowanie prędkości na podstawie skwantowanego położenia powoduje nieuniknioną odpowiedź oscylacyjną członu różniczkującego przy małych prędkościach. Czytałem o tym papierek, gdzie goście to po matematycznie udowodnili. Można próbować minimalizować ten efekt, ale nie da się go wyeliminować. U mnie jest on dość boleśnie obecny - człon D mam naprawdę bardzo słabo wysterowany
U mnie wygląda to tak:
Mam max. prędkość silnika dla danego napięcia zasilającego (K) (docelowo będzie pełna charakterystyka) - prędkość idzie dość ładnie liniowo ze wsp. wypełnienia (przy prędkościach <5% max. jest to mocno zaburzone ze względu na tarcie statyczne szczotek i niedokładność czasu przewodzenia mostka).
Znam w danym momencie prędkość (V) i położenie (X). Znam również położenie z enkodera (x) i oszacowaną prędkość silnika (v).
Wyjście regulatora to po prostu v/K+PID(X, V, x, v).
Jak widać, regulator "zgaduje", że powinien dać wypełnienie v/K, bo mamy uzyskać prędkość v, PID zajmuje się tylko błędem tego oszacowania. Docelowo będzie jeszcze oszacowanie wyjścia dla określonego przyśpieszenia.
Zakładając, że przy pełnym wysterowaniu uzyskujemy prędkość K lub przyśpieszenie rozruchowe M, możemy oszacować wyjście regulatora jako:
v/K+ a/(M*(abs(v)-K))
dla zadanych v i a.
człon abs(v)-K wynika stąd, że moment zmniejsza się do zera w miarę zbliżania się do prędkości bez obciążenia.
Problem w tym, że o ile łatwo wyznaczyć K (po prostu puszczamy silnik wysterowany na 100% i patrzymy na prędkość) o tyle wyznaczenie M nie jest takie proste - najlepiej, jak sterownik zrobi to jakoś automatycznie, np. badając czas potrzebny do osiągnięcia połowy maksymalnej prędkości.
W ogóle, to dostrzegam pewien problem z serwami i enkoderami jako takimi: estymowanie prędkości na podstawie skwantowanego położenia powoduje nieuniknioną odpowiedź oscylacyjną członu różniczkującego przy małych prędkościach. Czytałem o tym papierek, gdzie goście to po matematycznie udowodnili. Można próbować minimalizować ten efekt, ale nie da się go wyeliminować. U mnie jest on dość boleśnie obecny - człon D mam naprawdę bardzo słabo wysterowany

-
Autor tematu - Sympatyk forum poziom 1 (min. 40)
- Posty w temacie: 33
- Posty: 45
- Rejestracja: 03 mar 2007, 10:44
- Lokalizacja: Bydgoszcz
Dzięki za merytoryczny post.
Co do członu D mam w planie zrobić na nim mały filtr dolnoprzepustowy. Jestem ciekaw czy wyeliminuje to problem szumu. Może jednak popsuć prędkość odpowiedzi a więc pasmo... Zobaczymy.
Drugie moje pytanie jest takie.
Mam problemy z mostkiem L298. Zaczął mi pobierać 2A w czasie spoczynku silnika, prawdopodobnie są otwarte 3 tranzystory zamiast 2... Praca układu stała się narowista i trzeszcząca, wcześniej tego nie było gdy L298 był zmostkowany na 4A.
W planach mam zmianę mostka na L6203. Jakie są wasze doświadczenia i co polecanie zamiast tych dwóch wymienionych?
Jakość jest zła z uwagi na uszkodzony mostek...
[youtube][/youtube]
Drugie moje pytanie to jak zwiększyć prędkość pracy? W konfiguracji osi podałem 500mm/s i 2000mm/s^2 a mimo to maszyna pracuje bardzo wolno. Czy prędkość jest też ustalona w G-kodzie?
Oprogramowanie LinuxCNC
Co do członu D mam w planie zrobić na nim mały filtr dolnoprzepustowy. Jestem ciekaw czy wyeliminuje to problem szumu. Może jednak popsuć prędkość odpowiedzi a więc pasmo... Zobaczymy.
Drugie moje pytanie jest takie.
Mam problemy z mostkiem L298. Zaczął mi pobierać 2A w czasie spoczynku silnika, prawdopodobnie są otwarte 3 tranzystory zamiast 2... Praca układu stała się narowista i trzeszcząca, wcześniej tego nie było gdy L298 był zmostkowany na 4A.
W planach mam zmianę mostka na L6203. Jakie są wasze doświadczenia i co polecanie zamiast tych dwóch wymienionych?
Jakość jest zła z uwagi na uszkodzony mostek...
[youtube][/youtube]
Drugie moje pytanie to jak zwiększyć prędkość pracy? W konfiguracji osi podałem 500mm/s i 2000mm/s^2 a mimo to maszyna pracuje bardzo wolno. Czy prędkość jest też ustalona w G-kodzie?
Oprogramowanie LinuxCNC
-
- Lider FORUM (min. 2000)
- Posty w temacie: 25
- Posty: 2083
- Rejestracja: 11 cze 2011, 18:29
- Lokalizacja: Warszawa / Lublin
Errata do wcześniejszego postu:
ff = v/K+ a/M
Pochrzaniło mi się, z tym spadkiem napięcia - przecież już bierzemy go pod uwagę w pierwszym składniku sumy.
Co do mostków - ja polecam HIP4081A i 4 mosfety. Zimno, szybko, cicho. Jedyny radiator w moim sterowniku, opartym o powyższy układ, zamontowany jest na regulatorze 7805.
Koszt: HIP4081A 17.50, mosfety 4x3, pozostały osprzęt jakieś 6zł.
Jedyny mankament jest taki, że potrzebne są 2 napięcia - zasilanie silnika oraz +12V do bramek (chyba, że użyjesz mosfetów z napięciem bramki 5V, wtedy możesz zasilać bramki ze źródła napięcia dla logiki).
ff = v/K+ a/M
Pochrzaniło mi się, z tym spadkiem napięcia - przecież już bierzemy go pod uwagę w pierwszym składniku sumy.
Co do mostków - ja polecam HIP4081A i 4 mosfety. Zimno, szybko, cicho. Jedyny radiator w moim sterowniku, opartym o powyższy układ, zamontowany jest na regulatorze 7805.
Koszt: HIP4081A 17.50, mosfety 4x3, pozostały osprzęt jakieś 6zł.
Jedyny mankament jest taki, że potrzebne są 2 napięcia - zasilanie silnika oraz +12V do bramek (chyba, że użyjesz mosfetów z napięciem bramki 5V, wtedy możesz zasilać bramki ze źródła napięcia dla logiki).
-
- Lider FORUM (min. 2000)
- Posty w temacie: 25
- Posty: 2083
- Rejestracja: 11 cze 2011, 18:29
- Lokalizacja: Warszawa / Lublin
-
Autor tematu - Sympatyk forum poziom 1 (min. 40)
- Posty w temacie: 33
- Posty: 45
- Rejestracja: 03 mar 2007, 10:44
- Lokalizacja: Bydgoszcz
[youtube][/youtube] filmik z testowania. Muszę naprawić końcówkę mocy gdyż wcześniej nawet na prędkościach rzędu 1 metr na sekundę napęd zachowywał się płynnie. Nie było efektu szarpania i mrowienia podczas ruchu. Wcześniej miałem zmostkowany układ L298 na 4A. Na dwa ampery sobie nie radzi i szybko sie uszkadza.
-
- Lider FORUM (min. 2000)
- Posty w temacie: 25
- Posty: 2083
- Rejestracja: 11 cze 2011, 18:29
- Lokalizacja: Warszawa / Lublin