Τρίτη 28 Ιουνίου 2016

Μέτρηση έντασης ρεύματος με τον Arduino και το ΙΝΑ219


Το ολοκληρωμένο INA219 της Texas Instruments μετράει την τάση κατά μήκος μιας αντίστασης 0,1Ω (ανοχής 1%) η οποία παρεμβάλλεται στη διαδρομή του ρεύματος, και από την τάση αυτή προσδιορίζει την ένταση του ρεύματος που διαρρέεει την αντίσταση. Στο εμπόριο διατίθενται συναρμολογημένες μονάδες που περιέχουν το INA219 μαζί με τα απαραίτητα ηλεκτρονικά εξαρτήματα για τη σύνδεση σε μικροϋπολογιστικά συστήματα.

Προσυναρμολογημένη μονάδα INA219

To ΙΝΑ219 περιλαμβάνει στην είσοδό του ένα τελεστικό ενισχυτή ακριβείας που η μέγιστη επιτρεπτή διαφορά τάσης στις εισόδους του είναι ±320mV και συνεπώς μπορούν να μετρηθούν ρεύματα στην περιοχή ±3,2 A. Ενσωματώνει επίσης ένα αναλογικοψηφιακό μετατροπέα μέγιστης ακρίβειας 12bit που σημαίνει πως στην περιοχή των ±3,2 A έχει διακριτική ικανότητα 0,8mA. Μεταβάλλοντας το κέρδος του τελεστικού ενισχυτή μπορούμε να μεταβάλλουμε την περιοχή μέτρησης αλλά και την αντίστοιχη διακριτική ικανότητα. Για παράδειγμα με το ελάχιστο προκαθορισμένο κέρδος η περιοχή μέτρησης περιορίζεται στα ±400mA με διακριτική ικανότητα 0,1mA. Κάθε αναλογικοψηφιακή μετατροπή σε ακρίβεια 12bit διαρκεί 532μs. Το ολοκληρωμένο μπορεί να προγραμματιστεί για συνεχή τρόπο λειτουργίας, κατά τoν οποίo με τη λήξη μιας μετατροπής ξεκινάει αυτόματα μια άλλη μετατροπή, ενώ το αποτέλεσμα διατηρείται στο σχετικό καταχωρητή του ολοκληρωμένου. Ένα επιπλέον σημαντικό χαρακτηριστικό του ΙΝΑ219 είναι η δυνατότητα λήψης 2(N = 1..7) διαδοχικών μετατροπών και η επιστροφή του μέσου όρου τους, με αποτέλεσμα τη μείωση του ψηφιακού θορύβου αλλά με σημαντική αύξηση του απαιτούμενου χρόνου για τη μετατροπή. Η επικοινωνία του ολοκληρωμένου με τον Arduino υλοποιείται μέσω του δισύρματου διαύλου I2C.
Στο σχήμα που ακολουθεί φαίνεται ο τρόπος συνδεσμολογίας της έτοιμης μονάδας INA219 στον Arduino. Περιλαμβάνεται και ένα απλό κύκλωμα αποτελεούμενο από δύο αντιστάσεις συνδεδεμένες σε σειρά και τροφοδοτούμενες από μπαταρία των 9V.

Σύνδεση μονάδας ΙΝΑ219 στον Arduino

Υπάρχουν διάφορες βιβλιοθήκες που απλοποιούν τον προγραμματισμό του Arduino για τη μέτρηση της έντασης ρεύματος με τη μονάδα INA219:
Στα επόμενα παραδείγματα χρησιμοποιούμε τη βιβλιοθήκη του Korneliusz Jarzebski. Στο πρώτο παράδειγμα μετράμε την ένταση του ρεύματος που διαρρέει το απλό κύκλωμα της προηγούμενης εικόνας.

/*
    INA219 Bi-directional Current/Power Monitor.
    First Example.
*/

#include <Wire.h>
#include <INA219.h>

INA219 ina;

