mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik spannung/ strom messung mit msp430


Autor: jarmi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Kollegen,

entschuldigt bitte die komplette Newbie-Frage.
ich habe paar verständniss Fragen

ich betreibe mein msp430F4xxx mit einer Batterie, nun möchte ich wissen 
wie man die Spannung, bzw. strom mit dem ADC messen kann.


Danke
Gruß
jarmi

Autor: Bernd N (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
U = R*I oder hat sich da was geändert ? :-)

Einfach eine Spannung an den ADC Eingang anlegen und fertig. Mittels 
ohmschen Gesetz den entsprechenden Spgs. Teiler berechnen.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und was ist jetzt Dein Problem?

Wie der ADC softwareseitig anzusteuern ist, oder welche Hardware Du an 
den ADC anschließen musst, um "die" Spannung oder "den" Strom messen zu 
können?

Ersteres wird von TI in Codebeispielen beschrieben, die es für die 
unterschiedlichen MSP430-Familien gibt, studiert man diese und die 
jeweiligen Programmierhandbücher, sollte man die Vorgänge nachvollziehen 
können.

Letzteres hängt ein bisschen davon ab, was "die" Spannung und "der" 
Strom sind, die Du da messen willst - etwa die Spannung der den MSP430 
versorgenden Batterie? Und den Eigenstrombedarf?

Autor: jarmi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
das ohmische Gesetz hat sich meines wissen noch nicht geändert. ich 
suche aber fleißig nach neue Regeln.



>>Einfach eine Spannung an den ADC Eingang anlegen und fertig. Mittels
>>ohmschen Gesetz den entsprechenden Spgs. Teiler berechnen.
soweit bin ich auch drauf gekommen :p

haben Sie vielleicht eine detailerte BEschreibung dafür, Bitte?

