GeigerLog & RadPro an FNIRSI GC-01

Begonnen von ullix, 16. April 2024, 16:13

⏪ vorheriges - nächstes ⏩

DG0MG

Zitat von: ullix am 13. Mai 2024, 11:59Also das Datenblatt sagt die interne Referenz sei 1.20V:

Okay, dann ist da eine Konstantspannungsquelle integriert, das ist ja besser, als die Betriebsspannung als Referenz zu nehmen. Dann hängt die Genauigkeit und Temperaturdrift des Messergebnisses nämlich vom (z.B.) 3,3-Volt-Längsregler ab.
"Bling!": Irgendjemand Egales hat irgendetwas Egales getan! Schnell hingucken!

ullix

Ein Widerstand am ADC tut's auch nicht:

Sie dürfen in diesem Board keine Dateianhänge sehen.

Schaltung wie zuvor: von der HV über 2G direkt an STM32-ADC ("open" Teile), oder plus 2000M von ADC-in zu GND (rechter Teil), bzw plus 10M (2v.l.).

Interessanterweise ist das 10M Bild genau dasselbe, was ich beim Parallelschalten des DMM, welches ja auch ca 10M Impedance hat, mit dem ADC bekommen habe. Aber woher dieses kuriose Muster kommt, weiß ich immer noch nicht.

Jedenfalls sollte man kein R parallel zum ADC schalten!

ullix

Kuriose Ergebnisse mit dem STM32-ADC:

Sie dürfen in diesem Board keine Dateianhänge sehen.

Die linke Hälfte zeigt HV Messungen (HV -> 2GOhm -> ADC pin) mit 1 call des ADC pro sek. Nicht schlecht, aber etwas Glättung könnte nett sein. Also mache ich jede sek 100 Messungen - dauert insgesamt <7 millisec - und nehme den Mittelwert. Huch!

Was geht hier vor?

ullix

Hat sich geklärt, es braucht etwas mehr Geduld als das Datenblatt erwarten lässt.

Sie dürfen in diesem Board keine Dateianhänge sehen.

Ich habe nach jedem ADC call eine Wartephase eingebaut. Nach Datenblatt sollte 1 MHz möglich sein :-))), aber selbst das Minimum 50kHz wird hier nicht erreicht! Ab 20kHz geht es, also mit 50µs Wartezeit zwischen ADC calls. Sicherheitshalber sollte man 100µs warten. Für unsere Zwecke gut genug.

Sie dürfen in diesem Board keine Dateianhänge sehen.

DG0MG

Zitat von: ullix am 06. Mai 2024, 14:57
Zitat von: DG0MG am 06. Mai 2024, 11:34Kannst Du die original-Firmware wieder installieren und vergleichen, wie es dort aussieht?
Leider Nein. Da bei den GC-01 nichts von Firmware Sicherung stand, wohl aber bei einem Bosean, habe ich geschlossen, dass dies bei GC-01 nicht geht, und es gar nicht erst probiert. Un' nu iss zu spät :-(

Wenn ich das richtig verstanden habe, gibts hier die Originalfirmwaren für die verschiedenen GC-01:
https://github.com/Gissio/radpro/tree/main/docs/devices/FNIRSI%20GC-01/firmware
"Bling!": Irgendjemand Egales hat irgendetwas Egales getan! Schnell hingucken!

ullix

GeigerLog Version 1.5.0 habe ich soeben "released". Finde es in der Files Section auf SourceForge: https://sourceforge.net/projects/geigerlog/

RadPro Unterstützung ist auf dem derzeit letzten Stand, validiert auf Linux und Windows 11. Bisher habe ich nur mit dem FNIRSI GC-01 (CH32F103C8) testen können. Bin sehr interessiert an Ergebnissen mit anderen Countern.

ullix

Eine evtl. dumme Frage: Kann ich mit einem DMM im Ohm-Meter Modus die Impedanz eines zweiten DMM im Volt-Meter Modus messen? Ich denke, ja. Habe ich probiert: für das eine Gerät bekomme ich 10.00MOhm, für das andere 11.43MOhm. Könnte zumindest Sinn machen. Oder?

Messe ich aber mit diesen beiden die Ohms am ADC Eingang von einem STM32 Chip, rasen die DMM Anzeigen rauf und runter von einigen MOhm bis um die 100M, egal ob das DMM im Auto-Range Modus oder Fix ist. Was passiert hier?

Elektroniknerd

Den DMM Eingangswiderstand kannst du messen (...ebenso wie du die Messespannung am anderen DMM ablesen kannst).

Den Eingangswiderstand des STM32 kannst du nicht messen, das ist schlichtweg kein ohmscher Widerstand.

ullix

