INA3221: Ukur Voltan & Arus Tiga Rel Serentak dengan ESP32

Cartoon of a black INA3221 board with three chunky shunt resistors, a red, an orange and a yellow wire each looping through its own channel, and a small blue OLED module showing three white traces

Satu modul INA3221 memerhati tiga rel kuasa serentak. Lalukan setiap rel melalui salah satu daripada tiga perintang shunt 0.1 Ξ©-nya, sambungkan SDA dan SCL ke ESP32, dan voltan, arus serta kuasa secara langsung untuk ketiga-tiga laluan tiba melalui satu bus I2C sahaja. Panduan ini mendawaikan semuanya dan menukar angka-angka itu menjadi paparan langsung pada OLED.

Bagaimana INA3221 mengukur arus?

INA3221 mengukur arus dengan meletakkan rintangan yang diketahui di dalam laluan dan membaca voltan yang muncul merentasinya. Setiap satu daripada tiga salurannya ialah perintang 0.1 Ξ© β€” blok bertanda R100 β€” dan hukum Ohm menguruskan selebihnya: 100 mA melalui 0.1 Ξ© menjatuhkan tepat 10 mV. ADC pembezaan cip ini membaca susutan itu dan menyerahkannya melalui I2C β€” bahagikan dengan rintangan, yang library dalam sketch buat untuk anda, dan dapatlah arus. Ia turut mengukur voltan setiap rel pada sisi beban shunt, jadi satu saluran menghasilkan volt, miliamp dan miliwatt sekali gus.

Shunt itu sengaja dibuat kecil. Datasheet TI memberikan input shunt julat skala penuh Β±163.8 mV, jadi beban berat hanya mengorbankan sedikit sahaja daripada rel: pada 500 mA, susutan merentasi 0.1 Ξ© ialah 50 mV β€” satu peratus daripada rel 5 V β€” sebab itulah meter ini boleh duduk kekal di dalam projek tanpa melaparkannya. Cip ini menderia secara high-side: pada wayar positif, antara bekalan dan beban, jadi ground kekal utuh dan dikongsi β€” shunt low-side dalam laluan pulang ground akan mengangkat “sifar volt” beban sebanyak susutan shunt, dan setiap isyarat yang merujuk kepada ground, termasuk I2C, akan bergoyang mengikut beban.

Angka yang sama menerangkan satu-satunya peraturan pendawaian yang boleh berakhir dengan asap. Saluran mesti duduk sesiri β€” rel dipotong terbuka, arus masuk melalui satu lubang saluran dan keluar melalui lubang satu lagi. Sambungkan sepasang lubang saluran selari merentasi rel pula, dan anda baru sahaja meletakkan 0.1 Ξ© terus dari bekalan ke laluan pulang: hukum Ohm meminta 50 A daripada rel 5 V, dan bekalan, wayar atau shunt itu yang menyerah dahulu.

Perbandingan keselamatan kartun menunjukkan wayar merah dipotong dan dilalukan dengan betul melalui saluran shunt INA3221 dengan tanda betul hijau, berbanding wayar tanpa potong yang disadap merentasi kedua-dua lubang membuatkan shunt membara panas, dengan tanda silang merah
Shunt duduk di dalam wayar, bukan merentasinya. Potong rel dan lalukan melalui saluran; menyadap kedua-dua lubang daripada rel yang tidak dipotong ialah litar pintas 0.1 Ξ©.

Ketiga-tiga saluran benar-benar bebas β€” setiap pasangan lubang besar di tepi bawah bersambung hanya kepada shunt-nya sendiri, dan pasangan itu berlabel VIN1+/VIN1βˆ’ hingga VIN3+/VIN3βˆ’ di belakang board (muka depan hanya menunjukkan CH1–CH3). Yang mesti dikongsi ialah ground: cip mengukur voltan setiap rel relatif kepada pin GND-nya sendiri, jadi ground board ini bercantum dengan ground apa sahaja yang diukurnya.

Parts list