void setup()
{
   Serial.begin(115200);

   Serial.println("INA219 Current monitor");
   Serial.println("------------------------------");

   // Default INA219 address is 0x40
   ina.begin();

   // Configure INA219
   // INA219_RANGE_32V: Max input Voltage = 32V
   // INA219_GAIN_320MV:Max ShuntVoltage = 320mV - Current range  ±3,2 A
   // INA219_BUS_RES_12BIT: ACD precision 12bit
   // INA219_SHUNT_RES_12BIT_1S: 1 measurement =  1 Conversion
   ina.configure( INA219_RANGE_32V,                    
                          INA219_GAIN_320MV,                                                                                  
                          INA219_BUS_RES_12BIT,            
                          INA219_SHUNT_RES_12BIT_1S
                         );

   // Calibrate INA219
   //Rshunt = 0.1 ohm, Max excepted current = 2A
   ina.calibrate(0.1, 2);
}

void loop()
{
   Serial.print("Current: ");
   Serial.print(ina.readShuntCurrent(), 3);
   Serial.println(" A");
   delay(1000);
}

Μπορούμε να χρησιμοποιήσουμε τη δυνατότητα του ΙΝΑ219 λήψης πολλών διαδοχικών δειγμάτων από αντίστοιχο αριθμό μετατροπών και επιστροφής του μέσου όρου τους, π.χ. με την εντολή:

configure(INA219_RANGE_32V, INA219_GAIN_320MV, INA219_BUS_RES_12BIT, INA219_SHUNT_RES_12BIT_16S)

η τιμή της έντασης ρεύματος που λαμβάνουμε είναι ο μέσος όρος 16 διαδοχικών δειγμάτων.

Επιπλέον το ΙΝΑ219 έχει τη δυνατότητα μέτρησης της τάσης μεταξύ του ακροδέκτη του V- και της γείωσης, καθώς και την τάση στα άκρα της παρεμβαλόμενης στο κύκλωμα αντίστασης. Το άθροισμα των δύο αυτών τάσεων είναι η συνολική τάση στα άκρα του προς μέτρηση κυκλώματος. Προφανώς γνωρίζοντας την τάση στα άκρα του κυκλώματος και το ρεύμα που το διαρρέει, είμαστε σε θέση να προσδιορίσουμε και την ισχύ που καταναλώνει. Για να εκμεταλλευτούμε τη δυνατότητα αυτή πρέπει να συνδεθεί η γείωση του Arduinο στον αρνητικό πόλο της μπαταρίας.

Τροποποιημένο κύκλωμα

Το αντίστοιχο sketch του Arduino παίρνει τη μορφή:

/*
    INA219 Bi-directional Current/Power Monitor.
    Second Example.
*/

#include <Wire.h>
#include <INA219.h>

INA219 ina;

void setup()
{
  Serial.begin(115200);

  Serial.println("INA219 Current/Power monitor");
  Serial.println("----------------------------");

  // Default INA219 address is 0x40
  ina.begin();

  // Configure INA219
  ina.configure( INA219_RANGE_32V,
                         INA219_GAIN_320MV,
                         INA219_BUS_RES_12BIT,
                         INA219_SHUNT_RES_12BIT_16S
                       );

  // Calibrate INA219.
  // Rshunt = 0.1 ohm, Max excepted current = 2A
  ina.calibrate(0.1, 2);
}

void loop()
{
  Serial.print("Current: ");
  Serial.print(ina.readShuntCurrent(), 3);
  Serial.println(" A");
  Serial.print("Bus Voltage: ");
  Serial.print(ina.readBusVoltage(), 4);
  Serial.println(" V");
  Serial.print("Total Voltage: ");
  Serial.print(ina.readBusVoltage()+ina.readShuntVoltage(), 4);
  Serial.println(" V");
  Serial.print("Bus Power: ");
  Serial.print(ina.readBusPower(), 4);
  Serial.println(" W");
  while(1);
}

Τα αποτελέσματα του sketch για το παραπάνω κύκλωμα λαμβάνονται στο σειριακό τερματικό:

Τα αποτελέσματα του 2ου sketch


Δεν υπάρχουν σχόλια:

Δημοσίευση σχολίου