Sterownik serwo DC na STM32F4 / HIP4081A
-
Autor tematu - Lider FORUM (min. 2000)
- Posty w temacie: 70
- Posty: 2083
- Rejestracja: 11 cze 2011, 18:29
- Lokalizacja: Warszawa / Lublin
-
Autor tematu - Lider FORUM (min. 2000)
- Posty w temacie: 70
- Posty: 2083
- Rejestracja: 11 cze 2011, 18:29
- Lokalizacja: Warszawa / Lublin
Hula - jak na razie zasilanie, USB i 1 blok mocy
W weekend pewnie resztę zlutuję....
Ze strony bloków mocy nie spodziewam się niespodzianek; zobaczymy, jak się sprawdzi sterowanie wrzecionem i krańcówki.
[ Dodano: 2013-02-16, 16:48 ]
Oto sterownik w całej okazałości:

Zaraz zabieram się za testy
[ Dodano: 2013-02-16, 18:28 ]
Jeden tranzystor był uszkodzony, zabrał ze sobą drugi. Po wymianie wszystkie 4 sekcje działają.

Ze strony bloków mocy nie spodziewam się niespodzianek; zobaczymy, jak się sprawdzi sterowanie wrzecionem i krańcówki.
[ Dodano: 2013-02-16, 16:48 ]
Oto sterownik w całej okazałości:

Zaraz zabieram się za testy

[ Dodano: 2013-02-16, 18:28 ]
Jeden tranzystor był uszkodzony, zabrał ze sobą drugi. Po wymianie wszystkie 4 sekcje działają.
-
Autor tematu - Lider FORUM (min. 2000)
- Posty w temacie: 70
- Posty: 2083
- Rejestracja: 11 cze 2011, 18:29
- Lokalizacja: Warszawa / Lublin
Płytki zamawiane w firmie merkar - ładnie zrobione, no i testują 
Planuję wycisnąć do 6A średnio i 30-50A chwilowo. Przy 6A jeszcze powinno chodzić bez radiatora.
Używam FPU, zarówno do PID/feedforward jak i do interpolacji krzywych.
Przetestowałem też już sterowanie przekaźnikiem do wrzeciona - działa
Zostały tylko wejścia krańcówek oraz czujnika narzędzia do sprawdzenia.
O konstrukcji stopnia mocy chyba pisałem wcześniej w tym temacie.

Planuję wycisnąć do 6A średnio i 30-50A chwilowo. Przy 6A jeszcze powinno chodzić bez radiatora.
Używam FPU, zarówno do PID/feedforward jak i do interpolacji krzywych.
Przetestowałem też już sterowanie przekaźnikiem do wrzeciona - działa

