Hallo Onki,
mit Strommessung habe ich keine praktische Erfahrung, ich habe in meine Turbinen-Telemetrie jedoch eine Integrationsfunktion der Spritpumpenspannung eingebaut, die den verbrauchten Treibstoff messen soll. Das Ganze ist noch nicht ausreichend in der Praxis getestet, ich sage Dir trotzdem mal, wie ich es gemacht habe:
1. In der Hauptschleife des Arduino versuchst Du so viele Analog-Messwerte (des Stroms) wie möglich zu bekommen. Je weniger CPU Deine anderen Programmteile (z.B. die Telemetrieübertragung) verbrauchen, desto mehr Messwerte wirst Du bekommen (natürlich limitiert durch die Konvertierungsrate des ADC). Über die so ermittelten Messwerte bildest Du später ein arithmetisches Mittel. D.h. Du summierst sie auf und zählst wie viele es sind. Mit dieser Methode versuchst Du "Spitzen" im Stromfluss zu erwischen. Die ACS7xx-Sensoren haben eine Filterfunktion, die den Messwert bereits ein wenig integrieren und so hast Du gute Chancen das Signal ausreichend abzutasten. Der Arduino-Wandler hat ein eingebautes Sample&Hold-Glied, so dass auch hier der Theorie genüge getan wird (Messsignal muss während des Konvertierungsvorgangs konstant bleiben --> Wandlerverfahren sukkzessive Approximation).
2. Nun musst Du über eine genau definierte Zeit messen. Bei der Turbinentelemetrie mache ich das über 5 Sekunden. Bei der Strommessung würde ich ein 1-2 Sekunden als Messintervall wählen. Über den "millis()"-Timer verzweigst Du in der Main-Loop nach z.B. einer Sekunde in die "Integrierfunktion". Dort bildest Du das arithmetische Mittel über Deine Samples aus Punkt1 (Summe durch Anzahl Werte). Dann hast Du die verbrauchte Kapazität in der letzten Sekunde ("Ampere-Sekunde"). Diese Werte summierst Du einfach auf (und konvertierst sie bei der Anzeige in mAh -> 1 mAh = 3.6 As).
3. Zurücksetzen der aufsummierten Kapazitätswerte:
Wenn Du Deinen Stromsensor über den Antriebsakku versorgst, fängst Du einfach nach dem Anstecken des Akkus neu an zu zählen (von 0 an). Ich bin skeptisch, dass Du es schaffst, dass die Messung den Akkuwechsel übersteht (das IISI-Cockpit merkst sich die Kapazität im Anzeigemodul, das gewöhnlich nicht ausgeschaltet wird). Du kannst natürlich die Kapazität nach jeder Messung in das EEPROM schreiben. Aber das kostet Zeit (bzw. erhöht die Latenz für das Sampling) und das EEPROM verträgt nicht unendlich viele Schreibvorgänge. Das Zurückschreiben beim "Power-Down" dürfte ebenfalls nicht so easy sein (großer Elko hinter Diode an den Arduino und messen, wann der Antriebsakku abgesteckt wird und hoffen, dass der Elko den Arduino so lange am Leben erhält, dass noch geschrieben werden kann ?).
Wenn der Stromsensor nicht vom Antriebsakku versorgt wird, misst Du einfach die Akkuspannung und wenn sie einen gewissen Wert überschreitet, setzt Du den Summenzähler zurück.
Leider habe ich dafür keinen fertigen Beispiel-Code. Meine Turbinentelemetrie ist auch kein gutes Beispiel, da die Spannungsintegration mit dem restlichen Code recht "verwoben" ist. Vielleicht hilft es Dir trotzdem.
Grüße
Bernd
PS: Stromsensoren mit I2C scheinen Exoten zu sein (ACS764). Die ACS7xx-Sensoren scheinen aber ansonsten ganz gut zur Aufgabenstellung zu passen. In den Sensoren des IISI-Cockpits sind sie auch verbaut (ACS758 im TXE 150).
mit Strommessung habe ich keine praktische Erfahrung, ich habe in meine Turbinen-Telemetrie jedoch eine Integrationsfunktion der Spritpumpenspannung eingebaut, die den verbrauchten Treibstoff messen soll. Das Ganze ist noch nicht ausreichend in der Praxis getestet, ich sage Dir trotzdem mal, wie ich es gemacht habe:
1. In der Hauptschleife des Arduino versuchst Du so viele Analog-Messwerte (des Stroms) wie möglich zu bekommen. Je weniger CPU Deine anderen Programmteile (z.B. die Telemetrieübertragung) verbrauchen, desto mehr Messwerte wirst Du bekommen (natürlich limitiert durch die Konvertierungsrate des ADC). Über die so ermittelten Messwerte bildest Du später ein arithmetisches Mittel. D.h. Du summierst sie auf und zählst wie viele es sind. Mit dieser Methode versuchst Du "Spitzen" im Stromfluss zu erwischen. Die ACS7xx-Sensoren haben eine Filterfunktion, die den Messwert bereits ein wenig integrieren und so hast Du gute Chancen das Signal ausreichend abzutasten. Der Arduino-Wandler hat ein eingebautes Sample&Hold-Glied, so dass auch hier der Theorie genüge getan wird (Messsignal muss während des Konvertierungsvorgangs konstant bleiben --> Wandlerverfahren sukkzessive Approximation).
2. Nun musst Du über eine genau definierte Zeit messen. Bei der Turbinentelemetrie mache ich das über 5 Sekunden. Bei der Strommessung würde ich ein 1-2 Sekunden als Messintervall wählen. Über den "millis()"-Timer verzweigst Du in der Main-Loop nach z.B. einer Sekunde in die "Integrierfunktion". Dort bildest Du das arithmetische Mittel über Deine Samples aus Punkt1 (Summe durch Anzahl Werte). Dann hast Du die verbrauchte Kapazität in der letzten Sekunde ("Ampere-Sekunde"). Diese Werte summierst Du einfach auf (und konvertierst sie bei der Anzeige in mAh -> 1 mAh = 3.6 As).
3. Zurücksetzen der aufsummierten Kapazitätswerte:
Wenn Du Deinen Stromsensor über den Antriebsakku versorgst, fängst Du einfach nach dem Anstecken des Akkus neu an zu zählen (von 0 an). Ich bin skeptisch, dass Du es schaffst, dass die Messung den Akkuwechsel übersteht (das IISI-Cockpit merkst sich die Kapazität im Anzeigemodul, das gewöhnlich nicht ausgeschaltet wird). Du kannst natürlich die Kapazität nach jeder Messung in das EEPROM schreiben. Aber das kostet Zeit (bzw. erhöht die Latenz für das Sampling) und das EEPROM verträgt nicht unendlich viele Schreibvorgänge. Das Zurückschreiben beim "Power-Down" dürfte ebenfalls nicht so easy sein (großer Elko hinter Diode an den Arduino und messen, wann der Antriebsakku abgesteckt wird und hoffen, dass der Elko den Arduino so lange am Leben erhält, dass noch geschrieben werden kann ?).
Wenn der Stromsensor nicht vom Antriebsakku versorgt wird, misst Du einfach die Akkuspannung und wenn sie einen gewissen Wert überschreitet, setzt Du den Summenzähler zurück.
Leider habe ich dafür keinen fertigen Beispiel-Code. Meine Turbinentelemetrie ist auch kein gutes Beispiel, da die Spannungsintegration mit dem restlichen Code recht "verwoben" ist. Vielleicht hilft es Dir trotzdem.
Grüße
Bernd
PS: Stromsensoren mit I2C scheinen Exoten zu sein (ACS764). Die ACS7xx-Sensoren scheinen aber ansonsten ganz gut zur Aufgabenstellung zu passen. In den Sensoren des IISI-Cockpits sind sie auch verbaut (ACS758 im TXE 150).