Forum: Mikrocontroller und Digitale Elektronik LED Ladestandsanzeige


von Edgar (Gast)


Lesenswert?

Hallo,

ich hänge bei der Planung einer Schaltung fest.

Ich möchte für einen 6S LiPo Akku eine Ladestandsanzeige bauen. Im 
Grunde soll diese Schaltung die selbe Funktion wie der LM3914 haben, 
jedoch sollen die LEDs nicht in linearen Schritten angesteuert werden, 
sondern der Entladekurve einer LiPo angepasst.

Wie kann ich das realisieren?

von Wolfgang (Gast)


Lesenswert?

Edgar schrieb:
> Wie kann ich das realisieren?

Mit einem passenden ausgelegten Spannungsteiler für die Vergleichswerte 
der Komparatorstufen, jedenfalls wenn du es analog aufbauen möchtest.

Falls du lieber einen µC verwenden möchtest - und das vermute ich mal 
auf Grund des Unterforums, in dem du deine Frage stellst - nimmst du 
einen µC mit ADC und kannst mit dem Messwert dann eine Tabelle mit den 
Schwellwerten abklappern, die du vorher hinterlegt hast.

von ek13 (Gast)


Lesenswert?

Suche mal nach lipowächter bei eBay. Vielleicht ist da schon was 
passendes dabei.

von akku (Gast)


Lesenswert?

Ich hab sowas mal für nen Tiny13 gemacht:

Der Spannungsteiler für den Analogeingang war so dimensioniert das bei 
Randvollem Akku 5V (AREF=5V) am Eingang erreicht werden. Aber das kann 
ja jeder für sich anders machen.
1
;
2
; Li-Ion Akku Ladestandanzeige für ATTiny13.
3
; 5 LED Anzeige inkl. Unterspannungswarnung.
4
; 07/2016 Björn Wieck
5
;
6
7
.include "tn13def.inc"
8
9
.def temp  = r16
10
.def temp1 = r17
11
.def temp2 = r18
12
.def AIn = r19
13
14
15
; FUSE CLK/8 setzen!!
16
17
;LED1=PB0, LED2=PB1, LED3=PB2, LED4=PB3, LED5=PB4; Analog-In=PB5
18
19
.org 0x0000
20
21
    rjmp    init      ;Reset
22
23
24
init:
25
    ldi  temp, LOW(RAMEND)  ;Stackpointer initialisieren
26
    out   SPL, temp
27
     ldi  temp, 0b00011111  ;PortB 0-4 auf Ausgang
28
    out  DDRB, temp
29
    ldi  temp, 0b00011111  ;Alle LEDs Ausschalten
30
    out  PORTB, temp
31
32
    ;ADC einrichten
33
    ldi  temp, (1<<ADLAR) | (0<<REFS0) | (0<<MUX1) | (0<<MUX0)  ;Auflösung 8-Bit, REF=Vcc, Kanal 0
34
    out  ADMUX, temp
35
    ldi   temp, (1<<ADEN) | (1<<ADSC) | (1<<ADATE) | (1<<ADPS2) | (1<<ADPS1)  ;AD-Wandler einschalten, Freilaufend
36
    out  ADCSRA, temp
37
    ldi  temp, 0
38
    out  ADCSRB, temp
39
40
Start:
41
    rcall  GetADC      ;Spannung messen
42
    cpi  AIn, 215    ;Wenn Unterspannung dann LED 1 Blinken lassen
43
    brlo  Blink
44
    cpi  AIn, 247    ;Akku 80-100%
45
    brsh  LED5
46
    cpi  AIN, 239    ;Akku 60-80%
47
    brsh  LED4
48
    cpi  AIn, 229    ;Akku 40-60%
49
    brsh  LED3
50
    cpi  AIn, 223    ;Akku 20-40%
51
    brsh  LED2
52
    cpi  AIn, 215    ;Akku 0-20%
53
    brsh  LED1
54
    rjmp  Start
55
56
57
LED5:  ldi  temp, 0b00000000    ;LED 1-5 einschalten
58
    out  PORTB, temp
59
    rjmp  Start
60
61
LED4:  ldi  temp, 0b00010000    ;LED 1-4 einschalten
62
    out  PORTB, temp
63
    rjmp  Start
64
65
LED3:  ldi  temp, 0b00011000    ;LED 1-3 einschalten
66
    out  PORTB, temp
67
    rjmp  Start
68
69
LED2:  ldi  temp, 0b00011100    ;LED 1-2 einschalten
70
    out  PORTB, temp
71
    rjmp  Start
72
73
LED1:  ldi  temp, 0b00011110    ;LED1 einschalten
74
    out  PORTB, temp
75
    rjmp  Start
76
77
Blink:  ldi  temp, 0b00011110    ;LED 1 blinkt
78
    out  PORTB, temp
79
    rcall  Wait
80
    ldi  temp, 0b00011111
81
    out  PORTB, temp
82
    rcall  Wait
83
    rjmp  Start
84
85
Wait:          ; Warteschleife für ca. 200 Millisekunden --> wenns flackert dann CLK/8 vergessen ;)
86
    ldi  temp1, 255
87
    ldi  temp2, 128
88
wl1:  dec  temp1
89
    brne  wl1
90
    dec  temp2
91
    brne  wl1
92
    ret
93
94
GetADC:    sbi  ADCSRA, ADIF      ;logisch "1" löscht ADIF flag !
95
adwait1:                     ;Erster Wert ignorieren, da meist Ungenau
96
    sbis  ADCSRA, ADIF
97
    rjmp  adwait1
98
    sbi  ADCSRA, ADIF    ;logisch "1" löscht ADIF flag !, nochmal
99
adwait2:              ;neuen ADC-Wert lesen
100
    sbis  ADCSRA, ADIF 
101
    rjmp  adwait2
102
103
; Noch genauere Werte würden sich ergeben wenn der ADC mehrfach eingelesen wird, dessen Werte summiert und durch die Schleifendurchläufe geteilt wird.
104
; In dieser Anwendung ist das aber Unrelevant.
105
106
; ADC-Wert übernehmen
107
    in   AIn, ADCH
108
    ret

von Edgar (Gast)


Lesenswert?

Wolfgang schrieb:
> und das vermute ich mal
> auf Grund des Unterforums

ups, falsches Unterforum :)

möchte das ganze analog aufbauen.

von Edgar (Gast)


Lesenswert?

Aber das ganze mit einem uC zu realisieren ist auch interessant.
Danke für die Idee.

von akku (Gast)


Angehängte Dateien:

Lesenswert?

Analog geht natürlich auch. Hier ist ein Plan aus einer Anzeige eines 
Fahrradakku den ich mal aufgenommen habe.

Musst du halt für deine Gegebenheiten anpassen, hier R7 und R9

von Wolfgang (Gast)


Lesenswert?

Edgar schrieb:
> möchte das ganze analog aufbauen.

Dann bietet dir das Blockschaltbild vom LM3914 (S.8 im Datenblatt) doch 
schon mal einen Überblick über die zu realisierenden Funktionen. Mit 
4-fach Komparatoren hält sich der Aufwand noch in Grenzen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.