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.

Proszę o weryfikację poprawności układu

wlw_wl 26 Maj 2009 15:24 3285 17
  • #1 26 Maj 2009 15:24
    wlw_wl
    Poziom 38  

    Witam,

    chciałbym poprosić o komentarze nt. zaprojektowanego układu: obrotomierz z prędkościomierzem na Atmega8.
    Obroty wyświetlane są w postaci linijki LED, prędkość na 3 wyśw. 7-segmentowych ze wspólną katodą.
    Sygnał przychodzi przez transoptory.

    Docelowy stabilizator dla LEDów obrotomierza to 7810 lub 7809, ale nie mam takiego w Eaglu stąd 7808. Chociaż, może wystarczy 7808, ale wtedy w najwyższej linijce będzie spadek 8V czyli zostanie 0, nie wiem czy to zadziała - i to jest pierwsze pytanie.

    Drugie pytanie: zakładam sterowanie wyświetlaczami prędkościomierza napięciem rzędu 5mA - czy mogę zrobić to bezpośrednio z CD4094? (nie mogę znaleźć żadnej informacji na temat wydajności prądowej tego klocka).
    Jeśli nie, jakiego układu tam użyć - analoga to ULN2803? - bo wstawianie tam 21 tranzystorów... nieco zwiększy wymiary układu :)
    * Miejsce gustownie oznaczone dużym "?" *

    Trzecie pytanie: czy sterowanie katodami LEDów obrotomierza zrobiłem poprawnie, czy nogę CD+ w ULN2803 trzeba do czegoś podłączać? Na różnych schematach widziałem różne rzeczy i sam już nie wiem jak to powinno być...

    Pytanie czwarte i ostatnie: często widzę wzmianki o włączeniu 100u + 100n między Vcc i GND procka, czy to konieczne, co to daje? Dodatkowy filtr?

    Za komentarze i sugestie z góry dziękuję :)

    PS: jeszcze jedna drobna rzecz: czy jeśli nie używam w układzie A/C to trzeba podłączać AVcc, AGND i ARef?


    Schemat uległ małym zmianom od początku utworzenia tematu.

    0 17
  • #2 27 Maj 2009 00:11
    arkady_pl
    Poziom 24  

    Witaj.
    Według mnie pytanie raczej nie w tym dziale, ale co wiem to powiem i może to coś pomoże. Wszakże dopiero projektujesz układ.

    Pierwsze co bym zrobił to dał zewnętrzny licznik i tylko go resetował z AT po odczytaniu danych. Zewnętrzny licznik ma tą zaletę, że nie musisz pisać softu a wynik z licznika możesz przepisać portem równoległym do zatrzasków sterujących segmentami. np. UCY 74174 - 8 przerzutników typu D.
    Po pierwsze pozbywasz się tych scalaków sterujących 4094, po drugie nie piszesz kodu przepisującego dane a jedynie strobujący zatrzaski i zerujący liczniki.
    No i nie musisz sterowac tranzystorami Q39..Q41 bo są nie potrzebne.

    Teraz linijka:
    Sygnał z OK1, po odpowiednim uformowaniu podałbym na wejście układu scalonego UL1980 - popularny niegdyś układ miernika wysterowania sterujący linijka diodową.

    Tak naprawdę, to linijka sterowała by się sama a rola ATMega sprowadziła by się do generowania dwóch impulsów - strobującego i zerującego. Gdyby obciąć ostatnią cyfrę i zawsze pokazywac tam zero to uzyskałbym 10 odczytów na sekundę a dokładność była by do dziesiątek. Jeśli chcesz mieć jedności to niestety odczyt co sekundę.

    Własciwie to ATMega bym wywalił i zrobił generator impulsów 1Hz na dzielniku częstotliwości sterowanego kwarcem 2^15Hz. Na UCY74123 zbudowałbym układ generowania impulsów. Jedna uwaga, cały proces przepisania i resetu powienien się odbyć w mniej niż 1/1000 sekundy aby nie gubić impulsów bo masz licznik do 999 Hz.

    Teraz druga uwaga - założenie powyzsze jest ok jesli masz 1 impuls na obrót.
    Jeśli impulsów jest więcej to można albo zastosować dzielnik na wejściu albo odpowiednio przeregulować generator impulsów strobujących i zerujących.


    -----
    No tak, ale ja w moim opisie pozbyłem się właściwie tego co zaprojektowałeś.
    Ogólnie układ jest ok, chociaż według mnie nie do końca optymalny. Bo albo dodajemy wiecej kostek i mniej softu albo dajemy wiecej softu i mniej kostek. A tutaj tak trochę po środku stoimy. Ja bym zaprogramował jakiegoś GAL'a i zrobił w nim matrycę. Na wejściu podawałbym wartośc binarną a na wyjściu miałbym wysterowane segmenty.

    Drugim GALem sterowałbym linijkę.

    GALe bym strobował raz jeden raz drugi wystawiając na wyjście odpowiednie wartości

    Odnośnie pytania o sterowanie wyświetlacami:
    lepszym bedzie wspólna anoda i sterowanie bramkami z wyjściem OC. Poza tym stosując zatrzaski przy sterowaniu wyświetlczami nie musiałbyś ich strobowac tranzystorami.

    No to tyle jak na pierwszy rzut okiem.

    0
  • #3 27 Maj 2009 00:44
    wlw_wl
    Poziom 38  

    Dziękuję za odpowiedź!

    W zasadzie zrobiłeś całkiem inny układ :)

    arkady_pl napisał:
    Ogólnie układ jest ok, chociaż według mnie nie do końca optymalny. Bo albo dodajemy wiecej kostek i mniej softu albo dajemy wiecej softu i mniej kostek. A tutaj tak trochę po środku stoimy.


    Zacząłem od samego mikroklocka + tranzystory kluczujące, ale wyszło ich 40, więc zmieniłem ideę bezpośredniego sterowania na rejestry przesuwne. Pomysł ten wpadł mi do głowy sam z siebie, później dopiero zobaczyłem, że tak się robi bardzo często i rozwiązanie to bardzo mi się podoba (mam nadzieję, że nie zmienię zdania jak przyjdzie do programowania procka). Co do obecności procka, taki jest wymóg, tak musi być, i tak zredukowałem to do Atmegi8 z pierwotnego (nie mojego) pomysłu Atmegi128... AVR musi być to jest.
    Mniej kostek można dać, ale wtedy nie starczy I/O nawet na przyciski, którymi, mam nadzieję, uda mi się sterować jasnością, tylko jeszcze nie mam pojęcia jak to zrobić (PWM może, tylko jak w takim układzie...)

    arkady_pl napisał:

    Odnośnie pytania o sterowanie wyświetlacami:
    lepszym bedzie wspólna anoda i sterowanie bramkami z wyjściem OC. Poza tym stosując zatrzaski przy sterowaniu wyświetlczami nie musiałbyś ich strobowac tranzystorami.

    Wspólna anoda i dla mnie jest lepszym pomysłem, ale zdarzyło mi się za grosze kupić worek dziewięciosegmentowych wyświetlaczy ze wspólną katodą, dlatego takie są na schemacie. Nie wiem tylko jakie ograniczenie prądowe mają 4094... W sumie te tranzystory tam są zbędne, bo przecież mogę ustawić cały rejestr 21bitowy (23 gwoli ścisłości) i nie muszę multipleksować. Hm.

    A dział wydaje mi się odpowiedni, wszakże opis jego brzmi "Mikroprocesorowe sterowniki, czujniki (...)" a to jest mikroprocesorowy czujnik więc w sam raz ;)

    BTW: tak, 1 impuls na 1 obrót, z czujnika Halla na wale, a prędkościomierz to w sumie nie wiem jak, wyjdzie w praniu.

    0
  • #4 27 Maj 2009 08:48
    arkady_pl
    Poziom 24  

    PWM: mają tranzystory na katodach mozesz zrealizowac PWM kluczując je przy stałej częstotliwości z różnym czasem "0" logicznego.

    Pomysł z rejestrami przesównymi:
    Owszem jest to rozwiązanie typowe gdy mamy mało pinów.
    Zatem pójdźmy tą drogą dalej i zapytam, czemu nie połączysz tych rejestrów w jedną całość(linijka i wyświetlacze). Po co osobno wpisywać bity dla wyswietlaczy i osobno dla linijki? Możesz to zrobić w jednym cyklu programowania. Wpisujesz wówczas troszkę dłuższy ciąg bitów i tyle.

    Co do obciążalności, to z dokumentacji wynika 8,8mA przy zasilaniu 15V.

    Gdy ja robie jakiś hardware, do którego potem mam robić soft, to staram się tak budowac aby było optymalnie pod oprogramowanie.
    Pomyśl co Twój soft bedzie musiał robic aby obsłużyc ten hardware. I w ten sposób optymalizuj układ. Układy teraz są tanie i odchudzenie układu o 30zł a dodanie sobie 4 dni pracy mija się z celem.

    link do dokumentacji http://www.alldatasheet.com/view.jsp?Searchword=CD4094&q=CD4094

    0
    Załączniki:
  • #5 27 Maj 2009 13:54
    wlw_wl
    Poziom 38  

    Mogę też robić to samo przy użyciu OE rejestrów, wtedy linijkę mogę PWMować bez przeróbek... chyba.

    8,8mA? Na każde wyjście czy sumarycznie? Nie widzę tego w dokumentacji :| Zamierzałem to zasilić 5V albo 10V, jaka wtedy będzie maksymalna obciążalność? 17,5mA na wyjście dla 5V? (P=U*I)

    Prędkość i obroty będą zliczać niezależne liczniki (dwa przerwania), nie wiem czy będzie to potem łatwo złożyć w jedną liczbę binarną... ale dzięki za sugestię, przemyślę to.

    0
  • #6 27 Maj 2009 14:06
    arkady_pl
    Poziom 24  

    wlw_wl napisał:
    8,8mA? Na każde wyjście czy sumarycznie? Nie widzę tego w dokumentacji :|


    Strona nr 3, tabela, wiersz 7, pozycjsa opisana (Note 4), kolumna +25oC (Typ)

    VDD = 15V, VO = 1.5V
    Min = 3.0 mA
    Typ =8.8 mA

    0
  • #7 28 Maj 2009 03:21
    wlw_wl
    Poziom 38  

    Czytałem notę Texas Instruments a tam tego nie znalazłem, dzięki.
    Prąd ten jest podany dla jednego wyjścia... czyli wydajność całego układu jest rzędu 70mA i tak też mi się wydawało (tak gdzieś czytałem).

    Ale powiedzmy, że nie ufam za bardzo w tą wydajność, jaki układ zastosować między 4094 a wyśw. 7-segmentowymi? UDN2981?

    0
  • #8 28 Maj 2009 10:31
    arkady_pl
    Poziom 24  

    wlw_wl napisał:
    Czytałem notę Texas Instruments a tam tego nie znalazłem, dzięki.
    Prąd ten jest podany dla jednego wyjścia... czyli wydajność całego układu jest rzędu 70mA i tak też mi się wydawało (tak gdzieś czytałem).

    Ale powiedzmy, że nie ufam za bardzo w tą wydajność, jaki układ zastosować między 4094 a wyśw. 7-segmentowymi? UDN2981?

    Używaj wyszukiwarki.
    Ja w Google wpisałem: 4094+wydajność+prądowa
    pierwszy wynik i strzał w dziesiątkę.

    https://www.elektroda.pl/rtvforum/topic1119518.html
    drugi post

    Dodano po 51 [sekundy]:

    Pamiętaj zawsze zerkac na wykresy czasowe układów, bo podejżewam, że nie obejdzie się bez pętli opuźniających aby układy wyrobiły(rejestry przesówne).

    Dodano po 1 [minuty]:

    Odnosnie PWM - nie musisz kluczowac tranzystorami. Możesz kluczowac wejściem OE bramek trójstanowych.

    0
  • #9 28 Maj 2009 12:45
    wlw_wl
    Poziom 38  

    1. Pewnie, że użyłem wyszukiwarki, tylko wpisałem coś innego i nie znalazłem.

    2. Zdaje się, że i tak będę musiał przejść na 74HC595. Myślałem o nich początkowo ale 4094 wydawały mi się łatwiejsze w obsłudze, ale coś za coś...


    3.

    wlw_wl napisał:
    Mogę też robić to samo przy użyciu OE rejestrów, wtedy linijkę mogę PWMować bez przeróbek... chyba.

    0
  • #10 28 Maj 2009 14:06
    arkady_pl
    Poziom 24  

    Bez przesady, sterowanie tym układem nie jest wcale jakieś trudne. Przypominam tylko o tym abyś dobrze policzył czasy propagacji układów <-> szybkosc procesora i czas jednego cyklu.

    0
  • #11 28 Maj 2009 14:22
    wlw_wl
    Poziom 38  

    Przy okazji szperania odnośnie 74HC595 znalazłem coś idealnego dla mnie: 74HC4094 który jest pin-in-pin odpowiednikiem CD4094, tylko jeszcze muszę znaleźć sklep gdzie będzie dostępny dip a nie smd... Jeśli nie uda mi się znaleźć to zostanie mi 595.

    Co do czasów to nie ma się czego obawiać, odświeżanie będzie z prędkością milisekund, a ładowanie danych wystarczy zrobić tak:

    Code:

    while ( uchBitNo >= 0 ) {

    // linia DATA w stan L
    VFD_REG_DATA_L;

    // jezeli odpowiedni bit zmiennej tymczasowej nShiftRegData jest 1
    // to przestawiamy ja na H
       if ( nShiftRegData & ((unsigned long)1 << uchBitNo) ) {
          VFD_REG_DATA_H;
       }

    // majac ustalona wartosc linii DATA, generujemy sygnal zegarowy (jeden
    // takt) aby stan z linii DATA wpisal sie do rejestru przesownego
       NOP;
       VFD_REG_CLK_H;
       NOP;
       VFD_REG_CLK_L;
       NOP;

       // kolejne bity 22,21,20....
       uchBitNo--;
    }

    // po zapisaniu 24 bitow danych do rejestru, generujemy
    // sygnal STROBE, ktorego opadajace zbocze przepisze zawartosc
    // rejestru szeregowego do bufora wyjťciowegp
    NOP;
    VFD_REG_STROBE_H;
    NOP;
    VFD_REG_STROBE_L;
    NOP;

    z dema w tym artykule: Link
    Te NOPy między zmianami dają dość długą przerwę, żeby układy nadążyły. Były tam wykorzystane 4094 więc będzie działać w ten sposób, bez pętli opóźniających.

    0
  • #12 28 Maj 2009 15:58
    arkady_pl
    Poziom 24  

    Code:

       NOP;
       VFD_REG_CLK_H;
       NOP;
       VFD_REG_CLK_L;
       NOP;

    i właśnie o ten fragment chodzi.
    Jeśli sygnał CLK zrobisz za krótki, to będzie lipa.
    Może sie okazac, że zamiast NOP będziesz musiał wstawiac pętle opuźniające aby procek odczekał "n" cykli zegara CPU i dopiero zmienił stan.

    Sam to przeżyłem i dlatego uprzedzam.

    Dodano po 3 [minuty]:

    1. propagacja wyjść samego ATMega. Musisz poczekac aby procek wystabilizował wyjścia.
    2. propagacja wejścia rejestru przesuwnego
    3. propagacja wewnątrz samego układu rejestru
    4. wymagany minimalny czas trwania sygnału CLK.

    Pierwszy NOP to wstępne czasy propagacji
    Drugi NOP to czasy propagacji wewnątrz rejstru przesuwnego.
    trzeci NOP właściwie nie ma znaczenia i jest zbyteczny.

    0
  • #13 28 Maj 2009 16:28
    wlw_wl
    Poziom 38  

    Coś tam się zachachmęci. Na razie czekam na części, jak złożę to będę się martwił o soft ;)
    W międzyczasie może jakieś inne uwagi?

    0
  • #15 30 Maj 2009 14:36
    wlw_wl
    Poziom 38  

    skywalker napisał:
    http://www.digisoft.com.pk/Projects/rpm-meter-for-automobiles

    może warto spróbować sterować diody bezpośrednio z 4094 dla super jasnych wystarczy prąd 1mA czyli przy zasilaniu 5V i oporniku 1500Ω świecą całkiem nieźle.


    w nocie Fairchild'a jest podane 0.88mA, TI mówi 1, tak czy inaczej to na granicy wytrzymałości. Mogę pozbyć się ULN'ów zamieniając w linijce LED CD4094 na 74HC4094.

    Z tego projektu co podesłałeś ciekawe jest wykorzystanie Timer/Counter1 jak licznika sygnałów, jakie ma to korzyści a jakie wady w stosunku do wyzwalania impulsem przerwania tak jak w moim przypadku?

    0
  • #16 01 Cze 2009 22:32
    skywalker
    Poziom 22  

    Elektronika to ciągłe eksperymentowanie :) . Jeśli chodzi o zliczanie to rzeczywiście dobrą metodą jest zliczanie imp. poprzez licznik bo przerwanie za bardzo obciąża procesor , a sam licznik no cóż jest niezależny.
    przy 400 obrotach na minutę mamy 7 obr. na sekundę . Przy 100 obrotach na minutę mamy 100/60 czyli 1,67/s zasadniczo pomiar będzie dość niedokładny ale szybki. Można też wykonać dość dokładny pomiar ale to zmusza to wykorzystywania dzielenia i mnożenia . Oczywiście jeśli mamy jednocylindrowy samochód / motor.

    0
  • #17 01 Cze 2009 22:50
    wlw_wl
    Poziom 38  

    Samochód mamy sześciocylindrowy, ale nie bieżemy sygnału z cewki zapłonowej tylko z hallotronu, który gdzieś tam sobie siedzi na wale. Spróbuję najpierw podejścia z wyzwalaniem przerwania przez sygnał, dokładność jakiej potrzebuję to 500RPM ;) (taką skalę mam obrotomierza)

    Pytanie nieco z innej beczki: czy między 74HC4094 a procka (i odp. CD4094 i procka) trzeba wsadzać jakieś oporniki?
    Bo za te układy to oczywiste, że trzeba, ale przed to w sumie nie wiem czy trzeba ograniczać prąc...

    0
  • #18 02 Cze 2009 16:52
    arkady_pl
    Poziom 24  

    wlw_wl napisał:
    Pytanie nieco z innej beczki: czy między 74HC4094 a procka (i odp. CD4094 i procka) trzeba wsadzać jakieś oporniki?
    Bo za te układy to oczywiste, że trzeba, ale przed to w sumie nie wiem czy trzeba ograniczać prąc...

    Jeśli łaczysz TTL-TTL lub CMOS-CMOS to nie trzeba. Zabawa zaczyna się dobiero gdy robisz mieszaninę standardów.

    0