[DIY] Mikroprocesorowy miernik pojemności
: sobota 15 gru 2012, 17:57
Witam serdecznie wszystkich forumowiczów.
Parę dni temu doszedł do mnie zamówiony zestaw do nauki programowania (http://and-tech.pl/produk-testowy/ )
Początkowo miałem w planach naukę w języku C niestety zakończyło się jak na razie Bascomem.
To co przedstawiam niżej jest prototypem do pomiaru pojemności akumulatorów Li- Po, Li-ion.
Schematu na razie nie przedstawiam- jest jeszcze parę rzeczy do zmiany (np. obciążenie aktywne nie działa jak powinno- wraz ze spadkiem napięcia prąd nie jest utrzymywany na stałym poziomie lecz powoli spada).
Na chwilę obecną pomiary różnią się o około 5-15% z pojemnością zmierzoną na fabrycznym sprzęcie u znajomego. Program jak już wspomniałem napisany jest w Bascomie pod procesor ATMEGA 32 (taki mam zainstalowany w zestawie).
Źródło poniżej:
No i kilka zdjęć podczas pracy:
Z góry proszę o jak najmniej słów krytyki
Parę dni temu doszedł do mnie zamówiony zestaw do nauki programowania (http://and-tech.pl/produk-testowy/ )
Początkowo miałem w planach naukę w języku C niestety zakończyło się jak na razie Bascomem.
To co przedstawiam niżej jest prototypem do pomiaru pojemności akumulatorów Li- Po, Li-ion.
Schematu na razie nie przedstawiam- jest jeszcze parę rzeczy do zmiany (np. obciążenie aktywne nie działa jak powinno- wraz ze spadkiem napięcia prąd nie jest utrzymywany na stałym poziomie lecz powoli spada).
Na chwilę obecną pomiary różnią się o około 5-15% z pojemnością zmierzoną na fabrycznym sprzęcie u znajomego. Program jak już wspomniałem napisany jest w Bascomie pod procesor ATMEGA 32 (taki mam zainstalowany w zestawie).
Źródło poniżej:
Kod: Zaznacz cały
$regfile = "m32def.dat"
$crystal = 16000000
Config Lcdpin = Pin , Rs = Portc.2 , E = Portc.3 , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7
Config Lcd = 16 * 2
Cls
Cursor Off Noblink
'konfiguracja wyświetlacza Lcd
Config Porta = Input
Config Adc = Single , Prescaler = Auto , Reference = Off
Const Vref = 2.35
'konfiguracja przetwornika ADC
Config Pind.6 = Output 'załączenie obciążenia
Config Pind.7 = Output 'buzzer
Config Pind.2 = Input
Set Portd.2
'na wejściu INT0 także włączamy podciąganie i konfigurujemy pin jako wejście
'pin D.2 jest połączony z wyjściem układu pcf8583 który generuje przerwanie co 1s
'jest to wzorzec czasu
Enable Interrupts
Config Int0 = Falling
'włączamy globalny system przerwań - bez tego żadne przerwanie nie zadziała
'przerwanie powstanie przy zboczu opadającym
Enable Int0
'włączamy przerwanie INT0 (PD2) - przerwanie jest aktywne w stanie niskim (pin jest wejściem)
On Int0 Przerwanie
'definiujemy działanie po wykryciu przerwania INT0 - skok do podprogramu Przerwanie
Dim W As Word , U As Single , J As Single , S As String * 11 ,
Dim L As Single
'Deklaracja Zmiennych
Lcd "Miernik poj." 'powitanie
Lowerline
Lcd "ver 1.0"
Wait 1
Cls
Glowny:
Set Portd.6
Set Portd.7
Waitms 100
Reset Portd.7
L = 0
W = 0
U = 0
Do
Cls
Lcd "U1: 0.00 V" 'wartosci stale na wyswietlaczu
Lowerline
Lcd "I: 0.00 A"
W = Getadc(0) 'pomiar napięcia po dzielniku napięcia 1:2
U = W
U = U / 1023
U = U * Vref
U = U * 2
S = Fusing(u , "#.##")
Locate 1 , 5
Lcd S
If U <= 2.8 Then Gosub Koniec;
W = 0
W = Getadc(1) 'pomiar prądu poprzez pomiar spadku napięcia na rezystorze
J = W
J = J / 1023
J = J * Vref
J = J / 2.2
S = Fusing(j , "#.##")
Locate 2 , 4
Lcd S
Wait 1
Loop
End
Przerwanie:
Incr L
Return
Koniec:
If U > 2.8 Then Goto Glowny;
Reset Portd.6
Set Portd.7
Waitms 100
Reset Portd.7
Cls
L = L / 3600
S = Fusing(l , "##.##")
Lcd "pojemnosc:"
Locate 1 , 11
Lcd S
Do
Loop
Return
No i kilka zdjęć podczas pracy:
Z góry proszę o jak najmniej słów krytyki