ItemPriceQty
Soldering Service for Circuit Boards & Electronics - 10 Pins Soldering ServiceSoldering Service for Circuit Boards & Electronics - 10 Pins Soldering ServiceSOLSE10RM1.40

INA3221 tiba tanpa disolder langsung: header 8 pin berserta wayar beban untuk saluran yang anda guna. Tambah servis soldering 10 pin dan kami pasangkan untuk anda β€” untuk sambungan penuh tiga saluran, mesej kami di WhatsApp tentang bilangan pin dahulu.

Apa yang perlu disolder sebelum semuanya berfungsi?

Modul INA3221 dihantar sebagai board kosong dengan jalur header male 8 pin yang terpisah β€” kesemua tujuh belas lubang bersalutnya masih kosong, jadi soldering datang dahulu. Header itu masuk ke baris kecil di tepi atas (pad segi empat menandakan pin 1), dan panduan solder header kami merangkumi tekniknya. Pasangan saluran dan blok VPU/GND/GND pula ialah lubang lebih besar berskala wayar: solder potongan wayar breadboard teras pepejal ke dalam saluran yang anda rancang guna β€” teras pepejal mengekalkan bentuknya dan menerima solder dengan bersih β€” atau pasang screw terminal KF301 jika anda lebih suka mengapit rel anda.

Bagaimana cara mendawai INA3221 dan OLED ke ESP32?

Header 8 pin INA3221 berbunyi, dari pin 1 bertanda segi empat: VS, GND, SCL, SDA, kemudian PV, CRI, WAR dan TC. Hanya empat yang pertama penting hari ini β€” selebihnya ialah output amaran open-drain: CRI dan WAR menyala pada had arus per-saluran yang anda programkan, PV menandakan semua rel sudah naik, dan TC memeriksa penjujukan bekalan kuasa semasa hidup; biarkan semuanya tidak bersambung buat masa ini. Cip ini berjalan daripada 2.7–5.5 V, jadi rel 3.3 V ESP32 membekalkannya terus:

Pin modul Pin ESP32 Kenapa
INA3221 VS 3V3 Bekalan cip β€” julat 2.7–5.5 V, jadi aras logik 3.3 V memang sepadan dari reka bentuknya
INA3221 GND GND Rujukan untuk bacaan voltan bus dan untuk bus I2C
INA3221 SCL D22 Clock I2C lalai core Arduino ESP32
INA3221 SDA D21 Data I2C lalai core Arduino ESP32
OLED GND GND Header modul ini GND dahulu: GND VCC SCL SDA
OLED VCC 3V3 SSD1306 berjalan lancar daripada 3.3 V
OLED SCL D22 Wayar yang sama dengan SCL INA3221 β€” itulah gunanya sebuah bus
OLED SDA D21 Wayar yang sama dengan SDA INA3221

Setiap lompatan ialah pin-modul ke pin-modul, jadi jumper female-to-female menampung semuanya tanpa breadboard: board ESP32 dan OLED 0.96 inci tiba dengan header male sedia disolder, dan INA3221 menawarkan pin male sebaik jalur headernya terpasang. Perhatikan susunan header GND-dahulu OLED dalam jadual β€” terbalik daripada kebanyakan modul hobi. INA3221 sendiri sama senang didawai ke Arduino 5 V klasik: VS ke 5V, SDA ke A4, SCL ke A5.

Kemudian barulah rel-rel itu sendiri. Lalukan setiap laluan yang anda mahu perhati melalui satu saluran: sisi bekalan masuk ke VIN+, sisi beban keluar dari VINβˆ’, sehingga 26 V setiap saluran β€” DC voltan rendah sahaja, dan jangan sesekali dekat dengan bekalan mains. Trio pertama yang semula jadi untuk projek ESP32: saluran 1 mengambil bekalan board itu sendiri β€” program melalui USB dahulu, kemudian cabut kabel dan kuasakan ESP32 melalui pin VIN-nya pula, wayar positif bekalan 5 V masuk ke VIN1+, keluar dari VIN1βˆ’ menuju VIN, dan ground bekalan bercantum dengan GND ESP32 β€” supaya setiap miliamp yang ditarik board itu melintasi shunt. Saluran 2 mengambil wayar dari pin 3V3 ke sensor anda, dan saluran 3 satu laluan bateri seperti dalam panduan pengecasan TP4056 kami. Cantumkan GND INA3221 dengan ground projek yang diukur; saluran yang membaca negatif cuma bermakna dua wayarnya tertukar.

