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?
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.
Suche mal nach lipowächter bei eBay. Vielleicht ist da schon was passendes dabei.
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 |
Wolfgang schrieb: > und das vermute ich mal > auf Grund des Unterforums ups, falsches Unterforum :) möchte das ganze analog aufbauen.
Aber das ganze mit einem uC zu realisieren ist auch interessant. Danke für die Idee.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.