Forum

Einloggen | Registrieren | RSS  

D.T.Schneiderlein(R)

07.12.2018,
16:14
 

Sketch für LTC2946 Power Monitor, ATMega 328, HM-10 BLE (Elektronik)

Hallo Leute,
ich steh mal wieder voll auf dem Schlauch und hoffe, dass mir hier jemand helfen kann.
Ich steuere einen LTC2946 Power Monitor über einen ATMega 328 an, der dann Infos über ein HM-10 BLE-Modul an ein Android Gerät weitergibt.
Das funktioniert soweit auch aber leider stoße ich beim ansprechen des LTC2946 über den Arduino Sketch an meine Grenzen. Folgende Fragen:
1. Kann der LTC2946 die Zeit und die Arbeit speichern und beim nächsten Start wieder abrufen und weiter zählen?
2. Wie kann ich die Zähler für Zeit und Arbeit im Sketch zurücksetzen? Ich habe dazu den LT Support bemüht, bin jetzt aber auch nicht viel schlauer, weil ich die Antwort nicht wirklich verstehe. Ich bräuchte so einen Codeschnipsel, damit ich da weiter komme. Eigentlich sollte das doch gelöscht werden, wenn ich folgendes in den Sketch schreibe:

CTRLB = CTRLB & LTC2946_CTRLB_RESET_MASK;
CTRLB = CTRLB | LTC2946_RESET_ALL;

Das klappt aber nicht... Hier mal noch die Antwort vom Support:

https://ez.analog.com/energy-metering/f/q-a/104764/ltc2946-reset-timer-and-energy-counter/310661#310661

bastelix(R)

10.12.2018,
23:11

@ D.T.Schneiderlein

Sketch für LTC2946 Power Monitor, ATMega 328, HM-10 BLE

Hallo,
» 1. Kann der LTC2946 die Zeit und die Arbeit speichern und beim nächsten
» Start wieder abrufen und weiter zählen?
Vorab, ich hab das Datenblatt ( https://www.analog.com/media/en/technical-documentation/data-sheets/2946fa.pdf ) nur überflogen.
Wenn du mit "beim nächsten Start" den snapshot mode meinst, nein. "In snapshot mode, the POWER registers, time counters, charge and energy accumulators are not refreshed." (Seite 14, linke Spalte).
Wenn du den shtudown mode meinst, dann ja: "All onboard registers retain their contents and can be accessed through the I2C interface." (Seite 17, linke Spalte).

» 2. Wie kann ich die Zähler für Zeit und Arbeit im Sketch zurücksetzen? Ich
» habe dazu den LT Support bemüht, bin jetzt aber auch nicht viel schlauer,
» weil ich die Antwort nicht wirklich verstehe. Ich bräuchte so einen
» Codeschnipsel, damit ich da weiter komme.
Kannst du mal das komplette Sketch posten oder die Quelle verlinken? Irgendwie bekomme ich CTRLB mit Arduino und ATMega328 gard nicht zusammen.

D.T.Schneiderlein(R)

19.12.2018,
15:28

@ bastelix

Sketch für LTC2946 Power Monitor, ATMega 328, HM-10 BLE

Ups, ich hatte gar nicht gesehen, dass hier doch noch jemand geantwortet hat. Vielen Dank.
Inzwischen konnte ichdas Problem lösen. Der ATmega speichert die Werte regelmäßig im EEprom (ich weiß schon 100000 Schuss dann Schluss) und das CTRLB Register kann ich dank eines neu veröffentlichen, funktionierenderen Sketch von LT auch im laufenden Betrieb löschen.

Inzwischen stehe ich aber vor einem anderen Problem. Laut Datenblatt kann der LTC die Messwerte selbst glätten (Datenblatt Seite 13 - Zeichnung). Nur wie bekomme ich ihn dazu. Ich nehme stark an, dass das irgendwo in der Arduino Bibliothek steht...nur wo? Kannst Du da vielleicht nochmal weiterhelfen? Ich habe die Bibliothek mal angehängt.

https://www.elektronik-kompendium.de/forum/upload/20181219152832.h

bastelix(R)

26.12.2018,
01:21

@ D.T.Schneiderlein

Sketch für LTC2946 Power Monitor, ATMega 328, HM-10 BLE

» Ups, ich hatte gar nicht gesehen, dass hier doch noch jemand geantwortet
» hat. Vielen Dank.
Naja, vor den Feiertagen habe ich nicht gerade viel Zeit für meine Hobbies ;)