Bagaimana dua peranti I2C berkongsi dua wayar yang sama?

OLED dan INA3221 hidup bersama di D21/D22 kerana I2C ialah bus beralamat: setiap transaksi bermula dengan master memanggil satu alamat 7-bit, dan hanya peranti yang memilikinya menjawab sementara yang lain berdiam. Paparan ini menjawab pada 0x3C (silkscreen modul menulis 0x78 β€” alamat yang sama dengan bit baca/tulis dilekatkan di hujungnya); INA3221 menjawab pada 0x40 seperti yang dihantar β€” alamat yang dipilih pin A0-nya apabila diikat ke GND. Pasangan pad solder di tepi kiri board mengikat semula A0, membolehkan empat board pada satu bus β€” dua belas rel dipantau:

Pad A0 dijambatkan ke Alamat I2C
GND (seperti dihantar) 0x40
VS 0x41
SDA 0x42
SCL 0x43

Sebelum sebarang binaan I2C berbilang peranti, jalankan sketch I2C scanner dan sahkan kedua-dua 0x3C dan 0x40 muncul. Sepuluh saat mengimbas menukar “kenapa skrin saya kosong” kepada “bus okay, cari punca di tempat lain”.

Macam mana rupa sketch monitor ini?

Pasang INA3221_RT oleh Rob Tillaart dan Adafruit SSD1306 daripada Library Manager (biarkan IDE menarik dependency apabila ia bertanya). Sketch ini mencetak volt, miliamp dan miliwatt untuk ketiga-tiga saluran beberapa kali sesaat, dan antara setiap refresh ia terus mensampel saluran 1 dengan pantas, mengingati arus tertinggi yang pernah dilihatnya β€” baris peak-hold yang maksud sebenarnya dijelaskan bahagian seterusnya.

// ESP32 + INA3221: volt, miliamp dan miliwatt secara langsung untuk tiga rel
// pada OLED 0.96in. Kedua-dua peranti kongsi satu bus I2C: SDA = D21, SCL = D22.
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <INA3221.h>            // library "INA3221_RT" oleh Rob Tillaart

Adafruit_SSD1306 oled(128, 64, &Wire, -1);
INA3221 ina(0x40);              // seperti dihantar; pad A0 mengalihkannya ke 0x41-0x43

float peak = 0;                 // arus CH1 tertinggi dilihat sejak boot, mA

void setup() {
  Serial.begin(115200);
  Wire.begin();                 // lalai ESP32: SDA 21, SCL 22

  if (!ina.begin()) {
    Serial.println("INA3221 not found at 0x40 - check wiring and address");
    while (true) delay(100);
  }
  ina.setShuntR(0, 0.100);      // tiga perintang R100 pada board
  ina.setShuntR(1, 0.100);
  ina.setShuntR(2, 0.100);

  oled.begin(SSD1306_SWITCHCAPVCC, 0x3C);   // modul ini menjawab pada 0x3C
  oled.setTextColor(SSD1306_WHITE);
}

void loop() {
  // Antara refresh skrin, terus sampel CH1 dengan pantas dan ingat
  // bacaan tertinggi - inilah yang menangkap burst penghantaran WiFi.
  for (int i = 0; i < 40; i++) {
    float mA = ina.getCurrent_mA(0);
    if (mA > peak) peak = mA;
    delay(5);
  }

  oled.clearDisplay();
  oled.setTextSize(1);
  for (uint8_t ch = 0; ch < 3; ch++) {
    oled.setCursor(0, ch * 12);                    // satu baris setiap rel
    oled.print("CH");
    oled.print(ch + 1);
    oled.print(" ");
    oled.print(ina.getBusVoltage(ch), 2);          // volt pada VIN-
    oled.print("V ");
    oled.print(ina.getCurrent_mA(ch), 0);          // susutan shunt / 0.1 ohm
    oled.print("mA ");
    oled.print(ina.getPower_mW(ch), 0);            // hasil darab kedua-duanya
    oled.print("mW");
  }
  oled.setCursor(0, 44);
  oled.print("CH1 peak: ");
  oled.print(peak, 0);
  oled.print(" mA");
  oled.display();
}

