Elektroda.pl
Elektroda.pl
X
Szafy RackSzafy Rack
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

SCX3 Interfejs pętli otwartej STEP/DIR na zamkniętą pętlę prędkościową +/-10V

theWituch 28 Sty 2020 01:53 2034 12
  • Witam,
    chciałbym się podzielić jednym z moich projektów i jednocześnie zaczerpnąć waszej opinii na temat przydatności urządzenia, które niżej przedstawiam.

    Kilka lat temu umarło mi sterowanie 3 osiowej frezarki CNC, w której osie XYZ sterowane były przez serwa z wejściem analogowym. Poprzednie sterowanie wymienione zostało na mniej wypasiony, bez obsługi pętli zamkniętej, z interfejsem STEP/DIR (z racji budżetu i tego, że nowy sterownik już posiadałem). Z uwagi na to potrzebowałem więc konwertera z pętli otwartej STEP/DIR na zamkniętą pętlę z sterowaniem prędkościowym +/-10V i sprzężeniem od enkoderów liniowych.

    Przeszukując internet nie znalazłem gotowego rozwiązania mieszczącego się w budżecie. Natrafiłem za to, na projekt YAPSC:10V. Wydawał się być obiecujący, lecz ciężko było z dostępnością zmontowanych układów. Skompletowałem więc potrzebne części, zleciłem wytrawienie płytek PCB i zmontowałem układ. Później delikatna korekta oryginalnego firmware, programowanie i testy przy maszynie.

    SCX3 Interfejs pętli otwartej STEP/DIR na zamkniętą pętlę prędkościową +/-10V

    Wszystko działało jak trzeba, ale... okazało się, że układ robił robotę lecz ze względu na swoją prostotę miał pewne wady.

    Po pierwsze na wyjściu obecne były szumy na wyjściu analogowym, powodujące wibracje bardzo czułych serwonapędów, szczególnie nasilające się przy małym napięciu.
    Po drugie na każdą oś potrzeba było osobnego układu. Przy trzech osiach, trzy płytki tworzyły już dość sporą konstrukcje.
    Po trzecie, w układzie brakowało zintegrowanego transcievera RS232 co powodowało konieczność używania przejściówek TTL<->RS232.
    Dodatkowo brak wewnętrznej dystrybucji zasilania powodował konieczność dostarczania wszystkich napięć zewnętrznie.

    Biorąc pod uwagę niedosyt w idealności konstrukcji YAPSCa i własne ambicje (zawsze marzyło mi się projektowanie układów PCB) zdecydowałem się trochę polepszyć konstrukcję (czy mi się udało nie wiem ;D), więc zaprojektowałem swoje własne urządzenie - SCX3.

    Założenia dla układu były takie, by na jednej płytce zmieścić obsługę dla trzech osi obrabiarki, ograniczyć szumy na wyjściach analogowych +/-10V, zapewnić wewnętrzną dystrybucję potrzebnych napięć dla układu (uC, wyjścia +/-10V) oraz podpiętych enkoderów z zasilania 12-24VDC, dołożyć przekaźnik gotowości (niebędący wyjściem bezpiecznym, jedynie sygnalizacją stanu OK jak w serwach z którymi miał współpracować), zwiększyć moc obliczeniową uC, zwiększyć przepustowość wejść enkoderowych, zintegrować interfejs RS232 w układzie oraz dostosować kształt płytki do formatu pozwalającego ją rozsądnie zamontować np. na szynie DIN.

    Projekt układu prezentuje się tak:

    SCX3 Interfejs pętli otwartej STEP/DIR na zamkniętą pętlę prędkościową +/-10V

    1 - złącze zasilania 12-24 VDC (+VDC, GND)
    2 - gniazdo bezpiecznika
    3 - diody LED obecności napięć 12-24VDC, +/-12VDC, 5VDC, 3V3DC
    4 - przetwornica DC/DC 12-24VDC na 5VDC
    5 - przetwornica DC/DC 12-24VDC na +/-12VDC
    6 - stabilizator LDO 5VDC na 3V3DC
    7 - mikrokontroler PIC32
    8 - złącze ICSP programowania mikrokontrolera
    9 - diody sygnalizacyjne stanu urządzenia
    10 - transciever RS232
    11 - złącze DB9 RS232
    12 - tranzystorowy driver wyjść cyfrowych DO
    13 - transoptory wejść cyfrowych DI
    14 - złącze DB25 interfejsowe sygnałów STEP/DIR, DI, DO "INTERFACE"
    15 - transoptory wejść STEP/DIR
    16 - złącza DB9 wejść enkoderowych "ENCODER(1,2,3)"
    17 - transoptory wejść enkoderowych
    18 - złącze DB9 "OUTPUT" wyjść symetrycznych +/-10VDC
    19 - wzmacniacze operacyjne wyjść symetrycznych +/-10VDC
    20 - przekaźnik obwodowy gotowości układu "READY"
    21 - złącze 3 pinowe przekaźnika "READY" (styki NO, COM, NC)

    Na stan obecny dysponuję zmontowanym prototypem pierwszej wersji. Objawiło się wtedy kilka błędów konstrukcyjnych (zle rozmieszczone opisy, zamieniony pin w wtyczce enkodera ENCODER1 i źle zaprojektowane zasilanie przekaźnika READY). Jednak nie było to przeszkodą do testów i rozwoju firmware.

    Podsumowując najważniejsze różnice między YAPSC a SCX3:
    - Wewnętrzna dystrybucja napięć, zasilanie z 12-36VDC
    - Po 4 DI i DO do komunikacji z sterownikiem przez złącze '14'.
    - 3 wejścia enkoderowe na transoptorach kluczujących, zrealizowane dokładnie tak samo jak w przypadku YAPSC.
    - 3 wyjścia analogowe +/-10VDC sterowane są dwoma kanałami PWM na każde wyjście analogowe, tak jak w YAPSC. Układ wyjściowy zbudowany jest z wzmacniaczy operacyjnych w 3 stopniowej kaskadzie - różnicowa, filtrująca i buforująca.
    - Na pokładzie uC 3 regulatory PID współpracujące z wejściami enkoderowymi oraz wyjściami +/-10V.
    - Modbus do komunikacji przez interfejs RS232 - zacząłem pisać aplikację na PC do obsługi urządzenia, jednak pozostała w bardzo wczesnej fazie rozwoju.

    Gotowy układ prezentuje się tak (brak wlutowanego wtedy złącza '21' :P)
    SCX3 Interfejs pętli otwartej STEP/DIR na zamkniętą pętlę prędkościową +/-10V

    Projekt ze względu na to, że w trakcie pisania firmware natrafiłem na błąd z obsługą pamięci EEPROM wbudowanej w uC ugrzązł na dobre dwa lata. W tym czasie natrafiłem na gotowe rozwiązanie od firmy CSLab, więc ukończenie układu nie było już konieczne do uruchomienia maszyny.
    Ostatnimi czasy zastanawiam się co z tym tak naprawdę zrobić - czy schować głęboko w szafie czy ukończyć go do pełnej funkcjonalności. Nie badałem na tyle zapotrzebowania na tego rodzaju urządzenia w tej raczej hobbystycznej(?) klasie wykonania, więc nie wiem czy jest sens poświęcać temu więcej czasu.

    Interesuje mnie Wasza opinia koledzy, czy ktoś poszukuje tego rodzaju rozwiązań, czego oczekuje od takiego sprzętu, co powinno się w nim znajdować a co nie. Jestem otwarty na propozycje co można zmienić, dodać, usunąć. Chętnie odpowiem też na wszystkie pytania.

    Wszystkie uwagi będą dla mnie cenne. Również takie, że mam dać z tym spokój :D

    Pozdrawiam!

    Fajne! Ranking DIY
    Potrafisz napisać podobny artykuł? Wyślij do mnie a otrzymasz kartę SD 64GB.
    O autorze
    theWituch
    Poziom 8  
    Offline 
    theWituch napisał 12 postów o ocenie 9, pomógł 0 razy. Jest z nami od 2013 roku.
  • Szafy RackSzafy Rack
  • Szafy RackSzafy Rack
  • #3
    CosteC
    Poziom 28  
    Bardzo mnie zaciekawiło czemu w ogóle stosować serwomechanizmy z wejściami analogowymi?

    Jak odfiltrowałeś PWM tak dokładnie, aby mieć też sensowne czasy ustalania się wartości wyjściowej? W sensie aby wyjście analogowe osiągnęło np 90% wartości zadanej po milisekundach (aby nie było drgań w mechanice)

    Jeśli mamy silnik 48 kroków na obrót i śrubę o skoku 1 mm, to na 10cm mamy już 48*100=4800 kroków na 10 cm, a nie jest to szczególnie wyszukany silnik i bardzo krótki zakres pracy. Aby osiągnąć tą samą rozdzielczość analogowo trzeba by mieć rozdzielczość układu 20 V/4800 = 4.17 mV. Czyli kaskada wzmacniaczy wypadało by aby miała offset i dryft mniejszy od 4 mV jako całość. Do zrobienia, ale trzeba już zacząć inwestować w coś lepszego niż TL084 czy LM324.

    A dosyć prosto wyobrazić sobie zakres pracy 50 cm na oś, co wymagało by przy miernym silniku 48 krokowym analogowej rozdzielczości 833 uV, czyli prawie 15 bit. Gdy użyjemy dosyć popularnych silników 1.8' to konkurencyjny układ analogowy musiałby trzymać dokładności rzędu 17 bit, 200 uV. Pomijając problem rozdzielczości, okablowanie musiało by być bardzo dobrze ekranowane bo każde zakłócenie by rujnowało precyzje.
  • #4
    theWituch
    Poziom 8  
    @ArturAVS Prawdziwych testów na maszynie podczas normalnej pracy płytka się nie doczekała, ponieważ zdążyłem uruchomić maszynę na gotowym produkcie od CSLab.
    Ale zbudowałem sobie małe stanowisko testowe wystarczające do podstawowej pracy mianowicie: serwonapęd z silnikiem, skonfigurowany do pracy w trybie prędkościowym na sygnale +-10V a do wału silnika enkoder obrotowy o rozdzielczości 2000ppr.
    Warunki w których pomiar jest brany prosto z wału są nieadekwatne do warunków w rzeczywistym łańcuchu kinematycznym, dlatego żeby ułatwić sobie sprawę na potrzeby testów na stole, podzieliłem sygnał z enkodera programowo przez 40 (wartość nieuzasadniona :P).
    W trakcie testów po dostrojeniu parametrów PID napęd śmiga, osiąga pozycję i nie wpada w oscylacje. Na wymuszeniach skokowych odpowiedź jest gładka i szybka, brak przesterowań (ale to tylko testy na stole).
    Do testów nadążania po trajektorii używam drugiego układu który generuje wygnał STEP/DIR z wypadkowej kilku krzywych sin, cos, arcsin itp. (jakieś randomowe przebiegi, żeby serwo goniło parametr) i to też wygląda ładnie. Testowałem też jak ma się odczyt wejścia od sterownika CNC i układ wszystko wyłapywał - do sprawdzenia są tylko jakieś skrajnie wysokie częstotliwości. Dane o parametrach regulacji w czasie "rzeczywistym" wyciągam sobie przez Modbusa i w aplikacji PC generuję wykres uchybu, aktualnej wartości oraz wartości zadanej - ale nie mam żadnego przebiegu z dokładnymi danymi, bo jakoś nie zapisałem...

    Potrzebowałbym bardziej miarodajnych testów z konkretnymi danymi (np przepustowość wejścia enkoderowego, dokładny czas odpowiedzi wyjścia analogowego) ale jeszcze nie wiem czy warto poświęcać na to czas :P

    @CosteC Nie wiem czy dobrze zrozumiałem, ale chyba się nie zrozumieliśmy co do zasady działania pętli prędkościowej, bo nie rozumiem o jakiej rozdzielczości analogowej wspominasz. Symetryczne wyjścia analogowe są na PWM-ie 16bit 20KHz więc rozdzielczość wyjścia jest tak wysoka, że jest pomijalna?
  • #5
    paluszasty
    Poziom 24  
    Cytat:
    @CosteC Nie wiem czy dobrze zrozumiałem, ale chyba się nie zrozumieliśmy co do zasady działania pętli prędkościowej, bo nie rozumiem o jakiej rozdzielczości analogowej wspominasz. Symetryczne wyjścia analogowe są na PWM-ie 32bit 20KHz więc rozdzielczość wyjścia jest tak wysoka, że jest pomijalna?


    W jaki sposób kolega wygenerował 32bit PWM o częstotliwości 20kHz?
    Do czegoś takiego potrzebny by był zegar o częstotliwości (2^32-1)*20kHz co daje jakieś 85.9THz co odpowiada fali elektromagnetycznej długości około 3.5um. Czyżby PIC32 był procesore pracującym w podczerwieni!!?
  • #6
    theWituch
    Poziom 8  
    paluszasty napisał:
    W jaki sposób kolega wygenerował 32bit PWM o częstotliwości 20kHz?
    Do czegoś takiego potrzebny by był zegar o częstotliwości (2^32-1)*20kHz co daje jakieś 85.9THz co odpowiada fali elektromagnetycznej długości około 3.5um. Czyżby procesor mikrofalowy?


    Pomyłka - PWM z rejestrem nie 32 a 16 bitowym. Licznik taktowany sygnałem 20KHz. Nie wiem w czym problem? Może nie zapisałem tego odpowiednio? :P

    Mimo wszystko nie dotyczy to chyba problemu samej konstrukcji i jej przydatności co nie?
  • #7
    paluszasty
    Poziom 24  
    Dalej wygląda to delikatnie mówiąc dziwnie -> (2^16-1)*20kHz=1.3107GHz. Z taką częstotliwością musiał by być taktowany układ generujący PWM. Nie znam się na PICach ale taka częstotliwość nie jest możliwa. Zakładając (optymistycznie ze masz najszybszy układ, i ta max częstotliwość używane jest do generowania PWM) wg overview http://ww1.microchip.com/downloads/en/DeviceDoc/60001455D.pdf ze częstotliwość pracy Twojego uC na 252MHz to możesz uzyskać 252Mhz/20kHz kroków PWM czyli 12600 co daje rozdzielczość 13.6-bita.

    Konstrukcja jako taka mi się podoba, wykonana jest starannie, a przynajmniej projekt płytki tak wygląda. Na plus na pewno zasługuje użycie przetwornic zamiast stabilizatorów liniowych - zakładam optymistycznie że dobrze filtrujesz zasilanie (czasem optymalne jest użycie przetwornicy DC/DC, dodanie filtru i dalej jeszcze stabilizatora liniowego, ja tak zrobiłem w układzie precyzyjnego termometru) oraz wkomponowanie złącz DBxx w płytkę zamiast jakiś goldpinów i wiszących kabli jak często w DIY. Więcej trudno coś powiedzieć (w szcególnie o torze analogowym i filtrach PWM) , niestety nie zamieściłeś schematu, ani nawet nie napisałeś jakich komponentów użyłeś.
  • #8
    CosteC
    Poziom 28  
    Płytka bardzo ładnie zrobiona i opisana ale dalej nie rozumiem jak ma działać.
    Rozumiem serwa w pętli sprzężenia zwrotnego kontrolującego prędkość zamiast położenia, trochę to karkołomne dla osi ale nie moja maszyna.

    Natomiast precyzyjne co do wartości i czasu odpowiedzi wyjścia analogowe sterowane z PWM to dla mnie temat ciekawy. Zwłaszcza, że wkradły się jakieś błędy w opisie - PWM może mieć albo 32/16 bit albo 20 kHz. A od 20 kHz do szybkości odpowiedzi daleka droga. Różne są strategie filtrowania PWM i ciekawy jestem której użyłeś.

    Patrzyłem kiedyś na układ który w ciagu jednego cyklu stabilizował nową wartość wyjścia PWM ale ani to proste było ani dokładnie obliczone dokładności. Dla 8bit wyglądało prosto, ale 16 bit to zupełnie inna bajka.
  • #9
    Gizmoń
    Poziom 28  
    CosteC napisał:
    dalej nie rozumiem jak ma działać


    Zapewne układ otrzymuje z enkodera kwadraturowego informację o pozycji aktualnej, porównuje ją z wartością zadaną przez wejścia STEP/DIR i, odpowiednio do stanu wyjścia regulatora PID, wystawia napięcie z zakresu -10...+10V sterujące prędkością napędu (szybkością zmian pozycji). -10V to maksymalna prędkość w jedną stronę, +10V to maksymalna w drugą stronę, 0V - napęd stoi.
  • #10
    CosteC
    Poziom 28  
    @Gizmoń tylko pętla ma być otwarta więc zakładam brak sprzężenia zwrotnego w postaci informacji o położeniu... I tutaj nie rozumiem bo teraz jak patrzę na opis to wejścia enkoderów są. Więc gdzie otwarta pętla?

    Pozostają pytania o PWM
  • #11
    theWituch
    Poziom 8  
    Wyjaśnię zasadę działania tego interfejsu bo zasadniczo nie zrozumieliśmy się od początku.

    Kolega Gizmoń dobrze zrozumiał zasadę działania:
    Gizmoń napisał:
    Zapewne układ otrzymuje z enkodera kwadraturowego informację o pozycji aktualnej, porównuje ją z wartością zadaną przez wejścia STEP/DIR i, odpowiednio do stanu wyjścia regulatora PID, wystawia napięcie z zakresu -10...+10V sterujące prędkością napędu (szybkością zmian pozycji). -10V to maksymalna prędkość w jedną stronę, +10V to maksymalna w drugą stronę, 0V - napęd stoi.


    Układ jest interfejsem między dwoma niezgodnymi systemowo rodzajami sterowania - pętlą otwartą STEP/DIR w której nie ma sprzężenia zwrotnego, no bo jest otwarta oraz pętlą zamkniętą +/-10V w której sprzężenie zwrotne BEZPOŚREDNIE jest w postaci położenia osi z enkodera liniowego dla osi liniowej lub obrotowego dla osi obrotowych (np. stół obrotowy).

    Sterownik CNC pracujący w pętli otwartej nie posiada sprzężenia, wysyła jedynie sygnały STEP/DIR i oczekuje wykonania ruchu np. przez silnik krokowy lub serwonapęd z wejściem STEP/DIR. Rozwiązanie takie jest fajne i tanie, ale niesie ze sobą takie problemy jak własnie brak informacji zwrotnej o tym, czy ruch rzeczywiście został wykonany.
    Oczywiście można wykryć np. w samonapędach brak obrotu wału silnika, ale obrót silnika nie musi oznaczać przesunięcia osi (awaria).
    Dodatkowo cały łańcuch kinematyczny, który ma swoje sprawności powoduje, że pozycjonowanie z osi silnika nie jest dokładnie odzwierciedlane na końcu łańcucha (na stole maszyny).

    W mojej maszynie pierwotny sterownik pracował w układzie zamkniętej pętli prędkościowej, w której odczyt o pozycji stołu BEZPOŚREDNIO odbierany był przez sterownik, a ten z kolei na podstawie tej informacji sterował serwonapędy (tak jak mówi Gizmoń: -10V pełna prędkość w jedną stronę, +10V w drugą a 0V brak obrotu, a całość ruchu płynna na całym zakresie wyjścia analogowego) by w czasie osiągały odpowiednią pozycję utrzymując w ten sposób trajektorię obróbki.
    Zaletą takiego rozwiązania jest głównie kompensacja mechaniczna całego łańcucha kinematycznego włącznie z kompensacją temperaturową elementów.
    Ta maszyna akurat miała małe osie 500x600x500 ale dla przykładu mam drugą w identycznym sterowaniu z osiami 3000x500x500. Tutaj dla najdłuższej osi mającej 3m długości sterowanie pętlą otwartą i odczyt POŚREDNI pozycji z wału silnika (ponieważ tak pozycjonują się serwa z interfejsem STEP/DIR) jest opatrzony sporym błędem gdzie przy dużych zakresach roboczych dyskwalifikuje to dokładność obróbki.

    Podsumowując:
    Złącza ENCODER1-3 służą do podłączenia sprzężeń z enkoderów do płytki a złącze OUTPUT do podłączenia wyjść analogowych do serwonapędów. Przez złącze INTERFACE układ podłączony jest do sterownika CNC. Tym złączem układ przyjmuje od niego sygnały STEP/DIR jak zwykły silnik krokowy. Następnie na podstawie tych sygnałów steruje wyjścia analogowe tak, by serwonapędy kręcąc się w odpowiednia stronę z odpowiednią szybkością jak najdokładniej odzwierciedlały trajektorię wysłaną przez sterownik CNC (jak najmniejszy uchyb).

    Mam nadzieję, że teraz kwestia działania płytki jest już zrozumiała :D

    CosteC napisał:
    Pozostają pytania o PWM

    Przyjrzałem się tematowi dokładniej i opierając się na wyliczeniach paluszastego
    paluszasty napisał:
    częstotliwość pracy Twojego uC na 252MHz to możesz uzyskać 252Mhz/20kHz kroków PWM czyli 12600 co daje rozdzielczość 13.6-bita.

    Częstotliwość pracy uC to 120MHz więc licząc wychodzi 120MHz/20KHz czyli 6000 i daje to rozdzielczość 12,55 bita.
    W układzie moduł PWM z licznikiem [rejestr PTPER] 16 bitowym, jest inkrementowany częstotliwością 120MHz. Dla pracy w częstotliwości 20KHz rejestr PTPER jest ustawiany na 6000 (120MHz/20KHz=6000). I tak jak mówiłem, rozdzielczość wyjścia jest wystarczająco wysoka, żeby uznać iż jest wystarczająca do regulacji prędkości obrotowej serwonapędu. Chyba, że się mylę?

    Na początku źle to zapisałem (nie miałem na celu podania rozdzielczości) i najwidoczniej wkradło się nieporozumienie :P
  • #13
    Gizmoń
    Poziom 28  
    Układ jest fajny, tylko 99% ludzi konstruuje maszyny CNC na silnikach krokowych (bo wszyscy tak robią, albo coś?). Pewnie stąd niewielkie zainteresowanie... Druga sprawa, że stopnie mocy z wejściem +/-10V są raczej dość nietypowe? Częściej chyba po prostu jest jakiś mostek H sterowany w miarę bezpośrednio PWM. Interesujące rozwiązanie widziałem w już prawie 50 letniej wiertarce CNC - za kierunek i prędkość odpowiadała tam różnica czasów trwania stanu wysokiego i niskiego w sygnale PWM. Mniej elementów pośrednich (filtrów i ponownego generowania PWM lub potężnych radiatorów w przypadku sterowania liniowego) - mniejszy koszt - lepsze do zastosowań domowych :D

    A ja mam drobną uwagę odnośnie wykorzystanych złącz. Wygląda elegancko, ale stosowanie identycznych złącz dla różnych sygnałów w jednym urządzeniu nie jest najlepszym pomysłem. A już DB9 szczególnie po tym, jak przez jakiś czas pracowałem w laboratorium pomiarowym, gdzie wszystko było połączone właśnie na DB9. Dobrze, że nie było tam doprowadzone napięcie trójfazowe, bo zapewne też by zaraz była przejściówka z gniazda ściennego na DB9 :D