Autor: Bernd N (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>> detailerte BEschreibung

wofür ? für den Spannungsteiler ? wie wärs wenn du mal erklärst was du 
machen willst.

Beispiel, ich möchtem mit dem ADC eine Spannung von 1000V messen.

Autor: jarmi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Rufus Τ. Firefly

ich möchte wissen:
- welche Hardware darf ich an welche pin anschliessen?
- wie wird die Spannung vom ADC ausgelesen?
- Batterie Und verfügbare Eigenstrombedarf ermitteln?


Danke für die schnelle Antwort

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
jarmi schrieb:
> - welche Hardware darf ich an welche pin anschliessen?

Jede dafür geeignete an jeden dafür geeigneten.

Was bitte soll man auf so eine Frage antworten?

> - wie wird die Spannung vom ADC ausgelesen?

Das steht -- wie ich bereits beschrieben habe -- in den 
Quelltextbeispielen, die es von TI für die unterschiedlichen 
MSP430-Varianten gibt. Das steht auch in verschiedenen Büchern und 
Online-Tutorials.

Obendrein ist der ADC im Users's Manual der jeweiligen MSP430-Variante 
beschrieben.

> - Batterie Und verfügbare Eigenstrombedarf ermitteln?

Dieser Satz keine Frage. Spannungen misst man, in dem man sie entweder 
direkt an einen ADC-Eingang anschließt (dann aber muss absolut 
sichergestellt sein, daß die Spannung nicht höher werden kann als der 
ADC-Eingang erlaubt, also auf keinen Fall größer als die 
Betriebsspannung des MSP430 - übrigens darf sie auch nicht negativ 
werden) oder aber über einen geeignet dimensionierten Spannungsteiler an 
einen ADC-Eingang anschließt. Der Spannungsteiler sollte so hochohmig 
wie möglich sein, um die Spannungsquelle nicht unnötig zu belasten, darf 
aber auch nicht so hochohmig sein, daß der Innenwiderstand des 
ADC-Eingangs die Spannungsteilung merklich beeinflusst.

Ein ADC kann nur Spannungen messen, also gilt es zur Strommessung das 
Ohmsche Gesetz (ohne 'i') anzuwenden und mit einem geeignet 
dimensionierten Messwiderstand zu arbeiten, durch den der zu messende 
Strom fließt. Die über diesem abfallende Spannung wird dann gemessen.

Autor: jarmi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
nach dem ich mich gestern  ein bisschen mit SD16 beschäftigt habe,
habe ich trptzdem noch ein paar Verständniss lücken.

Zum einen: im Rigister SD16_A6 siehe ich SD16IV immer auf 0x0004, es 
ändert sich nicht obwohl ich A0+ und A1+ aktiviert habe?

zumanderen in der SD16A_Vector ISR zeigt SD16IV = 0xDAEA gleichzeitig 
(was SD16MEM0) entspricht?
angenommen SD16MEM0 einen richtigen wert ausgibt, wie lese ich die 
Spannung daraus?

ich hoffe sie können mich weiter hilfen.
hier meine Programmierung:


>> main()
{
  drv_SD16_Init();
  startA0_Mesurement(); //SD16CCTL0|=SD16SC;
  startA1_Mesurement(); //SD16CCTL1|=SD16SC;
}

>>void drv_SD16_Init(void)
{

  BATCTL1_HIGH; //A0
  BATCTL2_HIGH; //A1

  // Configure SD16

  SD16INCTL0 |= SD16INTDLY_0 + SD16INCH_0 ;         // Select Channel A0

  SD16INCTL1 |= SD16INTDLY_0 + SD16INCH_1 ;      // Select Channel A1
  SD16CCTL1 |= SD16IE;                      // Single conv,enable 
interrupt
  SD16CCTL0 |= SD16IE;

  SD16CTL = SD16REFON + SD16SSEL_1;     //  1.2V ref | SMCLK
}


>>#pragma vector=SD16A_VECTOR
__interrupt void SD16A_ISR(void)
{
_NOP();
  switch (SD16IV)
  {
  case 2:                                   // SD16MEM Overflow
    break;
  case 4:                                   // SD16MEM0 IFG
      SD16CCTL0 &= ~SD16IFG;
      startA0_Mesurement();
      mem0=SD16MEM0;
    break;
  case 6:                                   // SD16MEM1 IFG
     SD16CCTL1 &= ~SD16IFG;
     startA1_Mesurement();
      mem1=SD16MEM1;
    break;
  case 8:                                   // SD16MEM2 IFG
    break;
  }
 // __low_power_mode_0();                   // Exit LPM0
}

Autor: jarmi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

gibt es eine formel oder ähnliches, mit der ich aus dem gemessenen Wert: 
SD16MEM0 die Spannung ausrechnen kann?

Danke

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja. Du kennst die Höhe der Referenzspannung, Du kennst das Ergebnis der 
ADC-Wandlung. Was brauchst Du mehr?

Hinweis:
Wenn z.B. die Referenzspannung 2 V ist, und der ADC "Vollausschlag" 
liefert, wie hoch mag da wohl die gemessene Spannung sein?

Und wenn der ADC 0 liefert, wie hoch dann?

Autor: jarmi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich verwende die interne Reference 1.2V, dem entsprechend zeigt SD16MEM0 
= 56512.
mit dem Osci habe ich am A0.0+ 0.42V.

wie finde ich das verhältniss zwischen die 0.42v und 56512??

Autor: jarmi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
soll ich die 3 Eck regel verwenden, sprich

0xFFFF --> 1,2v
0xdc12 --> x?

Autor: jarmi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
die werte passen doch nicht zusammen.

mit dem Osci habe ich 0.43v gemessen (was ich auch messen möchte).

mit dem SD16 bekomme ich SD16MEM0=56512

internes Ref: 1,2v

mein Rechen Weg:
0v   -----> 0x0000
x.v  -----> 0xDCDD = 56541
1,2v -----> 0xFFFF = 65536

x= (56541*1,2)/65536 ==> 1,03V ????

Autor: Bernd N (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn ich mich nicht täusche dann gilt 0,6V -----> 0xFFFF bei unipolarer 
Messung.

>> 0.42v und 56512??

Das kommt dann schon hin.

Autor: jarmi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Bernd, vielen Dank, das habe ich auch vergissen...

nach dem Rechnen bekomme ich:
x= (56551*0,6)/65536 = 0,5177V
gemessen : 0,428v


Danke für die Schnelle Antwort

Autor: jarmi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
endlich habe ich mein SD16 zum laufen gebracht, der letzte Fehler lag am 
SD16LSBACC. diese sollte auf 0 gesetzt werden(zumindest bei mir).
Danke für die Hilfe und die Hinweise.

Autor: jarmi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Freunde,

nach paar experimente mit SD16 habe ich immernoch paar probleme :( ,

die SD16-ISR()wird aufgerufen im Register zeigen
zb. SD16MEM0=0xB722 und SD16IV = 4;

in der ISR zeigen SD16MEM0=0 und SD16IV = 46782;
wobei SD16IV sich doch nur bis 16 variieren?
der Breakpunt ist in Case 4 gesetzt aber der zeiger kommt da nicht an...

mit dem befehl mem0 = SD16MEM0; wird auch nur 0 gelesen,obwohl im 
Register
SD16MEM0=0xB722 steht.

weiss jemanden vielleicht was ich falsch mache?
Danke


void drv_SD16_Init()
{
  P4DIR=0xFF;

  mesureBATCTL1();
//  mesureBATCTL2();

  SD16CTL = SD16REFON+SD16SSEL_1;    // 1.2V ref, SMCLK
  // CH A0.0+
  SD16INCTL0 |= SD16INCH0+SD16INTDLY0; // Interrupt on 4th sample
  SD16CCTL0  |= SD16UNI+SD16IE;        // Enable interrupt
  // CH A1.0+
//  SD16INCTL1 |= SD16INCH1+SD16INTDLY0; // Interrupt on 4th sample;
//  SD16CCTL1  |= SD16OSR_1024+SD16UNI+SD16IE;
  SD16CCTL0|=SD16SC;
  for (int i = 0; i < 0x3600; i++);   // Delay for 1.2V ref startup
  _EINT();
}


#pragma vector=SD16A_VECTOR
__interrupt void SD16AISR(void)
{
  //mem0 = SD16MEM0;
  //mem1 = SD16MEM1;
  switch (__even_in_range(SD16IV, 16))
  {
    case 2:                      // SD16MEM Overflow
      break;
    case 4:                      // SD16MEM0 IFG
      SD16CCTL0 &=~SD16IFG;      // clear Interrupt Flag
      mem0 = SD16MEM0;
      //SD16CCTL0 &=~SD16SC;
      //BATCTL1_LOW();
      break;
    case 6:                      // SD16MEM1 IFG
      SD16CCTL1 &=~SD16IFG;      // clear Interrupt Flag
      mem1 = SD16MEM1;
      //SD16CCTL1 &=~SD16SC;
      //BATCTL2_LOW();
      break;
    case 8:                      // SD16MEM2 IFG
      break;
  }

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.