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.

Enkoder Obrotowy (konwerter sygnału z impulsatora)

mirley 14 Lip 2009 07:46 18862 32
  • Enkoder Obrotowy (konwerter sygnału z impulsatora)

    Witam. Tym razem chciałem przedstawić prościutki układ. Nazwa tego urządzenia może wydawać się myląca ale jest to poprostu konwerter zamieniający sygnał z impulsatora na dwa sygnały (impulsy w lewo i w prawo). Dwa przebiegi przesunięte w fazie o połowe okresu, generowane przez impulsator są zamieniane na impulsy na dwóch wyjściach. Na jednym pojawiają się przy obrocie w prawo a na drugim przy obrocie w lewo. Całe urządzenie zostało zaprojektowane na niewielkiej płytce drukowanej, w którą bezpośrednio wlutowany jest impulsator. Nad sterowaniem całością czuwa mikrokontroler ATTiny13, który jako element SMD znakomicie zmieścił się między nóżkami impulsatora. Układ wymaga zasilania 5V i generuje impulsy których stanem aktywnym jest zero logiczne. Ze względu na niewielkie wymiary całej płytki nie będzie ona przeszkodą w zamontowaniu impulsatorów nawet 6mm od siebie. Układ przeznaczony jest do współpracy z potencjometrami cyfrowymi, wyposażonymi w sygnały "góra" i "dół", pozwala zastąpić przyciski impulsatorem. Może się także nadawać do współpracy z innymi mikrokontrolerami, tam gdzie program sterujący jest już bardzo skomplikowany i nie chcemy obciążać go dodatkowo obsługą impulsatora.

    Schemat:
    Enkoder Obrotowy (konwerter sygnału z impulsatora)

    Sercem układu i jedyną jego aktywną częścią jest mikrokontroler U1 (ATTiny13). Kondensator C1 (100nF) filtruje zasilanie, a kondensatory C2 (100nF) i C3 (100nF). poprawiają pracę impulsatora, zmniejszając wrażliwość całego układu na fałszywe impulsy. Złącze Prog (Goldpin) jest złączem programującym ale po zaprogramowaniu procesora, wyprowadzenia MOSI i MISO tego złącza stanowia wyjście całego Enkodera. Złącze Sw(goldpin) stanowi wyprowadzenie przycisku impulsatora, jeśli jest on w niego wyposażony. Układ powinien być zasilany stabilizowanym napięciem 5V (plus podłączamy do +5V) za pomocą złącza Zas (goldpin)

    Foto:
    Enkoder Obrotowy (konwerter sygnału z impulsatora) Enkoder Obrotowy (konwerter sygnału z impulsatora)

    Strona domowa projektu: http://mirley.firlej.org/enkoder_obrotowy

    Proszę o opinię na ten temat. Jeśli ktoś potrzebuje płytkę lub program to proszę dać znać :)

    pozdrawiam


    Fajne!
  • #3 14 Lip 2009 11:23
    msichal
    Poziom 21  

    Mam jedno pytanie: Ten impulsator to cos takiego, co jest stosowane w radiach samochodowych zamiast potencjometru?

  • #4 14 Lip 2009 11:24
    mirley
    Poziom 17  

    90ms w tej wersji programu, może być dowolny impuls po zmianie programu
    -------------
    Dokładnie to coś takiego, współpracuje z układem sterującym w radiu :)

  • #5 14 Lip 2009 12:18
    manekinen
    Poziom 29  

    Nieużywany pin PB2 można wykorzystać do wyboru czy na wyjściu chcemy impulsy o stanie wysokim czy stanie niskim. Zworka na płytce by się zmiesciła, nawet leżąca, a dzięki takiej opcji wyboru odchodzi konieczność odwracania sygnału na tranzystorach (np kiedy chcemy użyć układu do obsługi gotowego potencjometru cyfrowego).

  • #6 14 Lip 2009 12:52
    mirley
    Poziom 17  

    Dodatnie impulsy można bardzo prosto zrobić zmieniając program dla mikrokontrolera, a szczególnie w tym przypadku kiedy całe złącze programujące wyprowadzone jest na goldpiny. Zależy to jednak od indywidualnego upodobania konstruktora :))

  • #7 14 Lip 2009 13:00
    aktus
    Poziom 17  

    Można do tego wykorzystać silnik krokowy z HDD?

  • #8 14 Lip 2009 15:40
    Svavo
    Poziom 23  

    manekinen napisał:
    Nieużywany pin PB2 można wykorzystać do wyboru czy na wyjściu chcemy impulsy o stanie wysokim czy stanie niskim...

    Można by też wykorzystać to wyprowadzenie jako sygnał na wejście przerwania uC obsługującego encoder, dzięki czemu nie tracimy czasu na sprawdzanie stanu encodera (pooling). Szkoda tylko, że zabrakło pinu dla przycisku encodera. Można by wówczas wprowadzić filtr cyfrowy i przerwanie o którym wspomniałem dotyczyło by jakiejkolwiek akcji encodera.

  • #9 14 Lip 2009 16:39
    mirley
    Poziom 17  

    Do aktus:
    O co chodzi z tym silnikiem HDD bo chyba nie łapię :)

    Svavo:
    Nie myślałem nad takimi zaawansowanymi funkcjami, zostałem poproszony o zrobienie takiego max prostego układziku na ATTiny13, na forum umieściłem jakby ktoś inny jeszcze chciał skorzystać :)

    Pozdrawiam

  • #10 14 Lip 2009 19:24
    Mark Masterson
    Poziom 12  

    Ładnie, pięknie, elegancko, ale...
    Fajnie byłoby dodać mały przekaźniczek, wykorzystać złącze przycisku encodera, napisać odpowiedni program... "i już" mamy zamek szyfrowy :) i to jaki elegancki !!

    Niemniej jednak 5+

  • #11 14 Lip 2009 20:21
    mirley
    Poziom 17  

    Zamek szyfrowy ..... ciekawy patent... masz na mysli takie coś co krecisz np 25 w prawo potem 34 w lewo i znowu w prawo. Otwieranie następuje po przekręceniu o odpowiednią ilość kroków?

    Z tym układem jednak nie ma to nic wspólnego poza impulsatorem :)

  • #12 14 Lip 2009 22:34
    manekinen
    Poziom 29  

    mirley napisał:
    Dodatnie impulsy można bardzo prosto zrobić zmieniając program dla mikrokontrolera, a szczególnie w tym przypadku kiedy całe złącze programujące wyprowadzone jest na goldpiny. Zależy to jednak od indywidualnego upodobania konstruktora :))

    Jasne, a wytłumacz to dla zwykłego zjadacza chleba co zdobył te urządzenie, chciał podłączyć do gotowego potencjometru cyfrowego i na słowo "programator" robi wielkie oczy :)

    DODANO

    Nie zrozumieliśmy się :) mi tego nie tłumacz bo doskonale wiem co z czym się je. Rozchodzi się o to że jeśli taki układ wpadnie w ręce człowieka nie będącego w temacie, to taka zworka ułatwiła by mu sprawę - a w przeciwnym wypadku musi kupować programator i wgrywać inny wsad.

  • #13 14 Lip 2009 22:53
    mirley
    Poziom 17  

    Nie wiem jak mam to prosto wytłumaczyć.... przygotuje najlepiej drugi program działający w inwersji , znaczy generujący dodatnie szpilki napięcia. W programie poprostu trzeba zamienić początkowy stan wejść na 0 po wykryciu ruchy ma sie ustawiać 1 zamiast 0 a po opóźnieniu znowu reset do 0.

    ----

    Zworka nic nie da bo i tak nie sprzedaję gotowych układów a jesli ktoś sobie wykonuje to i tak musi zaprogramować mikrokontroler według wytycznych. W takiej sytuacji zworka jest bez sensu bo można wgrać inny kod. Bioroc pod uwagę fakt że istnieje gotowy zrobiony układ to taka zworka przydała by się jak najbardziej :)

    ps. faktycznie nastąpiło lekkie nieporozumienie :)

  • #14 15 Lip 2009 06:56
    piotrva
    Moderator na urlopie...

    gdybyś mógł załączyć programik, tak dla potomnych, żeby nie było problem z tą zmianą stanu wyjść.
    i jeszcze sugestia - mógłbyś dodać linię strobe, która dawałaby sygnał niski na przerwanie drugiego uP, żeby można było wyzwalać inny uP nawet przy konfiguracji z sygnałami w stanie wysokim.
    Projekt bardzo przydtny

    Dodano po 32 [sekundy]:

    oops, na stronce jest programik :D

  • #15 15 Lip 2009 08:18
    mirley
    Poziom 17  

    Wydaje mi sie że tak powinien wyglądać kod z dodatkowym sygnałem wykrywania obrotu, narazie jednak go nie kompilowałem z braku czasu:

    Code:

    '************* Konfiguracja uC *****************
    '***********************************************
    $regfile = "attiny13.dat"
    '$crystal = 16000000
    $crystal = 9600000

    Config Portb = &B11100111 : Portb = &B11111100

    $hwstack = 20
    $swstack = 10
    $framesize = 40

    I1 Alias Pinb.3
    I2 Alias Pinb.4
    O1 Alias Portb.0
    O2 Alias Portb.1
    S Alias Portb.2

    Config Timer0 = Timer , Prescale = 256
    Enable Timer0 : On Timer0 Prztimer0
    Enable Interrupts
    '********** Konfiguracja uC Koniec  ************
    '******************  Zmienne *******************
    '***********************************************
    Dim In1 As Bit , In2 As Bit
    Dim Tryb As Byte , Rezultat As Integer
    Dim Licz_sw As Byte
    Dim Impuls As Byte , Stan_wyjsc As Byte
    Dim F_6ms As Bit
    Dim Port As Byte
    '*************  Zmienne Koniec  ****************
    '**************  Petla glowna ******************
    '***********************************************
    Do

    In1 = I1
    In2 = I2
     Rezultat = 0
     Select Case Tryb
      Case 0:
       If In1 = 1 And In2 = 1 Then Incr Tryb                    'jezeli dwa rozwarte
      Case 1:
       If In1 = 1 And In2 = 0 Then Tryb = 2
       If In1 = 0 And In2 = 1 Then Tryb = 3
      Case 2:
       If In1 = 0 And In2 = 1 Then
         Rezultat = 1
         Tryb = 0
       End If
      Case 3:
       If In1 = 1 And In2 = 0 Then
         Rezultat = -1
         Tryb = 0
       End If
     End Select
     Waitus 100

    If Rezultat <> 0 Then
      If Rezultat = 1 Then
        Reset O1
        Set O2
      Else
        Reset O2
        Set O1
      End If
      Reset S
    End If

    If F_6ms = 1 Then
      F_6ms = 0

      If O1 = 1 Or O2 = 1 Then
        Incr Impuls
        If Impuls = 15 Then
          Impuls = 0
          O1 = 0
          O2 = 0
          S = 1
        End If
      Else
        Impuls = 0
      End If

    End If

    Loop
    End
    '************ Petla glowna Koniec **************
    '************ Przerwanie timer 0 ***************
    '***********************************************
    Prztimer0:
      Timer0 = 5
      Set F_6ms
    Return
    '******** Przerwanie timer 0 Koniec ************

  • #16 15 Lip 2009 10:35
    dydelf
    Poziom 11  

    aktus napisał:
    Można do tego wykorzystać silnik krokowy z HDD?

    Podejrzewam, że można (lepszy jest silnik z FDD), ale amplituda impulsów z silnika silnie zależy od szybkości kręcenia ośką - trzeba więc zastosować wzmacniacz, np. zobacz:
    http://www.webx.dk/oz2cpu/20m/encoder.htm

  • #17 15 Lip 2009 16:04
    dominon
    Poziom 18  

    Kolego DJ Max. Wiele osób (w tym ja) zagląda na elektrodę nie tylko po to aby pokazać swoje nowe urządzenie ale także po to aby dowiedzieć się czegoś nowego i być po prostu na bieżąco. Enkoder kolegi mirley nie tylko znacznie upraszcza sygnał z impulsatora ale bardzo dobrze pokazuje jego działanie o którym nie każdy wiedział.

    Projekt wykonany bardzo estetycznie.

    Jedna uwaga co do płytek tych ze zdjęcia. Po wywierceniu otworków mógł byś je delikatnie przeszlifować papierem ściernym (np: 1000, lub drobniejszym) żeby nie było ostrych krawędzi.

  • #18 15 Lip 2009 20:15
    DJ Max
    Poziom 30  

    dominon napisał:
    Kolego DJ Max. Wiele osób (w tym ja) zagląda na elektrodę nie tylko po to aby pokazać swoje nowe urządzenie ale także po to aby dowiedzieć się czegoś nowego i być po prostu na bieżąco.


    Mam tego świadomość tylko nie wiem czemu właśnie to mówisz...

    Cytat:
    Enkoder kolegi mirley nie tylko znacznie upraszcza sygnał z impulsatora ale bardzo dobrze pokazuje jego działanie o którym nie każdy wiedział.


    W moim poście miałem przede wszystkim na myśli fakt, że uproszczenie sygnału realizowane jest w trudny sposób.
    Zauważ, że wymaga to przemyślenia, napisania, skompilowania i debugowania oprogramowania, zaprogramowania mikrokontrolera i montażu urządzenia na płytce. A można to zrobić na kilku bramkach CMOS przez co cała operacja to tylko przylutowanie układu do płytki. Jak to mówią - czas to pieniądz. Ponadto układzik CMOS jest z pewnością tańszy niż ATTiny, a kilka bramek nawet w implementacji FPGA prostsze niż złożona struktura mikrokontrolera, programu itd. którego pewnie nie da się zoptymalizować do tak prostej postaci.
    Fakt faktem że to groszowa sprawa w wypadku małej serii, jednak w wypadku implementacji rozwiązania w większych projektach można zaoszczędzić na wakacje dla całej kadry zakładowej.

  • #19 15 Lip 2009 20:49
    mick
    Poziom 15  

    Mam pytanie bo kupiłem na alle... kilka sztuk impulsatorów ale one w stanie spoczynku przybierają różne pozycje czyli może to być 00, 01 i 10 (już nie pamiętam czy 11 też) czy to jest normalne? Z tego też powodu sporo czasu straciłem na zbudowanie algorytmu ale i tak nie działa idealnie.

  • #20 15 Lip 2009 20:57
    dominon
    Poziom 18  

    Dobrze jeżeli chodzi o większe projekty to się zgodzę. Jednak autor napisał o zastosowaniu np: w audio zamiast przycisków w cyfrowych potencjometrach.

  • #21 15 Lip 2009 21:16
    mirley
    Poziom 17  

    Witam

    Rozwinęła się tutaj dyskusja na temat tego prostego układziku.... wcale nie uważam że lutowanie bramek CMOS do kupy to lepsze rozwiązanie, bo będzie dużo większe i bedzie problem drgania styków w impulsatorze itp problemy. Nie zaoszczędzimy na tym nic.... Jeśli oczywiście bramki logiczne wchodzą w skład struktury FPGA to całkowicie inna sprawa, wtedy uzycie mikrokontrolera mija się z celem bo jego synteza zajmie duże zasoby układu programowalnego.

    Każdy ma swoje zdanie a użycie tego mikrokontrolera jest jak najbardziej w tym przypadku celowe, nikt tu nie mówi o seryjnej produkcji... poza tym wszystko zalezy kto tego używa i do czego potrzebuje. Osobiście wprogramował bym sobie obsługę tego impulsatora w gotowe urządzenie, jednak są sytuacje kiedy lepiej dać dwa układy i uprościć sobie obsługę programową.



    Odnośnie impulsatorów to spotkałem się z takimi co w stanie spoczynku mają zawsze 00, lub takimi co mają raz 00 a raz 11, posrednie stany 10, i 01 sa podczas kręcenia

  • #22 15 Lip 2009 21:23
    DJ Max
    Poziom 30  

    mirley napisał:
    wcale nie uważam że lutowanie bramek CMOS do kupy to lepsze rozwiązanie, bo będzie dużo większe i bedzie problem drgania styków w impulsatorze itp problemy.


    O ile pamiętam problem można rozwiązać na jednym układzie (2 albo 4 bramki), taki układzik w SMD wcale nie jest większy od ATTiny... Musiałbym zajrzeć do źródła, ale wszystkie papiery ze względu na przeprowadzke mam głęboko w kartonach...

  • #23 15 Lip 2009 22:26
    mirley
    Poziom 17  

    Może i da się to łatwo zrobić na bramkach, jednak nigdy nie umożliwi to takiej elastyczności jak daje uC. Można sobie dać impuls trawający 10ms albo 100ms albo na dowolną inna długość...

    ....tak na marginesie to każdy robi tak jak lubi, a skoro zostałem poproszony o zrobienie takiego układu na ATTINY13 to właśnie tak się stało. :)

  • #24 17 Lip 2009 10:48
    Svavo
    Poziom 23  

    mick napisał:
    Mam pytanie bo kupiłem na alle... kilka sztuk impulsatorów ale one w stanie spoczynku przybierają różne pozycje czyli może to być 00, 01 i 10 (już nie pamiętam czy 11 też) czy to jest normalne? Z tego też powodu sporo czasu straciłem na zbudowanie algorytmu ale i tak nie działa idealnie.

    Ja spotkałem się z dwoma rodzajami sygnałów wyjściowych encoderów (Alps), gdzie pojedynczy skok powoduje:
    1. Zmianę zbocza
    2. Impuls

  • #25 17 Lip 2009 13:13
    aktus
    Poziom 17  

    dydelf napisał:

    Podejrzewam, że można (lepszy jest silnik z FDD), ale amplituda impulsów z silnika silnie zależy od szybkości kręcenia ośką - trzeba więc zastosować wzmacniacz, np. zobacz:
    http://www.webx.dk/oz2cpu/20m/encoder.htm

    Dzięki wielkie za info :) Mam kilka krokowców z dysków twardych i tam są 4 wyprowadzenia. Będę musiał w przypływie wolnego czasu nad nimi siąść.
    mirley napisał:
    Do aktus:
    O co chodzi z tym silnikiem HDD bo chyba nie łapię :)

    Silniki mają taką ciekawą właściwość, że jak się nimi kręci to generują napięcie.

  • #26 17 Lip 2009 22:30
    Galareta
    Poziom 21  

    Co do HDD i FDD to tam są czujniki Halla:] i z tego można sygnał wykorzystać jako impulsator;) W silniczku z CD też powinny być;)

  • #27 17 Lip 2009 23:48
    mirley
    Poziom 17  

    Cytat:
    Silniki mają taką ciekawą właściwość, że jak się nimi kręci to generują napięcie.


    To że generują napięcie to wiem, tylko nie spotkałem się z ich zastosowaniem w roli impulsatora.... Szczerze mówiąc to jaką to ma zaletę skoro impulsator kosztuje poniżej 4zł i nie trzeba do niego dodatkowych wzmacniaczy.... no chyba że potem na pilota pokrętło samo sie kręci to wtedy mogło by tak być.

  • #28 19 Lip 2009 11:33
    MarcinK
    Poziom 12  

    A ja chciałbym się zapytać, czy w procku są rezystory podciągające, czy w ogóle nie są wykorzystywane w tym układzie?

  • #29 19 Lip 2009 12:07
    mirley
    Poziom 17  

    Chodzi Ci o rezystory podciągające wejścia procesora? Jesli tak to nie są do niczego potrzebne, ATTINY13 to mikrokontroler AVR i jego wyprowadzenia podłączone są jako wejścia, bezpośrednio do impulsatora.

  • #30 27 Lut 2010 19:27
    pier
    Poziom 23  

    Zrobiłem niedawno ten układzik. Działa nawet nieźle ale u mnie impulsy wyjściowe strasznie długo trwają ok 1s. Tak że jak kręcę impulsatorem nawet powoli to diody podłączone do wyjść świecą cały czas a nie takiego działania oczekuję od tego układziku. Jak (gdzie) w programie zmienić czas trwania impulsu na wyjściu?