PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Kapazitätsanzeige bzw Ah Anzeige programmieren



corado
02.06.2008, 12:21
Hallo,
ich will mir für die Überwachung eine größeren Akkus Systems (48V 100A)
eine Kapazitätsanzegie bauen ( mit Mega8).
Die Hardware steht schon, aber ich bekomme die Programmierung nicht hin.

Diese Antwort aus einem anderen Forum ist zwar logisch, aber wie um alles in der Welt setze ich das um?
Das problem ist halt, das die Zahlen recht groß und unhandlich werden und ich somit ständig Probleme mit den Einheiten und variablentypen habe.

"Welche Rechnung ? die Amperestunden ? Das ist der Aufsummierte Wert * Irgendwas. Nehmen wir an, ein ADC Wert von 1024 entspricht A [Ampere] und wird addieren alle 10ms. Dann entspricht das A *(1/1024)*(1/100)*(1/3600) Amperestunden, pro Eintrag. Das Irgendwas ist demnach (1/1024)*(1/100)*(1/3600) Amperestunden. "

Ich nutze zwar Turbo Pascal aber ein Beispiel in einer anderen Sprache würde mir sicher auch weiterhelfen

for_ro
02.06.2008, 19:05
Also ich würde wenn irgend möglich mit ganzen Zahlen rechnen.
Wenn ich deine Angaben richtig verstanden habe, dann heisst das doch, dass wenn du eine Stunde lang immer den vollen Ausschlag aufsummieren würdest, etwa ein Wert von 368.000.000 kommen würde.
Eine Long variable kann bis zu 2.147.483.647, also etwa 6 Stunden, bevor sie überläuft. Reicht das? Welchem Strom entspricht der Wert 1023?
Die Anzeige ist dann Spielerei. Wichtiger ist, wie du mitteln willst, oder willst du die geleisteten Amperestunden seit der letzten Ladung anzeigen?
...größeren Akkus Systems (48V 100A) du meinst doch bestimmt 100Ah, oder?

Gruß

Rolf

repi64
02.06.2008, 22:11
Ich habe da so eine Akkuanzeige von C. Die war recht simpel aufgebaut.
Shunt > Spg/Freq Wandler IC (meine AD654) > Zähler IC als Teiler > Kleines LCD Schritzählermodul > fertig.
Wenn du so einen externen U/F Wandler nimmst, ist der rest sehr simpel.
Impulse zählen und ins Verhältnis zu Ah oder mAh bringen.
Möchtest du nur die entnommene Kapazität oder auch die hinzugefügte Kapazität ermitteln (Auf / Ab zählen beim Laden / Entladen).

Brauchst ja nicht mit einer Variabel hinkommen. Wenn die eine "Voll" ist kannste die nächste incrementieren und bei der ersten wieder bei 0 anfangen.

JensB
04.06.2008, 22:08
Hallo Corado,

warscheinlich bist du CITYEL Fahrer wie ich, ich habe das Ding schon soweit fertig, also meld Dich.

Gruß

Jens

sehreilig
05.06.2008, 22:22
Hallo,
ich weiss nicht, ob du schon weitergekommen bist. Ich hab mir noch mal deinen Ansatz angesehen, der scheint mir (fast) ok.
Ich präzisiere ihn an einigen Stellen, kann sein, du hast das auch schon so gesehen.:
" Nehmen wir an, ein ADC Wert von 1024 entspricht 1 A [Ampere] und wird alle 10ms gemessen. Dann entspricht der ADC-Wert*(1/1024)*(1/100)*(1/3600) dem Ergebnis in Amperestunden pro Einzelmessung. Diese Einzelmessungen müssen mit jeder neuen Messung aufaddiert werden. Das Ergebnis ist ist dann die Ladung in Ah über den gemessenen Zeitraum "

Ich nehme an, das Programmieren ist nicht das Problem für dich.
Grüße von Jens

JensB
12.07.2008, 19:12
Hallo, die Messung ist soweit fertig.
Meine Aufmerksamkeit gilt nun der Übertragung der Strom und Spannungswerte via RS232. Da die RS232 nur 8 Bit übertragen kann, ich aber einen 10 Bit AD Wert habe, frage ich mich, wie ich diesen am komfortabelsten versende. Ich könnte den AD Wandler nu parametrieren (auf 8 Bit), aber ich will die Messung genauer haben. Da ja 2 Bit eigentlich nur Rauschen sind wäre die Auflösung ja nur noch 6Bit effektiv, das ist mir zu wenig.

Hat jemand einen Lösungsansatz?

Gruß

Jens

repi64
12.07.2008, 22:06
Was haben die 8 Datenbit der RS232 Schnittstelle mit deiner Messwerterfassung zu tun?
Überhaupt nichts!
Über 232 kannst du Strings, Integer oder was auch immer übertragen und das in beliebiger Länge.
Es ist nur wichtig für die beiden Seriellen Teilnehmer zu wissen, das nach dem Startbit nun 8 (oder 7 oder 6..) Datenbit folgen und im Anschluß die Übertragung durch ein (oder 1,5 oder 2) Stopbit abgeschlossen wird.
Wie oft das daraufhin wiederholt wird, hängt von der zu übertragenden Datenmenge ab.

wkrug
13.07.2008, 10:59
Zur seriellen Datenübertragung:

Beim Openformat von LogView wurde das so gemacht.

Es kommt ein Framekenner = $
danach folgt der gewünschte Kanal = 1
danach der Modus = 1
darauf folgt ein Zeitstempel = 123
nun werden nacheinander die gewünschten Messwerte übertragen: 245,43211,...
Dann wird noch eine Prüfsumme gebildet 00
Jetzt noch ein <CR><LF> als Endekenner für den Datensatz = <CR><LF>

So ein Frame sieht also dann so aus:

$1,1,123,245,43211,......,00<CR><LF>

Alle Zeichen werden als ASCII Codes übertragen und sind somit mit einem Terminalprogramm dierkt lesbar.
Wenn Du dieses Format übernimmst kannst Du für die Auswertung deiner Daten das Programm "LogView" ( http://www.logview.info ) verwenden, dazu muss nur eine .ini Datei auf deine Messwerte angepasst werden.
Für die Kapazitätsanzeige würde ich die aufsummierten Kapazitätsmesswerte übertragen - aber das musst Du selber entscheiden.

JensB
18.07.2008, 00:41
Also meine Daten, die ich loggen will sind Strings mit 10 Stellen.
Ich wußte nicht, ob der Bascom Compiler dazu in der Lage ist Daten, die größer sind als ein Byte direkt auf die RS zu legen. Ich dachte, man müßte hier "manipulieren" und die Bits eines Strings byteweise auf die Schnittstelle legen, aber gut, wenn Bascom das kann....danke Repi.

Ich möchte nicht die Kapazitätswerte, sondern Strom, Spannung und Zeit loggen und dann als Entladekennlinie z.B. in Excel oder direkt in einem eigens kreierten VB Programm darstellen etc.

Mein Strom und Spannungswert sin dabei Strings(10 stellig).
Ich müßte jetzt nur noch wissen, wie das mit den MSComControls in VB läuft, aber das gehört warscheinlich in einen anderen Thread.


Danke erstmal

Gruß

Jens