logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Moduł konwersji pozycji enkodera inkrementalnego na 0-10V/0-20mA

altar3 31 Gru 2023 00:39 1536 43
Najlepsze odpowiedzi

Jak najtaniej zbudować układ, który odczyta pozycję z enkodera inkrementalnego, skalibruje zakres od 0 do końca i wystawi odpowiadający mu sygnał 0-10 V albo 0-20 mA?

Da się to zrobić na mikrokontrolerze, a praktyczne rozwiązanie z wątku to Arduino Nano + enkoder inkrementalny z wyjściami A/B + endstop, z wyjściem PWM filtrowanym RC i wzmocnionym do 0-10 V przez op-amp, np. LM324 [#20886313][#20886545][#20890457] Enkoder kwadraturowy daje informację o kierunku, więc układ może zliczać pozycję w górę i w dół; do obsługi nie potrzeba bibliotek, tylko kilka linii kodu [#20886376][#20887132] Przy starcie pozycja jest nieznana, więc trzeba wykonać kalibrację na krańcówce lub przycisku, a pozycję min/max można zapisać do EEPROM po kalibracji, nie przy każdym kroku [#20890457][#20907949][#20908010] W odpowiedzi padła też propozycja, by użyć enkodera 50–100 imp/obrót, co przy takiej aplikacji powinno wystarczyć [#20887597] Arduino Nano 3.0 uznano za odpowiednie, najlepiej zasilać je z VIN 7–12 V, a sam sygnał wyjściowy z PWM można dopasować do modułu, który przyjmuje 0-5 V lub 0-10 V [#20888978][#20887309]
Wygenerowane przez model językowy.
  • #1 20884239
    altar3
    Poziom 13  
    Posty: 171
    Ocena: 21
    Szukam układu do odczytywania pozycji z enkodera inkrementalnego. Konkretnie chodzi mi o takie działanie: ustawiam pozycję 0, zapisuję i jadę w drugą stronę do końca, a następnie zapisuję, ile impulsów podał enkoder. Na koniec chciałbym, żeby przeliczał pozycje i wystawiał na wyjściu sygnał 0-10V albo 0-20mA. Czy istnieje taki moduł? Ewentualnie, czy jest jakiś projekt na Arduino? Jednak programowanie w moim przypadku jest praktycznie żadne.
    Najważniejsze jest, żeby takie rozwiązanie nie kosztowało dużo pieniędzy.
  • #2 20885117
    zathura80
    Poziom 17  
    Posty: 310
    Pomógł: 19
    Ocena: 41
    Nie ma żadnego urządzenia do tego pomiaru
    Enkoder inkrementalny podaje tylko impulsy bez kierunku i położenia lepszy był by absolutny
  • #3 20886183
    mam_pytanie
    Poziom 30  
    Posty: 1068
    Pomógł: 161
    Ocena: 255
    Zwykły licznik góra - dół i przetwornik DA z wyjściem napięciowym lub prądowym, powinny załatwić sprawę.
    Do realizacji na procku lub układach TTL/ CMOS.
    Przy czym, przepełnienie, czyli wyjazd poza zakres, ignorowany. To znaczy, po dotarciu do min/ max następuje nasycenie wyjścia i dalsze kręcenie w tę samą stronę nic nie zmienia. Zmiana kierunku natomiast, wywołuje niezwłoczną reakcję.

    Poza tym, działałoby to tylko do wyłączenia zasilania. Po ponownym uruchomieniu trzeba by od nowa programować.
    Chyba, że założyć, iż podczas przerwy w dostawie prądu, stan enkodera nie ulega zmianie. Wtedy, w procedurze "brownout" można np. wpisać ostatnią pozycję do pamięci (zasadniczo, w wykonaniu procesorowym).
    Albo zapewnić bateryjne podtrzymanie.

    Do ustalenia rozdzielczość.
  • #4 20886256
    zathura80
    Poziom 17  
    Posty: 310
    Pomógł: 19
    Ocena: 41
    Witam kol. Mam pytanie chyba nie zna działania enkodera inkrementalnego
    Licznik jest ok tylko w jednym kierunku obrotów, jeśli będzie się obracał w różnych to lipa licznik wszystko zliczy
  • #5 20886313
    gps79
    Poziom 37  
    Posty: 2186
    Pomógł: 494
    Ocena: 786
    Da się na mikrokontrolerze.
    Sygnały A i B enkodera oraz przycisk zwierany do masy na wejściu, sygnał PWM o rozdzielczości 8-bitów na wyjściu.
    Sygnał PWM filtrujesz filtrem RC i odpowiednio wzmacniasz wzmacniaczem operacyjnym do zakresu 0-10V.
    Kalibrację pozycji będziesz musiał wykonać przy każdym włączeniu zasilania, bo przy starcie enkoder może się znajdować w dowolnej pozycji.
  • #6 20886356
    zathura80
    Poziom 17  
    Posty: 310
    Pomógł: 19
    Ocena: 41
    Wszystko jest Ok tylko brakuje układu który poda kierunek obrotów ,enkoder nie ma,zawsze podaje impulsy niezależnie od kierunku obrotów
  • #7 20886376
    gps79
    Poziom 37  
    Posty: 2186
    Pomógł: 494
    Ocena: 786
    Kodowanie kwadraturowe, które jest standardem w enkoderach z dwoma wyjściami (wspomniane sygnały A i B) zawiera w sobie informację o kierunku ruchu, prawda?
  • #8 20886393
    mam_pytanie
    Poziom 30  
    Posty: 1068
    Pomógł: 161
    Ocena: 255
    Cytat:
    Witam kol. Mam pytanie chyba nie zna działania enkodera inkrementalnego

    Niewątpliwie Kol. zathura80 ma rację.
    Podobnie, nie mam absolutnie żadnych informacji ponad te, które autor wątku zawarł w poście. Np. co do tego, czy "lipa", w ogóle się do liczenia pcha? Albo, jak traktować choćby błędnie zliczone obiekty - ignorować, wycofać?
    [/quote]
  • #9 20886436
    zathura80
    Poziom 17  
    Posty: 310
    Pomógł: 19
    Ocena: 41
    W większości przypadków takie enkodery służą do precyzyjnego zaliczania obrotów i kontroli prędkości obrotowej
    Oczywiście można sygnał z enkodera zaadaptować do różnych zastosowań poprzez odpowiednie przetworniki
  • #10 20886545
    gps79
    Poziom 37  
    Posty: 2186
    Pomógł: 494
    Ocena: 786
    Kontynuując moją propozycję. Do wyjścia PWM mikrokontrolera podłączasz taki oto układ:
    Schemat układu wzmacniacza operacyjnego z PWM.
    Rezystor wyjściowy 1K nie jest wymagany. Użyty został tylko w celu symulacji).
    Rezystor 7.1K zamieniasz na rezystor nastawny liniowy 10K i z jego pomocą ustawiasz 10V na wyjściu przy 100% PWM zadanym przez mikrokontroler.
    Jako op-amp może pracować popularny LM324.
    Mikrokontroler musi być zasilany ze stabilizowanego napięcia (przy wykorzystaniu Arduino, płytki te mają wbudowane stabilizatory).
  • #11 20886570
    _jta_
    Specjalista elektronik
    Posty: 48845
    Pomógł: 3198
    Ocena: 4190
    Enkodery inkrementalne zwykle dają dwa sygnały, i sekwencja ich zmian zależy od kierunku obrotu (chyba, że autor ma enkoder z jednym sygnałem wyjściowym, wtedy można tylko zwiększać sygnał przez obracanie). Być może rozwiązaniem byłoby użycie potencjometru cyfrowego - najlepiej takiego, któremu odpowiadają sygnały, jakie daje enkoder (bo inaczej trzeba będzie konwertować sygnały).
  • #12 20887086
    altar3
    Poziom 13  
    Posty: 171
    Ocena: 21
    Jak najbardziej enkodery inkrementalne nadają się do zliczania przebytej drogi. Pracuje w firmie jako utrzymanie ruchu i posiadamy na stanie maszyny które wykorzystują właśnie takie enkodery. I możecie być pewni, że właśnie zliczają przebytą drogę, albo kąt przechyłu. I to w obie strony. I we wszystkich przypadkach są to enkodery inkrementalne. Więc czy nadają się do takiej aplikacji nie mam żadnej wątpliwości.
    gps79
    I teraz właśnie pojawią się problem. Bardzo chętnie zbudował bym takie użądzenie na arduino. Dość tania platforma więc można zainwestować. Czytałem nawet że są biblioteki do odczytu takich enkoderów. Ale sam nie jestem w stanie zaprogramować takiego układu, bo poprostu nie umiem programować. Dlatego szukam gotowego rozwiązania. Co do zaniku prądu, zdaję sobie z tego sprawę żę stracę pozycje. Ale to można rozwiązać kalibracją w końcowych punktach. Czyli przy dojechaniu do początku lub końca, automatycznie kalibruje się pozycja. Tak właśnie mamy rozwiązane to w dwóch maszynach, gdzie jest duża szansa na utratę pozycji poprzez poślizg koła napędowego. Tylko takie punkty są w środku trasy i kalibracją robi się za każdym przejazdem.
  • #13 20887132
    gps79
    Poziom 37  
    Posty: 2186
    Pomógł: 494
    Ocena: 786
    Akurat do obsługi enkodera nie potrzeba bibliotek, bo to kilka linijek kodu.
    Coś więcej powiesz o sygnale wejściowym (maksymalna ilość impulsów na sekundę, największa możliwa ilość impulsów do zliczania) i wyjściowym (jaka jest wymagana rozdzielczość napięcia wyjściowego, jaki błąd jest akceptowalny)?
  • #14 20887187
    altar3
    Poziom 13  
    Posty: 171
    Ocena: 21
    Myślałem aby to użyć w systemie inteligentnego domu do sterowania rolet, bramy garażowej i zasłon. Więc nie jest potrzebna jakaś super dokładność. Jeśli chodzi o sygnał wejściowy to nie jestem w stanie dokładnie określić. Na alliex... można kupić tanie enkodery optyczne z ilością impulsów 600 na obrót, I taki myślę że by wystarczył w takich urządzeniach. Przy założeniu 600 impulsów na obrót myślę że będzie to z 3 może 4 tysiące impulsów. Więcej może być przy karniszu. Do rolet w tym momencie używam rozwiązania producenta które polega na na zliczania czasu otwarcia i zamknięcia rolety. Ale to nie jest najbardziej precyzyjne. A do karnisza można użyć gotowych rozwiązań, tylko że nie bardzo gadają z tym systemem co wybrałem. A nie chce też polegać na wifi bo jest zawodne i wszystko robie po kablach.
  • #15 20887243
    gps79
    Poziom 37  
    Posty: 2186
    Pomógł: 494
    Ocena: 786
    A skąd wymaganie na sygnał wyjściowy 0-10V? Pytam, aby się rozeznać, czy filtrowany PWM z mikrokontrolera wystarczy.
  • #16 20887309
    altar3
    Poziom 13  
    Posty: 171
    Ocena: 21
    Ponieważ taki sygnał przyjmuje moduł w systemie, który wybrałem. Jest to system Grenton, polskiego producenta. Można by to było połączyć poprzez Modbus albo HTTP. Z tym że gotowe rozwiązania nie wystawiają na zewnątrz swojej pozycji. I tak się właśnie zastanawiałem nad takim pozycjonowaniem. A do tego gotowe rozwiązania do zasłon to wielkie puszki, które zwisają z karnisza. A ja chciałbym tę puszkę schować w suficie podwieszanym. Mogłbym użyć serwa z Chin i sprzęgła elektrycznego na 24V DC i właśnie tego nieszczęsnego enkodera. Wtedy na aplikacji w telefonie będę miał informację zwrotną w jakiej pozycji jest zasłona. A przez sprzęgło również będzie możliwość operowania zasłoną manualnie.
    Przepraszam za opóźnienie w odpowiedzi, ale jestem właśnie w pracy. I piszę w wolnych chwilach.
    I jeszcze dziękuję za zainteresowanie tematem i pomoc.
  • #17 20887402
    mam_pytanie
    Poziom 30  
    Posty: 1068
    Pomógł: 161
    Ocena: 255
    Ok., parametr enkodera znamy, ale chyba nie chcesz znać każdego z tych 4 tysięcy położeń rolety z dokładnością do 7 miejsc po przecinku. co nie?
    Jak sądzę, 128 powinno być w sam raz.
    Dobra - 256 w wersji premium. :)

    Zarzuć może jeszcze linke do jakiegoś naprzykładowego, taniego Chińczyka, z tych, o których wspomniałeś.
    Chodzi o to, czy ma tylko wyjścia z odbiorników optyki, czy już wbudowaną elektronikę logiki "kierunkowej".
    W drugim przypadku, jak napisano, wystarczy zwykły licznik impulsòw. Pierwszy natomiast wymagać będzie ręcznej rzeźby w tzw. hardware lub napisania stosownej procedury obsługi, uwzględniającej także zatrzymanie w ròżnych położeniach, czyli np. niepełne "przejścia", a także dalszy ruch - naprzòd lub do tyłu.
    Nie jest to skomplikowane - parę bramek i przerzutnikòw lub kilka sztuk "If ... Then" więcej.
  • #18 20887465
    zathura80
    Poziom 17  
    Posty: 310
    Pomógł: 19
    Ocena: 41
    Dla mnie to trochę rozbudowany system dla zwykłych zasłon. Rolety zewnętrzne to ok.
    Tutaj zastosował bym parę wyłączników krańcowych i sterownik silnika. Urządzenie proste mniej awaryjne i tanie
  • #19 20887466
    gps79
    Poziom 37  
    Posty: 2186
    Pomógł: 494
    Ocena: 786
    Program do Arduino nie będzie problemem, jak podasz, jaką logiką ma się kierować. Przynajmniej jeden endstop będzie konieczny, aby po napotkaniu na niego "wyzerować" licznik pozycji do wartości min lub max zapisanej w EEPROMie. Oznacza to, że po włączeniu zasilania startujesz z pozycji niewiadomej i taka pozostanie do czasu napotkania endstopu. Chyba, że urządzenie ma się zachowywać inaczej. Na razie wiemy, jakiego zachowania oczekujesz z postu #1, ale nie wierzę, że przy każdorazowym zaniku zasilania będziesz guziczkiem kalibrował wszystkie rolety.

    Nie podałeś, z jaką maksymalną prędkością będzie się obracała oś enkodera.
  • #20 20887480
    altar3
    Poziom 13  
    Posty: 171
    Ocena: 21
    Tak masz rację. Nie potrzeba znać dokładnej pozycji z tych 4000 impulsów. Ale procesor musi je wszystkie odczytać. Jeżeli będzie je pomijał zacznie się wszystko rozjeżdżać. Ale konkretnie to chodzi mi o to że zaczynamy programowanie, ustawiam pozycje 0 i jedziemy do samego końca, zapisujemy pozycje końcową a procesor zapamiętuje ile impulsów podał w tym czasie enkoder. Dzieli to na 100, tak żeby rozdzielczość była 0.1v. W taki sposób nie potrzeba dokładnie znać enkodera może być 300 a może być 1024 impulsy na obrót. A procesor i tak wykona całą resztę. A jeżeli do tego dodamy pozycje kalibracji np. przy pozycji 0, to będzie trzeba programować taki układ tylko raz, jak uruchomimy albo wymienimy enkoder.
    Przynajmniej ja tak to widzę, ale to wcale nie musi tak działać. Może właśnie trzeba dokładnie znać typ enkodera żeby przerwania pasowały.
    To link do przykładowego enkodera, można wybrać wersję ile impulsów:
    https://pl.aliexpress.com/item/10050050717716...fJMLjuPJhvxoC-ZAQAvD_BwE&gatewayAdapt=glo2pol

    A tu na ebay angielskim, z omrona więc chyba dość dobra jakość, I też nie zabija ceną:

    https://www.ebay.co.uk/itm/304492846274?_trkp...g%253D%253D%7Campid%3APLP_CLK%7Cclp%3A2332490

    Dodano po 15 [minuty]:

    gps79
    Właśnie chodzi mi o takie działanie jak podałeś z endstopem. Programujemy tylko raz jak uruchamiamy albo wymieniamy enkoder. A po zaniku prądu wysyłam wszystkie rolety i zasłony do pozycji 0 gdzie jest endstop. Automatyka domu oczekuje na sygnał 0 albo 10V, tak układ zapamiętuje pozycje I wystawia odpowiedni sygnał. I od tego czasu wszystko już będzie działało jak powinno. Można dodać również kalibrację na endpoint, za każdym razem jak ten zostanie wyzwolony.

    Taki skomplikowany układ ponieważ automatyka nigdy nie zna pozycji rolet ani zasłon, I są sytuację gdy czasy zapamiętane się rozjadą, ustawiam żeby roleta otwożyła się do połowy, a ona otwiera się 15%. I wtedy właśnie trzeba znowu kalibrować taką roletę. Wszystko przez to że system oszacowuje pozycje rolety, na podstawie czasu jazdy w dół i w górę. Tak samo jest z zasłonami. W zasłonach dochodzi jeszcze problem obsługi ręcznej. Po tym system kompletnie się zgubi. I w przypadku gotowych rozwiązań, zostaję tylko sterowanie zasłona otwórz, zamknij. A i tak muszą być krańcówki żeby nie spaliło silnika. Bo system będzie wyzwalał wyjście na odpowiedni " zapisany" czas działania.
    I zapomniałem dodać.
    Nie musi to być akurat 0-10v może to być również 0-5v bo moduł I takie sygnały przyjmuje.
  • #21 20887515
    gps79
    Poziom 37  
    Posty: 2186
    Pomógł: 494
    Ocena: 786
    Nie podałeś, z jaką maksymalną prędkością będzie się obracała oś enkodera.
  • #22 20887536
    altar3
    Poziom 13  
    Posty: 171
    Ocena: 21
    Tak teraz jeszcze raz przeczytałem twój post. Jak pisałem byłem w pracy na noc 12h. Więc odpowiedzi pisze jak mam czas. Na pewno nie będą to zawrotne prędkości. Myślę że w roletach i zasłonach nie ma więcej jak 3 może 5 obrotów na sekundę. A i takie prędkości wydają się przy roletach spore.
    Teraz niestety muszę iść spać bo dzisiaj znowu nocka 12h.
    Jak coś to odezwę się znowu dopiero po 20:00
  • #23 20887597
    gps79
    Poziom 37  
    Posty: 2186
    Pomógł: 494
    Ocena: 786
    Ok. Dzięki. Zalecam zatem enkoder o rozdzielczości 50 lub 100 imp/obrót, co i tak w rzeczywistości da rozdzielczość 2x większą.

    Więc z mojej strony taka jest propozycja rozwiązania:
    -enkoder 50ppr
    -1x pushbutton
    -1x endstop
    -arduino
    -filtr dolnoprzepustowy RC
    -op-amp np. LM324
    -zasilanie op-ampa 12-30VDC
    -zasilanie arduino - zależne od typu
    Przy takiej konfiguracji jestem w stanie pomóc w napisaniu programu.
    To będzie działać 24x7?
  • #24 20888876
    altar3
    Poziom 13  
    Posty: 171
    Ocena: 21
    Taki jest plan, aby działał 24/7.
    Arduino, polecasz jakiś konkretny typ, czy może być Nano v3.0 z ATmega328P?
    Do tego konwerter DC-DC z 24V na 5V.
    Enkoder może być chińczyk, czy może jednak zainwestować w tego Omrona?
  • #25 20888978
    gps79
    Poziom 37  
    Posty: 2186
    Pomógł: 494
    Ocena: 786
    Arduino Nano 3.0 jest OK. Na płytce jest LED, którą można użyć do wizualizacji stanu podczas kalibrowania.
    Najlepiej zasilać je z wejścia VIN napięciem 7-12V DC. Zasilanie Arduino napięciem 5V (z zewnętrznego niepewnego źródła) często powoduje problemy ze stabilnością, których nie ma przy wykorzystaniu wbudowanego w Nano stabilizatora.
    Nie mam wiedzy odnośnie jakości enkoderów, więc tutaj nie pomogę.
  • #26 20889134
    altar3
    Poziom 13  
    Posty: 171
    Ocena: 21
    Ok w takim razie zamawiam graty i montuje na płytce stykowej do testów.
  • Pomocny post
    #27 20890457
    gps79
    Poziom 37  
    Posty: 2186
    Pomógł: 494
    Ocena: 786
    Wrzucam kod realizujący w/w założenia. Obsługa enkodera, to funkcja pinChangeINT(). Jak widać, to kilka linijek kodu.

    - Na starcie program zakłada, że roleta jest na górze, co oznacza PWM=100%. Zjeżdżając w dół PWM zmniejsza się proporcjonalnie. Po napotkaniu endstopu (sygnał zwarty do masy) program uznaje, że roleta zjechała do samego dołu.
    - Przy pierwszym uruchomieniu, gdy dane kalibracyjne nie zostały zapisane do EEPROMU następuje jedno długie mrugnięcie LED.
    - Przy pierwszym uruchomieniu przed kalibracją LED mruga co 2s do czasu wykonania kalibracji.
    - PWM działa z częstotliwością 31.4kHz i do tej częstotliwości należy dobrać filtr RC.
    - pierwsze naciśnięcie przycisku, to zapamiętanie pozycji niskiej rolety (tu nie ma zapisu danych do EEPROMU). Potwierdzone podwójnym mrugnięciem LED.
    - drugie naciśnięcie przycisku, to zapamiętanie górnej pozycji rolety i zapis parametru do EEPROMU. Potwierdzone długim sygnałem LED. Brak sygnału LED oznacza, że pozycja górna rolety nie różniła się od dolnej i nie było zapisu do EEPROMU.
    - Możesz na bieżąco podejrzeć stan programu za pomocą terminala UART podłączonego do Arduino.

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #28 20890712
    altar3
    Poziom 13  
    Posty: 171
    Ocena: 21
    Dziękuję
    Jak tylko wszystko dotrze będę składał i testował na stole.
    Jeszcze tylko małe pytanie. Filtr RC ma być na wyjściu a op-amp na wejściu do arduino przed enkoderem, dobrze rozumiem?
  • #29 20890723
    gps79
    Poziom 37  
    Posty: 2186
    Pomógł: 494
    Ocena: 786
    - Enkoder (A, B, GND) podłączasz do wejść 2, 3, GND w Arduino.
    - Wyjście 11 (PWM) i GND w Arduino podłączasz do układu (filtr RC + op-amp) z postu #10.
    - Endstop podłączasz do wejść 5 i GND w Arduino.
    - Przycisk podłączasz do wejść 4 i GND w Arduino
  • #30 20890817
    altar3
    Poziom 13  
    Posty: 171
    Ocena: 21
    O dziękuję. Wyjścia i wejścia znalazłem w programie. Ale z filtrem RC wolałem się upewnić. Teraz już mam jasność i czekam na dostawę zamówionych elementów.

Podsumowanie tematu

✨ Użytkownik poszukuje modułu do konwersji pozycji enkodera inkrementalnego na sygnał 0-10V lub 0-20mA, z możliwością kalibracji pozycji. W dyskusji podano, że enkodery inkrementalne dostarczają impulsy, ale nie informują o kierunku obrotu, co może być problematyczne. Proponowane rozwiązania obejmują użycie mikrokontrolera (np. Arduino) do zliczania impulsów oraz przetwornika DA do generowania sygnału wyjściowego. Wskazano na potrzebę kalibracji pozycji przy każdym uruchomieniu oraz na możliwość zastosowania endstopów do ustalania pozycji. Użytkownik rozważa zastosowanie enkodera o rozdzielczości 600 impulsów na obrót, a także systemu Grenton do integracji z inteligentnym domem. Wskazano na możliwość użycia kondensatorów do podtrzymania zasilania oraz pamięci EEPROM do zapisywania pozycji.
Wygenerowane przez model językowy.
REKLAMA