So messen Sie die Batteriespannung von einem Mikrocontroller

7

Heute hatte ich ein Interview, dort fragten sie mich, ob man einen Mikrocontroller und eine Batterie bekommt, wie misst man dann den Spannungspegel? Schreiben Sie die Schritte von Grund auf mit Pseudocode.

Wie kann das gemacht werden?

Rasmi Ranjan Nayak
quelle

Antworten:

12

Wenn sie hinter dem Pseudocode her waren, war das eine schlechte Frage. es hängt alles vom Mikrocontroller ab. Ich hätte dem Kandidaten wahrscheinlich das Datenblatt des Mikrocontrollers gegeben und beobachtet, wie er sich durch dieses 300-seitige Dokument arbeitet.

Auf jeden Fall schließen Sie die Batterie an einen ADC-Eingang an (Annahmen: Der Mikrocontroller verfügt über einen ADC an Bord und die Batteriespannung liegt unter der Versorgungsspannung des Mikrocontrollers).

  1. Stellen Sie den Pin-Modus für diesen Pin auf ADC
  2. Wählen Sie diesen ADC-Eingang, wenn mehrere ADC-Eingänge vorhanden sind
  3. Starten Sie die ADC-Konvertierung
  4. Warten Sie auf das Ende des Konvertierungsflags
  5. ADC-Register lesen
  6. Berechnen Sie Vbat = Vcc x (ADC-Messwert) / (2 ^ ADC-Auflösung)
stevenvh
quelle
Dies ist eine großartige Hilfe. Könnten Sie bitte einige Weblinks vorschlagen, über die ich Hardware und Software auf einem Mikrocontroller parallel studieren kann?
Rasmi Ranjan Nayak
1
Das ist keine schlechte Frage. Der Interviewer suchte wahrscheinlich nach ihm, um Fragen zur Hardware zu stellen und verschiedene Ansätze vorzuschlagen.
Toby Jaffey
@Toby - Wenn ich der Interviewer wäre und das mein Zweck wäre, würde ich nicht nach dem Pseudocode fragen.
Stevenvh
@ TobyJaffey: Ich denke, Sie haben Recht
Rasmi Ranjan Nayak
Wählen Sie die interne Bandlückenreferenz, falls verfügbar. O) Wenn Batterie und Versorgungsspannung ein und dieselbe sind, müssen Sie eine Verbindung über einen Spannungsteiler herstellen.
Jippie
7

Ich denke, der Haken dabei ist, dass Mikrocontroller eine externe Referenz für ihre A / D benötigen. Die Standardreferenz ist das Netzteil. Sie können eine externe Referenz verwenden und die Batteriespannung auf einen Wert unterhalb dieser Referenz aufteilen. Dadurch wird die Batterie jedoch ständig entladen, was möglicherweise keine gute Idee ist.

Meine Antwort wäre: Erhalten Sie eine Shunt-Referenz für eine Spannung, die niedriger als der interessierende Batteriebereich ist. Nehmen wir eine ~ 5V-Batterie und einen TL431 oder ähnliches als 2,5V-Referenz an. Messen Sie nun die TL431-Spannung anhand der Batterie als Referenz. Angenommen, ein 10-Bit-A / D (am häufigsten) lautet N. Jetzt wissen Sie das

N * (Battery / 1023) = 2.5

daher

Battery = 2.5 * 1023 / N

Wenn der von der Referenz aufgenommene Strom ein Problem darstellt, würde ich seine Leistung von einem Ausgangsstift umschalten: Es wird keine Leistung gezogen, es sei denn, wir möchten die Messung durchführen (was eine sehr kurze Zeitspanne sein wird).

========================================

Nun einige Hausaufgaben als Vorbereitung für das nächste Interview: Sie haben ein USB-betriebenes 5-V-Gerät mit einem Mikrocontroller und einem LM35-Temperatursensor. Wie würden Sie die Temperatur bestimmen? Hinweise: Was gibt der LM35 aus und überprüfen Sie den Spannungsbereich einer USB-Steckdose. (Es gibt eine alternative Antwort: Warum verwenden Sie bei $ & ^ * ^ & überhaupt keinen digitalen Temperatursensor?)

Wouter van Ooijen
quelle
Und dann fragst du, ob es Gründe gibt, es nicht so zu machen (Batterie als Vref)! Als ob die Auflösung nicht konstant ist, weil die Funktion hyperbolisch statt linear ist. Bei 5 V ist ein LSB = 10 mV, bei 3,33 V ist ein LSB = 4,3 mV.
Stevenvh
1
Sehr klug. Unterscheidet sich eine Bandlückenreferenz von Ihrer 'Zener-Referenz', oder sprechen wir hier von der gleichen Art von Teilung? Wusste nicht, dass eine Referenz tatsächlich weniger Strom verbrauchen würde als ein hochohmiger Spannungsteiler.
Jippie
1
Das hängt sehr vom Kontext ab. Ich ging von einem kostengünstigen System aus, bei dem die Kenntnis der Batteriespannung nur für 5 oder 10% interessant ist. Eine hochgenaue Messung würde den uC A / D wahrscheinlich überhaupt nicht verwenden.
Wouter van Ooijen
Ja, das war auch meine Annahme. Eher wie eine Brown-Out-Schaltung ... die natürlich überhaupt nicht viel Pseudocode erfordert ...
Jippie
Zener-Typ war der falsche Wortlaut, ich meinte Shunt-Regler (im Gegensatz zum Serienregler). Ich werde meinen Text bearbeiten. Die Referenz verbraucht wahrscheinlich den gleichen Strom, kann jedoch nach Belieben ein- und ausgeschaltet werden . Beachten Sie, dass der Teiler im Allgemeinen nicht hochohmig sein kann: uC-A / D-Eingänge sind nicht hochohmig. Typischerweise benötigen sie eine Quellenimpedanz im Bereich von 1 bis 10 k.
Wouter van Ooijen