[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
pod obciążeniem błąd jest o okolo 30% większy. obciążenie to mój palec no i oczywiście bezwładnośc karetki ktora przy tak dużych prędkościach ma znaczenie.
w tej chwili tylko pid. teraz jak juz wszystko działa bezbłędnie tj końcówka mocy i uP poeksperymentuje z feedforward dziś.
z perspektywy podawanie pwm na wejście enable bylo największym błędem.
ps. pisalem z telefonu.
[ Dodano: 2013-05-26, 19:57 ]
Napiszcie mi proszę czy moje przypuszczenia są słuszne.
Na układzie L298 zakłócenia są dużo mniejsze i układ pracuje prawidłowo.
Sterowanie L298 i L6203 jest dokładnie takie samo. Podczas pracy na L6203 z silnika wychodzą szpilki, które zakłócają prace enkodera oraz sygnałów STEP/DIR.
L298 jest oparty o tranzystory bipolarne a układ L6203 o unipolarne.
Przypuszczam, że tranzystory unipolarne są szybsze, więc generują większe szpilki zwrotne, czy moje przypuszczenia są prawdziwe?
w tej chwili tylko pid. teraz jak juz wszystko działa bezbłędnie tj końcówka mocy i uP poeksperymentuje z feedforward dziś.
z perspektywy podawanie pwm na wejście enable bylo największym błędem.
ps. pisalem z telefonu.
[ Dodano: 2013-05-26, 19:57 ]
Napiszcie mi proszę czy moje przypuszczenia są słuszne.
Na układzie L298 zakłócenia są dużo mniejsze i układ pracuje prawidłowo.
Sterowanie L298 i L6203 jest dokładnie takie samo. Podczas pracy na L6203 z silnika wychodzą szpilki, które zakłócają prace enkodera oraz sygnałów STEP/DIR.
L298 jest oparty o tranzystory bipolarne a układ L6203 o unipolarne.
Przypuszczam, że tranzystory unipolarne są szybsze, więc generują większe szpilki zwrotne, czy moje przypuszczenia są prawdziwe?
Tagi:
-
- Lider FORUM (min. 2000)
- Posty w temacie: 25
- Posty: 2083
- Rejestracja: 11 cze 2011, 18:29
- Lokalizacja: Warszawa / Lublin
Hmm... w takim razie co to za silnik? Musi mocny być, że taki mały uchyb....
Co do zakłóceń - tranzystory MOSFET szybciej się wyłączają, co generuje potężne zakłócenia w wysokich częstotliwościach - niemniej jednak coś musi być źle zrobione (przewody, ścieżki), bo u mnie sterownik pracuje na dużych dyskretnych mosfetach z bardzo szybkim sterowaniem i problemu nie ma.
Co do zakłóceń - tranzystory MOSFET szybciej się wyłączają, co generuje potężne zakłócenia w wysokich częstotliwościach - niemniej jednak coś musi być źle zrobione (przewody, ścieżki), bo u mnie sterownik pracuje na dużych dyskretnych mosfetach z bardzo szybkim sterowaniem i problemu nie ma.
-
- Lider FORUM (min. 2000)
- Posty w temacie: 25
- Posty: 2083
- Rejestracja: 11 cze 2011, 18:29
- Lokalizacja: Warszawa / Lublin
Tak mi się przypomniało, że we wszystkich moich sterownikach jest pewien "patent", który może znacząco zmniejszać zakłócenia: przed kondensatorem elektrolitycznym zasilającym mostek/silnik jest cewka (indukcyjność rzędu 10uH). Ta cewka blokuje propagację wysokich częstotliwości z powrotem do zasilacza oraz do innych części układu. W 4-osiowym sterowniku każdy mostek ma swój kondensator i swoją cewkę - w ten sposób EMI z jednego mostka nie przechodzi na drugi. Tak samo robiłem w sterowniku silników krokowych, również z dobrym rezultatem.
-
Autor tematu - Sympatyk forum poziom 1 (min. 40)
- Posty w temacie: 33
- Posty: 45
- Rejestracja: 03 mar 2007, 10:44
- Lokalizacja: Bydgoszcz
Poradziłem sobie z zakłóceniami w następujący sposób:
- Na kablach do silnika umieściłem krążki ferytowe - widać je na filmie
- Na kablach sterujących z komputera - krążki ferrytowe, tak samo na kabelkach z enkodera do mikroprocesora.
- Największą róźnicę zrobiła zamiana układu 74HCT14 na 74LS14 (układzik wyciągnąłem z urządzenia, które miało rok produkcji 1986 tyle lat co ja) problem zniknął jak ręką odjął.
W tej chwili uzyskuję błąd 5 impulsów z enkodera przy zastosowaniu predykcji 1 i 2 rzędu (prędkość i przyspieszenie) przy prędkości 30000mm/min (500mm/s) i przyspieszeniu 3000mm/s2. Silniki przy takich parametrach pracują dość głośno, Jeśli zmniejszę P i D to silniki są prawie bezgłośne, ale błąd rośnie 3 krotnie.
[youtube][/youtube]
[ Dodano: 2013-06-02, 15:10 ]
Nowe testy
[youtube][/youtube]
- Na kablach do silnika umieściłem krążki ferytowe - widać je na filmie
- Na kablach sterujących z komputera - krążki ferrytowe, tak samo na kabelkach z enkodera do mikroprocesora.
- Największą róźnicę zrobiła zamiana układu 74HCT14 na 74LS14 (układzik wyciągnąłem z urządzenia, które miało rok produkcji 1986 tyle lat co ja) problem zniknął jak ręką odjął.
W tej chwili uzyskuję błąd 5 impulsów z enkodera przy zastosowaniu predykcji 1 i 2 rzędu (prędkość i przyspieszenie) przy prędkości 30000mm/min (500mm/s) i przyspieszeniu 3000mm/s2. Silniki przy takich parametrach pracują dość głośno, Jeśli zmniejszę P i D to silniki są prawie bezgłośne, ale błąd rośnie 3 krotnie.
[youtube][/youtube]
[ Dodano: 2013-06-02, 15:10 ]
Nowe testy
[youtube][/youtube]
-
- 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
5 impulsów było na innej "spokojnej" grafice, ale przy tych samych ustawieniach prędkości i przyspieszenia. Na tej konkretnej grafice mam 8 impulsów błędu.
Mój serwomechanizm bardzo mnie zaskoczył. Otóż okazało się, że PID oscyluje wokół wartości 1023 / 2 a nie jak było wcześniej wokół zera. Prawdę mówiąc to zadziałało przez jakiś przypadek Stało się to od momentu gdy zacząłem sterować końcówkę mocy dwoma przebiegami PWM (odwrotnymi). W tej chwili rozszyfrowałem zasadę działania i wygląda na to, że składowa całkująca kompensuje to "przesunięcie" i ma wartość cały czas zbliżoną do 500 a pozostałe dwa człony odpowiadają za sterowanie. Co ciekawe polaryzacja sygnałów PWM zmienia się gdy wartość jest poniżej 511,5 lub powyżej. Najlepsze jest to, że takiej funkcjonalności nigdzie nie mogę znaleźć w nocie katalogowej. Poniżej konfiguracja PWM oraz funkcja od ustawiania PWM.
Konfiguracja Timera1
Najlepsze jest to, że te zmienne od kierunku nie są w ogóle potrzebne i serwo działa również bez tego tak jakby Timer sam w sobie zmieniał polaryzację przebiegów PWM wokół wartości 511,5. Czyli połowy maksymalnej 1023.
Jak ktoś to rozumie, to chętnie usłyszę wyjaśnienie bo wykres Fast PWM z noty katalogowej wg mnie tego nie wyjaśnia.
Jeszcze jedno. Gdy wyłączę człon całkujący (Igain = 0) to serwo zatrzymuje się na 52 lub -52 kroku enkodera, czyli człon P wyrównał aby serwo stało w miejscu. Przy wzmocnieniu Pgain = 10 wyjście wynosi wtedy 520... czyli silnik stoi.
Mój serwomechanizm bardzo mnie zaskoczył. Otóż okazało się, że PID oscyluje wokół wartości 1023 / 2 a nie jak było wcześniej wokół zera. Prawdę mówiąc to zadziałało przez jakiś przypadek Stało się to od momentu gdy zacząłem sterować końcówkę mocy dwoma przebiegami PWM (odwrotnymi). W tej chwili rozszyfrowałem zasadę działania i wygląda na to, że składowa całkująca kompensuje to "przesunięcie" i ma wartość cały czas zbliżoną do 500 a pozostałe dwa człony odpowiadają za sterowanie. Co ciekawe polaryzacja sygnałów PWM zmienia się gdy wartość jest poniżej 511,5 lub powyżej. Najlepsze jest to, że takiej funkcjonalności nigdzie nie mogę znaleźć w nocie katalogowej. Poniżej konfiguracja PWM oraz funkcja od ustawiania PWM.
Konfiguracja Timera1
Kod: Zaznacz cały
// Timer1 jako fast PWM
TCCR1A = 0xB3; // Konfiguracja z CodeVision
TCCR1B = 0x09;
TCNT1H = 0x00;
TCNT1L = 0x00;
ICR1H = 0x00;
ICR1L = 0x00;
OCR1AH = 0x00;
OCR1AL = 0x00;
OCR1BH = 0x00;
OCR1BL = 0x00;
Kod: Zaznacz cały
void setPWM(float amps)
{
static float lpf = 0.0;
//lpf = (0.8 * lpf) + (0.2 * amps); // Filtr LPF - nieużywany
lpf = amps;
if(stat.dir == stat.dirLast)
{
// Wpisanie wart. PWM do rejestru porównującego
OCR1A = abs(lpf);
OCR1B = abs(lpf);
}
else
{
// Wyłączenie silnika na jedną pętlę po zmianie kierunku
OCR1A = 0;
OCR1B = 0;
}
stat.dirLast = stat.dir;
}
Jeszcze jedno. Gdy wyłączę człon całkujący (Igain = 0) to serwo zatrzymuje się na 52 lub -52 kroku enkodera, czyli człon P wyrównał aby serwo stało w miejscu. Przy wzmocnieniu Pgain = 10 wyjście wynosi wtedy 520... czyli silnik stoi.
-
- Lider FORUM (min. 2000)
- Posty w temacie: 25
- Posty: 2083
- Rejestracja: 11 cze 2011, 18:29
- Lokalizacja: Warszawa / Lublin
Wczoraj zrobiłem testy na parametrach:
50mm/s, 1500mm/s^2 (czyli w obrotach/s odpowiednio 25Hz i 750Hz^2). Zazwyczaj 3-6 imp, okazjonalnie do 11imp (ciut więcej na osi Z, ale sądzę, że jest to związane z asymetrią obciążenia oraz brakiem kasowania luzu i ogólnie bardzo zmiennymi oporami).
Silnik wyciąga max. 110mm/s, przyśpieszenia rozruchowe do 4500 mm/s^2 (czyli przy 55mm/s będzie już tylko 2250).
Jak parametry z przedstawionych wcześniej testów mają się do osiągów silnika kolegi?
50mm/s, 1500mm/s^2 (czyli w obrotach/s odpowiednio 25Hz i 750Hz^2). Zazwyczaj 3-6 imp, okazjonalnie do 11imp (ciut więcej na osi Z, ale sądzę, że jest to związane z asymetrią obciążenia oraz brakiem kasowania luzu i ogólnie bardzo zmiennymi oporami).
Silnik wyciąga max. 110mm/s, przyśpieszenia rozruchowe do 4500 mm/s^2 (czyli przy 55mm/s będzie już tylko 2250).
Jak parametry z przedstawionych wcześniej testów mają się do osiągów silnika kolegi?