» https://www.elektronik-kompendium.de/forum/upload/20181219152832.h
Das ist nur die Header-Datei, damit kann ich nicht wirklich etwas anfangen. Ich brauche den kompletten Code der Bibliotheken und deines Sketches damit ich nachvollziehen kann was der µC macht bzw. machen soll. Mir reichen auch Links zu den jeweiligen Source-Repositories für die Bibliotheken.

D.T.Schneiderlein(R)

07.01.2019,
08:57

@ bastelix

Sketch für LTC2946 Power Monitor, ATMega 328, HM-10 BLE

Das ist der komplette Sketch mit den zusätzlichen Bibliotheken. Über den Sketch einen Mittelwert zu errechnen, klappt leider nicht, weil der LTC zu lange braucht um alle Messergebnisse rauszurücken. Die Mittelwertbildung muss der LTC also selbst machen. Die Frage ist, wie ich ihn dazu bewegen kann...

Wenn ich an einem ohmschen Verbraucher messe, gibt es keinerlei Schwierigkeiten. Prombleme gibt es z.B. wenn ich einen Wechselrichter anschließe und an der Eingangsseite die Leistung messe. Dann geht die Leistung innerhab einer Minute langsam mal 15% hoch und wieder runter. Das selbe Problem hatte ich schon einmal beim Messen mit einem Microcontroller und konnte dann mit über 100 Messungen und Mittelwertbildung eine Besserung erzielen. Das hat wohl mit dem Nyquist-Shannon-Abtasttheorem zu tun.

https://www.elektronik-kompendium.de/forum/upload/20190107085727.zip

bastelix(R)

07.01.2019,
21:38

@ D.T.Schneiderlein

Sketch für LTC2946 Power Monitor, ATMega 328, HM-10 BLE

» Das ist der komplette Sketch mit den zusätzlichen Bibliotheken. Über den
» Sketch einen Mittelwert zu errechnen, klappt leider nicht, weil der LTC zu
» lange braucht um alle Messergebnisse rauszurücken. Die Mittelwertbildung
» muss der LTC also selbst machen. Die Frage ist, wie ich ihn dazu bewegen
» kann...

Ich interpretiere das Diagramm (2d) etwas anders. Ich würde sagen, dass zeigt wie ein einzelner Messvorgang, der sieben Taktzyklen benötigt, vor sich geht. Wenn ich das richtig verstehe, geht es darum Störungen bei den Messungen für einen Messwert zu minimieren. Vgl. Seite 12, rechte Spalte, letzter Absatz:
"The timing diagram shown in Figure 2d illustrates the
sequence in which the power and accumulator data are
generated following conversions in the default configura-
tion. At t1, the ADC has just finished a conversion of the
current (ΔSENSE) signal...."

In der Standardeinstellung wird auch bei jeder Messung ein Kalibrierung vorgenommen, das kannst du ändern indem du beim Zusammensetzen von CTRLA einen anderen Parameter für LTC2946_OFFSET_CAL_EVERY verwendest. (Zeile 327 in PowerboxWriter.ino) Mögliche Werte sind LTC2946_OFFSET_CAL_LAST, LTC2946_OFFSET_CAL_128, LTC2946_OFFSET_CAL_16, LTC2946_OFFSET_CAL_EVERY (Ab Zeile 357 in der LTC2946.h, leider steht nicht dabei was LTC2946_OFFSET_CAL_LAST bedeutet, die anderen sind eigentlich selbsterklärend: Alle 128 bzw. 16 bzw. jede Messung kalibrieren).