Zitat von: Elektroniknerd am 24. Mai 2024, 14:23.... das ist schlichtweg kein ohmscher Widerstand.

Sondern, es ist?

Beschreib bitte mal, worin sich ein DMM Volteingang und ein ADC am Mikrochip Volt Eingang unterscheiden.

Elektroniknerd

Der Wandlereingang vom STM32 ist vor allem ein Kondensator, der angegebene Widerstand (50k) ist der nötige Quellwiderstand, damit er während der Sample-Zeit schnell genug aufgeladen wird.

https://www.renesas.com/us/en/document/apn/r14an0001-operation-sar-adc-based-charge-redistribution-rev100
(Anm.: Das Prinzip wird herstellerübergreifend für alle in Mikrokontroller integrierten Wandler verwendet, denn der Herstellungsprozess für den Mikrocontroller (Logik, Ram, Flash) muss den Wandler halt (billig) hergeben. )


Da wir hier viel Zeit zum messen haben, sollte man die Sample-Zeit recht lang machen. (Das geht sicher (Wandler-Clock kleiner stellen), allerdings kann ich dir nicht sagen ob und wie deine Bibliotheken das unterstützen.


Der Wandler im DMM arbeitet nach einem komplett anderen Prinzip, das ist viel langsamer, ermöglicht dafür aber aber sehr einfach eine hohe Auflösung/Genauigkeit. Und ein (vernünftiges) Multimeter muss einen hochohmigen und möglichst rein ohmschen Eingangswiderstand haben, einfach damit man den Einfluss des Messgerätes beurteilen kann.



ullix

Nun ja, von STM gibt es ein ähnliches Dokument (AN2834 Application note, How to optimize the ADC accuracy in the STM32 MCUs). Gemeinsam ist beiden, dass sie das Prinzip erklären mit einer Spannungsquelle VIN, die direkt die Kondensatoren füttert.

In dem realen Chip sitzt vor dem ADC jedoch mindestens noch der Multiplexer (und vielleicht weitere OpAmps). Diese würden doch dann die Impedanz bestimmen?

ullix

Die Frage der Eingangs-Impedanz von STM32 ADCs wird im Netz mit ebenso viel Verwunderung diskutiert wie hier  :unknw: Doch eigentlich ist es einfach - es gibt einfach keine solche Impedanz; das Problem liegt anders:

In diesem Datasheet findet sich diese hilfreiche Grafik:

Sie dürfen in diesem Board keine Dateianhänge sehen.

Vain (links) stellt die zu messende Spannung dar, in unserem Falle die Anoden-HV von 300 bis 1000V. Rain ist Teil unseres Divider-Netzwerk mit Wert 1 GOhm (genauer müsste hier noch der Innenwiderstand des HV Generators von 23M addiert werden, aber der spielt keine Rolle gegen 1G und ich lasse ihn weg). Rain wird normalerweise mit dem Eingang eines DMM's verbunden, dessen typisch 10MOhm Impedanz den 2. Teil unseres Spannungsteiler bildet, und somit die HV zu messen erlaubt.

Beim ADC gibt es aber keinen 2. Teil; da ist kein Widerstand gegen Null. Mit nur Kondensatoren im Pfad ist die Impedanz im Prinzip unendlich. Warum steigt dann die Spannung am ADC nicht stets auf unsere HV Werte (oder wenigsten so hoch wie die Schutzdioden erlauben)?

In der Zeichnung ist noch ein Kreis mit Pfeil eingezeichnet und mit "IL±1 µA" beschriftet. Dies steht für einen Leckstrom von 1µA. Bei einer Maximal-Spannung von 3V bedeutet dies einen Widerstand gegen GND von 3MOhm. Dies hat aber nichts mit Impedanz zu tun, sondern ist, nun ja, ein Leck.

Die ADC Spannungsmessung wird anders durchgeführt. Der Kondensator Cadc (8 pF) ist das eigentliche Messelement, dessen Ladung als Spannung im "12 bit converter" gemessen wird. Dieser Cadc wird über Radc (1kOhm) geladen (die Zeitkonstante Tau ist RC=8 nano-sec, also sehr schnell in diesem Umfeld), und Radc erhält den Ladestrom von unserer externen Quelle. Diese liefert bei einer Spannung von 300...1000V über 1G einen maximal Strom von 0.3...1.0 µA.

Da wird das erste Problem deutlich: all unser Strom kann als Leckstrom abgeleitet werden, da bleibt gar nichts übrig für Cadc!

Da ich aber mit einem Bluepill Modul bereits brauchbare Werte für die HV gemessen habe, kann es eigentlich nicht ganz so schlimm sein; vielleicht ist der Leckstrom zu großzügig abgeschätzt worden und/oder wir haben eine Exemplar-Streuung.

Nun aber kommt das zweite Problem zum Tragen: vor dem Radc sitzt noch ein Schalter (in diesem Bild nicht gezeigt), der das Laden von Cadc für ein bestimmtes Zeitfenster von einigen µs erlaubt. Der Cadc muss in dieser Zeit "vollständig" geladen sein, was STM ansetzt mit "weniger als 1/4 LSB Abweichung" vom Endwert, und eine Maximalzeit von 17.1µs ansetzt (siehe Table 60).

In unserem Fall wird Cadc aber über Rain statt nur Radc geladen, und Tau ist somit 1 Mio mal größer, also 8 milli-sec statt 8 nano-sec, oder 1000 mal länger als die längste von STM in Betracht gezogene Maximalzeit für die Ladung!

Ich sehe folgende Konsequenzen:
  • dank unserer Spannungsquelle mit sehr hoher Impedanz können wir den ADC Kondensator nie schnell genug laden
  • der nicht spezifizierte Leckstrom könnte in einer Abhängigkeit von der Produktionscharge der STM32 resultieren

Oder anders ausgedrückt: Ohne OpAmp geht es nicht!


DG0MG

Zitat von: ullix am 27. Mai 2024, 13:53Oder anders ausgedrückt: Ohne OpAmp geht es nicht!

Dessen bin ich nicht sicher.
Weil da ja im Prozessor noch Schaltelemente zwischen ADC und dem A(in)x-Pin sein müssen: Man kann den Pin doch sicher auch als digitalen Eingang oder digitalen Ausgang benutzen. Je nachdem, als was der Pin konfiguriert ist, ergeben sich andere Lastfaktoren. Was Du hier zeigst, ist eine Dauerbelastung der HV mit dem Spannungsteiler und ADC.

Was aber, wenn der Spannungsteiler einen Bufferkondensator lädt und man den Pin nur KURZZEITIG (eben für die Zeit einer Messung) als A/D-Wandler konfiguriert und ihn die Software danach wieder hochohmig schaltet? Der Strom aus der HV-Quelle für die Messung also nicht aus dem Spannungsteiler kommt, sondern aus dem Bufferkondensator?

Auch wenn nachfolgende Variante keinen A/D-Wandler benutzt, sondern "nur" den Comparator, zeigt sie doch, was möglich ist. Schau mal diese Schaltung von @Maniak003 : https://im13.rhbz.org/albums/userpics/10261/screen~47.png Der Batterie-Stromverbrauch ist im unteren Mikroamperebereich angesiedelt. Der Thread dazu: http://forum.rhbz.org/topic.php?forum=80&topic=78
Selbst wenn das mit dem A/D-Wandler wirklich nicht ohne größeren Aufwand gehen sollte, ist das auch ein Lösungsansatz zur Stabilisierung der HV. Einen Comparator wird der STM doch auch haben.
"Bling!": Irgendjemand Egales hat irgendetwas Egales getan! Schnell hingucken!

ullix

ZitatWeil da ja im Prozessor noch Schaltelemente zwischen ADC und dem A(in)x-Pin sein müssen:
Eben nicht! Das war ja auch meine Idee. Aber, keines der Dokumente von STM, TI, AnalogDevices, die ich angeschaut habe, zeigten für einen SAR-ADC irgendwelche aktiven, die Impedanz verändernden Elemente am ADC Eingang! Allein dazwischen ist der Multiplexer mit einem ON Widerstand im unteren Ohm Bereich. Ist also kleiner als selbst Radc, und spielt keine Rolle. Sonst ist da nichts.

Die Quelle für das Verständnis waren für mich die ominösen 50 kOhm externe Impedanz (Tabelle 59) sowie die folgende Equation 1 und Tabelle 60. Unsere externe Impedanz liegt, wie gesagt, bei 1000000 kOhm!

Ein Bufferkondensator - wäre quasi der Cparasitic in der Figure 58 - wird tatsächlich gelegentlich diskutiert, aber es gibt keine klare Meinung dazu. Ich hab es probiert mit einem keramischen 472K - das führte zu Schwingungen im ADC Signal.

Aber irgendwelche Schaltungsänderungen, egal wie kompliziert, können wir m.E. von vorne herein ausschließen. Firmware aufspielen geht noch, aber löten auf der SMD Platine? Nein.


ullix

Zu Hilfe, verstehe ich hier wieder etwas falsch: dieser OpAmp hat 1TOhm input resistance?
https://www.mouser.de/datasheet/2/389/tsx631-1852701.pdf

Ich könnte ihn direkt an die HV anschliessen, besser als mit einem 1G Widerstand?