Ia compile kepada 307,644 bait β€” bawah satu perempat daripada ruang sketch ESP32. Library ini tidak pernah mereka-reka angka: ia membaca register voltan-shunt mentah, membahagi dengan 0.1 Ξ© yang anda beritahu dalam setShuntR(), dan mendarabnya dengan voltan bus untuk mendapatkan kuasa β€” sebab itulah board dengan shunt berbeza hanya perlukan satu baris itu diubah.

Apa yang angka-angka ini boleh beritahu anda β€” dan apa yang tidak?

Resolusi INA3221 datang terus daripada langkah ADC-nya. Register shunt mengira dalam langkah 40 Β΅V, dan 40 Β΅V merentasi 0.1 Ξ© ialah 0.4 mA β€” perubahan arus terkecil yang mampu ditunjukkan sesuatu bacaan. Susun penuh kesemua 4095 langkah dan anda dapat skala penuh Β±163.8 mV tadi, yang apabila dibahagikan dengan 0.1 Ξ© yang sama menetapkan silingnya: kira-kira Β±1.6 A setiap saluran. Melepasi skala penuh, bacaan itu clip dan bukannya terus menaik β€” anggap bacaan yang terpaku dekat 1638 mA sebagai “melebihi skala”, bukan satu ukuran.

Sebab untuk membina monitor langsung ini, sedangkan multimeter sudah pun boleh mengukur arus, ialah masa. Meter pegang tangan refresh beberapa kali sesaat dan menunjukkan nilai yang sudah dilicinkan β€” tepat betul untuk beban stabil, tepat salah untuk ESP32, yang penghantaran WiFi-nya ialah burst berskala milisaat yang dilipat puratanya ke latar belakang. INA3221 menukar secara berterusan β€” pada lalainya 1.1 ms setiap penukaran, ia menyapu shunt dan bus pada ketiga-tiga saluran lebih kurang setiap 7 ms β€” dan peak-hold sketch ini menyimpan apa sahaja yang ditangkap sapuan itu. Sketch monitor ini tidak sesekali menghidupkan radio sendiri, jadi berikan ia sesuatu untuk ditangkap β€” gabungkan kod WiFi projek anda ke dalamnya, atau tambah sahaja satu sambungan WiFi.begin() kosong, yang burst penghantarannya ialah tepat jenis pancang ini. Perhatikan baris peak duduk jauh di atas bacaan idle, dan amaran panduan power supply ESP32 kami tentang bekalan lemah yang brownout ketika burst WiFi berhenti menjadi nasihat dan menjadi angka di atas meja anda.

Kartun surih arus dengan pancang tinggi dan sempit, multimeter kuning di bawahnya hanya menunjukkan garis purata yang rata manakala modul OLED biru menghasilkan semula pancang itu dengan setia
Wayar yang sama, dua pandangan: paparan multimeter melicinkan burst WiFi milisaat ke latar belakang, manakala monitor yang mensampel berterusan menangkap dan menyimpannya.

Kesilapan biasa yang kami nampak daripada pelanggan sebenar

Saluran didawai merentasi rel dan bukannya ke dalamnya. Itulah litar pintas selari yang disebut tadi β€” 0.1 Ξ© terus merentasi bekalan. Rel mesti dipotong, semua arusnya masuk VIN+ dan keluar VINβˆ’.

Voltan baca elok, arus baca sifar selama-lamanya. Menyadap VIN+ pada rel tanpa memotongnya terbuka memang mengukur voltannya dengan senang hati, tetapi arus beban masih mengikut laluan lamanya β€” tiada yang mengalir melalui shunt, jadi tiada apa untuk dibaca.