Auf Seite 13, rechte Spalte steht noch etwas zum Mittelwert: "At 16.395ms per count it will keep counts up to 2.23 years (see Table 15). Dividing the energy/charge by the time in the timer will yield the average power/current over the time interval in the timer.)"

Interpretiere ich so, dass du den Mittelwert über die Zeit berechnen kannst wenn du den Wert aus dem Time-Register verwendest. Genauer habe ich das bis jetzt nicht nachvollzogen.

» Wenn ich an einem ohmschen Verbraucher messe, gibt es keinerlei
» Schwierigkeiten. Prombleme gibt es z.B. wenn ich einen Wechselrichter
» anschließe und an der Eingangsseite die Leistung messe. Dann geht die
» Leistung innerhab einer Minute langsam mal 15% hoch und wieder runter.
» Das selbe Problem hatte ich schon einmal beim Messen mit einem Microcontroller
» und konnte dann mit über 100 Messungen und Mittelwertbildung eine Besserung
» erzielen. Das hat wohl mit dem Nyquist-Shannon-Abtasttheorem zu tun.
Ich denke ja. Eine nicht-linearen Leistungsaufnahme des Verbrauchers führt, sofern die Frequenz der Laständerung > Frequenz der Messungen ist, dafür, dass du immer einen anderen Punkt auf der Kurve des Verbrauchers ausliest und somit die Messwerte relativ stark schwanken. (Ist das halbwegs verständlich formuliert?)

Nochmal zurück zu:
» Über den Sketch einen Mittelwert zu errechnen, klappt leider nicht, weil der LTC zu lange braucht um alle Messergebnisse rauszurücken.
Das sollte eigentlich schon klappen, du musst halt erst alle benötigten Messwerte vom LTC auslesen und dann die Berechnung durchführen. Oder willst du die Messwerte in Echtzeit weiterleiten?

D.T.Schneiderlein(R)

10.01.2019,
15:55

@ bastelix

Sketch für LTC2946 Power Monitor, ATMega 328, HM-10 BLE

» Ich interpretiere das Diagramm (2d) etwas anders. Ich würde sagen, dass
» zeigt wie ein einzelner Messvorgang, der sieben Taktzyklen benötigt, vor
» sich geht. Wenn ich das richtig verstehe, geht es darum Störungen bei den
» Messungen für einen Messwert zu minimieren. Vgl. Seite 12, rechte Spalte,
» letzter Absatz:
» "The timing diagram shown in Figure 2d illustrates the
» sequence in which the power and accumulator data are
» generated following conversions in the default configura-
» tion. At t1, the ADC has just finished a conversion of the
» current (ΔSENSE) signal...."
»
» In der Standardeinstellung wird auch bei jeder Messung ein Kalibrierung
» vorgenommen, das kannst du ändern indem du beim Zusammensetzen von CTRLA
» einen anderen Parameter für LTC2946_OFFSET_CAL_EVERY verwendest. (Zeile 327
» in PowerboxWriter.ino) Mögliche Werte sind LTC2946_OFFSET_CAL_LAST,
» LTC2946_OFFSET_CAL_128, LTC2946_OFFSET_CAL_16, LTC2946_OFFSET_CAL_EVERY (Ab
» Zeile 357 in der LTC2946.h, leider steht nicht dabei was
» LTC2946_OFFSET_CAL_LAST bedeutet, die anderen sind eigentlich
» selbsterklärend: Alle 128 bzw. 16 bzw. jede Messung kalibrieren).

Okay, dann steht cal also nicht für caculate sondern für calibrate. Macht Sinn. :-)

