openXsensor+ADS1115 mV und Strommmessung mit Messwiderstand

Status
Nicht offen für weitere Antworten.
#21
Da die Widerstände direkt in der Stromversorgung sitzen werden, wäre eine schlechte Lötstelle tödlich fürs Modell.
Da hast du natürlich Recht, das ist ein wichtiger Hinweis für eventuelle Nachbauer!
Um ein bißchen Redundanz zu haben, stelle ich den Messwiderstand durch parallelschalten von größeren Werten her. Hier 33mΩ durch 3x100mΩ. Ich verzinne einen Streifen einer Streifenrasterplatine und eine Seite des R vor und lege einen Papierstreifen auf der anderen Seite unter. Dann wird die vorverzinnte Seite verlötet und anschließend die unverzinnte Seite, wobei die Kapillarwirkung das Lot in den (wodasPapierwar-) Spalt saugt. Mit einer normalen Lötspitze geht das einwandfrei.
Die Platine lasse ich so lang, dass das Kabel mechanisch an der Platine befestigt werden kann (Heißkleber o.ä. + Schrumpfschlauch) und so auf keinen Fall das Kabel an der Lötstelle oder auch in dem Bereich, wo Lötzinn in die Litze gesaugt wurde, bewegt werden kann. Die möglichst dünnen Messstrippen zum ADS kann man links oder rechts anlöten, wie es besser passt. Für Ströme >10A kann man dann zwei mal zwei Streifen nutzen. Es gibt aber sicher noch andere Methoden, den Shunt zu bauen.

MessR1.jpg

MessR2.jpg

Die Konfiguration von oXs ist mir auch noch nicht klar.
Der ADS kann vier GND-bezogene Spannungen oder 2 Differentialspannungen messen oder Kombinationen davon.
Mein ADS ist so konfiguriert, dass er zwischen A0 und A1 die Spannung vom Airspeedsensor (2048mV) misst. Zwischen A2 und A3 misst er die Spannung vom Shunt (also ADS_VOLT_3) im 256mV Messbereich:
Code:
// ***** 6.6 - Ads1115 parameters  *****
#define ADS_MEASURE A0_TO_A1 ,  ADS_OFF , [COLOR="#0000FF"]A2_TO_A3[/COLOR] , ADS_OFF // uncomment when ADS1115 is used; select 4 values between A0_TO_A1, A0_TO_A3, A1_TO_A3, A2_TO_A3, A0_TO_GND, A1_TO_GND, A2_TO_GND, A3_TO_GND, ADS_OFF
#define ADS_FULL_SCALE_VOLT  MV2048, MV4096, [COLOR="#0000FF"]MV256[/COLOR], MV4096 //  select between MV6144 MV4096 MV2048 MV1024 MV512 MV256
#define ADS_OFFSET 0, 0 , [COLOR="#0000FF"]0[/COLOR] , 0 // must be an integer (positive or negative)
#define ADS_SCALE 1, 1, [COLOR="#0000FF"]100[/COLOR], 1 // can be a float
#define ADS_RATE  MS2 , MS9, [COLOR="#0000FF"]MS9[/COLOR] , MS2 // select between MS137, MS69, MS35, MS18, MS9, MS5, MS3 , MS2
#define ADS_AVERAGING_ON 10 , 20, [COLOR="#0000FF"]10[/COLOR], 50 // number of values used for averaging (must be between 1 and 254)
In dem Beispiel oben ist ADS_VOLT_1 für den Airspeed, ADS_VOLT_2 gibt es nicht, weil schon für 1 verwendet (Differentialmessung), ADS_VOLT_3 ist die Spannung am Messwiderstand und ADS_VOLT_4 gibt es wieder nicht, weil wieder Differentialeingang bei ADS_VOLT_3. Etwas gewöhnungsbedürftig ist es, dass A0 der Eingang für ADS_VOLT_1 ist, A1 für ADS_VOLT_2, u.s.w. Die anderen Parameter kann man in der description.h nachlesen.

