Gegenfrage: Was ist ein STMP32 ?
Und warum heisst die Funktion "stpm32..."? Wobei ich mit STPM32 auch
nichts anfangen kann.
Du meinst aber nicht STM32, oder?
Stefan U. schrieb:> Gegenfrage: Was ist ein STMP32 ?>> Und warum heisst die Funktion "stpm32..."?
Ja, dass war heute morgen ein Dreher.
STPM32x heißt der kleine.
Stefan U. schrieb:> Gegenfrage: Was ist ein STMP32 ?>> Und warum heisst die Funktion "stpm32..."? Wobei ich mit STPM32 auch> nichts anfangen kann.>> Du meinst aber nicht STM32, oder?
Nein, die heißen wirklich so. Das ist ein Energy Monitor via. SPI.
Jan H. schrieb:>> Du meinst aber nicht STM32, oder?>> Nein, die heißen wirklich so. Das ist ein Energy Monitor via. SPI.
Dann hätte man besser mal das Datenblatt verlinkt. Wir kennen den
nämlich nicht.
Jim M. schrieb:> Jan H. schrieb:> Du meinst aber nicht STM32, oder?>> Nein, die heißen wirklich so. Das ist ein Energy Monitor via. SPI.>> Dann hätte man besser mal das Datenblatt verlinkt. Wir kennen den> nämlich nicht.
Mist. Heute ist nicht mein Tag.
Hier der richtige Name und hier das Datenblatt.
http://www.st.com/en/data-converters/stpm32.html
Stefan U. schrieb:> Hast du Kapitel 8.6 gelesen, und dazu eventuell konkrete Fragen?
Habe ich gelesen. Hast du etwa oben im Code einen Fehler gefunden?
Moin,
habe mich seit den letzten Tagen weiter mit dem "STPM32" beschäftigt.
Lesen kann ich die Register ohne Probleme ( es weichen zwar einige von
ihren default Werten ab.. ).
Das schreiben klappt noch nicht.
Wenn ich das Register "0x24" lese, bekomme ich 0x4007 raus.
Das ist das " SPI / USART " Register. Dort ist auch das CRC Poly.
enthalten. Ändere ich irgendein Bit davon, wird es nicht übernommen.
Kann evtl. mal jemand auf meine " schreib " Routine schauen?
Hiermit baue ich das Kommando zusammen..
Interessanter Zufall, ich habe seit gestern auch einen STPM32 bzw das
EVALSTPM32 bei mir und kann nach anfänglichen Schwierigkeiten (im SPI
Modus starten) auch lesen.
Beim Schreiben werden die gesendeten Werte jedoch nicht übernommen.
Die Beispiele von ST sind leider wirklich sehr undurchsichtig, da diese
sehr allgemein gehalten sind um auch mit mehreren verschiedenen STPMs zu
laufen. Wirklich viel Code ist zum senden aber scheinbar eh nicht
notwendig. Siehe z.B. metrology_hal.c, ab Zeile 844, Funktionen
Metro_HAL_Stpm_write() und Metro_HAL_Stpm_read()
Aus deinem Programcode ist mir nicht ganz ersichtlich ob du die Daten
mit oder ohne CRC-Byte sendest. Das könntest du mal versuchen. Wenn
nämlich ein Datenpaket mit falschem oder fehlendem CRC Byte am STPM32
ankommt, liefert dieser beim nächstem Lesezugriff den Inhalt von
Register 0x00, nämlich 0x040000A0+CRC, soweit nicht geändert.
Mir ist zudem aufgefallen dass die Reihenfolge der MSB und LSB Bytes
beim Senden etwas gewöhnungsbedürftig ist und vermute hier noch einen
Fehler bei mir.
Jan H. schrieb:> Bist du bei Skype?
Leider nein, wieso?
Ich habe mein Problem aber mitlerweile gefunden, es lag an der
auskommentierten CRC Berechnung beim Senden von Daten. Das ist mir nicht
aufgefallen, da ich nur den CRC beim Empfangen ausgewertet und mit einer
LED ausgegeben habe...
Chris schrieb:> tx_data[AC_METRO_FRAME_LEN-1] = CalcCRC8(tx_data);
Dumme Frage.. Wieso bennent man alles mit "METRO"? Das habe ich auch
schon bei ST gesehen.
Jan H. schrieb:> Du hast es für einen STM32 geschrieben oder?
Ja, bei mir ist es ein STM32F072
Jan H. schrieb:> Dumme Frage.. Wieso bennent man alles mit "METRO"? Das habe ich auch> schon bei ST gesehen.
Das soll die Abkürzung für "Metrology" sein, also die Messschaltung
Ich habe aktuell ein weitere Problem mit dem STPM32. Das Beschreiben der
Konfiguration und Auslesen der Messwerte per SPI klappt. Die RMS
Spannung lässt sich ebenfalls auf den eingestellten Wert (=10 VAC RMS
durch Trenntrafo) ermitteln.
Der Strom von 100 mA (AC RMS), dessen roher ADC Wert im gleichen
Register wie die Spannung steht, springt jedoch extrem. Mal werden 85
mA, kurz darauf 4.5A und sogar fast 9A ausgegeben. Zu kleine Datentypen
oder Rundungsfehler kann ich ausschließen, da ich schon zum testen schon
auf Double umgestellt habe. Auch die 17 Bit des Wertes für den Strom
habe ich beachtet. Die Umstellung von Auto-Latching auf manuelles
Latching macht ebenfalls keinen Unterschied. Besonders seltsam ist das,
da RMS Spannung und Strom im gleichen Register 0x48 gespeichert sind und
gleichzeitig ausgelesen werden. Daher würde ich erwarten, dass auch der
Messwert der Spannung schwankt.
Auch bei der Messung der Periodenzeit aus Register 0x2E oder 0x2F
erhalte ich immer den Rohwert 2500. Das macht irgendwie noch weniger
Sinn, da man bei 50 Hz Netzfrequenz und 20ms Periodenzeit eher einen
Rohwert von 2000 erwartet...
Chris schrieb:> Der Strom von 100 mA (AC RMS), dessen roher ADC Wert im gleichen> Register wie die Spannung steht
Der Strom wurde übrigens durch einen einstellbaren Widerstand mit 100
Ohm "erzeugt"
Jan H. schrieb:> Wie latched du die Daten?
Das Latching kann man ja über Register 0x04 einstellen. Entweder
Auto-Latching (siehe unten) alle ~200us oder manuell, dann muss man die
Register immer beschreiben und es wird danach einmal gelatched.
1
// write register DSP_CR3 at address 0x04 with 0x0000 04E0, Autolatching
2
spi_ac_metro_tx_data[0]=0x04;// read back all 32-bits of register
3
spi_ac_metro_tx_data[1]=0x04;// write 16-bit MSW of register
4
spi_ac_metro_tx_data[2]=0xE0;// write LSB
5
spi_ac_metro_tx_data[3]=0x04;// write MSB
6
SPI_send_to_AC_metro(spi_ac_metro_tx_data,1);
7
8
//spi_ac_metro_tx_data[0]; // read back all 32-bits of register
9
++spi_ac_metro_tx_data[1];// write 16-bit MSW of register
Jan H. schrieb:> Kannst du eine korrekte Spannung auslesen?
Ja, wie oben geschrieben funktioniert das auslesen der Spannung gut, nur
der Wert vom ermittelten Strom springt extrem
Jan H. schrieb:> Hast du den Chip kalibriert?
Nein, bin ich noch nicht dazu gekommen. Ich glaube auch nicht, dass das
das Problem mit der Strommessung behebt. Wenigstens ein konstanter Wert
sollte auch ohne Kalibrierung rauskommen.
Hat das bei dir einen ähnlichen Fehler behoben?
Ja. Die Spannung kommt aus einem Einstellbaren Trenntrafo. Habe parallel
ein Hameg.
Wie würde denn die Kalibrationsroutine aussehen? Also bei dem Datenblatt
haben sie (ST) nicht alles gegeben.
Ich fand die Kalibrierroutine eigentlich recht gut beschrieben, sogar in
einem eigenem Dokument mit den einzelnen Registerzugriffen (AN4470,
DocID026176 Rev 3). Dafür braucht man aber eine halbwegs genaue Quelle
und Last, da auf diese bekannten Werte kalibriert wird.
We are using stpm32 for Ac metering. We have sent the sequence ( 48 FF
FF FF 22 ) to read register 36 which will read VRMS and IRMS. Now it is
reading but when I change the AC mains voltage, the readings are not
changing. Is there anything I need to reset the registers? Or do I need
to send any other sequence before reading register 36?
Please check register 0x04 which will affect the latching of the data.
Autolatching will store a new value every ~200us.
So write register DSP_CR3 at address 0x04 with 0x0080 04E0 for
autolatching.
If you want to manually latch the data, the according register value
should be set to 0x006004E0 before every reading
Hey Chris...
Wie läuft es mit deinen Routinen?
Irgendwie bin ich gerade am verzweifeln..
Wenn ich Register 0x48 mehrfach hintereinander Auslese... Kommen ab und
zu immer falsche AD Werte für die Spannungen.. Mal 0 mal 313 usw.
Hast du eine Idee?
Hi Jan,
da kann ich dir aktuell leider nicht weiterhelfen, da ich auch nicht
mehr dazu gekommen bin. Mit schwankenden Spannungswerten hatte ich aber
nie Probleme, dafür habe ich ein ähnliches Problem beim Strom. Bislang
habe ich hier aber noch nichts neues herausfinden können.
Eine Idee, die ich mal hatte aber noch nicht testen konnte wäre
folgendes: Nachsehen, ob es beim STPM ein Bit gibt, welches die
Gültigkeit des Messwertes anzeigt. Erst wenn dieses gesetzt wurde das
auslesen der Messwerte starten.
Hast du denn außerdem mal versucht die Messung händisch zu starten
(manuelles latching), eine gewisse Zeit gewartet und erst dann
ausgelesen?
Ben schrieb:> Hey Jan,>> ich kämpfe auch mit den RMS Spannungswerten die eher der momentan> Spannung entsprechen. Du hattest die Lösung dazu gefunden?
Joar..
Ben schrieb:> RMS Spannungswerten die eher der momentan Spannung entsprechen
Ich verstehe die Frage nicht, irgendwas fehlt in dieser Formulierung...
Mein Problem von damals hatte ich aber auch gefunden. Ich hatte einfach
zu wenig Dummy-Daten gesandt, nachdem ich das zu lesende Register
übertragen hatte... Seltsamerweise ging es meistens und ist nur in
gewissen Fällen ausgestiegen
Hi!
Ich mache auch ein Power-Metering Projekt mit STPM32 und STM32.
Habe den code von Chris für die CRC-Berechnung beim SPI-Kommunikation
benutzt.
Mein Program sendet alles ohne problem und richtig, aber kriegt zurück
immer den gleichen "Default" Wert von dem ersten Register: 040000A0.
(Bild angehängt)
Hat jemand Ideen was kann die Ursache davon sein?