Zostały tylko wejścia krańcówek oraz czujnika narzędzia do sprawdzenia.
O konstrukcji stopnia mocy chyba pisałem wcześniej w tym temacie.
-
Autor tematu - Lider FORUM (min. 2000)
- Posty w temacie: 70
- Posty: 2083
- Rejestracja: 11 cze 2011, 18:29
- Lokalizacja: Warszawa / Lublin
Prace nad softwarem trwają - na razie opracowuję protokół komunikacyjny - warstwą transportową jest SLIP; wyższa warstwa będzie już specyficzna dla maszyny.
Równolegle uporządkowałem cały kod na STM32, przerzuciłem też sporą część programu z C na C++ - różnica w wydajności nie powinna być zauważalna (i tak najbardziej niskopoziomowy kod będzie de facto w C), a wygoda i bezpieczeństwo kodu znacznie wyższe - jednak C++ pozwala na znacznie więcej.
W kwestii "metalowej" - wprowadziłem 4 tryby pracy silnika:
1. wyłączony = zwarty
2. tryb serwo
3. tryb prędkościowy ze sprzężeniem zwrotnym
4. surowy PWM
Tryb pracy każdego z silników będzie można ustalić jako element wykonywanego programu. Oznacza to na przykład, że będzie można użyć osi obrotowej do toczenia (w trybie prędkościowym) lub w ogóle użyć którejś osi do sterowania innym urządzeniem, na przykład pompą czy niewielkim wrzecionem z zasilaniem DC do 50V - w trybie PWM.
Sam sterownik nie będzie wykonywać g-kodu (tylko dobiegi do zadanej pozycji i krzywe Beziera) - chociaż przewiduję translator g-kodu na PC, który do maszyny wrzuci już obrobione dane. Będzie też obsługa formatu SVG oraz map wysokości (do płaskorzeźb) w bitmapach. Wejściowe dane będzie można przetworzyć za pomocą dowolnej transformacji afinicznej (obroty, skalowanie, pochylenia, odbicia).
Jeżeli chodzi o formaty wektorowe (SVG, g-kod) - to mam cichą nadzieję, że w sporej części przypadków uda się umieścić cały program w pamięci maszyny - dzięki czemu połączenie z PC nie będzie miało krytycznego znaczenia dla wykonywanego programu.
Obecnie połączenie PC-sterownik jest ustawione na 0.5Mbps - pozwala to wysłać ponad 1000 krzywych na sekundę, czyli dla prędkości 6m/min jedna krzywa musiałaby mieć 0.1mm. Większa prędkość chyba nie będzie potrzebna, chociaż do 1Mbps bez większego problemu powinno się dać dociągnąć.
Równolegle uporządkowałem cały kod na STM32, przerzuciłem też sporą część programu z C na C++ - różnica w wydajności nie powinna być zauważalna (i tak najbardziej niskopoziomowy kod będzie de facto w C), a wygoda i bezpieczeństwo kodu znacznie wyższe - jednak C++ pozwala na znacznie więcej.
W kwestii "metalowej" - wprowadziłem 4 tryby pracy silnika:
1. wyłączony = zwarty
2. tryb serwo
3. tryb prędkościowy ze sprzężeniem zwrotnym
4. surowy PWM
Tryb pracy każdego z silników będzie można ustalić jako element wykonywanego programu. Oznacza to na przykład, że będzie można użyć osi obrotowej do toczenia (w trybie prędkościowym) lub w ogóle użyć którejś osi do sterowania innym urządzeniem, na przykład pompą czy niewielkim wrzecionem z zasilaniem DC do 50V - w trybie PWM.
Sam sterownik nie będzie wykonywać g-kodu (tylko dobiegi do zadanej pozycji i krzywe Beziera) - chociaż przewiduję translator g-kodu na PC, który do maszyny wrzuci już obrobione dane. Będzie też obsługa formatu SVG oraz map wysokości (do płaskorzeźb) w bitmapach. Wejściowe dane będzie można przetworzyć za pomocą dowolnej transformacji afinicznej (obroty, skalowanie, pochylenia, odbicia).
Jeżeli chodzi o formaty wektorowe (SVG, g-kod) - to mam cichą nadzieję, że w sporej części przypadków uda się umieścić cały program w pamięci maszyny - dzięki czemu połączenie z PC nie będzie miało krytycznego znaczenia dla wykonywanego programu.
Obecnie połączenie PC-sterownik jest ustawione na 0.5Mbps - pozwala to wysłać ponad 1000 krzywych na sekundę, czyli dla prędkości 6m/min jedna krzywa musiałaby mieć 0.1mm. Większa prędkość chyba nie będzie potrzebna, chociaż do 1Mbps bez większego problemu powinno się dać dociągnąć.
-
Autor tematu - Lider FORUM (min. 2000)
- Posty w temacie: 70
- Posty: 2083
- Rejestracja: 11 cze 2011, 18:29
- Lokalizacja: Warszawa / Lublin
Sensory oprogramowane (wstępnie).
Ostatecznie przyjąłem taki model, że jest 9 uniwersalnych sensorów, których znaczenie i tryb pracy można skonfigurować:
Do wyboru pullup/pulldown i tryby active low/active high. Przykładowo, krańcówka NC pracuje jako active high i pullup.
Funkcję każdego sensora również można określić programowo - może to być:
Krańcówka (min lub max), przełącznik bazujący oś lub czujnik narzędzia.
Funkcje bazowania i krańcówki można łaczyć.
Ostatecznie przyjąłem taki model, że jest 9 uniwersalnych sensorów, których znaczenie i tryb pracy można skonfigurować:
Do wyboru pullup/pulldown i tryby active low/active high. Przykładowo, krańcówka NC pracuje jako active high i pullup.
Funkcję każdego sensora również można określić programowo - może to być:
Krańcówka (min lub max), przełącznik bazujący oś lub czujnik narzędzia.
Funkcje bazowania i krańcówki można łaczyć.
-
Autor tematu - Lider FORUM (min. 2000)
- Posty w temacie: 70
- Posty: 2083
- Rejestracja: 11 cze 2011, 18:29
- Lokalizacja: Warszawa / Lublin
Interfejs programowy w dużej mierze gotowy; wykonywanie programu przez maszynę działa.
Obecnie obsługiwane elementy programu to:
- krzywa beziera
- ustawienie prędkości silnika (zmiana na tryb prędkościowy)
- wł/wył. przekaźnika wrzeciona
- czekaj x sekund
- pauza (czeka na sygnał kontynuacji z komputera)
- odpowiednik G0 - idzie wszystkimi osiami jak najszybciej umie do zadanej pozycji - przed przejściem do następnego punktu prędkość i położenie muszą się zmieścić w zadanej tolerancji.
Działa przesył programu z PC, działa też pobieranie statusu maszyny (wszystkie sensory, pozycje, prędkości, tryby pracy) oraz konfiguracja PID/Feedforward.
Powoli chyba mogę zaczynać rzeźbić (jeszcze na krokówkach) adaptery NEMA23 na NEMA34, aby zastąpić krokówki serwami. Coś czuję, że panel frontowy do obudowy sterownika będzie już wykonany na serwach.
Ale to wszystko może się odwlec, bo niebawem rodzina się powiększa
Jak się nic nie urodzi (dosłownie), to jutro dam filmy z pracy silnika.
Obecnie obsługiwane elementy programu to:
- krzywa beziera
- ustawienie prędkości silnika (zmiana na tryb prędkościowy)
- wł/wył. przekaźnika wrzeciona
- czekaj x sekund
- pauza (czeka na sygnał kontynuacji z komputera)
- odpowiednik G0 - idzie wszystkimi osiami jak najszybciej umie do zadanej pozycji - przed przejściem do następnego punktu prędkość i położenie muszą się zmieścić w zadanej tolerancji.
Działa przesył programu z PC, działa też pobieranie statusu maszyny (wszystkie sensory, pozycje, prędkości, tryby pracy) oraz konfiguracja PID/Feedforward.
Powoli chyba mogę zaczynać rzeźbić (jeszcze na krokówkach) adaptery NEMA23 na NEMA34, aby zastąpić krokówki serwami. Coś czuję, że panel frontowy do obudowy sterownika będzie już wykonany na serwach.
Ale to wszystko może się odwlec, bo niebawem rodzina się powiększa

Jak się nic nie urodzi (dosłownie), to jutro dam filmy z pracy silnika.
-
Autor tematu - Lider FORUM (min. 2000)
- Posty w temacie: 70
- Posty: 2083
- Rejestracja: 11 cze 2011, 18:29
- Lokalizacja: Warszawa / Lublin
http://youtu.be/e84G3QYK1ys
Przebieg testowy - ruch skokowy o 5 obrotów i powrót; następnie 10x ruch o 0.3obr i powrót (krzywe Beziera) oraz na końcu 50 obrotów i powrót (również krzywe beziera) - 1.5s w każdą stronę.
"Krzywe" są krzywymi kwadratowymi w czasie - profil prędkości jest paraboliczny.
Przebieg testowy - ruch skokowy o 5 obrotów i powrót; następnie 10x ruch o 0.3obr i powrót (krzywe Beziera) oraz na końcu 50 obrotów i powrót (również krzywe beziera) - 1.5s w każdą stronę.
"Krzywe" są krzywymi kwadratowymi w czasie - profil prędkości jest paraboliczny.