Den Multiplikator (Scale) von 100 habe ich drin, weil ich im ACC Feld übertrage:

#define ACCY_SOURCE ADS_VOLT_3

Ich bekomme so die mV im ACC Feld angezeigt, von -256 bis +256. Wenn ich den Scale auf 3 umstelle, bekomme ich den passenden mA-Wert für den 33mΩ Shunt angezeigt. Die Einheit ändere ich in OpenTX auf mA, das ACC Feld hat ja normalerweise die Einheit "g".

Es gibt natürlich auch die Möglichkeit, den Strom im "Curr"-Feld, also dem üblichen Stromfeld, zu übertragen, das würde ich aber gerne erst mal weglassen, da habe ich oben schon genug Verwirrung gestiftet. Der Weg ist aber, wie immer, in der description.h von mstrens beschrieben.

Bist du eigentlich mit OpenTX unterwegs, oder hast du ein anderes System?

Gruß Bernd
 
Zuletzt bearbeitet:

Mohol

Erfahrener Benutzer
#22
Hallo Bernd,
vielen Dank für deine ausführliche Antwort!
Die Idee 3x100mOhm parallel zu nehmen, ist genial! Auf die Idee bin ich nicht gekommen. Welche Bauform hast du genommen? 2512? Und welche Leistung? Über die Widerstände fällt ja kaum Spannung ab, daher bräuchten sie auch fast keine Leistung aufnehmen können, trotzdem frage ich mich, wieviel Ampere man drüber jagen kann.
Auf Alibaba gibt es diverse SMD Entwicklungsplatinen, die einzelne Widerstände aufnehmen, aber deine Variante gefällt mir fast besser !
Hast du den fertigen Shunt gegen gemessen? Haben im MilliOhm Bereich das Lötzinn und die Kabel zum ADS115 auch schon einen merkbaren Widerstand oder ist das zu vernachlässigen? Gegenmessen kann ich mit meinen Multimetern nicht. So feine Geräte habe ich nicht. Letztendlich wird es sich im Strom zeigen. Sollte der Strom Abweichen, könnte man ein paar Milliohm dazurechnen.

Ich verwende auf meiner X9E OpenTX und die ProfiTX von Multiplex mit oXs Sensoren. oXs kann beide Systeme, das ist für mich optimal!
Danke für die Erklärung. Ich glaube jetzt habe ichs verstanden!
Ich werde mir trotzdem zuerst mal einen eigenen Arduino Sketch schreiben und die ADS1115 Werte am seriellen Monotor ausgeben. Der Ads1115 misst zwischen -265 und +265. Je nach Widerstand dürfte der Sketch ein kurzer 3Zeiler werden.
Zum generellen Verständnis sicher von Vorteil.
An meinen beiden offenen Eingängen des ADS1115 könnte ich doch einen Drucksensor MS5611 anhängen. Entsprechend deinem Airspeed Sensor, müsste das Vario genauso funktionieren. Ich glaube oXs ist dafür sogar schon vorbereitet, muss ich mal nachsehen.
Würde ich die höhere Auflösung praktisch im Varioton überhaupt merken?

Wenn ich in einem ElektroSegler eine zB ACS712 30A Stromsensor nutze um hohe Ströme und den ADS1115 um niedrige zu messen, besteh die Möglichkeit, die beiden Verbräuche zusammenzurechnen?
Über OpenTX könnte das wahrscheinlich sein Skript erledigen, für MPX kann kein Sender eigene Rechnungen anstellen, dafür wäre es toll, wenn oXs das gleich zusammenzählen könnte.

Ich werde die nächsten tage mal löten und meine Erfahrungen berichten.
lg
roland
 