»
» Auf Seite 13, rechte Spalte steht noch etwas zum Mittelwert: "At 16.395ms
» per count it will keep counts up to 2.23 years (see Table 15). Dividing the
» energy/charge by the time in the timer will yield the average power/current
» over the time interval in the timer.)"
»
» Interpretiere ich so, dass du den Mittelwert über die Zeit berechnen kannst
» wenn du den Wert aus dem Time-Register verwendest. Genauer habe ich das bis
» jetzt nicht nachvollzogen.
Das bezieht sich wahrscheinlich auf die Berechnung der Arbeit (kWh).
» » Wenn ich an einem ohmschen Verbraucher messe, gibt es keinerlei
» » Schwierigkeiten. Prombleme gibt es z.B. wenn ich einen Wechselrichter
» » anschließe und an der Eingangsseite die Leistung messe. Dann geht die
» » Leistung innerhab einer Minute langsam mal 15% hoch und wieder runter.
» » Das selbe Problem hatte ich schon einmal beim Messen mit einem
» Microcontroller
» » und konnte dann mit über 100 Messungen und Mittelwertbildung eine
» Besserung
» » erzielen. Das hat wohl mit dem Nyquist-Shannon-Abtasttheorem zu tun.
» Ich denke ja. Eine nicht-linearen Leistungsaufnahme des Verbrauchers führt,
» sofern die Frequenz der Laständerung > Frequenz der Messungen ist, dafür,
» dass du immer einen anderen Punkt auf der Kurve des Verbrauchers ausliest
» und somit die Messwerte relativ stark schwanken. (Ist das halbwegs
» verständlich formuliert?)

Ja, so sehe ich das auch. Ich bin mir bisher davon ausgegangen, dass es eine Möglichkeit gibt mit dem LTC selbst eine Glättung vorzunehmen. Da habe ich mich wohl getäuscht...

»
» Nochmal zurück zu:
» » Über den Sketch einen Mittelwert zu errechnen, klappt leider nicht, weil
» der LTC zu lange braucht um alle Messergebnisse rauszurücken.
» Das sollte eigentlich schon klappen, du musst halt erst alle benötigten
» Messwerte vom LTC auslesen und dann die Berechnung durchführen. Oder willst
» du die Messwerte in Echtzeit weiterleiten?

Im Datenblatt steht ja, dass eine Messung inkl. Kalibrierung max. 50ms dauert (2d Seite 13) Da wäre ich ja bei 100 Messungen schon bei 5 Sekunden. Ich konnte, wenn ich direkt mit dem microcontroller messe erst ab 100 Messungen ein deutlich besseres Ergebnis erzielen. Oder habe ich einen Denkfehler. Die Messwerte sollen tatsächlich live auf dem Smartphone angezeigt werden. Selbst wenn ich nur alle 128 Messungen kalibriere dauert eine Messung 16,4ms, also immer noch zu lange. Ich könnte höchstens mal testen was bei LAST passiert, wobei eben immer schwer nachvollziehbar ist, was der Microcontroller da gerade werkelt :-)

bastelix(R)

11.01.2019,
22:56

@ D.T.Schneiderlein

Sketch für LTC2946 Power Monitor, ATMega 328, HM-10 BLE

» Im Datenblatt steht ja, dass eine Messung inkl. Kalibrierung max. 50ms
» dauert (2d Seite 13)
Ich lese des eher so, dass es 114,5ms bis ein neuer Messwert im Register steht. (t1 - t8, da sich erst bei t8 NEW POWER/NEW CURRENT ändern).

» Die Messwerte sollen tatsächlich live auf dem Smartphone
» angezeigt werden.
Ufff.... Neben der Messung braucht auch das übertragen der Daten via I2C (die Bandbreite ist da i.d.R. nicht so dicke und die Werte sind recht groß) und weiter via Bluetooth zum Smartphone etwas Zeit (von der Verarbeitung auf dem Multithreaded-Smarphone-OS ganz zu schweigen).

Ist das nur zum anzeigen des aktuellen Verbrauchst, oder willst du da noch mehr machen?

Eine Möglichkeit wäre alle 100ms zu Messen und den Mittelwert aus den letzten 100 Messungen (kumulativ) zu berechnen. Das kannst auf dem Arduino oder dem Smartphone machen. Oder du fragst in kürzeren Zeitabständen die Min/Max-Register ab (da steht was im Datenblatt auf Seite 18 "Storing Minimum and Maximum Values" und berechnest daraus den Mittelwert. Das wird dann halt wesentlich ungenauer. Super-Schnell und sehr Genau wirst du mit dem Aufbau vermutlich nicht bekommen.