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

Prosty uniwersalny sterownik programowalny

20 Lut 2010 12:17 6353 26
  • Poziom 23  
    Witam. Jestem laikiem w dziedzinie układów mikrokontrolerowych jednak chciałbym zrobić sobie prosty sterownik.
    Założenia:
    - zasilanie ok 12V (instalacja samochodowa)
    - kontroler staruje kilkoma (2 do 5) przekaźnikami z uzwojeniem 12V
    - do kontrolera wchodzą sygnały sterujące 0-12V (binarne) ok 4 szt.
    - brak elementów SMD - wiadomo
    - dowolny język programowania - zawodowo zajmuje się IT i nauczenie się czegokolwiek nie stanowi problemu.
    - ma stary programator willem więc fajnie jakby można go wykorzystać
    - możliwość programowania "w czasie" - np opóźnienia itp.

    Czy mógłby któryś z kolegów zaproponować mi jakiś mikrokontroler (pewnie któryś z prostszych).
    Czy mógłbym prosić o schemat podłączenia ? Nie bardzo wiem jak dobrać wartości elementów w układzie zasilania oraz jak zrobić wejścia sterujące 0-12V oraz tranzystorki kluczujące przekaźnikami.

    Będę chciał na przykład zaprogramować go tak, żebym po podaniu impulsu na wejście miał reakcję na wyjściach typu OUT1 (stan wysoki ok 1s) przerwa ok 10s i OUT2 (stan wysoki ok 1s) czyli pewnie potrzebny jest jakiś kwartz jako źródło taktowania.
  • Poziom 17  
    Polecam linię AVR firmy Atmel. Do takich potrzeb wystarczy ATTiny2313, 18 linii we/wy więc powinno wystarczyć. Języków jest co najmniej kilka - ASM, C, Basic, Pascal.
    W kwestii opóźnień czasowych to seria AVR ma wbudowany oscylator RC, chociaż jeśli zachodzi potrzeba, można podłączyć kwarc.
  • Poziom 23  
    C++ pasuje bardzo.

    Znalazłem coś takiego w necie: http://www.avrbox.com/wp-content/uploads/2008/02/onedmdp.JPG
    Tu widzą kompletny układ zasilania. Potrzebowałbym jeszcze przykładu jak zamiast diod podłączyć przekaźnik (pewnie układ z tranzystorkiem) i jak podłączyć wejścia, żeby rozpoznawały 0 dla 0~3V i 1 dla 10~15V.
    Czy mogę uznać że podłączanie tego kwartzu (jak na schemacie) jest zbyteczne?
    Czy mógłbyś narysować jakiś nawet odręczny przykładzik z takimi połączeniami.
    Niestety nie mam z tym doświadczenia.

    Dzięki za pomoc.
  • Poziom 33  
    Witam
    Opornik w bazie zmniejsz do 2,2k a z bazy na masę daj 10k, nie pytaj dlaczego, z pewnością będzie działać :)
    Co do wejścia to zależy od tego czy chcesz mieć separację, bez separacji opornik 10k do wejścia, a z wejścia na masę zenerka 4,7V.
    Z separacją transoptor z opornikiem 4,7k na wejściu a na wyjściu bezpośrednio pod procesor, wejścia zaprogramuj wtedy z podciąganiem.
    Piotr
  • Moderator Mikrokontrolery Projektowanie
    Zadna dioda nie jest potrzebna, wystarczy szeregowo z pinem rezystor, przy nap. 12V powinien miec wartosc >12kOm. Jesli to ma byc w samochodzie to dalbym optoizolacje. Przekazniki nie zasilalbym z 5V tylko podlacz cewke przed stabilizatorem do 12V - przekaznik nie potrzebuje nap. stabilizowanego, a tak zmniejszysz straty na stabilizatorze liniowym. BTW, na schemacie ktory podales przy kwarcu powinny byc jeszcze kondensatory, tak jak w DS do tego procesora. Zwykle bez nich dziala, ale to zalezy od kwarcu.
    P.S. Zamienilbym ATTiny2313 na cos co ma wiecej FLASH - ATMege8 lub nowszy. 2k to naprawde niewiele, chociaz oczywiscie to zalezy co chcesz oprogramowac.
  • Poziom 23  
    A czy istnieje jakiś układ tego typy, który można programować w C i NIE jest SMD? Ten jest PDIP :(. NIe mam narzędzi do smd, chciałbym poprostu starą "przelotową" szkołę.

    Dodano po 4 [minuty]:

    Znalazłem w szufladzie jakiś AT89C2051 w staromodnej obudowie, czy to mozna oprogramowac C i bedzie sie nadawac
  • Moderator Mikrokontrolery Projektowanie
    Wejdz na strone atmela, tam masz zestawienie produkowanych przez nich procesorow i typow obudow w ktorych wystepuja. '51 tez moze byc, napisz co to ma realizowac to bedzie mozna cos wiecej powiedziec.
  • Poziom 23  
    Tak jak napisalem na wstepie. Chce zbudowac uklad ktory po podaniu na IN1 sygnalu wysokiego zalaczy mi OUT1 na ok 1s poczeka ok 10s i zalaczy OUT2 na ok 1s. Chcialbym zeby bylo to napisane w C.
    Czy do tego atmela moge uzyc kwatrz 4MHz?
    Jakiego programu uzyc do napisania i skompilowania programu. Do wgrania mam program od willema.
  • Moderator Mikrokontrolery Projektowanie
    Do tego wystarczy AVR z wewnetrznym generatorem RC, wiec nie musisz podlaczyc kwarcu. Co do programow to sciagnij AVR Studio, jako kompilatora uzyj pakietu WinAVR.
  • Poziom 23  
    A czy ten AT89C2051 tez moge zastosowac bez kwartzu?
    Zaraz go zlutuje. Rozumie ze wystarczy mi do niego uklad zasilania oraz obsluga wejsc i wyjsc (jak pisano wczesniej) - czy o niczym nie zapomnialem?
  • Poziom 33  
    Witam
    Oczywiście dobrze zmodyfikowałeś schemat, ten niepozorny opornik 10k do masy zabezpieczy Cię przed kłapaniem przekaźnika po włączeniu zasilania :) , przekaźnik oczywiście dobrze zasilić z 12V, są ku temu dwa powody, po pierwsze nie będzie Ci się grzał stabilizator, po drugie włączenie przekaźnika generowałoby na zasilaniu 5V niepotrzebne zakłócenia.
    Co do zenerki na wejściu to dalej za nią optuję, w instalacji samochodowej istnieją przepięcia, po co ryzykować za kilkanaście groszy ?, na dodatek opornik rzędu 12k bez diody zenera spowoduje że na wejście będzie wpływał prąd około 0,6mA który przeniesie się przez strukturę na zasilanie....
    O AT89C2051 zapomnij, do niego musisz robić dość rozbudowany programator, polecam Atmegę8, można ją programować w układzie i ma wiele więcej możliwości.
    Piotr
  • Moderator Mikrokontrolery Projektowanie
    Opornik co najmniej 12k, mozna dac 120k. Te 0,6mA bedzie szlo przez strukture procesora, ale co to zmieni? ATMega8 moze ssac az 200mA. A jak nie do procka to przez zenerke do masy, tak czy tak gdzies ten prad tracimy. Oczywiscie mozna ja dac, w zaden sposob to nie szkodzi.
  • Poziom 33  
    Witam
    Coś za coś, zwiększanie rezystora powoduje wzrost podatności na zakłócenia wiec raczej nie jechałbym w górę ponad te 12k.
    W czym jest niebezpieczeństwo? zależy od stabilizatora, podejrzewam że przy niektórych doładowanie kilku mA przez strukturę spowoduje podniesienie napięcia zasilania, procesora to nie uszkodzi ale nie wiem jak wpłynie na wykonywanie programu.
    Przy zenerce prąd zamknie się do masy więc jest to lepsze niż pakowanie go w strukturę procesora. Mam złe doświadczenia przy długich kablach ( 7m ) i Atmega8, coprawda mój układ był sterowany na wejściach z 5V ale głupiał, sygnał na przerwaniu był traktowany zupełnie przypadkowo, dotyczyło to kilkuset sztuk więc sytuacja była powtarzalna, dałem na wejściu 6,8k i kondensator 2,2nF z wejścia do masy i sytuacja się ustabilizowała, do instalacji w aucie dałbym te 12k, zenerkę z wejścia do masy i równolegle do niej kondensator nawet 10nF, chyba że autorowi zależy na rejestrowaniu jakichś szybkich przebiegów.
    Piotr
  • Moderator Mikrokontrolery Projektowanie
    Prawde mowiac nie rozumiem jak by to mialo spowodowac wzrost napiecia zasilajacego. Tak by sie moglo stac jesli z jakiegos powodu bylby utrudniony odplyw do masy przez strukture procesora - czyli pomiedzy GNA a procesorem musialby byc jakis znaczacy opor. Skoro procesor jest zaprojektowany do pochlaniania nawet 200mA to te dodatkowe setki mikroA nie maja wplywu. Natomiast w pelni sie z toba zgadzam co do zaklocen i innych problemow. Ja w samochodzie generalnie dalbym optoizolacje, nic to nie kosztuje, a rozwiazuje mnostwo problemow. No i z linii napieciowej robi sie pradowa, generalnie bardziej odporna na zaklocenia.
  • Poziom 33  
    Witam
    tmf, na wejściu mamy diody zabezpieczające do masy i zasilania, jeśli napięcie wejścia przekracza napięcie zasilające to wymuszony prąd wpływa do lini zasilającej procesora, powiedzmy że procesor pobiera koło 1mA a dodamy mu jeszcze 0,6mA to napięcie zasilające może się podnieść Link strona 51 Figure 21
    Właśnie z tego powodu udawało mi się czytać sygnatury z niezasilonej Atmegi, wystarczyły napięcia na wejściach i kondensator na zasilaniu.
    Piotr
  • Użytkownik usunął konto  
  • Poziom 33  
    Witam
    Cytat:
    A ja zapytam Wink Bo bez zmiany też będzie działać. I nie kłapie (sprawdzone) bo zgodnie z Atmelowskimi DS w czasie resetu i po piny są w stanie wysokiej impedancji, a pullup wyłączony.

    Nie analizowałem opisów ale z praktyki wiem że kłapie, to że Tobie nie kłapie może być przyczyną małej β tranzystora, jak dawałem mosfety do przekaźników to zawsze kłapało.

    Cytat:
    Natomiast co do proponowanej przez Ciebie wartości 2k2 to jest ona co najmniej kontrowersyjna. Rezystor ten oprócz dopasowania wyjścia do bazy tranzystora powinien zapewnić także ochronę MCU w wypadku uszkodzenia tranzystora wyjściowego (zwarcie CB) Tym samym jego wartość powinna być wieksza:
    (Uprzek_max-Vcc)/ Iio_max czyli jeśli mnie pamięc i rachunki nie mylą powinno być
    minimum 3,5kOhm a tak naprawdę to około 4,7k.

    Tu bym polemizował, w PDFie podają 40mA na pin, przekaźnik zasilamy z 12V, procesor z 5V czyli różnica 7V, 7V na 2,2k to niecałe 3,2mA, conajmniej 10 razy poniżej dopuszczalnego prądu, pamięć i rachunki Cię mylą :)
    Piotr
  • Użytkownik usunął konto  
  • Poziom 33  
    Witam
    Cytat:
    "Jak dawałem mosfety" - mówimy (patrz załączony schemat) o tranzystorze bipolarnym, więc nie mieszaj.

    Nie mieszam, daję tranzystor β=600 co wcale nie jest niezwykłe i przekaźnik o prądzie działania 30mA i wystarczy mi 50µA na bazie by przekaźnik zadziałał, kto tu miesza?

    Cytat:
    W PDF podają nawet 200mA ale to też nie ten parametr. To chodzi o maksymalny prąd diody ograniczającej a nie portu czy pinu.

    Przy prawidłowo działającym porcie prąd zamknie się przez tranzystory wyjściowe a nie diody zabezpieczające.
    Piotr
  • Użytkownik usunął konto  
  • Poziom 23  
    Ok no i zaczalem, atmega16 (nie bylo 8).
    Naprawde fajne zabawka, mam natomiast maly problem.

    Obsluguje sobie przerwanie:
    ISR (TIMER0_OVF_vect)
    {
    PORTA ^= _BV(3);
    TCNT0 = tin;
    }

    tin jest globalnie zadeklarowana jako:
    uint8_t tin=0xF0;

    i gra, jednak kiedy zmieniam wartosc tin wewnatrz funkcji main (tin=0x00;) to niestety obsluga przerwania dalej widzi ta stara wartosc, jak to zrealizowac?
    Chce generalnie zmienic czestosc migania diody podnoszac wartosc poczatkowa zegara liczacego w gore.

    Traktuje to jako wstep do sterowania mosfetem PWM.
  • Poziom 30  
    sq1gqp napisał:
    Ok no i zaczalem, atmega16 (nie bylo 8).
    Naprawde fajne zabawka, mam natomiast maly problem.

    Obsluguje sobie przerwanie:
    ISR (TIMER0_OVF_vect)
    {
    PORTA ^= _BV(3);
    TCNT0 = tin;
    }

    tin jest globalnie zadeklarowana jako:
    uint8_t tin=0xF0;

    i gra, jednak kiedy zmieniam wartosc tin wewnatrz funkcji main (tin=0x00;) to niestety obsluga przerwania dalej widzi ta stara wartosc, jak to zrealizowac?

    Code:
    volatile uint8_t tin=0xF0;
  • Poziom 23  
    Ooo, działa. Zainspirowało mnie to :)
    Teraz sobie rozkminiam PWM'a - chciałbym zrobić na np. BUZ11 regulator jasności oświetlenia (podświetlenia deski rozdzielczej). Jak juz mam atmega16 to zrobię parę więcej bajerów :).
    Ciekawe czy jest jakieś fajne IDE pod Mac OSX do tego :)
  • Poziom 23  
    Nie mogę poradzić sobie z tym wejściem bin na 12V. Tam ma być 10k od pinu do sygnału oraz 1k z pinu do masy?



    PD7]----[ 10k ]-------* 12V
    |
    | |
    | | 1k
    | |
    |
    GND

    Tak?
    Wejście ustawiam w DDRx na 0 (input) i PORTx na 0 (bez podciągania).
    Czy się zgadza?
  • Poziom 9  
    Jak by ktoś tu trafił to mam lekarstwo:
    vamond.pl
    Polecam gorąco-i nie żartuję.