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

[ATmega16] Badanie stanu wejścia 12V

wicy 13 Kwi 2010 11:51 3350 15
  • #1 7955411
    wicy
    Poziom 22  
    W jaki sposób przy pomocy ATMega16L zbadać wystapienie napięcia 12V-14V?
    Pierwszy do głowy przychodzi mi rezystor i tranzystor
    [ATmega16] Badanie stanu wejścia 12V
    ale czy to dobre i poprawne rozwiązanie?
    (przepraszam za jakość ale nie mam narzędzia graficznego - lewa 12-14V, prawa PORT)

    I czy jest może jakiś driver, który zastąpi mi 4 takie układy?
  • #2 7955467
    sim_
    Poziom 18  
    Witam, najprościej zrobić dzielnik napięcia na rezystorach, a najbezpieczniej wstawić transoptor, możesz wstawić dwa podwójne transoptory np. LTV827. Pozdrawiam Janek
  • #3 7955505
    erif
    Poziom 12  
    Poziom napięć sugeruje zastosowanie w samochodzie?
    Dzielnik napięcia 220kOhm/100kOhm.
  • #4 7955558
    tmf
    VIP Zasłużony dla elektroda
    Interesuje cie zbadanie czy jest dokładnie 12-14V, czy satysfakcjonuje cię sprawdzenie czy jest >2V lub 0? Jeśli to drugie to wystarczy szeregowy rezystor. Jeśli interesuje cię sprawdzenie czy jest dokładnie 12-14V to rezystor polaryzujący i szeregowo zenerka na napięcie ok. 2V niższe niż badane. Jeśli punkt odcięcia musi być bardzo precyzyjny to wykorzystać wbudowany komparator lub ADC (wolne rozwiązanie). Dzielnik rezystorowy się nie sprawdzi ze względu na to, że próg przełączenia pinu IO jest niemożliwy do precyzyjnego określenia, występuje histereza, obszar niedozwolony i asymetria przełączenia.
  • #5 7955562
    wicy
    Poziom 22  
    Tak, instalacja samochodowa. Myślałem o dzielniku, ale czy dla układu procesora zasilanego 3,3V dzielnik dobrany dla max napięcia ładowania (14,5V?) przy wyłączonym silniku i napięciu 12V da jeszcze logiczną jednynkę? Czy Uwy nie spanie poniżej poziomu logicznej 1?

    Układ procesora podłączony jest zamiast układu który posiadał:
    - zasilanie +aku
    - masę -aku
    - linię od stacyjki +aku
    - linię od włącznika świateł +aku
    Zależy mi na zbadaniu stanu 2 ostatnich linii, czyli pojawieniu się tam napięcia, przy czym zapewne będzie to 12-14,5V.
  • Pomocny post
    #6 7955603
    tmf
    VIP Zasłużony dla elektroda
    Więc jeśli tylko chcesz sprawdzić czy pojawiło się napięcie to daj szeregowy rezystor i po sprawie. Rezystor rzędu 20kOm będzie ok. Jeśli zdecydujesz się na dzielnik (IMHO niepotrzebny) to musisz dobrać wartości rezystorów tak, żeby w najgorszym wypadku dawał logiczną jedynkę, czyli dla 12V na wyjściu ok. 4-5V. Nie musisz przejmować się wyższym napięciem - zostanie obcięte przez diody zabezpieczające procesora. Oczywiście napięcie wejściowe przy którym odczytasz 0 będzie trudne do przewidzenia - zależne m.in. od temperatury.
  • #7 7982700
    wicy
    Poziom 22  
    Tak się złożyło, że do badania stanu 12V wypadło mi użyć dwóch wejść ADC procesora. Jednocześnie korzystam z pomiaru napięcia na kanale ADC0. Czy podanie na ADC6 i ADC7 12V w jakikolwiek sposób nie zakłóci działania ADC i pomiaru tego samego napięcia na ADC0?
  • #8 7982935
    tmf
    VIP Zasłużony dla elektroda
    Z przyczyn oczywistych 12V na wejście ADC podać nie możesz. Możesz zrobić dzielnik i przez dzielnik podać na ADC, pamiętając, żeby napięcie z dzielnika nie było wyższe niż AVcc+0,6V.
  • #9 7983955
    rpal
    Poziom 27  
    koledze jest potrzebny konwerter poziomów bo tak to zrozumiałem. Dzielnik będzię podążał za zmianą napięcia jak spojżysz w notę od np. bufora 74LVHC08 i porównasz z tym co wyjdzie ci z obliczeń będziesz wiedział czy kares napięć pokrywa się z dopuszczalnym dla logiki 3,3V. Bufor może być w tym przypadku bardzo wygodny choć układ z tranzystorem także ale pamiętac należy o odwróceniu stanów logicznych. Dzielniki nigdy mi jakoś nie leżały.
  • #10 8003259
    wicy
    Poziom 22  
    Jeszcze raz poproszę o pomoc w temacie badania występowania 12V tym razem w zestawieniu z pomiarem tego napięcia.
    Oba problemy z osobna rozwiązałem, ale zestawione razem powodują komplikacje.

    Mam 3 wejścia 12V. Jedno to zasilanie układu i tu mierzone jest napięcie (zastosowany dzielnik i pomiar ADC na kanale 0). Na drugim i trzecim wejściu pojawia się odpowiednio napięcie 12V, po pojawieniu się którego układ powinien odpowiednio zareagować. Badanie stanu 12V wypadło, jak pisałem wyżej, na piny ADC6 i ADC7. Zastosowałem również dzielnik (na schemacie brak drugiego rezystora W1-W2 i B1-B2) i układ reaguje, ale po pojawieniu się sygnału na wejściach SW i ZA następuje spadek napięcia wejściowego i pomiar ADC0 pokazuje zupełnie inną, mniejszą wartość.
    [ATmega16] Badanie stanu wejścia 12V

    Jak sobie poradzić z badaniem stanu i pomiarem tego samego napięcia wejściowego?
    Stan linii SW i ZA badam nie przez badanie stanu portu, ale przez odczyt ADC i porównanie z ustaloną wartością progową, powyżej której program wykrywa "logiczną 1".
    Czy linie SW i ZA wpiąć bezpośrednio w ADC6 i ADC7 i badać stan portu przez PINA?
  • #11 8011265
    rpal
    Poziom 27  
    Tak do końca nie wiem o jaki rodzaj badania chodzi ale jeśli ma być tylko stwierdzony brak lub pojawienie się napięcia 12V to może lepiej użyć np. transoptorów które z odpowiednim opornikiem w zasilaniau LED-a i po uwzględnieniu histerezy samego transoptora będą dośc "stromo" sygnalizowały tak zanik jak i obecność 12V. Wystarzy tylko wpiąć obwody kolektorów na wejścia INT a są ich akurat wolne 3 i sprawa załatwiona?
  • #12 8011612
    wicy
    Poziom 22  
    rpal napisał:
    Tak do końca nie wiem o jaki rodzaj badania chodzi ale jeśli ma być tylko stwierdzony brak lub pojawienie się napięcia 12V

    Dokładnie tak. Ma być sprawdzony stan wejść SW i ZA, przy czym napięcie na tych wejściach wyności 12V i jest z tego samego źródła co zasilanie mojego układu.
    Chyba zadziałało podpięcie tych linii, przez dzielnik, do ADC6 i ADC7 oraz badanie stanu nie przez pomiar napięcia GETADC(6) ale badaniem stanu pinu
    
    if PINA.6 = 1 Then
    

    Nie rozumiem tylko dlaczego pomiar napięcia powoduje spadek napięcia zasilania a badanie stanu portu nie. Ważne, że póki co układ działa i jest w fazie testów.
  • #13 8013128
    rpal
    Poziom 27  
    Powtórzę jeszcze raz jeśli nie chcesz sprawdzać napięcia np. z dokładnością do 0,1 V a tylko jego obecność albo też nie. To albo poprzez transoptor albo klucz tranzystorowy wepnij się na INT0,INT1,INT2 ustawione jako wejścia i badaj stan wejść w przerwaniach, czyli pojawienie się zbocza wyzwalania przerwania (może być opadające, narastające, albo każda zmiana) i w ten sposób ustalaj stan zasilania niapięciem 12V. Możesz też badac ten stan w jakiejkolwiek chwili niekoniecznie przerwaniem. Piny jako wejście i nie zawracaj sobie głowy zadnymi wejściami przetwornika ACD. Ważne tylko abyś odpowiednio wysterował bazy tranzystorów albo LED, transoptora(osobiście radzę bardziej transoptor). Odczytując stan PIN.x będziesz miał informację o aktualnym poziomie swoich 12V weź tylko pod uwagę odwracanie fazy na tranzystorze a także na transoptorze.
  • #14 8013219
    utak3r
    Poziom 25  
    wicy napisał:
    Nie rozumiem tylko dlaczego pomiar napięcia powoduje spadek napięcia zasilania a badanie stanu portu nie.


    Może dlatego, że ów pin jest w stanie wysokiej impedancji?
  • #15 8013816
    rpal
    Poziom 27  
    autor nic nie wspomina w jaki sposób bada owe napięcie.
  • #16 8013993
    wicy
    Poziom 22  
    W części pomiaru i wykrywania napięcia, autor sklecił taką konfigurację układu:
    [ATmega16] Badanie stanu wejścia 12V
    Pomiar napięcia na A.0 odbywa się przez
    
    Config Adc = Single , Prescaler = Auto , Reference = Avcc
    
    Start Adc
    Pomiar = Getadc(0)
    Stop Adc
    Pomiar2 = Pomiar / 72
    


    Badanie stanu odbywa się poprzez ustalenie niskiej wartości progowej i wykrywanie logicznej 1 po przekroczeniu tej wartości (port A w ogóle nie skonfigurowany)
    
       Start Adc
       Pomiar = Getadc(7)
       Pomiar1 = Getadc(6)
       Stop Adc
    
       If Pomiar > 200 Then
          Pwm1a = 200
          If Pomiar1 > 200 Then
             Pwm1a = 100
          Else
             Pwm1a = 200
          End If
       Else
          Pwm1a = 100
       End If
    

    lub poprzez zwykły odczyt portu przy konfiguracji portu A
    
    Config Porta = &B00111000
    Porta = &B00111000
    
    Za Alias Pina.6
    Sw Alias Pina.7
    
    If Za = 1 Then
          If Sw = 1 Then
             Pwm1a = 5
          Else
             Pwm1a = 200
          End If
       Else
          Pwm1a = 2
       End If
    

    Obie metody zaczęły mi działać. Widać wcześniej musiałem mieć jakieś zwarcie na płytce... nie mam pojęcia. W każdym razie układ działa.
    Dziękuję za podpowiedzi.
REKLAMA