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

[mega8][BASCOM] przetwornik AC świruje gdy napięcie spada

Czyzak 26 Gru 2009 15:21 1550 9
REKLAMA
  • #1 7437781
    Czyzak
    Poziom 13  
    Witam. W moim układzie muszę mierzyć napięcie na kondensatorze. Gdy ładuję kondensator, przetwornik mierzy mi napięcie i wyświetla wynik. Napięcie na przetwornik dzielę przez 3 rezystorami 10k (choć planuję zwiększyć do 810k). Doświadczalnie ustawiłem tak kwant próbki że pomiar jest bardzo dokładny.

    Wszystko działa gdy kondensator ładuję, bo gdy mierzę napięcie na rozładowującym się kondensatorze, początkowo mierzy dobrze, ale gdzieś w połowie lub po kilku sekundach przetwornik zauważa, że napięcie zaczyna rosnąć, gdy w rzeczywistości już dawno uciekło. Czy jest jakaś różnica gdy napięcie rośnie czy maleje? Oto kod który mi to realizuje (w pętli):
    	Start Adc
    	Wart_ac = Getadc(3)
    	Kwant = 0.013733
    	V = Wart_ac * Kwant
    	Strna = Fusing(V , "##.&&")


    Wesołych Świąt!

    Dodano po 4 [godziny] 21 [minuty]:

    Może ktoś jednak wie dlaczego przetwornikowi po jakimś czasie się myli? Trochę to dla mnie istotne...
  • REKLAMA
  • Pomocny post
    #2 7438844
    Fredy
    Poziom 27  
    A jesteś pewien że tak właśnie nie jest ? Podlącz miernik równolegle i zobacz .Sprawdż tez napięcie referencyjne czy nie pływa. Wklej cały kod bo na podstawie tego fragmentu nic mądrego nie można powiedzieć.
  • REKLAMA
  • #3 7438951
    Czyzak
    Poziom 13  
    Tak więc jest to model małego defibrylatora, w którym energia magazynowana jest w kondensatorze. Miernikiem sprawdzałem, napięcie spada bo musi gdy przez transoptor kondensator zwierany jest z rezystorem. Oto większa cześć kodu.
    $regfile = "m8def.dat"
    $crystal = 8000000
    
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portd.2 , Db5 = Portd.1 , Db6 = Portd.0 , Db7 = Portd.6 , E = Portd.3 , Rs = Portd.4
    Cls
    Cursor Off
    
    Config Adc = Single , Prescaler = Auto , Reference = Avcc
    
    Config Pinc.0 = Input
    .
    .
    .
    Set Portd.7
    
    Zmiana_energii Alias Pinc.1
    Ladowanie Alias Pinc.0
    Rozladowanie Alias Pinc.4
    Szok Alias Pinc.5
    
    Declare Sub Wyswietl(a As Byte)
    
    Dim I As Byte
    .
    .
    .
    Dim Strna As String * 8
    
    Deflcdchar 0 , 14 , 17 , 17 , 10 , 10 , 10 , 27 , 32
    Deflcdchar 1 , 16 , 16 , 20 , 24 , 16 , 16 , 31 , 32
    
    
    Goto Intro
    
    Call Wyswietl(e)
    
    Flaga = 0
    
    Do
    
             Debounce Zmiana_energii , 0 , Wyswietl , Sub
             Debounce Ladowanie , 0 , Laduj , Sub
             Debounce Rozladowanie , 0 , Rozladuj , Sub
             Debounce Szok , 0 , Szoczek , Sub
    
    Loop
    
    End
    
    '*************************KONIEC PROGRAMU GŁÓWNEGO******************************
    
    '##### Podprogram wyświetlania stanu urządzenia
    
    Sub Wyswietl(a As Byte)
    
    Wyswietll:
    
    	Cls
    	Lcd "UrzadzenieGotowe"
    
    	If Energia > 0 Then
    
    		Set Portb.1
    		Set Portb.2
    		Flaga = 1
    
    		Cls
    		Locate 1 , 1
    		Lcd "Na", chr(2), "adowano "
    		Locate 2 , 1
    		Lcd Stren, " mJ i ", Strna, " V"
    
    	End If
    
    End Sub
    
    '##### Podprogram do ręcznego ładowania kondensatora
    
    Laduj:
    
    	Cls
    	Locate 1 , 1
    	Lcd " Trwa ", chr(2), "adowanie "
    
    	Reset Portb.1
    	Reset Portb.2
    
    	I = 0
    
    Przetw:
    
    	Start Adc
    	Wart_ac = Getadc(3)
    	Kwant = 0.013733
    	V = Wart_ac * Kwant
    	Energia = V * V
    	Energia = Energia * 0.34		' wartość w mJ
    	Stren = Fusing(Energia , "##.&&")
    	Strna = Fusing(V , "##.&&")
    
    	I = I + 1
    	Waitms 1
    	If I = 170 Then
    
    		Locate 2 , 1
    		Lcd Stren, " mJ ", Strna, " V" 
    		I = 0
    
    	End If
    
    	If Pinc.1 = 0 Then
    
    		V1 = 0.5*V
    
    		Goto Wyswietll
    
    	End If
    
    	Goto Przetw
    
    Return
    
    '##### Pozprogram do rozładowania ładunku
    
    Rozladuj:
    
    	If Flaga = 1 Then
    
    		Flaga = 0
    		Reset Portb.3
    		Reset Portb.4
    
    		Cls
    		Locate 1 , 1
    		Lcd "TrwaRoz", chr(2), "adowanie"
    
    		Wait 7
    
    		Locate 2 , 1
    		Lcd "  Roz", chr(2), "adowano"
    
    		Wait 3
    
    		Set Portb.3
    		Set Portb.4
    
    		Energia = 0
    
    		Goto Wyswietll	
    
    	Else
    
    		Goto Wyswietll
    
    	End If
    
    Return
    
    '##### Podprogram do defibrylacji rezystorka :-)
    
    Szoczek:
    
    	If Flaga = 1 Then
    
    		Flaga = 0
    
    		Cls
    		Lcd "  Defibrylacja  "
    
    		Reset Portb.0
    		Reset Portb.5
    
    jraz:
    		Start Adc
    		Wart_ac = Getadc(3)
    		Kwant = 0.013733
    		V2 = Wart_ac * Kwant
    		Energia2 = V2 * V2
    		Energia2 = Energia2 * 0.34		' wartość w mJ
    		Stren = Fusing(Energia2 , "##.&&")
    		Strna = Fusing(V2 , "##.&&")
    
    		I = I + 1
    		Waitms 1
    		If I = 170 Then
    
    			Locate 2 , 1
    			Lcd Stren, " mJ ", Strna, " V" 
    			I = 0
    
    		End If
    
    		If Strna > V1 Then
    
    			Set Portb.0
    			Set Portb.5
    
    			Waitms 100
    
    			Reset Portd.7
    			Reset Portc.2
    
    			Wait 10
    			Locate 2 , 1
    			Lcd "   Zakonczona   "
    
    			Wait 3
    
    			Energia = 0
    			Set Portd.7
    			Set Portc.2
    			Goto Wyswietll
    
    		Else
    
    			Goto jraz
    
    		End If
    
    	End If
    Return


    Wyświetlanie energii i napięcia w podprogramie Laduj przebiega znakomicie (napięcie rośnie). Po przejściu do podprogramu Szoczek (gdy jest zwieranie z transoptorem poprzez wyzerowanie kilku pinów procka) napięcie albo początkowo spada i po jakimś czasie rośnie i zaczyna pływać, albo od razu pokazuje że napięcie rośnie. W rzeczywistości na 100% tak nie jest. Teraz usiłuję ustalić dlaczego tak się dzieje...
  • REKLAMA
  • #4 7439013
    Konto nie istnieje
    Poziom 1  
  • #5 7439086
    Czyzak
    Poziom 13  
    [mega8][BASCOM] przetwornik AC świruje gdy napięcie spada

    Wybaczcie za painta. Te przełączniki to sterowane z procesora transoptory. Prąd płynący przez ten dzielnik 1/3 jest zaniedbywalnie mały. Rezystor rozładowujący ma duzo mniejszą rezystancję.
  • Pomocny post
    #6 7439187
    janbernat
    Poziom 38  
    Ciekawe gdzie jest podłączona masa przetwornika A/C...
  • REKLAMA
  • #7 7439205
    Czyzak
    Poziom 13  
    Jest podłączona. W układzie jest wszędzie ta sama masa i jest też podłączona do tego pinu obok Aref i Avcc
  • Pomocny post
    #8 7439226
    Konto nie istnieje
    Poziom 1  
  • #9 7441452
    Czyzak
    Poziom 13  
    Bo układ jest zasilany bateryjnie z tej samej baterii co ładowany jest kondensator. Do masy przetwornika podpiołem masę z baterii i pokazuje głupoty. Czy powinna tam być podpięty minus z kondensatora. Robi to róznicę ?

    Ok, wystarczyło podpiąć minus z kondensatora. Widać pierwszy projekt z przetwornikiem i już się dużo dowiedziałem. Dzięki!
  • #10 7442546
    janbernat
    Poziom 38  
    Te dolne przekaźniki/transoptory służą tylko do wpuszczania konstruktora w "maliny"
REKLAMA