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

Sterownik do bramy - w bascomie na atmega16 - liczenie

pawelj 03 Lis 2008 22:10 3777 13
  • #1 03 Lis 2008 22:10
    pawelj
    Poziom 15  

    Witam.
    Pewnie się da to co w tytule ale do rzeczy.
    Stanąłem przed trudnym zadaniem (trudnym dla mnie bo jak do tej pory to udało mi się mignąć diodą przy pomocy uC).
    Chciałem zrobić układ sterownika do bramy wjazdowej do domu.
    https://www.elektroda.pl/rtvforum/viewtopic.php?t=1126618.

    Sterownik będzie miał za zadanie :
    1. czekać na sygnał z pilota (odrębny układ)
    2. Po otrzymaniu sygnalu z pilota odpalić zasilanie dużego trafa
    3. wysterować układ l298 (
    4. włączyć koguta
    5. liczyć impulsy dwóch impulsatorów w dwóch silnikach
    6. sprawdzać czy w barierze nic się nie pojawiło
    7. sterować barierą z częst ok 32-40 kHz.

    I teraz moje obawy:
    jedyne z czym sobie poradzę to bascom. Chciałbym to robić na uC atmega 16 - mam ich kilka i płytkę testową.
    Ale jak zrealizować równoległe liczenie impulsów z dwóch impulsatorów oraz jednoczesne z liczeniem sterowanie barierą podczerwieni.
    Czy7 można to zrobić w pętli na zasadzie:
    - sprawdzam stan pierwszego - zapisuje stan w liczniku 1 ( o ile się zmienił)
    - sprawdzam stan drugiego - zapisuję stan w liczniku 2 ( o ile się zmnienił)
    - generuję sygnał dla nadajnikia bariery i odczytuję stan odbiornika.
    To powyższe oczywiście w pętli. Tylko czy tak się to robi a jak nie tak to jak ?
    Alternatywą dla mnie jest odciążenie atmegi sterowaniem barierą i zrobienie dla bariery optoelektronicznej osobnego układu który atmedze poda tylko sygnał "w razie czego"

    No i jeszcze zabezpieczenie nadproądowe dochodzi - czyli na bieżąco kontrolowanie wejścia ADC - jeżeli za duże napięcie - zatrzymanie pracy siłowników.

    Mam nadzieję że dość jasno opisałem co ma robić mój przetwornik. Wiem na 100% się da zrealizować to wszystko tylko chciałbym żeby mi ktoś podsunął pomysł jak to zrobićw bascomie na atmedze...

    Scheamt blokowy już powstał; - teraz powstaje schemat ideowy.
    Problem jest taki że od 15 lat nie miałem do czynienia z elektroniką i nawet w eagle narysować "masę" jest dla mnie sporym wyzwaniem.







    ]Link[/url]

    0 13
  • Relpol
  • #2 03 Lis 2008 22:20
    sysio10
    Poziom 15  

    Do kontroli sygnałów z impulsatorów proponuję użyć przerwań.
    W takim przypadku możesz się skupić na obsłudze bariery.

    0
  • Relpol
  • #3 03 Lis 2008 22:41
    pawelj
    Poziom 15  

    A co się dzieje w programie jeżeli uC dostanie dwa przerwania prawie równocześnie?
    Czy dobrze rozumuje że :
    jeżeli to prawie wystarczy na wykonanie jakiegoś podprogramu to jest ok.
    jeżeli natomiast uC wykonuje sobie podprogram po pierwszym przerwaniu i dostaje sygnał z drugeigo przerwania to co wtedy się dzieje ?

    W moim przypadku mogą to być sygnały dokładnie w tym samym czasie

    PawełJ

    0
  • #4 03 Lis 2008 23:23
    Samuraj
    Poziom 35  

    Odbiegnę trochę od tematu.
    Proponował bym zamiast impulsatorów zastosować sposób określania końca poprzez wykrywanie przeciążenia silnika.

    0
  • #5 04 Lis 2008 07:30
    Dr.Vee
    VIP Zasłużony dla elektroda

    Używasz INT0 i INT1 do zliczania impulsów na linii A impulsatorów, ustawiasz generację przerwań na opadające zbocze. W przerwaniu sprawdzasz linię B danego impulsatora, jeśli B jest w stanie wysokim, to masz impuls "w lewo", jeśli B jest w stanie niskim, to masz impuls "w prawo". Pozostaje jeszcze eliminacja drgań styków... ;)

    Timer1 wykorzystujesz na PWM dla silnika (silników?) + np. do odmierzania czasu.

    Timer0 generuje 36kHz dla bariery, a Timer2 zlicza impulsy z odbiornika w barierze. Jak zliczy dużo za mało, to masz przerwaną barierę (albo daj

    ADC używasz do pomiaru prądu płynącego przez silniki (wyjścia sense L298), konwersję synchronizujesz ze sterowaniem silnikiem.

    Obsługa pilota, koguta i innych w pętli głównej programu.

    PS. Zmień temat bo nijak się ma do treści postu :)

    Pozdrawiam,
    Dr.Vee

    0
  • #6 04 Lis 2008 17:40
    pawelj
    Poziom 15  

    Dr.Vee napisał:
    Używasz INT0 i INT1 do zliczania impulsów na linii A impulsatorów, ustawiasz generację przerwań na opadające zbocze. W przerwaniu sprawdzasz linię B danego impulsatora, jeśli B jest w stanie wysokim, to masz impuls "w lewo", jeśli B jest w stanie niskim, to masz impuls "w prawo". Pozostaje jeszcze eliminacja drgań styków... ;)

    Nadal nie bardzo to rozumiem. Mam dwa impulsatory - po jednym na każdy silnik. Odliczam określoną liczbę impulsów i zatrzymuję ruch.

    Cytat:
    Timer1 wykorzystujesz na PWM dla silnika (silników?) + np. do odmierzania czasu.


    Jeżeli użyję układu L298 to musze używać PWM? Regulacji szybkości nie przewiduję.

    T
    Cytat:
    imer0 generuje 36kHz dla bariery, a Timer2 zlicza impulsy z odbiornika w barierze. Jak zliczy dużo za mało, to masz przerwaną barierę

    ADC używasz do pomiaru prądu płynącego przez silniki (wyjścia sense L298), konwersję synchronizujesz ze sterowaniem silnikiem.

    Ten L298 mialbyc tylko po to aby zrealizować obroty lewo/prawo, natomiast pomiar prądu ma być zabezpieczeniem "w razie czegoś"

    Cytat:
    Obsługa pilota, koguta i innych w pętli głównej programu.

    Przynajmniej to rozumiem :)

    Jeżeli chodzi o wyłączenie silników przy użyciu wyłącznika przeciążeniowego to nie jest to dobry pomysł ponieważ brama zarówno otwarta ani zamknięta nie ma punktu oparcia.

    0
  • #7 04 Lis 2008 18:32
    bogdan_p
    Poziom 39  

    kilka uwag jak to wygląda w fabrycznym rozwiązaniu :
    - bariera optyczna jest zawsze elementem autonomicznym , jej działanie jest niezależne od głównego sterownika do jej budowy wystarczy układ na NE555
    - siłowniki mają wewnętrzne krańcówki z układem zmiany polaryzacji określające skarane punkty siłownika tak więc wystarczy podać napięcie o określonej polaryzacji i siłownik wykona dany ruch
    - pomiar prądu jest bardzo ważny ponieważ pozwala na stwierdzenie stanu w którym siłownik natrafił na opór
    - do zmiany polaryzacji stosuje się przekaźniki
    reasumując zbuduj niezależna barierę optyczną , proponuje kup gotowe siłowniki i masz rozwiązany problem z położeniami skrajnymi , można stosować mostek H w postaci L298 ale czy zastanawiałeś się nad prądem zwarcia silnika czy L298 go wytrzyma , z przekaźnikami praktycznie problem odpada wystarczy dobrać przekaźnik o odpowiednim prądzie styków zupełnie odpada pomiar obrotów silnika bo właściwie po co , zastosuj pomiar prądu to ważny element zabezpieczenia

    0
  • #8 04 Lis 2008 23:12
    pawelj
    Poziom 15  

    do bogdan_p:
    W tej chwili mam rozwiązanie na krańcówkach i przekaźnikach.
    Układ działa tak, że po podaniu sygnału ze zdalnego sterowania brama wykonuje ruch przeciwny do poprzedniego.
    Nie mam żadnych zabezpieczeń bo brama była robiona "na próbę' czy zadziała.

    Wydaje mi się bezpieczniejsze rozwiązanie z impulsatorem niż z krańcówką. Chodzi mi o wytrzymałość styków. Jakby nie patrzył przez styki przekaźnika i krańcówek płynie sporo większy prąd niż przez impulsator.

    Poza tym jakoś wszyscy którzy głos zabierali krytykowali pomysł wykorzystania przekaźników i krańcówek fabrycznych. Dlatego też chciałem mój sterownik oprzeć na po pierwsze zliczaniu impulsów, po drugie krańcówka i po trzecie wyłącznik prądowy.


    napisałeś że do zmiany polaryzacji stosuje się przekaźniki a nie l298.

    Może i tak tyle że prądowo ten scalak wytrzyma, natomiast jeżeli chodzi o cenę to jest sporo tańszy niz przekaźniki. Akurat te które uzyłem miałem z demobilu, ale drugie urządzenie które będe robił już tych demobilowych mieć nie będzie.

    Co do bariery opto to ciągle się zastanawiam czy zmusić do tego uC czy robić to osobno.

    dziękuje wszystkim, którzy do tej pory zabrali głos i proszę o jeszcze

    pozdrawiam
    pawełJ

    0
  • #9 05 Lis 2008 12:09
    Dr.Vee
    VIP Zasłużony dla elektroda

    Jeśli użyjesz impulsatora, to PWM Ci się przyda do zmniejszenia obrotów silnika przy starcie, dochodzeniu do położenia krańcowego (tak jest u mnie w fabrycznej bramie przesuwnej) i ew. przy przeciążeniu.

    To fakt, dla bezpieczeństwa bariera optyczna powinna być osobnym układem.

    Pozdrawiam,
    Dr.Vee

    0
  • #10 05 Lis 2008 17:42
    bogdan_p
    Poziom 39  

    Cytat:
    Wydaje mi się bezpieczniejsze rozwiązanie z impulsatorem niż z krańcówką.

    nie zgadam się z tym , tworzysz kolejny układ którego działanie uzależnione jest od pracy głównego sterownika ( mikrokontrolera ) jeszcze nie spotkałem się z przypadkiem ( poza uszkodzeniem mechanicznym ) aby układ na krańcówkach wewnątrz siłownika uległ uszkodzeniu
    właściwie to zacznijmy od tego o jakim mówimy napędzie ? dla bramy skrzydłowej czy przesuwnej , jeżeli do przesuwnej to faktycznie stosuje się enkodery tak jak opisał to Dr.Vee ale nie do wyznaczania pozycji krańcowych od tego zawsze są krańcówki

    0
  • #11 05 Lis 2008 18:32
    pawelj
    Poziom 15  

    bogdan_p napisał:
    Wydaje mi się bezpieczniejsze rozwiązanie z impulsatorem niż z krańcówką.

    Cytat:
    nie zgadam się z tym , tworzysz kolejny układ którego działanie uzależnione jest od pracy głównego sterownika ( mikrokontrolera )

    Zgadza się. Tyle, że w poprzednim moim temacie w którym pokazywałem napęd bramy zasugerowano mi że krańcówki mogą nawalić.
    Stąd też mój pomysł zastosowania impulsatorów które zresztą są wbudowane w siłownik

    Cytat:
    jeszcze nie spotkałem się z przypadkiem ( poza uszkodzeniem mechanicznym ) aby układ na krańcówkach wewnątrz siłownika uległ uszkodzeniu

    Oby mój nie był pierwszy :)

    Cytat:
    właściwie to zacznijmy od tego o jakim mówimy napędzie ? dla bramy skrzydłowej czy przesuwnej , jeżeli do przesuwnej to faktycznie stosuje się enkodery tak jak opisał to Dr.Vee ale nie do wyznaczania pozycji krańcowych od tego zawsze są krańcówki

    Chodzi o napęd do bramy skrzydłowej z tym, że jako siłowniki wykorzystałem siłowniki od anten satelitarnych.

    0
  • #12 05 Lis 2008 19:40
    Dr.Vee
    VIP Zasłużony dla elektroda

    W takim razie zastosuj krańcówki, +dublowanie impulsatorami. Ostatnim zabezpieczeniem będzie pomiar prądu siłowników.

    Pozdrawiam,
    Dr.Vee

    0
  • #13 05 Lis 2008 20:00
    bogdan_p
    Poziom 39  

    Cytat:
    jako siłowniki wykorzystałem siłowniki od anten satelitarnych.

    czy sprawdziłeś je fizycznie przy bramie i mają dość siły ?
    Cytat:
    mój pomysł zastosowania impulsatorów które zresztą są wbudowane w siłownik

    tak w przypadku kiedy siłownik był wykorzystany do ustawienia anteny satelitarnej jest to podstawa aby właściwie pozycjonować ustawienia , ale zupełnie nie ma potrzeby aby go wykorzystywać przy siłowniku do otwierania bramy , wybór co zrobisz należy do Cie ale pamiętaj że im prostsze rozwiązanie tym pewniejsze w działaniu a nie potrzebna komplikacja układu jest najlepszym rozwiązaniem

    0
  • #14 06 Lis 2008 00:17
    Jjacenty
    Poziom 12  

    Do Pawelj

    Nie będę wnikał co jest lepsze pomiar prądu czy też inne rozwiązania ale odpowiem Ci wprost na twoje pytanie dotyczące zliczania impulsów.

    Sygnały z impulsatorów podłącz pod 1 i 2 nogę Atmegi16 są to wejścia zliczające liczników Timer0 i Timer1
    Skonfiguruj timery

    Config TimerX = Counter , Edge = Rising
    lub
    Config TimerX = Counter , Edge = Falling

    Ilość impulsów można odczytać ze zmiennej systemowej TcntX
    np: ile_impulsow = Tcnt0
    Oczywiście na początku trzeba zmienną TcntX wyzerować

    Uwaga X oznacza 0 lub 1

    Dodano po 1 [minuty]:

    Do Pawelj

    Nie będę wnikał co jest lepsze pomiar prądu czy też inne rozwiązania ale odpowiem Ci wprost na twoje pytanie dotyczące zliczania impulsów.

    Sygnały z impulsatorów podłącz pod 1 i 2 nogę Atmegi16 są to wejścia zliczające liczników Timer0 i Timer1
    Skonfiguruj timery

    Config TimerX = Counter , Edge = Rising
    lub
    Config TimerX = Counter , Edge = Falling

    Ilość impulsów można odczytać ze zmiennej systemowej TcntX
    np: ile_impulsow = Tcnt0
    Oczywiście na początku trzeba zmienną TcntX wyzerować

    Uwaga X oznacza 0 lub 1

    0