Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

licznik na GAL pytanie teoretyczne

mototest 11 Apr 2009 17:47 2369 13
Texa Poland
  • #1
    mototest
    Level 19  
    Witam kolegów

    Nie znam się na układach programowalnych na razie i ma pytanie:

    czy na małych GALach mozna zrobić licznik liczący do 5000 w przód i w tył z kilkoma wyjściami na których pojawiają się impulsy co 1000 i inne wejścia/wyjścia jak na rysunku

    ______
    I..........I
    I..........I_1000
    I..........I
    I..........I_2000
    I..........I
    I..........I_3000
    I..........I
    I..........I_4000
    I..........I
    I..........I_5000
    I..........I
    I..........I_reset
    I..........I
    I..........I_licz w przód
    I..........I
    I..........I_licz w tył
    I..........I
    I..........I_impulsy do zliczania
    I..........I



    Dzięki
    Bogdan
  • Texa Poland
  • #2
    Szymon Tarnowski
    Level 27  
    Zabraknie przerzutników nie wspominając już o logice sterującej. Oprócz zliczania impulsów potrzebny jest układ porównujący który przy dziwnych wartościach liczb może też zająć kilka makrocel (a więc "zużyć" przerzutniki które będą zablokowane). W układzie 16V8 jest tylko osiem przerzutników więc hipotetycznie można by zrobić licznik do 256. Największe układy dostępne na rynku to 22V10 które mają 10 przerzutników, hipotetycznie dałoby się zrobić licznik do 1024, ale zabraknie innych zasobów sterujących.
    Są jeszcze układy 26V12 (i inne dziwolągi) które mają więcej przerzutników ale są rzadko spotykane. Tak jakbym miał sugerować jakiś układ to spróbuj zasymulować czy zmieści się taka logika w układzie XL9536 albo w jakimś EPM7032, takie układy kosztują około 5zł. Nie wiem co dokładnie budujesz ale czy nie można te wstawić w jakiś uP? Będzie to łatwiejsze do opracowania oczywiście kosztem znacznie niższej częstotliwości pracy (dla uP ja bym szacował jakieś 1MHz, dla PLD jakieś 100MHz).
  • Texa Poland
  • #3
    mototest
    Level 19  
    to jaki najtańszy układ nadawałby się do tego ?
    docelowo potrzebuję zliczać impulsy z enkodera inkrementalnego (trzy przewodowego X,Y,Z Z=impuls resetujący)
    3600 lub 5000 impulsów na obrót z wjściem impulsu co 90 stopni,
    na procku to nie działa bo przy większej szybkości gubi impulsy a ja potrzebuję kręcić do 1000obr/min
    ,wiem że są specjalizowane układy do enkoderów, ale są niedostępne w naszym kraju, wiec wolałbym to na układzie programowalnym

    B.
  • #4
    Szymon Tarnowski
    Level 27  
    mototest wrote:
    na procku to nie działa bo przy większej szybkości gubi impulsy a ja potrzebuję kręcić do 1000obr/min
    1000obr/min to jakieś 17 obr/sek, nawet jak jest 5000 impulsów na obrót to wynikowo jest niecałe 100kHz, dla procesora który pracuje z zegarem 10MHz to jest 100 instrukcji pomiędzy cyklami, więc jakby to dobrze zoptymalizować to powinno działać.

    Są procesory z wbudowanymi sprzętowymi modułami enkodera, coś u microchipa widziałem.

    Tak na szybko to układy takie jak napisałem wyżej. Oprócz układu musisz dołożyć jakiś generator taktujący, ale nawet najprostsze układy mogą pracować przy 50-100MHz. Układ musi działać na zasadzie że z częstotliwością taktowania działa automat symulujący pracę enkodera który próbkuje stany wejściowe. Być może potrzebne będą do tego na wejściu układy eliminujące drganie zestyków, więc lepiej na zapas wziąć jakiś "większy" układ.

    Jeszcze jest możliwość zrobić układ podwójny, na PLD układ wykrywający kierunek obrotów, a w uP układ zliczający. Być może wtedy nawet 16V8 wystarczy.
  • #5
    mototest
    Level 19  
    Wolałbym to wszystko na PLD,
    jesteś w stanie zrobić na zlecenie taki układ dla mnie ? z tym że potrzebuję jeszcze podawać mu na wejście informację 13bitową przy którym impulsie ma sie kasować licznik, bo to nie jest równo co 90 stopni.
    jeśli tak to na jakim układzie by to było ?

    B.
  • #6
    Szymon Tarnowski
    Level 27  
    mototest wrote:
    Wolałbym to wszystko na PLD,
    jesteś w stanie zrobić na zlecenie taki układ dla mnie ?
    Jestem w stanie, ale chwilowo mam jeszcze trochę roboty i na głowie własny ślub. Nie jestem w stanie nic ruszyć przynajmniej przez 2 miesiące.
    mototest wrote:
    z tym że potrzebuję jeszcze podawać mu na wejście informację 13bitową przy którym impulsie ma sie kasować licznik, bo to nie jest równo co 90 stopni.
    To już są drobne szczegóły, do ustalenia
    mototest wrote:
    jeśli tak to na jakim układzie by to było ?
    Jakby ja miał wybierać to coś z tanich xilinxów np XC9574XL albo XC95144XL. Ale najpierw trzeba by przygotować jakiś wstępny projekt, sprawdzić ile miejsca zajmie w środku układu (software do CPLD robi coś takiego od ręki) i jak dobrze to działa na modelu (na jakieś płycie prototypowej).
  • #7
    mototest
    Level 19  
    termin kosmiczny :)
    jak nic nie wymyślę to się zgłoszę
    B.
  • #8
    J.A
    Level 28  
    Szymon Tarnowski wrote:
    /.../na głowie własny ślub/.../

    spolecznosc elektrody gratuluje Pannie Mlodej wyboru,
    a Mlodej Parze zyczy dlugich lat w szczesciu :);

    mototest wrote:
    termin kosmiczny

    nie chcialbym Szymonowi odbierac zlecenia, ale 'na oko'
    opisane przez Ciebie wymagania to pol godziny roboty,
    mowie oczywiscie tylko o napisaniu kodu realizujacego
    owe zliczanie impulsow, nie o zmontowaniu dzialajacego
    urzadzenia;

    J.A
  • #9
    mototest
    Level 19  
    Również gratuluję :)
    2 miesiące nie dam rady czekać, szczerze potrzebuję to na "wczoraj" , ale nie wiem czy jest to realne, na razie nie mam czym zaprogramować nawet tego xilinxa, jak sie piszesz na to to może przejdźmy na priv.
    najlepiej gdyby się dało na XC9536 9572 bo jest tani i łatwy w montażu
    B.
  • #10
    Szymon Tarnowski
    Level 27  
    J.A wrote:
    nie chcialbym Szymonowi odbierac zlecenia
    Ja się nie obrażę, chciałbym zrobić taki projekt, ale mam "zajęte ręce".
  • #11
    J.A
    Level 28  
    mototest wrote:
    /.../potrzebuję to na "wczoraj"/.../

    w ramach dzialalnosci spolecznej napisze Ci taki kod, skoro Szymon
    udzielil swego blogoslawienstwa, ale do pracy typu lutowanie
    itd. musisz sobie znalezc kogos blizej Ciebie :)

    J.A
  • #12
    mototest
    Level 19  
    dzięki za zainteresowanie , z lutowaniem dam sobie rady, wybierz tylko jakiś mały i tani układ który nie potrzebuje zbędnych kombinacji i dostępny w TME, mam programator JTAG z ARMów chyba powinien pasować ??, czekam na książkę o PLD tam jest program WEBPACK ,więc chyba tym to zaprogramuję ?? Wstępnie narysowałem jak to ma wyglądać
    myślę ,że nawet nie trzeba te 13bit na wyjściu licznika ,wystarczy 10bit ,bo licznik jest kasowany max co 850 impulsów.

    licznik na GAL pytanie teoretyczne

    B
  • #13
    J.A
    Level 28  
    uscislijmy specyfikacje:

    uklad ma zliczac sygnal 'impulsy_do_zliczania'
    w gore, jesli aktywny jest sygnal 'licz_w_przod'
    i w dol, jesli aktywny jest sygnal 'licz_w_tyl';
    co ma zrobic, jesli oba sygnaly kierunku liczenia
    sa aktywne ?
    jesli oba nieaktywne, to zapewne ma tez nie zliczac;
    po kazdym doliczeniu sie do 1000 ma sie uaktywnic kolejne
    wyjscie, out_1000, out_2000 itd, ma to byc impuls
    'przejscia' przez 1000, czy sygnal np. out_1000
    ma byc 'zapalony' przez caly czas az licznik doliczy
    do 2000 ?
    'reset' ma asynchronicznie zerowac licznik ?

    licznik ma liczyc modulo 'M', a liczbe 'M' chcesz
    wprowadzac z zewnatrz, tak?
    czyli 13 linii wejsciowych na 'M' plus dodatkowa
    'load_M" ?

    J.A
  • #14
    mototest
    Level 19  
    zróbmy tak jak na powyższym obrazku
    układ ma dobrze obsługiwać typowy enkoder,czyli liczyć w przód lub w tył, jakieś stany nieustalone itp. muszą być pomijane, czyli nie ma opcji ,że licznik nie wie w ktorą stronę ma liczyć , wyjście informujące o osiągnięciu zadanego stanu licznika jest jedno (najpierw myślałem o 4) po osiągnięciu tego stanu, licznik sie zeruje, wejście reset z enkodera jest tylko po to żeby w razie zgubienia impulsów (czego bym nie chciał:) ) licznik powrócił na "dobrą drogę" czyli liczył od zera.

    Licznik ma być modulo M 10bit wprowadzanych z procka, odbywa sie to tak ,że po osiągnięciu przez licznik stanu podanego z procka , xilinx generuje przerwanie do procka i procek podaje nową wartość M, przy której będzie się resetował licznik następnym razem i tak w kółko.
    Możemy wprowadzić do schematu (jeśli poprawi to działanie) jeszcze jedno wyprowadzenie z procka informujące ,że liczba M jest już na porcie.


    tutaj jest link do układu wejściowego z enkodera, może będzie działał dobrze
    http://www.cnc.info.pl/topics18/enkoder-na-bramkach-vt501.htm
    i przykładowy jakiś projekt w VHDL jeśli ma to pomóc
    http://robots.net/article/1322.html

    mój enkoder ,to typowy enkoder kwadraturowy z sygnałami przesuniętymi o 90 stopni

    B.