logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[AVR] atmega uklad przeciążeniowy

dezmontnikus 13 Gru 2010 17:36 6278 39
  • #1 8863766
    dezmontnikus
    Poziom 21  
    Witam...
    Jestem na etapie budowy komputera pokładowego do samochodu, i chciałem dodać funkcje domykania szyb, mam opcje przy alarmie samochodowy do podłączenia się z układem domykania (czyli po uzbrojeniu pokazuje się przez 30s sygnał na wyjściu). Chcę złożyć układ na atmega8 albo na czymś innym jak zaproponujecie, ale nie mam pomysłu na układ przeciążeniowy, wiadomo ze atmega8 ma 1 przetwornik ADC a w samochodzie są 4 szyby więc domykanie wszystkich jednocześnie jest niemożliwe (tak mi się wydaje, jedna szyba się zamknie i układ się wyłączy pozostawiając resztę niedomkniętych) Możliwe jest też zamykanie każdej z osobna, ale to zbyt długo trwało. Macie może jakieś inne propozycje? Jeżeli ta odpowiedz gdzieś padła to proszę o naprowadzenie.
  • Pomocny post
    #2 8863833
    tmf
    VIP Zasłużony dla elektroda
    Ma jeden ADC, ale z wejściem multipleksowanym. Możesz więc czytać sekwencyjnie max 8 kanałów, ponieważ możesz bez problemu próbkować 20kHz, czyli 5kHz/szybę, czyli co najmniej 1000x częściej niż potrzeba.
  • Pomocny post
    #3 8863880
    Ture11
    Poziom 39  
    Układ przeciążeniowy możesz spróbować zrobić na zasadzie działania amperomierza - straty na kawałku przewodka. Miałbyś wtedy jedno wejście ADC do pomiaru napięcia zasilania, i cztery do pomiaru napięcia za przewodnikiem obciążonym. Nie potrzebujesz dokładnie określać poboru prądu, totez nie musi to być dokładne. Myślę, że możnaby tak zrobić, ale może głupoty gadam?

    Ewentualnie są jeszcze scalone mierniki natężenia, ale nie wiem, jakiej mocy. Jedyny, z którym miałem styczność był do 3 Amper, nie wiem, czy są większe, scalone.

    Pozdrawiam.
  • #4 8863890
    dezmontnikus
    Poziom 21  
    Czyli jak... w atmega jest multiplekser? można wybrać adres z którego portu ma zczytywać dane i przełączać je odpowiednio? dobrze rozumiem?

    PS. Szyby wysteruje się z przekaźników, a spadek napięcia będzie mierzony na rezystorze wpiętym w szereg z silnikiem od szyb. Tylko kwestia próbkowania napięcia na tych rezystorach.
  • #5 8863895
    arktik1
    Poziom 27  
    Montujesz rezystor na zasilaniu 0.01, 0.001 Ohm każdego silnika szyb.
    Jeśli szyba się zamknie, obciążenie powstałe w wyniku zatrzymania silnika
    spowoduje nagły spadek napięcia na rezystorze.
    Jednym słowem zbudujesz amperomierz.
    Napięcie z "amperomierza" odczytasz przetwornikiem ADC i wyłączysz przekaźnik zasilania.
    Możesz zbudować układ który będzie zamykał szyby w dowolnej kolejności lub wszystkie na raz.
  • #6 8863914
    dezmontnikus
    Poziom 21  
    Wiem jak działa taki układ przeciążeniowy (robiłem sobie do bramy przesuwnej) ale nie wiem jak próbkować napięcie 1 ADC z czterech rezystorów.
  • #7 8863930
    Ture11
    Poziom 39  
    W atmedze8 masz 8 wejść ADC. Zaufaj. :-)

    Pozdrawiam.

    Dodano po 35 [sekundy]:

    Błąd, 5 wejść ADC

    Dodano po 40 [sekundy]:

    a nawet 6. Przepraszam, dawno nic nie robiłem z mikroprockami.
  • #8 8864201
    arktik1
    Poziom 27  
    "Wiem jak działa taki układ przeciążeniowy (robiłem sobie do bramy przesuwnej) ale nie wiem jak próbkować napięcie 1 ADC z czterech rezystorów."
    Tak samo jak z jednego, tylko razy 4.
  • #9 8864561
    dezmontnikus
    Poziom 21  
    Dobra chyba wiem o co chodzi. Czy poniższy program który wydziergałem ma prawo działać?

    $regfile = "m8def.dat"
    $crystal = 4000000
    Config Lcd = 20 * 2
    Config Lcdpin = Pin , Db4 = Pb.2 , Db5 = Pb.3 , Db6 = Pb.4 , Db7 = Pb.5 , E = Pb.1 , Rs = Pb.0
    
    
    Dim Szyba1 As Word
    Dim Szyba2 As Word
    Dim Szyba3 As Word
    Dim Szyba4 As Word
    Dim V1 As Single
    Dim V2 As Single
    Dim V3 As Single
    Dim V4 As Single
    Dim Nap1 As String * 3
    Dim Nap2 As String * 3
    Dim Nap3 As String * 3
    Dim Nap4 As String * 3
    Dim Wzor As Byte
    Dim A As Byte
    
    Config Adc = Single , Prescaler = Auto , Reference = Avcc
    Start Adc
    
    
    
    Poczatek:
             Bitwait Pind.6 , Reset
             Display On
             Cls
             Lcd "Zamykanie szyb"
             A = 0
             Set Portd.1
             Set Portd.2
             Set Portd.3
             Set Portd.4
    
    Do
             Szyba1 = Getadc(1)
             Szyba2 = Getadc(2)
             Szyba3 = Getadc(3)
             Szyba4 = Getadc(4)
             V1 = Szyba1 * 0.0049
             V2 = Szyba2 * 0.0049
             V3 = Szyba3 * 0.0049
             V4 = Szyba4 * 0.0049
             Nap1 = Fusing(v1 , "#.&&")
             Nap2 = Fusing(v2 , "#.&&")
             Nap3 = Fusing(v3 , "#.&&")
             Nap4 = Fusing(v4 , "#.&&")
             Wzor = 4
             If Nap1 > Wzor Then
             Reset Portd.1
             Incr A
             End If
             If Nap2 > Wzor Then
             Reset Portd.2
             Incr A
             End If
             If Nap3 > Wzor Then
             Reset Portd.3
             Incr A
             End If
             If Nap4 > Wzor Then
             Reset Portd.4
             Incr A
             End If
    Loop Until A = 4
    Cls
    Lcd "Szyby zamkniete"
    Display Off
    Goto Poczatek
    End


    PORTD.1.....do... 4 to są wyjścia do silników szyb
    PORTD.6 to impuls do zamykania szyb

    Dodano po 28 [minuty]:

    Ps. chodzi mi o sprawdzenie tego porównywania napięcia do tego próbkowanego, dobrze to zrobiłem? jak porównać liczbę z przecinkiem?
  • Pomocny post
    #10 8865213
    arktik1
    Poziom 27  
    ja bym to zrobił tak:
    
    $regfile = "m8def.dat"
    $crystal = 4000000
    Config Lcd = 20 * 2
    Config Lcdpin = Pin , Db4 = Pb.2 , Db5 = Pb.3 , Db6 = Pb.4 , Db7 = Pb.5 , E = Pb.1 , Rs = Pb.0
    Config Portc = Input
            Portc = &B000000
    
    Dim Szyba1 As Word
    Dim Szyba2 As Word
    Dim Szyba3 As Word
    Dim Szyba4 As Word
    Dim Wzor As Word
    Dim A As Word
    
    Config Adc = Single , Prescaler = Auto , Reference = Avcc
    Start Adc
    
    
    
            Cls
            Locate 1 , 1
             Lcd "Zamykanie szyb"
             A = 0
             Set Portd.6
             Set Portd.1
             Set Portd.2
             Set Portd.3
             Set Portd.4
    
    Do
             Szyba1 = Getadc(1)
             Szyba2 = Getadc(2)
             Szyba3 = Getadc(3)
             Szyba4 = Getadc(4)
    
             Wzor = 200                                         'zmierzona i dobrana wartość z rezystora
    
             If Szyba1 > Wzor Then Reset Portd.1
    
             If Szyba2 > Wzor Then Reset Portd.2
    
             If Szyba3 > Wzor Then Reset Portd.3
    
             If Szyba4 > Wzor Then Reset Portd.4
    
             Incr A                                             'dobrać czasowo wartość A
    
            Waitms 100
    
       If A = 1000 Or Portd.1 = 0 And Portd.2 = 0 And Portd.3 = 0 And Portd.4 = 0 Then Gosub Of
    Loop
    
    
    Of:
    Cls
    Locate 1 , 1
    Lcd "Szyby zamkniete"
    Wait 5
    Reset Portd.6
    Wait 5
    Return
    


    Dodano po 1 [minuty]:

    Oczywiście jeśli program ma zamykać tylko szyby.
    Inaczej trzeba pozbyć się WAIT i zastosować TIMER lub zmienną liczącą czas.

    Dodano po 3 [minuty]:

    A sorki nie wyjaśniłem.
    Pod PORTD.6 dał bym przekaźnik zasilania całego układu.
    Impulsem wzbudzasz przekaźnik, potem jest on podtrzymywany z PD.6 i po całej operacji urządzenie samo odłącza sobie zasilanie.
    Dopisał bym może jeszcze jakiś tam ALARM, gdy wyłącznik czasowy dobiegnie końca, a z jakiegoś powodu szyba nie zostanie zamknięta.
    Np.Trąbienie sygnałem 3 razy.
    :D
  • #11 8865345
    dezmontnikus
    Poziom 21  
    Getadc(3) pobiera jako bity. Rozumiem że

    Wzor = 200 jest to 4V tylko ze w bitach czy jakoś tak :)
    Cały program będzie wklejony w inny, do komputera pokładowego, Po wyłączeniu stacyjki układ przechodzi do wyświetlania "Do widzenia" i po tym zacznie zamykać szyby, po zamknięciu szyb wyjdzie z pętli i pójdzie do programu głównego, na początek. Potem układ przejdzie w powerdown.
  • #12 8865413
    arktik1
    Poziom 27  
    ADC = 1023 = max 5v.
    Czyli 1v = 204, około.
    "po zamknięciu szyb wyjdzie z pętli i pójdzie do programu głównego"
    A co on ma robić w programie głównym przy wyłączonym silniku?
    "Potem układ przejdzie w powerdown"
    Może lepiej go wyłączyć całkiem?

    Dodano po 5 [minuty]:

    "Po wyłączeniu stacyjki układ przechodzi do wyświetlania "Do widzenia" i po tym zacznie zamykać szyby"
    A co jeśli będziesz chciał w lato posiedzieć przy otwartych szybach.
    Tak tylko mi wpadło...:D
  • #13 8865594
    dezmontnikus
    Poziom 21  
    hmmm dobre pytanie :) ale jak będę chciał posiedzieć przy otwartych szybach to nie będę uzbrajał alarmu :) a domykanie szyb ma uruchamiać się po sygnale od uzbrojenia alarmu. Czyli najlepiej zbudować drugi układ do domykania i faktycznie odłączać mu zasilanie. Nie jest mi to zbytnio na rękę. Chciałem zamknąć to w jednym klocku. Więc po komunikacie "Do widzenia" program będzie czekał na uzbrojenie alarmu, potem zamknie szyby.
  • #14 8865642
    arktik1
    Poziom 27  
    "Więc po komunikacie "Do widzenia" program będzie czekał na uzbrojenie alarmu, potem zamknie szyby."
    i to jest dobre rozwiązanie.
    Możesz to zamknąć w jednym Uc.
    Przecież po przekręceniu stacyjki możesz włączać zasilanie i wyłączać podtrzymanie dopiero po zamknięciu szyb.
    To nie koliduje .
    Program zamknięcia szyb wykonasz jako ostani.
  • #15 8865667
    dezmontnikus
    Poziom 21  
    Dobra złożę to i zobaczymy co z tego wyjdzie :) jak uda się odpalić to dam parę fotek i napisze jak to wygląda w rzeczywistości. Dzięki wszystkim za pomoc.
  • #16 8866802
    djsway
    Poziom 18  
    Witam. Robiłem taki sam układ do swojego samochodu, ale rozwiązałem go trochę inaczej. Zrobiłem coś na pokrój przekaźników kontaktronowych. Kontaktron włożyłem w plastikową rureczkę na której nawinąłem po 2 zwoje przewodu zasilającego. Przy zablokowanej szybie płyną prąd około 10-15A co wystarczało do zadziałania kontaktronu. Kontaktrony podpięte pod procesor i obsługiwane jako wejścia ON/OFF.

    Jeżeli zrobiłem OffTop to wybaczcie.
  • #17 8866844
    LordBlick
    VIP Zasłużony dla elektroda
    Myślę, że to ważne - przeciążenie należy dobrać na poziomie, na którym szyba nie zmiażdży ręki albo szyi...
  • #18 8867372
    dezmontnikus
    Poziom 21  
    Light-I napisał:
    Myślę, że to ważne - przeciążenie należy dobrać na poziomie, na którym szyba nie zmiażdży ręki albo szyi...


    bez przesady, nie mam takich mocnych silników do szyb :) ale jak poruszasz ten temat to jak można wykonać taką regulacje siły docisku szyby? a i jeszcze coś doszło, silniki są sterowane na +12V a do ADC nie można doprowadzi więcej nić 5V żeby zmniejszyć to napięcie wykonać dzielnik napięcia? do tego może jakiś potencjometr do tej siły docisku?.

    Dodano po 18 [minuty]:

    PS. coś takiego? :)
    [AVR] atmega uklad przeciążeniowy
  • #19 8867757
    rpal
    Poziom 27  
    jest jeszcze mały drobiazg czyli marka pojazdu bo jak jest tam CAN to domykanie szyby robi samo BSI wystarczy tylko a może aż wysłać odpowiednią ramkę po magistrali. Do pomiaru prądu i ew. obciązenia może lepiej użyć odpowiedniego bocznika i mierzyć spadek napięcia na jego wyprowadzeniach?
  • #20 8867950
    dezmontnikus
    Poziom 21  
    Nie na pewno w samochodzie nie ma takich bajerów :p
    Cytat:
    Montujesz rezystor na zasilaniu 0.01, 0.001 Ohm każdego silnika szyb.
    Jeśli szyba się zamknie, obciążenie powstałe w wyniku zatrzymania silnika
    spowoduje nagły spadek napięcia na rezystorze.

    coś takiego jak napisał kolega arktik1

    napięcie na tym rezystorze nie będzie za duże żeby podać je na ADC? chciałem obniżyć je tym bocznikiem co wyżej.
  • #21 8868856
    arktik1
    Poziom 27  
    Jeśli zastosujesz bocznik"rezystor" 0.001 Ohm to napięcie odłożone przy 10A = 10mV, przy 0.01, 10A = 100mV, przy boczniku 0.1, 10A = 1V.
    ADC = MAX 5v
    Po co przy takim napięciu dzielnik?
    Myślę że prędzej będziesz musiał zastosować wzmacniacz.

    Dodano po 4 [minuty]:

    A potencjometr to bym zastosował przy następnym ADC, do ustawiania "Wzor"

    Dodano po 13 [minuty]:

    Chyba najłatwiej dostępne:
    0.01 Ohm min 5W.
    A te to są "wszędzie":
    0.1 min 5W
  • #22 8869348
    dezmontnikus
    Poziom 21  
    Muszę zmierzyć jaki prąd występuje na zatrzymanym silniku, ale więcej niż 10A chyba nie.

    Cytat:
    A potencjometr to bym zastosował przy następnym ADC, do ustawiania "Wzor"


    Czyli potencjometr do napięcia +5V i dajemy na któryś pin UC mierząc wartość napięcia obliczymy "Wzór" wtedy będzie można regulować siłę docisku.
  • #23 8869485
    arktik1
    Poziom 27  
    "zatrzymanym silniku, ale więcej niż 10A chyba nie"
    Nawet jeśli występowało by 50A, co jest nie możliwe, to przy boczniku 0,01 otrzymał byś 500mV, a nie 5v.
    "Czyli potencjometr do napięcia +5V i dajemy na któryś pin UC mierząc wartość napięcia obliczymy "Wzór" wtedy będzie można regulować siłę docisku."
    Tak, tylko nie na któryś pin, tylko pin ADC.
  • #24 9927853
    dezmontnikus
    Poziom 21  
    Przepraszam że odkopuję, ale natchnęło mnie do zrobienia tego układu. Mam pewien problem, jak wykonać schemat pomiarowy z tym bocznikiem? Prosił bym taki na szybko, Do obojętnie której nóżki ADC, bocznik podpina się szeregowo?
  • #25 9929586
    arktik1
    Poziom 27  
    Szeregowo z silnikiem podnoszenia i to najlepiej na przewodzie masowym.
    Potem podłączasz do Uc po stronie silnika.
    Jeśli silnik się zatrzyma, to wzrośnie napięcie na boczniku i tym samym na pinie Uc.
    Oczywiście układ musi mięć masę (-) z tego samego miejsca co silnik podnoszenia.
  • #26 9929835
    dezmontnikus
    Poziom 21  
    [AVR] atmega uklad przeciążeniowy

    Coś w tym stylu? nie patrz na podłączenie atmega8 bo to na szybko robione :)
  • #27 9930513
    arktik1
    Poziom 27  
    Właśnie tak.
    I proponował bym zastosować :
    "przy 0.01, 10A = 100mV, przy boczniku 0.1, 10A = 1V"
    Ten drugi, układ będzie bardziej czuły.
  • #28 9930591
    kiziu13
    Poziom 17  
    Może i będzie bardziej czuły, ale warto pamiętać, że szczytowa moc wydzielona przy oporze 100mΩ, przez który płynie prąd 10A to 10W. Aż tak wielka czułość nie jest potrzebna, bo przeciążenie nie będzie w pojedynczych mA, a w setkach czy tysiącach.
  • #29 9930649
    arktik1
    Poziom 27  
    Chyba masz rację, temperatura bocznika też wzrośnie.
    Niech zastosuje 0.01 i przetestuje, bocznik zawsze można zmienić.
  • #30 9930728
    dezmontnikus
    Poziom 21  
    Teraz jest inna kwestia. Do silników dochodzi +12V nie uszkodze UC ? no i wpięcie szeregowo bocznika z linią zasilającą silniki spowolni ich podnoszenie
REKLAMA