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

PWM w modelarstwie - garść pytań

joorva 01 Lis 2015 01:09 1134 9
  • #1 01 Lis 2015 01:09
    joorva
    Poziom 7  

    Witam wszystkich. Kilka słów wstępu: od niedawna zacząłem w zaciszu domowym robić doświadczenia z wysterowywaniem różnych urządzeń (diody, silniki, serwomechanizmy) za pomocą płytki arduino (a dokładniej 12 bitowego sterownika PWM podpiętego do arduino). Jestem 100% amatorem, zmajstrowałem to wszystko po kilkutygodniowej lekturze internetów. W tej chwili mam podpięty silnik bezszczotkowy oraz serwomechanizm. doświadczalnie udało mi się to zmontować i uruchomić, teraz chcialbym uzupełnić teorię. Niestety moje pytania są na tyle specyficzne, że konkretnych odpowiedzi nie udało mi się znaleźć. Prosiłbym więc o pomoc w rozwikłaniu zagadek na które natrafiłem.

    Co do serwomechanizmów - jakiego sygnału PWM spodziewa się typowy serwomechanizm? To serwo którego ja używam toleruje zakres wypełnienia między 500 a 2400 mikrosekund. Jako że na sterowniku PWM ustawiłem sygnał na 400Hz, to po przeliczeniu kilku rzeczy dobrałem odpowiedni zakres i serwo zaczęło prawidłowo pracować. Grzebiąc w internecie jednak trafiłem na informację, że modelarskie serwomechanizmy pracują z sygnałem PWM 50 Hz. Jak w takim razie moje serwo radzi sobie z sygnałem 400 Hz? Czy ma to jakieś znaczenie, dopóki zapewnię mu impulsy stanu wysokiego o długościach w zakresie jego pracy?

    Druga kwestia - podpiąłem pod tę samą płytkę sterownik dla silnika bezszczotkowego. Też pracował na 400 Hz, ale też wymagał, żeby przyciąć zakres wypełnienia, bo jak ustawiałem wypełnienie na 0% albo 100% to kontroler obrotów się zachowywał jakby w ogóle sygnału PWM nie otrzymywał. Zaczynał pracę dopiero jak dostarczałem mu sygnały między 30 a 90% wypełnienia (przy tych 400 Hz). W instrukcji sterownika nie było mowy o żadnych wymaganiach dot. sygnału PWM, więc mniemam że to też jest jakaś standardowa kwestia. Ale też nigdzie nie znalazłem klarownego wyjaśnienia jaka tu jest logika rozwiązania i jak naprawdę należałoby skonfigurować sygnał PWM, żeby sterownik dostawał to co zaplanowała fabryka.

    Pytam o to wszystko, bo naiwnie się spodziewałem, że takie urządzenia jak silniki albo serwomechanizmy mogą pracować w pełnym zakresie wypełnienia. Przycinając ten zakres tracę precyzję. Dlatego chciałbym zrozumieć mechanikę tych zjawisk, żeby umieć zminimalizować ten efekt.

    0 9
  • Pomocny post
    #3 01 Lis 2015 09:13
    kotbury
    specjalista -automatyka bramowa

    Sygnał PWM do standardowych sprzętów modelarskich (pomijam rozwiązania cyfrowe - niszowe - Graupnera, Futaby itp) to impulsy czasowe - aktywny jest stan wysoki. Nie mówimy tu o % wypełnienia bo ramki mogą mieć różną długość a impulsy też różny czas trwania.
    Sygnał jest asynchroniczny - tzn nie jest w żaden sposób taktowany. Jedynie długości impulsów sterujących z nadajnika są stałe (ale też mogą być różne w zależności od producenta aparatury)
    Więc:
    1. Sygnał otrzymywany przez odbiornik z nadajnika - tylko dla jasności - nie spotkasz się z nim - (pomijam kwestie dekodowania z modulacji AM lub FM) - opisuję sygnał otrzymywany przez wewnętrzny dekoder odbiornika po przejściu przez stopień w.cz):
    Ramkę zaczyna sygnał dla urządzenia na kan. 1 - impuls startowy ma 0,2 ms, potem przerwa (stan niski) - może mieć długość od 1 do 2 ms (dł 1,5 ms oznacza położenie neutralne urządzenia wykonawczego, odpowiednio 1 lub 2 ms - położenia skrajne), potem następny impuls startowy dla następnego kanału, znowu przerwa której długość oznacza położenie elementu wykonawczego i tak aż do kan 6 (lub 8, w zal od producenta aparatury).
    Z tego opisu widać że minimalna długość ramki (wszystkie urządzenia wykonawcze otrzymują sygnał 1 ms) dla powiedzmy 8 kanałów to 8x0,2+8x1 = 9,6 ms a maksymalna (urządzenia wykonawcze dostają 2 ms) - 8x0,2+8x2 = 17,6 ms - stąd ograniczenie ilości kanałów w standardowej aparaturze - doświadczalnie większość producentów założyła częstotliwość odświeżania 50 Hz czyli czas trwania pojedyńczej ramki max 20 ms (można oczywiście użyć dłuższej ramki i mniejszej częstotliwości - i w ramkę wbić więcej niż 8 kanałów ale to zaczyna odbijać się negatywnie na dokładności i szybkości pozycjonowania urządzeń wykonawczych) - więc stąd ograniczenie do 8 kanałów - w ramkę dł 20 ms odświeżaną 50 Hz więcej nie wlezie.
    2. Sygnał ten co cię interesuje - który urządzenia wykonawcze dostają z odbiornika:
    W momencie otrzymania przez dekoder odbiornika sygnału startowego 0,2 ms odbiornik wystawia na wyjście kanału 1 sygnał wysoki - o długości takiej, jak przerwa między impulsami startowymi, potem to samo dla kan. 2,3 itp.
    Czyli de facto każde urządzenie wykonawcze dostaje co mniej więcej 20 ms (bo w odstępach czasowych zmieniających się w zależności od czasów impulsu na pozostałych kanałach) stan wysoki o długości od 1 do 2 ms - i ten stan oznacza pozycję urządzenia wykonawczego (jak napisałem, np dla serw neutrum to 1,5 ms, maks w lewo lub w prawo to 1 lub 2 ms).

    Poniższy rysunek może lepiej rozjaśni rzecz niż te opisy (przerwa 8 ms jest dla 3-4 kanałów, dla 8 kanałów przerwy praktycznie nie będzie):

    PWM w modelarstwie - garść pytań





    Powyższy wywód ma posłużyć tylko ułatwieniu zrozumienia działania standardowej - analogowej aparatury zdalnego sterowania (czyli AM lub FM) - taki powrót do korzeni. Aparatury nowszego typu - stosowane w latach 2000 potwornie drogie aparatury PCM (tzw cyfrowe, w których czasami nawet rezygnowano ze standardowych serw, a własne rozwiązania elementów wykonawczych komunikowały się bezpośrednio z odbiornikiem na drodze cyfrowej) a ostatnio (rewolucja) - używające częstotliwości 2,4 GHz i kodowania rozproszonego wewnętrznie w ogóle nie mają pojęcia ramek - transmisja jest utrzymywana protokołem cyfrowym. Sygnały teoretycznie mogą być wysyłanie do serw jednocześnie i z wysoką częstotliwościa (oczywiście czasówka 1-2 ms dalej musi się zgadzać), ale częstotliwość ramki 50 Hz dalej jest sztucznie utrzymywana ze względu na kompatybilność ze starszymi modelami serw.


    Cytat:
    jak w takim razie moje serwo radzi sobie z sygnałem 400 Hz?


    W granicach możliwości elektroniki serwa jest mu dokładnie obojętne, jakie odstępy będą między sygnałami sterującymi - aby tylko długość sterującego sygnału wysokiego mieściła się w granicach tych 1- 2 ms a długość przerwy miedzy impulsami była taka aby elektronika serwa dała radę impulsy od siebie oddzielić. Stare serwa z analogową elektroniką - pracujące na zasadzie stałych czasowych mierzonych czasem rozładownia kondensatorów akceptowały odstępy między impulsami minimum takie jak czasy samych impulsów (czyli dla impulsów najdłuższych 2 ms - przerwa też 2 ms, minimalna dł ramki 4 ms czyli maks częstotliwość pracy wynosiłaby 250 Hz - takie stare serwo u ciebie by już nie poszło). Nowoczesne serwa cyfrowe z procesorowym sterowaniem akceptują czas przerwy pewnie w granicach tych 0,1-0,2 ms czyli tutaj maksymalna częstotliwość pracy dla najdłuższych impulsów zbliża się do 500 Hz - to i u ciebie działa.


    Cytat:
    podpiąłem pod tę samą płytkę sterownik dla silnika bezszczotkowego. Też pracował na 400 Hz, ale też wymagał, żeby przyciąć zakres wypełnienia, bo jak ustawiałem wypełnienie na 0% albo 100% to kontroler obrotów się zachowywał jakby w ogóle sygnału PWM nie otrzymywał. Zaczynał pracę dopiero jak dostarczałem mu sygnały między 30 a 90% wypełnienia (przy tych 400 Hz)

    Jeszcze raz - nie można przyjmować wypełnienia jako parametru sterowania tylko długość wysokiego impulsu. Może być tak, że ustawiając tylko procent wypełnienia bez kontroli długości impulsów - wysokie impulsy wyjdą poza granice 1-2 ms i regulator przestanie w ogóle reagować - tak jak u ciebie.

    Tak pobieżnie rachując - dla 400 Hz długość ramki to 2,5 ms. Coby sygnał mieścił się w akceptowanych przez regulator granicach -1 do 2 ms wypełnienie powinno się wahać od (proporcja - 1x100% / 2,5 =) 40% do (2x100% / 2,5 =) 80 % - czyli twoje 30-90% to jeszcze za duży zakres.

    PS. przy kontrolerach silnika dwukierunkowych (obroty prawe- stop - obroty lewe) dochodzi jeszcze sprawa "inteligencji" kontrolera. Te tańsze, które jeszcze nie mają karty programującej - przy starcie w większości mają autokalibrację - wykrywanie położenia neutralnego - i aby kontroler bez ręcznej kalibracji w ogóle ruszył silnikiem sygnał sterujący po podpięciu zasilania powinien być blisko 1,5 ms czyli położenia neutralnego (jesli kontroler nie dekoduje neutrum - kontrolery mają przeważnie opcję sygnalizacji dźwiękiem albo LEDem niemożności znalezienia "zera" - i trymerami aparatury do tej pory trzeba szukać neutrum aż kontroler silnika znajdzie "zero" i wtedy dopiero ruszy)

    1
  • #4 01 Lis 2015 10:20
    joorva
    Poziom 7  

    Dziękuję bardzo za podrzucenie tematów (1 PAWEL) i wyczerpujące, szczegółowe wytłumaczenie problemu (kotbury). Wygląda więc na to, że oba urządzenia radzą sobie z sygnałem 400Hz, a przycinanie zakresów przy sterowniku silnika wiązało się z jego tolerancją na czas trwania długiego sygnału.

    Martwi mnie trochę konieczność trzymania sygnału między 1ms a 2ms (oczywiście serwo ma trochę przyjemniejszy zakres, ale silnik już zdaje się trochę mniej). Jeśli założyć, że wszyscy producenci celują w ten przedział 1ms - 2ms jako wartość referencyjną, to aplikując to do sterownika PWM de facto tracę około połowę precyzji (przy moich 400Hz, im niższa częstotliwość, tym sprawa wygląda gorzej). Czy ktoś wykombinował jak ten problem rozwiązać (wykorzystując w miarę standardowe rozwiązania, bez implementacji autorskiego generatora PWM?).

    Zaznaczam od razu że to wątpliwość czystko akademicka, nie zbudowałem jeszcze niczego konkretnego, więc nie wiem, czy takie obcięcie precyzji bardzo mi będzie wadziło. Ale lepiej wiedzieć.

    0
  • Pomocny post
    #5 01 Lis 2015 10:47
    kotbury
    specjalista -automatyka bramowa

    Cytat:
    Jeśli założyć, że wszyscy producenci celują w ten przedział 1ms - 2ms jako wartość referencyjną, to aplikując to do sterownika PWM de facto tracę około połowę precyzji

    Ano trudno - to jest ogólny standard modelarski i producenici nie "celują" w przedział tylkoi trzymają się standardu. Decydując się na rozwiązania oparte na modelarskich sterownikach i serwach przyjmujesz technologię z "dobrodziejstwem inwentarza" - jest jak jest.

    Chcąc uzyskać wiekszą rozdzielczość albo użyć pełnego zakresu wypełnienia sygnału PWM - musisz pójść w autorskie rozwiązania (własny procesorowy regulator silnika oraz własne sterowniki serw - bazujące na istniejących mechanicznych podzespołach) - albo w ogóle zrezygnować z silników analogowych i użyć krokowych.
    Np sterowanie silnikami w popularnym dronie Parrot AR jest właśnie rozwiązane autorsko - kontroler obrotów silnika bezszczotkowego jest można powiedzieć "zintegrowany" z samym silnikiem - a jego komunikacja z jednostką centralną odbywa się na drodze cyfrowej (sterowanie PCM 10 bitowym słowem i ADC od strony silnika).

    Cytat:
    przy moich 400Hz, im niższa częstotliwość, tym sprawa wygląda gorzej)


    Nie gorzej - dokładność jest ta sama tylko odświeżanie rzadsze.

    0
  • #6 01 Lis 2015 15:30
    joorva
    Poziom 7  

    kotbury napisał:


    Cytat:
    przy moich 400Hz, im niższa częstotliwość, tym sprawa wygląda gorzej)


    Nie gorzej - dokładność jest ta sama tylko odświeżanie rzadsze.


    A tu się nie do końca zgodzę. Przy 400 Hz jeden impuls trwa 2.5 ms. Przy precyzji 12 bitów mam do dyspozycji 4096 stopni wypelnienia. Jak zmienie to na np 50Hz to te same 4096 stopnie muszą być rozłożone na 20ms. Czyli w pierwszym przypadku na przedział 1ms-2ms przypada mi ok 1600 poziomów wypelnienia, w drugim ok 200. Dobrze kombinuję?

    0
  • #7 01 Lis 2015 16:05
    kotbury
    specjalista -automatyka bramowa

    No średnio... Serwo nie odczytuje na bieżąco odcinka czasu jednocześnie bezpośrednio przetwarzając go na ruch tylko czeka, mierząc czas, aż skończy się impuls sterujący i w zależności od jego długości oraz aktualnego położenia osi (które, jako sprzeżenie zwrotne, jest odczytywane jako wartość oporu na potencjometrze mechanicznie sprzężonym z główną osią serwa) wykonuje odpowiednią akcję - zauważ że serwo musi podjąć decyzję nie tylko o kącie obrotu osi ale i kierunku, więc musi znać z góry CAŁĄ długość impulsu sterującego.
    Podając wolniej impulsy sterujące nic nie tracisz z rozdzielczości - bo pomimo że odstępy między nimi przy 50 Hz są 8 razy dłuższe niż przy 400 - to same impulsy sterujące dalej muszą mieć te sztywne granice czasowe 1-2 ms. Tylko reakcja na impuls o dużej różnicy czasowej od poprzedniego przy wolniejszym jego zadawaniu teoretycznie będzie się odbywać mniej płynnie, a teoretycznie dla tego że serwo to mechanizm, który nie ma nieskończenie szybkiej reakcji na zadanie tylko ma swoją bezwładność i nadążanie mechanizmu nawet przy 50 Hz będzie odbywać się z czasowym poślizgiem, wygładzającym skoki.

    0
  • #8 01 Lis 2015 20:27
    joorva
    Poziom 7  

    Niezupełnie o to mi chodziło. Od strony serwa faktycznie to może nie mieć dużej różnicy, a jego bezwładność może być na tyle duża, że nie zrobi mi dużej różnicy czy będe mu nadawał sygnał 50Hz czt 400 Hz.

    Jednak dla generatora sygnału ma to kolosalne znaczenie. Otóż, jeśli dobrze rozumiem jak działa narzędzie którego używam, mając 12 bitowy kontroler, dzieli on sobie impuls PWM na 4096 kawałków, i zależnie od tego na którym kawałku podam mu informację, że powinien zrzucić sygnał z wysokiego na niski - zamknie on w tym punkcie wypełnienie w danym impulsie. Jeśli więc założymy sztywno, że interesuje nas tylko odcinek czasu między 1ms a 2ms od początku impulsu, to przy 400Hz całkiem spora część z tych 4096 kawałków mieści się między tym 1ms a 2ms (jako że cały impuls trwa tylko 2,5 ms). To daje mi względnie znośną rozdzielczość (aczkolwiek mniejszą, niż pełne 12 bitów, które rozciąga się od 0% do 100% wypełnienia). Jeśli zrzucę częstotliwość sygnału na 50Hz, to długość impulsu wydłuża mi się do 20ms, i tym razem to 20ms jest również podzielone na 4096 odcinków. Z tymże tutaj czas między 1ms a 2ms jest nieporównanie mniejszą częścią czasu całego impulsu, więc też mniej "odcinków" ze sterownika przypada na ten okres, co z kolei obniża mi rozdzielczość sterowania w tym zakresie.

    Mam nadzieję że to rozumowanie jest poprawne, bo jeśli nie to jednak dalej czegoś nie rozumiem.

    0
  • Pomocny post
    #9 01 Lis 2015 22:46
    kotbury
    specjalista -automatyka bramowa

    No tak, w sumie masz rację, nie mogłem przestawić się na fakt, że generator sprzętwo z zadaną częstotliwością wali na sztywno zadane 12 - bitową liczbą wypełnienie (przyzwyczaiłem się z dawnych czasów do liniowego programowania mikrokontrolerów - takie coś realizowałbym na jakimś PICu odliczając czas i rozdzielczość byłaby zależna tylko od - sporej - częstotliwości taktowania procka , mógłbym także symulować ramkę aparatury - wysyłając impuls ze sporą rozdzielczością i po nim odczekując kolejnych 7 na pusto).
    Jeśli układy wykonawcze akceptują taką częstotliwość - to tylko używać. W sumie można wysłać pytanie do producentów konkretnych układów wykonawczych - jaką tak naprawdę częstotliwość odświeżania akceptują wewnętrzne sterowniki i będzie pewność czy nie balansujesz na granicy ich wydolności.
    Tak jak napisałem - te 50 Hz wzięło się z potrzeby upchnięcia w 20 ms ramce chociaż ośmiu 2ms impulsów (czyli sygnałów dla 8 kanałów).

    0
  • #10 02 Lis 2015 22:22
    joorva
    Poziom 7  

    Dobra, niemniej wielki dzięki za wspomożenie mnie wiedzą i wytłumaczenie zjawiska. Bardzo mi pomogłeś i ułatwiłeś majstrowanie przy tych sprzętach.

    Pozdrawiam i jeszcze raz dziękuję bardzo.

    0