#23
Welche Bauform hast du genommen? 2512? Und welche Leistung? Über die Widerstände fällt ja kaum Spannung ab, daher bräuchten sie auch fast keine Leistung aufnehmen können, trotzdem frage ich mich, wieviel Ampere man drüber jagen kann.
Das ist er. Durch die Parallelschaltung ist der Shunt bis 3W belastbar, also 9,53A. Da wir aber nur 256mV erfassen können, sind es U/R = 7,56A. So viel Reserve ist da also gar nicht mehr. Um das besser einschätzen zu können, habe ich die Tabelle in Post#6 gerechnet. Es kommt doch schon einiges an Verlustleistung zusammen, deswegen ist es oft besser, auf Auflösung zu verzichten und nur bis 50mV zu messen.

Hast du den fertigen Shunt gegen gemessen? Haben im MilliOhm Bereich das Lötzinn und die Kabel zum ADS115 auch schon einen merkbaren Widerstand oder ist das zu vernachlässigen?
Ich werde einmal ein Multimeter zur Strommessung in Reihe schalten, aber erfahrungsgemäß werden die Werte stimmen.

Ich werde mir trotzdem zuerst mal einen eigenen Arduino Sketch schreiben und die ADS1115 Werte am seriellen Monotor ausgeben. Der Ads1115 misst zwischen -265 und +265. Je nach Widerstand dürfte der Sketch ein kurzer 3Zeiler werden.
Das klingt spannend, mangels eigener Fähigkeiten lasse ich gerne programmieren ;)

An meinen beiden offenen Eingängen des ADS1115 könnte ich doch einen Drucksensor MS5611 anhängen. Entsprechend deinem Airspeed Sensor, müsste das Vario genauso funktionieren. Ich glaube oXs ist dafür sogar schon vorbereitet, muss ich mal nachsehen.
Der MS5611 hat den A/D Wandler schon integriert und kommuniziert über i2c. Die VSpd-Auflösung des oXs ist aber extrem gut.

Über OpenTX könnte das wahrscheinlich sein Skript erledigen, für MPX kann kein Sender eigene Rechnungen anstellen, dafür wäre es toll, wenn oXs das gleich zusammenzählen könnte.
Ich suche noch jemanden, der den Verbrauch in mA mit einem LUA-script berechnen kann, der berechnete Sensor in OpenTX arbeitet leider nur mit A, das ist für die Kapazitätsrechnung der Empfangsanlage nicht geeignet. Bis ich das Script fertig habe.....:rolleyes:
 
#24
Die Sache hat sich ein bißchen weiterentwickelt. Im openXsensor Code ist ja bereits ein Kapazitätsrechner enthalten, der aber nur für die oldfashioned Systeme :cool: genutzt wird, da OpenTX die entnommene Kapazität selbst berechnet. Den ersten Block hat mstrens jetzt in den aktuellen Master eingebaut, damit kann man jetzt auch mit FrSky den openXsensor Kapazitätsrechner nutzen und die entnommenen mAh mit test1 in einem ACC oder Temp Feld übertragen (der Block muss im Master natürlich entkommentiert werden).

Um den mit dem ADS1115 gemessenen Strom in entnommene Kapazität umzurechnen, kann man den zweiten Block benutzen, der hier im Beispiel nicht kommentiert ist:

Code:
//#if defined(ARDUINO_MEASURES_A_CURRENT) && (ARDUINO_MEASURES_A_CURRENT == YES)
//if ( currentData.consumedMilliAmps.available) {
// test1.value = currentData.consumedMilliAmps.value ;
// test1.available =  true ; //<=== diese Zeile ist im Master Stand heute noch falsch. Ändern!
// currentData.consumedMilliAmps.available = false ;
//} 
//#endif

#if defined(AN_ADS1115_IS_CONNECTED) && (AN_ADS1115_IS_CONNECTED == YES ) && defined(ADS_MEASURE) && defined(ADS_CURRENT_BASED_ON)
if ( oXs_ads1115.adsCurrentData.consumedMilliAmps.available) {
 test1.value = oXs_ads1115.adsCurrentData.consumedMilliAmps.value ;
 test1.available =  true ;
 oXs_ads1115.adsCurrentData.consumedMilliAmps.available = false ;
} 
#endif
 
Zuletzt bearbeitet:
Status
Nicht offen für weitere Antworten.
FPV1

Banggood

Oben Unten