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

[ATmega8][AVR-GCC] Sterowanie przekaźnikiem [ZAPALARKA]

Pajczi 02 Sty 2010 08:47 12740 63
  • #31
    PiotrPitucha
    Poziom 33  
    Witam
    Pajczi niepotrzebnie komplikujesz rozważania, zrób tak jak kiedyś radziłem:
    - rezystor obciążający port daj bezpośrednio z portu do masy;
    - jego wartość co najwyżej 10K a najmniejszą sugerowaną wartością 2,2K;
    - nie wiem jaki prąd pobiera przekaźnik ale 1K w bazie tranzystora sterującego wydaje mi się zbyt wielką wartością, zmniejsz go o połowę;
    - najlepiej byłoby tam wsadzić mosfeta zamiast NPN
    Pozdrawiam
  • W2 Usługi badań i pomiarów
  • #32
    arktik1
    Poziom 27  
    Powiem szczerze że nie bydował bym żadnego z tych eksperymentów.
    Zrobiłem podobne odpalanie z ATTINY 2313 , 1 rezystora , tranzystora NPN, przekaźnika 5v i przycisku NO.
    Po co komplikować sprawę z podciąganiem portów jeśli można je podciągnąć programowo?
    Przecież wystarczy:

    Code:

    Config Portd = Input
            Portd = &B11111111

    Config Portb = Output
            Portb = &B00000000

    Do
    Debounce Pind.1 , 0 , U , Sub

    Loop
    End

    U:
    Wait 5
    If Pind.1 = 0 Then
    Portb = 1
    End If
    Wait 1
    Portb = 0
    Return

    PORTB zawsze po włączeniu Uc będzie startował z 0.
    W czym problem??

    Dodano po 25 [minuty]:

    Oczywiście trzeba określić który PORTB, 1 czy 2 czy...
  • #33
    PiotrPitucha
    Poziom 33  
    Witam
    Popełniasz błąd w myśleniu, oczywiście ustawienie portów będzie działało jak program ruszy, ale od włączenia zasilania do wykonania resetu na portach masz wejścia podciągnięte do zasilania jakąś rezystancją co zwykle starcza by kłapnąć przekaźnikiem.
    Żadne ustawienia portów NIE ZADZIAŁAJĄ NIM RUSZY PROGRAM.
    Piotr
  • #34
    arktik1
    Poziom 27  
    Używam tego wyzwalacza od 3 lat mniej więcej 4 razy w miesiącu.
    Nigdy nie zdarzyło się żeby przekaźnik zadziałał przy włączeniu zasilania.
    Oczywiście jest to tylko przykładowy kod, mój jest troszkę bardziej skomplikowany.
    Moim zdaniem, dlatego nie kłapie przekaźnikiem bo rozruch Uc trwa kilka milisekund.
    Do tego dochodzi bezwładność styku 3A przekaźnika.
  • W2 Usługi badań i pomiarów
  • #35
    tmf
    Moderator Mikrokontrolery Projektowanie
    To, ze do tej pory nie bylo problemow nic nie znaczy. Jak pisze Piotr stan podczas resetu jest nieustalony na tym pinie, a to nie jest dobra praktyka, szczegolnie w tak niebezpiecznym zastosowaniu. Nie polecam tez bazowac na rezystorach podciagajacych wewnatrz scalaka - ich rezystancja jest b. duza - rzedu 50kom, co czyni uklad wrazliwym na zaklocenia. Wystarczy, ze ktos do ciebie zadzwoni podczas takiej zabawy, a stan przekaznikow stanie sie losowy.
  • Pomocny post
    #36
    PiotrPitucha
    Poziom 33  
    Witam
    Arktik1, te czasy nie są wcale takie małe, nie wnikam w sam czas resetu, ale w zależności od fusów mamy generalnie do wyboru czas opóźnienia startu oscylatora i w tabelkach mamy generalnie 2 czasy opóźnienia, 4,6ms i 65ms, do tego trzeba dodać czas resetu 0,5ms. Oczywiście można startować oscylator bez zwłoki ale mam złe doświadczenia z takimi ustawieniami.
    Widzę w tym poważny problem bo typowy przekaźnik z Relpolu przełączający 8A ma gwarantowany czas zadziałania 7ms a przekaźniki z innych firm nawet poniżej 4ms.
    Kod programu nie ma nic do tego bo oscylator jeszcze nie pracuje, więc ustawienie portów się w tym czasie nie realizuje.
    Zwróć uwagę że prąd przełączany przez przekaźnik ma się nijak do czasu działania przekaźnika, zależy to raczej od prądu sterującego i konstrukcji przekaźnika.
    Paradoksalnie małe przekaźniki sterowane niskim prądem będą działały wolniej bo ich indukcyjność uzwojenia zmniejszać będzie prędkość narastania prądu w cewce.
    Piotr
  • #37
    arktik1
    Poziom 27  
    Jak wszyscy wiemy teoria czasem bardzo różni się od praktyki.
    W każdym razie moje urządzenie działa bez problemów nie tylko przy dzwoniących telefonach, ma funkcję sterowania ręcznego i pilotem RC5.To tylko jeden z pomysłów, nie zmuszam nikogo do realizacji.
  • #38
    Pajczi
    Poziom 14  
    Tak jak była propozycja wcześniej rozdzielę zasilanie zastanawiało mnie również czy zasilanie pojedyncze plus kondensator na wejściu elektroniki nie rozwiązał by problemu zasilania z jednego aku ?

    Dodano po 4 [godziny] 54 [minuty]:

    Rezystor, który wcześniej był podpięty do VCC teraz podpięty jest do GND. Wartości pozostały takie same po 10k. Nie zawsze ale dość często w momencie wyłączenia układu następuje załączenie przekaźnika widoczne na rysunku poniżej. Czym to jest spowodowane i czy zmiana wartości rezystorów tu pomoże (stała czasowa >?)
  • #39
    Pajczi
    Poziom 14  
    PO zmianie rezystorów (podciągającego do GND i bazowego) na 4,7k również występuje załączenie widoczne na rysunku. Załączone zdjęcia pokazują napięcie na kolektorze tranzystora NPN
  • #40
    mirekk36
    Poziom 42  
    Pajczi - jakbyś zrobił tak jak ci radziłem na początku to już dawno miałbyś dobrze i sprawnie działający układ bez żadnego czasami załączania się przekaźnika czy to przy włączaniu czy to przy wyłączaniu układu.

    Daj sobie tylko spokój z tranzystorem NPN oraz rezystorem podciągającym do GND - bo to właśnie przez to masz te "efekty specjalne"

    czy na prawdę tak trudno wymienić ci tranzystor NPN na PNP ????

    Wystarczy zwykły tranzystor PNP który będzie sterował przekaźnikiem a jego baza przez rezystorek 1K albo 2,2K podłączona do pinu procka ale także ten pin rezystorkiem powiedzmy 10K podciągnięty do VCC.

    Jeśli natomiast przekaźnik jest na więcej niż 5V to za tranzystorem PNP dasz sobie jeszcze jeden tranzystror, który będzie miał swoją bazę podciągniętą także rezystorkiem do 12V jeśli będzie przekaźnik na 12V

    po co te kombinacje z podciąganiem do GND ? (poczytaj dokładnie jeszcze raz ten mój poprzedni post z poradą ;)
  • #41
    arktik1
    Poziom 27  
    Pokaż schemat połączeń i kod to może coś z tego będzie.
    Może być winien:
    "zasilanie pojedyncze plus kondensator na wejściu elektroniki"
    Powolne opadanie napięcia na Uc może powodować niekontrolowaną zmianę portów.
  • #42
    michalko12
    Specjalista - Mikrokontrolery
    mirekk36 napisał:

    Wystarczy zwykły tranzystor PNP który będzie sterował przekaźnikiem a jego baza przez rezystorek 1K albo 2,2K podłączona do pinu procka ale także ten pin rezystorkiem powiedzmy 10K podciągnięty do VCC.

    Jeśli natomiast przekaźnik jest na więcej niż 5V to za tranzystorem PNP dasz sobie jeszcze jeden tranzystror, który będzie miał swoją bazę podciągniętą także rezystorkiem do 12V jeśli będzie przekaźnik na 12V

    po co te kombinacje z podciąganiem do GND ? (poczytaj dokładnie jeszcze raz ten mój poprzedni post z poradą ;)


    Teraz ty kombinujesz. Dwa tranzystory, obydwa pociągnięte do 12V, a na wyjściu procesora napięcie 0 lub 5V. Efekt, przekaźnik zawsze włączony!
    A teraz powiedz czym się różni ściąganie do GND od podciągania do VCC i dlaczego ściąganie do GND jest przez Ciebie tak niepolecane?
    (Od razu mówię, wszystko na spokojnie ;) )
  • #43
    mirekk36
    Poziom 42  
    michalko12 napisał:

    Teraz ty kombinujesz.


    ja też mówię na spokojnie ;) .... kombinują ci, którzy jak autor w tym przypadku podciągają do GND a potem zastanawiają się długo i rzęsiście dlaczego coś gdzieś tam im czasem nie działa.

    ja nie jestem od polecania albo nie - podciągania do VCC czy GND. Niech każdy sobie robi jak chce

    Ja tylko twierdzę że każdym z tych układów nie wystąpi nigdy to przypadkowe włączanie przekaźnika o jakim wyżej pisał autor - i już.

    [ATmega8][AVR-GCC] Sterowanie przekaźnikiem [ZAPALARKA]

    za to ty kolego pokaż mi układy gdzie tranzystory bipolarne wykorzystuje się tylko jako zwykłe klucze ON/OFF i stosuje się podciąganie do GND. Nie twierdzę że tak nie można itp..... po prostu w 90% tego typu zastosowań znajdziesz takie rozwiązania. A jak dobrze pomyśleć i sprawdzić - to się dojdzie dlaczego - ot cała tajemnica
  • Pomocny post
    #44
    michalko12
    Specjalista - Mikrokontrolery
    mirekk36 napisał:

    za to ty kolego pokaż mi układy gdzie tranzystory bipolarne wykorzystuje się tylko jako zwykłe klucze ON/OFF i stosuje się podciąganie do GND. Nie twierdzę że tak nie można itp..... po prostu w 90% tego typu zastosowań znajdziesz takie rozwiązania. A jak dobrze pomyśleć i sprawdzić - to się dojdzie dlaczego - ot cała tajemnica


    Nie będę wiele mówił, niech Tina się wypowie ;)
  • #45
    mirekk36
    Poziom 42  
    michalko12 --> no dobra ;) chyba coś mi się pomieszało , ale tak:

    [ATmega8][AVR-GCC] Sterowanie przekaźnikiem [ZAPALARKA]

    tyle że po drodze będzie podciąganie do GND w tym wypadku tego drugiego tranzystora ;)
  • #46
    michalko12
    Specjalista - Mikrokontrolery
    mirekk36 napisał:
    michalko12 --> no dobra ;) chyba coś mi się pomieszało , ale tak:

    [ATmega8][AVR-GCC] Sterowanie przekaźnikiem [ZAPALARKA]

    tyle że po drodze będzie podciąganie do GND w tym wypadku tego drugiego tranzystora ;)


    W std 51 jest potrzebne podciąganie bo te mają tylko "silną" masę i stad tego typu rozwiązania.
  • #47
    mirekk36
    Poziom 42  
    ok mi się skopało to bo pomyślałem o sterowaniu wspólnych anod wyświetlaczy LED , gdzie stosuję zwykle pierwszy tranzytsor NPN a drugi PNP i jego kolektor "idzie" do anody takiego wyświetlacza. I generalnie wspólna anoda załączana jest JEDYNKĄ z procka.

    No ale dlaczego autorowi dzieją się takie cuda ??? przy tym układziku z podciągnięciem do GND ?

    Ale chyba jednak to rozwiązanie , które pokazałem jako ostatnie z tym prockiem 8051 - będzie ładnie działało w tym konkretnym przypadku i to z prockiem AVR.
  • #48
    michalko12
    Specjalista - Mikrokontrolery
    mirekk36 napisał:

    No ale dlaczego autorowi dzieją się takie cuda ??? przy tym układziku z podciągnięciem do GND ?

    Ale chyba jednak to rozwiązanie , które pokazałem jako ostatnie z tym prockiem 8051 - będzie ładnie działało w tym konkretnym przypadku i to z prockiem AVR.


    Będzie działało jedno i drugie gdzie bazy tranzystorów ściągnięte są do masy. Na mój gust to problem jest w programie i nieważne jak będzie rozwiązane sterowanie przekaźnikiem . Autor wątku nawet nie pokazał kawałka kodu. Patrząc na ekran oscyloskopu widać jedną rzecz, że impuls trwa ok. 12ms gdzie przed impulsem jest stabilny stan też przez co najmniej 12ms. Jest to pewne załączenie, nie ma żadnego powolnego narastania ani opadania zboczy. Szkoda, że nie jest pokazany równolegle na drugim kanale moment załączenia zasiania procesora. Widać by było po jakim czasie następuje ten impuls.

    Pajczi pokaż kod inicjalizujący procesor, najlepiej w asemblerowej wersji, oraz pokaż stan na wyjściu procesora, ale przy większej podstawie czasu z wyzwoleniem od narastającego zbocza po załączeniu zasilania procesora.

    Edit:
    Nie doczytałem jednego słowa, że ten impuls jest podczas wyłączania układu. Zgadza się? Jeśli tak to mam inne pytanie. Od jakiego zdarzenia jest załączany ten przekaźnik. Jakie muszą być spełnione warunki, żeby ten przekaźnik zadziałał?
  • #49
    atom1477
    Poziom 43  
    mirekk36 napisał:
    Pajczi - jakbyś zrobił tak jak ci radziłem na początku to już dawno miałbyś dobrze i sprawnie działający układ bez żadnego czasami załączania się przekaźnika czy to przy włączaniu czy to przy wyłączaniu układu.

    Daj sobie tylko spokój z tranzystorem NPN oraz rezystorem podciągającym do GND - bo to właśnie przez to masz te "efekty specjalne"

    czy na prawdę tak trudno wymienić ci tranzystor NPN na PNP ????

    Wystarczy zwykły tranzystor PNP który będzie sterował przekaźnikiem a jego baza przez rezystorek 1K albo 2,2K podłączona do pinu procka ale także ten pin rezystorkiem powiedzmy 10K podciągnięty do VCC.

    Jeśli natomiast przekaźnik jest na więcej niż 5V to za tranzystorem PNP dasz sobie jeszcze jeden tranzystror, który będzie miał swoją bazę podciągniętą także rezystorkiem do 12V jeśli będzie przekaźnik na 12V

    po co te kombinacje z podciąganiem do GND ? (poczytaj dokładnie jeszcze raz ten mój poprzedni post z poradą ;)


    mirekk36 napisał:
    A ja uważam, że z tym podpięciem rezystora 4,7K do masy - to pomysł porażka i to totalna. Może się zdarzyć, że na tym rezystorze odłoży się napięcie ciut większe niż 0,6V i już może się okazać że tranzytor NPN się załączy - i co wtedy??? trzeba by się było bawić w spore zmniejszenie wartości tego rezystora - no ale to się robi totalna zabawa w porównaniu do rozwiązania z tranzystorem PNP i podciąganiem do VCC.

    Każdy normalnie rozwiązałby to tak jak pisałem nie tylko ja - podłączeniem rezystora ale do VCC żeby mieć stabilny stan wysoki natomiast tranzystor dobrać typu PNP i wysterować go do odpalenia stanem NISKIM. A nie odwrotnie.

    Ja natomiast uważam, że to Twój pomysł mirekk36 jest totalną porażką. Co to za różnica czy to będzie tranzystorze NPN czy PNP? Zgodnie z tym myśleniem można pomyśleć że może się przecież zdarzyć że na rezystorze podciągającym do VCC odłoży się więcej niż 0.6V licząc od strony VCC, i co wtedy? Też kłapnie przekaźnikiem?
    Ty się poprawiłeś, ale są inni na tym forum którzy mają takie zdanie że stan Hi-Z na pinie może włączyć tranzystor bipolarny, bo przecież stan Hi-Z to stan w którym napięcie może być dowolne.
    Czyli co, jak podłączę diodę to też mi ona zaświeci?
    To weźmy nigdzie nie podłączony kabel (co będzie odpowiadało stanowi Hi-Z) i ciągnijmy z niego prąd! Będzie darmowa energia!
    A prawda jest taka, że stan Hi-Z może załączyć tranzystor, ale MOSFET. Bipolarnego nie załączy nawet bez dodatkowych rezystorów podciągających czy ściągających.
    Ale warto je dodać bo tranzystor może zostać załączony na jakieś us ze względu na pojemności VCC-Pin albo Pin-GND. Oraz ze względu na prądy upływu i tutaj może zostać załączony na stałe.
    I dopiero te prądy upływu mogą spowodować załączenie tranzystora bipolarnego.
    Ale charakterystyka pinów w mikrokontrolerach AVR jest symetryczna i czy to VCC czy GND to prądy upływu będą takie same, czyli znikomo małe. Ewentualnie prądy upływu popłyną przez wilgoć na płytce czy inne takie tam rzeczy.
    Ale wilgoć to już nie jest Pin więc myślenie że to pin w stanie Hi-Z załącza tranzystor jest nieporozumieniem.
    Podciągnie do VCC i tranzystor PNP stosuję się tylko z przyzwyczajenia do tego co robiło się kiedyś. A kiedyś właśnie podciągało się do VCC bo popularne procesory ’51 czy inne miały wewnętrzne podciąganie do VCC którego nie dało się wyłączyć.
    Więc siłą rzeczy tuż po resecie na pinie występował stan podciągania do VCC i tranzystor NPN załączał by się. Trzeba by stosować mocny rezystor „rewersyjny” do przeciągnięcia podciągania na GND, co jest bez sensu, albo po prostu wstawić tranzystor PNP. Ot cała historia.
    W AVR kierunek podciągania i polaryzacja tranzystora nie mają to najmniejszego znaczenia.
    Sorki za ostre słowa krytyki ale ile można na elektrodzie wysłuchiwać takie cuda o tym stanie Hi-Z.
    Pajczi-emu coś nie działa, ale na pewno nie dlatego że ściąga pin do masy.
    Tak się składa że ja tak robię i to działa. Stosuję obydwa rozwiązania zależnie od widzimisie i nie widzę żadnej różnicy.
    Musimy zobaczyć schemat i tyle.
  • #50
    mirekk36
    Poziom 42  
    atom1477 --> po pierwsze nie chodziło mi o jakieś sterowanie tranzystora stanem HiZ , po drugie czytaj uważniej - to zobaczysz że dwa posty wyżej sam się odżegnałem od swojej dziwnej teorii i powiedziałem że coś mi się pomyliło i dlaczego.
  • #51
    atom1477
    Poziom 43  
    Co do Hi-Z to tak, ale mówiłeś że koniecznie musi być PNP.
    Co do odżegnania to faktycznie. Sorki (napisałem to wczoraj ale dopiero dzisiaj wysłałem ;p).
    Ale post niech siedzi bo co raz ktoś wyskakuje ze sterowaniem tranzystora BJT z pinu Hi-Z.
  • #52
    arktik1
    Poziom 27  
    Schemat przedstawiony przez "mirekk36" jest przecież poprawny .
    A włączenie przekaźnika jest najprawdopodobniej spowodowane błędną konfiguracją w programie.
    Przecież gdy podciągamy do GND to:
    Config port.x = Output.
    port.X =&B000000
    Gdy do +5 to
    Config port.x = Output.
    port.X =&B111111
  • #53
    Pajczi
    Poziom 14  
    Kod programu zamieszczam poniżej nie wydaje mi się żeby to była przyczyna ale może ? W każdym bądź razie przekaźnik chodzi OK gdy naciskany jest przycisk i niby wszystko jest OK ale zdarza się, że przy takim podłączeniu jakie opisałem wcześniej bez podejmowania żadnej akcji (załączania przekaźnika przyciskiem) a tyko włączając i wyłączając zasilania zdarza mu się "kłapnąć" i to jest problem.
    Code:

    #define  BUTT   2
    #define  FIRE   3
    #define XPORT PORTD
    #define XDDR DDRD

    int main(void)
    {

    XDDR= 1<<FIRE | 0<<BUTT ;
    while(1)
       {
          
       
          if(bit_is_clear(PIND,BUTT)) //czy wciśniety BUTT
          XPORT|=_BV(FIRE);     //Wciśnięty więc ognia !!     
          else
          XPORT&=~_BV(FIRE); //Zwolniony odłącz napięcie od zapalnika
       }
    }
  • #54
    michalko12
    Specjalista - Mikrokontrolery
    Pajczi napisał:
    Kod programu zamieszczam poniżej nie wydaje mi się żeby to była przyczyna ale może ? W każdym bądź razie przekaźnik chodzi OK gdy naciskany jest przycisk i niby wszystko jest OK ale zdarza się, że przy takim podłączeniu jakie opisałem wcześniej bez podejmowania żadnej akcji (załączania przekaźnika przyciskiem) a tyko włączając i wyłączając zasilania zdarza mu się "kłapnąć" i to jest problem.
    Code:

    #define  BUTT   2
    #define  FIRE   3
    #define XPORT PORTD
    #define XDDR DDRD

    int main(void)
    {

    XDDR= 1<<FIRE | 0<<BUTT ;
    while(1)
       {
          
       
          if(bit_is_clear(PIND,BUTT)) //czy wciśniety BUTT
          XPORT|=_BV(FIRE);     //Wciśnięty więc ognia !!     
          else
          XPORT&=~_BV(FIRE); //Zwolniony odłącz napięcie od zapalnika
       }
    }


    Masz BOD uruchomiony? Jeśli nie to takie akcje mogą się dziać. Zmień program i podłaczenie przycisku na sterowanie wysokim poziomem.
  • #55
    arktik1
    Poziom 27  
    Przynajmniej dopisz do tytułu że piszesz w C, bo dla niektórych to zmienia postać rzeczy.
  • #56
    Pajczi
    Poziom 14  
    Nie ma BODa włączonego. Pytanie czy to jest sens zmieniać z tym wykrywaniem wciśnięcia przycisku (wciśnięcie - stan wysoki a nie jak teraz niski) Bo nawet bez użytkowania tego switcha przekaźnik kłapał więc raczej jest to problem z wyjściem (PINem) do którego jest podpięty przekaźnik i odpowiednim jego sterowaniem. Będę próbował realizować to na 2 tranzystorach tak jak koledzy wcześniej proponowali, bo to chyba jedyne sensowne rozwiązanie teraz. Dziękuję za pomoc.
  • #57
    Pajczi
    Poziom 14  
    Wiadomo już coś więcej. Przekaźnik "cyka" w momencie gdy są dwa źródła zasilania - aku 12V przekaźnik i zasilacz - elektronika, gdy wszystko jest zasilane z jednego źródła - zasilacz, układ zachowuje się poprawnie !
  • #58
    marco47
    Poziom 41  
    Przecież sam pokazałeś schemat na którym nie ma dwóch różnych źródeł zasilania . Gdybyśmy wiedzieli że zasilasz przekaźnik z osobnego źródła to już w pierwszym poście zostałbyś o tym błędzie powiadomiony .
  • #59
    Pajczi
    Poziom 14  
    OK! Tylko wcześniej ktoś pisał, że nie może być to samo źródło zasilania bo przy takim skoku prądu aku może nie dać rady, napięcie spadnie i procesor się zresetuje! Co z mojego praktycznego doświadczenia nie jest prawdą i mogło by to działać na tym jedynym (taki miałem plan projektowy ale prototyp był zasilany z dwóch źródeł) no ale załóżmy że dla bezpieczeństwa elektronika będzie zasikana z baterii 9V a przekaźnik z aku 12V jakie rozwiązanie w takim przypadku będzie najlepsze ? Dzięki za pomoc
  • #60
    marco47
    Poziom 41  
    Ale przekaźnik pobiera około 20mA(zależy jaki) , więc skąd ta obawa że zresetuje się procek w momencie przełączania przekaźnika . Dla bezpieczeństwa zasil procek przez diodę i podłącz bufor napięcia (duża pojemność )