Tiada ground dikongsi dengan projek yang diukur. Cip mengukur setiap voltan bus relatif kepada pin GND-nya sendiri. Kuasakan monitor daripada satu bekalan dan projek daripada bekalan lain tanpa mencantumkan ground, dan bacaan voltan terapung menjadi karut.

OLED didawai VCC-dahulu ikut tabiat. Header paparan ini GND VCC SCL SDA, ground dahulu, jadi mendawai ikut tabiat daripada modul lain menterbalikkan bekalannya. Baca silkscreen setiap kali sebelum kuasa dihidupkan.

Beban 2 A “terukur” 1.6 A. Itu julat shunt Β±163.8 mV yang clip, bukan arus sebenar β€” zon terbaik board ini ialah dunia bawah 1.6 A, tempat kebanyakan projek ESP32 memang hidup.

Soalan Lazim

Bolehkah INA3221 mengukur lebih daripada 1.6 A?

Tidak dengan shunt 0.1 Ξ© yang terpasang pada board ini: input shunt cip Β±163.8 mV dibahagi 0.1 Ξ© menghadkan setiap saluran pada kira-kira Β±1.638 A, dan bacaan clip di situ. Cip itu sendiri hanya nampak milivolt, jadi board yang dibina dengan shunt lebih kecil menukar resolusi dengan julat β€” langkah 0.4 mA membesar mengikut kadar yang sama.

Apa beza antara INA3221 dan INA219?

INA219 ialah idea yang sama β€” monitor shunt I2C high-side β€” dengan satu saluran setiap cip. INA3221 memberikan tiga saluran di sebalik satu alamat, tambah amaran warning dan critical boleh program bagi setiap saluran β€” padanan lebih baik untuk memerhati keseluruhan pokok kuasa sesebuah projek.

Adakah INA3221 berfungsi dengan board 3.3 V seperti ESP32?

Ya. Julat bekalan cip ialah 2.7–5.5 V, jadi ia berjalan terus daripada pin 3V3 ESP32 dan talian I2C-nya duduk pada aras 3.3 V yang selamat. Angka 26 V itu ialah siling untuk rel yang diukur, bukan untuk bekalan cip itu sendiri.

Kenapa bacaan arus saya negatif?

Arus dikira positif apabila mengalir dari VIN+ ke VINβˆ’, jadi tanda negatif bermakna dua wayar saluran itu tertukar β€” tiada apa yang rosak. Tukarkan kedudukan keduanya, atau kekalkan tanda itu untuk memerhati arus mengalir dua hala, seperti pada laluan bateri yang mengecas dan menyahcas.

Perlukah saya sambung pin amaran (PV, CRI, WAR, TC) untuk binaan ini?

Tidak β€” sketch ini poll bacaan melalui I2C dan tidak menyentuhnya langsung. Pin itu untuk tindak balas perkakasan tanpa perisian: setiap saluran boleh menarik CRI atau WAR ke bawah sebaik sahaja arusnya melepasi had yang diprogramkan. Pin ini open-drain; lubang VPU membias hanya output power-valid (PV), bukan amaran yang lain.

Kartun binaan atas meja dengan board ESP32 hitam dihubungkan oleh wayar jumper warna-warni ke board monitor INA3221 hitam dan modul OLED biru, dengan wayar merah melengkung melalui satu saluran pengukuran
Monitor yang siap: jumper female-to-female membawa bus I2C yang dikongsi dari ESP32 ke kedua-dua modul, dan rel yang diperhati melengkung melalui wayar tersolder saluran 1.

Masalah kuasa berhenti menjadi tekaan sebaik sahaja tarikan sebenar setiap rel menjadi angka yang boleh anda perhati. Dawaikan shunt sesiri, kongsikan ground, dan lain kali ada yang brownout, anda akan tahu laluan mana puncanya β€” dan berapa miliamp.

Kemas kini terakhir Ogos 2026. Tersangkut? Chat dengan kami di WhatsApp.

Leave a Reply

Your email address will not be published. Required fields are marked *