chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

零知派——STM32驅(qū)動(dòng)INA219電流功率監(jiān)測計(jì)實(shí)現(xiàn)高精度電源管理

零知實(shí)驗(yàn)室 ? 來源:PCB56242069 ? 作者:PCB56242069 ? 2026-04-18 15:07 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

? 一款基于零知派標(biāo)準(zhǔn)板的高精度電流/電壓/功率監(jiān)測解決方案

?零知派(零知開源)是一個(gè)專為電子初學(xué)者/電子興趣愛好者設(shè)計(jì)的開源軟硬件平臺(tái),在硬件上提供超高性價(jià)比STM32系列開發(fā)板、物聯(lián)網(wǎng)控制板。取消了Bootloader程序燒錄,讓開發(fā)重心從“配置環(huán)境”轉(zhuǎn)移到“創(chuàng)意實(shí)現(xiàn)”,極大降低了技術(shù)門檻。零知開源編程軟件,內(nèi)置上千個(gè)覆蓋多場景的示例代碼,支持項(xiàng)目源碼一鍵下載,項(xiàng)目文章在線瀏覽。零知派(零知開源)平臺(tái)通過軟硬件協(xié)同創(chuàng)新,讓你的創(chuàng)意快速轉(zhuǎn)化為實(shí)物,來動(dòng)手試試吧!

?訪問零知實(shí)驗(yàn)室,獲取更多實(shí)戰(zhàn)項(xiàng)目和教程資源吧!

www.lingzhilab.com

目錄

一、硬件系統(tǒng)設(shè)計(jì)

1.1 硬件清單

1.2 接線方案表

1.3 具體接線圖

1.4 連接實(shí)物圖

二、軟件架構(gòu)設(shè)計(jì)

2.1 系統(tǒng)初始化

2.2 數(shù)據(jù)采集與處理

2.3?UI顯示功能

2.4 INA219庫文件解析

三、項(xiàng)目演示

3.1?監(jiān)測過程與比較

3.2 萬用表對(duì)比測試

3.3 視頻演示

四、INA219 電流功率監(jiān)測計(jì)技術(shù)講解

4.1 INA219工作原理

4.2?I2C通信協(xié)議

4.3?寄存器配置

五、常見問題解答(Q&A)

Q1:測量值不準(zhǔn)確怎么辦?

Q2:軟件 I2C 通信不穩(wěn)定怎么辦?

Q3:軟件I2C通信失敗如何排查?


(1)項(xiàng)目概述

本項(xiàng)目基于STM32F103RBT6微控制器零知派INA219電流功率監(jiān)測計(jì),實(shí)現(xiàn)了一個(gè)高精度的電源監(jiān)控系統(tǒng)。該系統(tǒng)能夠?qū)崟r(shí)監(jiān)測電路中的總線電壓、電流消耗功率輸出,并通過ST7789 TFT顯示屏進(jìn)行可視化展示。通過軟件I2C(SoftWire)驅(qū)動(dòng)INA219傳感器,實(shí)現(xiàn)了穩(wěn)定的數(shù)據(jù)采集和實(shí)時(shí)波形顯示

(2)項(xiàng)目難點(diǎn)及解決方案

問題描述:INA219 庫默認(rèn)使用硬件 I2C 通信,與零知標(biāo)準(zhǔn)板的 STM32F103RBT6 存在兼容性問題

解決方案:將INA219庫中所有TwoWire類型替換為SoftWire類型;調(diào)整構(gòu)造函數(shù),使其接受SoftWire指針參數(shù)

一、硬件系統(tǒng)設(shè)計(jì)

1.1 硬件清單

序號(hào) 元件名稱 型號(hào)規(guī)格 數(shù)量
1 主控板 零知派標(biāo)準(zhǔn)板(STM32F103RBT6) 1
2 電流功率監(jiān)測計(jì) 零知派INA219 1
3 顯示屏 ST7789(240×320) 1
5 杜邦線 公對(duì)公、公對(duì)母 若干
6 USB 數(shù)據(jù)線 Mini USB 1
7 LED 模塊 5mm 發(fā)光二極管 1

1.2 接線方案表

元件 引腳 連接到 零知派標(biāo)準(zhǔn)板的引腳 備注
INA219 SCL A5 軟件 I2C 時(shí)鐘
SDA A4 軟件 I2C 數(shù)據(jù)線
VCC 3.3V 傳感器電源
GND GND 接地
Vin+ 被測電源正極/3.3V
Vin- 負(fù)載正極 通過 0.1Ω 電阻連接到 Vin+
ST7789 直插 直插零知派標(biāo)準(zhǔn)板TFT擴(kuò)展引腳 硬件 SPI通信

INA219電流功率監(jiān)測計(jì)的Vin+接3.3V供電電源、Vin-接負(fù)載(本項(xiàng)目連接到LED模塊IN引腳)

1.3 具體接線圖

INA219與零知派標(biāo)準(zhǔn)板通過軟件I2C進(jìn)行通信;各器件接線、LED模塊按照代碼接線所示:

wKgZPGnjKAWANOOyAA6teFK-uO0166.png

1.4 連接實(shí)物圖

wKgZPGnjKC-AO1wFAC1r3NvLiYw261.png

二、軟件架構(gòu)設(shè)計(jì)

2.1 系統(tǒng)初始化

void setup(void) {
  Serial.begin(115200);          // 初始化串口通信
  tft.init(240, 320);            // 初始化TFT顯示屏
  tft.invertDisplay(false);      // 設(shè)置顯示方向
  tft.setRotation(1);            // 旋轉(zhuǎn)顯示屏
  tft.fillScreen(BACKGROUND);    // 清屏
  showSplashScreen();            // 顯示啟動(dòng)畫面
  delay(1500);
  
  sw.begin();                    // 初始化軟件I2C
  sw.setClock(100000);           // 設(shè)置I2C時(shí)鐘頻率為100kHz
  
  if (!INA.begin()) {            // 初始化INA219傳感器
    Serial.println("Failed to find INA219 chip");
    while (1) { delay(10); }     // 初始化失敗則死循環(huán)
  }
  
  // 校準(zhǔn)傳感器:最大電流0.5A,分流電阻0.1Ω
  if (!INA.setMaxCurrentShunt(0.5, 0.1)) {
    Serial.println("Calibration failed!");
    while(1);                    // 校準(zhǔn)失敗則死循環(huán)
  }
  
  // 初始化歷史數(shù)據(jù)緩沖區(qū)
  for (int i = 0; i < HISTORY_SIZE; i++) {
    voltageHistory[i] = 0;
    currentHistory[i] = 0;
    powerHistory[i] = 0;
  }
  
  drawStaticUI();                // 繪制靜態(tài)UI界面
  Serial.println("System initialized");
  Serial.print("INA219_LIB_VERSION: ");
  Serial.println(INA219_LIB_VERSION);
}

初始化軟件 I2C 并設(shè)置通信速率,進(jìn)行INA219傳感器校準(zhǔn);初始化歷史數(shù)據(jù)緩沖區(qū),用于存儲(chǔ)繪圖數(shù)據(jù)

2.2 數(shù)據(jù)采集與處理

void loop(void) {
  // 讀取傳感器數(shù)據(jù)
  float busVoltage = INA.getBusVoltage();      // 讀取總線電壓(V)
  float current = INA.getCurrent_mA() - 0.8;   // 讀取電流(mA)并進(jìn)行零點(diǎn)校準(zhǔn)
  float power = INA.getPower_mW();             // 讀取功率(mW)
  
  // 存儲(chǔ)歷史數(shù)據(jù)
  voltageHistory[historyIndex] = busVoltage;
  currentHistory[historyIndex] = current;
  powerHistory[historyIndex] = power;
  
  // 更新UI顯示
  updateUI(busVoltage, current, power);
  
  // 更新歷史數(shù)據(jù)索引(循環(huán)緩沖區(qū))
  historyIndex = (historyIndex + 1) % HISTORY_SIZE;
  
  // 串口輸出數(shù)據(jù)
  Serial.println("ntBUSttSHUNTttCURRENTttPOWERttOVFttCNVR");
  Serial.print("t");
  Serial.print(busVoltage, 2);
  Serial.print("tt");
  Serial.print(INA.getShuntVoltage_mV(), 2);
  Serial.print("tt");
  Serial.print(current, 2);
  Serial.print("tt");
  Serial.print(power, 2);
  Serial.print("tt");
  Serial.print(INA.getMathOverflowFlag());  // 數(shù)學(xué)溢出標(biāo)志
  Serial.print("tt");
  Serial.print(INA.getConversionFlag());    // 轉(zhuǎn)換完成標(biāo)志
  Serial.println();
  
  delay(1000);  // 1秒刷新一次
}

每秒從 INA219 讀取總線電壓、電流和功率;使用循環(huán)緩沖區(qū)將新數(shù)據(jù)存入歷史緩沖區(qū),實(shí)現(xiàn)數(shù)據(jù)的滾動(dòng)存儲(chǔ)

2.3UI顯示功能

void updateUI(float voltage, float current, float power) {
  updatePanelValues(voltage, current, power);  // 更新右側(cè)面板的實(shí)時(shí)數(shù)據(jù)
  
  // 清除圖表區(qū)域并重新繪制坐標(biāo)軸
  tft.fillRect(GRAPH_X + 1, GRAPH_Y + 1, GRAPH_WIDTH - 1, GRAPH_HEIGHT - 1, BACKGROUND);
  drawAxes();
  
  // 計(jì)算最大值用于自動(dòng)縮放
  float maxVal = 0.1;  // 確保至少有一個(gè)較小的初始值
  for (int i = 0; i < HISTORY_SIZE; i++) {
    if (voltageHistory[i] > maxVal) maxVal = voltageHistory[i];
    if (currentHistory[i] > maxVal) maxVal = currentHistory[i];
    if (powerHistory[i] > maxVal) maxVal = powerHistory[i];
  }
  maxVal *= 1.15;  // 增加15%的余量
  
  // 繪制歷史曲線
  for (int i = 1; i < HISTORY_SIZE; i++) {
    // 計(jì)算歷史索引(循環(huán)緩沖區(qū))
    int prevIndex = (historyIndex + i - 1) % HISTORY_SIZE;
    int currIndex = (historyIndex + i) % HISTORY_SIZE;
    
    // 計(jì)算X坐標(biāo)
    int x1 = GRAPH_X + (i-1) * 2;
    int x2 = GRAPH_X + i * 2;
    if (x2 > GRAPH_X + GRAPH_WIDTH) break;  // 超出圖表區(qū)域則停止
    
    // 繪制電壓曲線(黃色)
    int y1_voltage = GRAPH_Y + GRAPH_HEIGHT - constrain(voltageHistory[prevIndex] / maxVal * GRAPH_HEIGHT, 0, GRAPH_HEIGHT);
    int y2_voltage = GRAPH_Y + GRAPH_HEIGHT - constrain(voltageHistory[currIndex] / maxVal * GRAPH_HEIGHT, 0, GRAPH_HEIGHT);
    tft.drawLine(x1, y1_voltage, x2, y2_voltage, VOLTAGE_COLOR);
    
    // 繪制電流曲線(綠色)
    int y1_current = GRAPH_Y + GRAPH_HEIGHT - constrain(currentHistory[prevIndex] / maxVal * GRAPH_HEIGHT, 0, GRAPH_HEIGHT);
    int y2_current = GRAPH_Y + GRAPH_HEIGHT - constrain(currentHistory[currIndex] / maxVal * GRAPH_HEIGHT, 0, GRAPH_HEIGHT);
    tft.drawLine(x1, y1_current, x2, y2_current, CURRENT_COLOR);
    
    // 繪制功率曲線(青色)
    int y1_power = GRAPH_Y + GRAPH_HEIGHT - constrain(powerHistory[prevIndex] / maxVal * GRAPH_HEIGHT, 0, GRAPH_HEIGHT);
    int y2_power = GRAPH_Y + GRAPH_HEIGHT - constrain(powerHistory[currIndex] / maxVal * GRAPH_HEIGHT, 0, GRAPH_HEIGHT);
    tft.drawLine(x1, y1_power, x2, y2_power, POWER_COLOR);
  }
  
  // 繪制Y軸刻度值
  tft.setTextColor(0xAD75);
  tft.setTextSize(1);
  tft.setCursor(GRAPH_X + 2,GRAPH_Y + 5);
  tft.print(maxVal, 1);                // 最大值
  tft.setCursor(GRAPH_X + 2,GRAPH_Y + GRAPH_HEIGHT/2 + 5);
  tft.print(maxVal/2, 1);              // 中間值
  tft.setCursor(GRAPH_X - 5, GRAPH_Y + GRAPH_HEIGHT + 5);
  tft.print("0");                      // 最小值
}

采用自動(dòng)縮放機(jī)制,根據(jù)歷史數(shù)據(jù)的最大值動(dòng)態(tài)調(diào)整 Y 軸范圍;使用不同顏色繪制三條曲線,分別表示電壓、電流和功率

項(xiàng)目代碼

/**************************************************************************************
 * 文件: /STM32F103_INA219_RealTime_PowerMonitor/STM32F103_INA219_RealTime_PowerMonitor.ino
 * 作者:零知派(深圳市在芯間科技有限公司)
 * -^^- 零知派,讓電子制作變得更簡單! -^^-
 * 時(shí)間: 2026-4-16 15:30:45
 * 說明: 基于零知派標(biāo)準(zhǔn)板(STM32F103RBT6主控)和零知派INA219電流功率監(jiān)測計(jì),通過軟件I2C(SoftWire)實(shí)現(xiàn)傳感器穩(wěn)定通信。
 *       實(shí)時(shí)采集總線電壓、負(fù)載電流及功率數(shù)據(jù),在ST7789 TFT屏可視化展示實(shí)時(shí)數(shù)值與歷史趨勢曲線,同步串口輸出數(shù)據(jù)供調(diào)試分析。
 ***************************************************************************************/

#include "INA219.h"
#include       // 圖形顯示基礎(chǔ)庫(適配ST7789)
#include    // ST7789 TFT屏硬件驅(qū)動(dòng)庫
#include           // 軟件I2C庫

// -------------------------- 硬件引腳定義模塊 --------------------------
/**
 * ST7789 TFT屏硬件SPI引腳配置
 * 硬件SPI固定引腳:SCK=13(時(shí)鐘)、SDA(MOSI)=11(數(shù)據(jù)),以下為可配置引腳
 */
#define TFT_CS    10  // TFT片選引腳(低電平有效)
#define TFT_DC    2   // TFT數(shù)據(jù)/命令選擇引腳(高=數(shù)據(jù),低=命令)
#define TFT_RST   4   // TFT復(fù)位引腳(低電平復(fù)位,可不接則設(shè)為-1)

// -------------------------- 全局參數(shù)配置模塊 --------------------------
/**
 * INA219傳感器配置
 * @param 0x44: INA219默認(rèn)I2C地址0x40(可通過A0/A1引腳修改為0x41/0x44/0x45)
 * @param &sw: 綁定軟件I2C實(shí)例
 */
SoftWire sw(SCL, SDA, SOFT_STANDARD);   // 軟件I2C引腳
INA219 INA(0x44, &sw); 

/**
 * ST7789 TFT屏配置
 * 分辨率:240x320(寬x高),旋轉(zhuǎn)后實(shí)際顯示方向由setRotation(1)決定
 */
Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST);
#define TFT_WIDTH  240    // ST7789屏物理寬度(像素)
#define TFT_HEIGHT 320    // ST7789屏物理高度(像素)

/**
 * 波形繪制歷史數(shù)據(jù)配置
 * HISTORY_SIZE:波形緩存長度(決定時(shí)間軸跨度),建議根據(jù)刷新頻率調(diào)整
 */
const int HISTORY_SIZE = 100;    // 最大歷史數(shù)據(jù)點(diǎn)數(shù)(100個(gè)采樣點(diǎn),對(duì)應(yīng)100秒)
float voltageHistory[HISTORY_SIZE];  // 電壓歷史數(shù)據(jù)緩存
float currentHistory[HISTORY_SIZE];  // 電流歷史數(shù)據(jù)緩存
float powerHistory[HISTORY_SIZE];    // 功率歷史數(shù)據(jù)緩存
int historyIndex = 0;               // 歷史數(shù)據(jù)當(dāng)前寫入索引(循環(huán)覆蓋)

/**
 * 顯示界面顏色配置(RGB565格式,5位紅+6位綠+5位藍(lán))
 */
#define BACKGROUND    ST77XX_BLACK    // 屏幕背景色
#define VOLTAGE_COLOR ST77XX_YELLOW   // 電壓波形/文本顏色
#define CURRENT_COLOR ST77XX_GREEN    // 電流波形/文本顏色
#define POWER_COLOR   ST77XX_CYAN     // 功率波形/文本顏色
#define TEXT_COLOR    ST77XX_WHITE    // 通用文本顏色
#define AXIS_COLOR    ST77XX_WHITE    // 坐標(biāo)軸顏色
#define PANEL_COLOR   0x18A0          // 數(shù)值面板背景色(RGB565:深灰藍(lán))

/**
 * 顯示區(qū)域坐標(biāo)配置(像素單位)
 * 波形區(qū):左上方主要區(qū)域;數(shù)值面板:右側(cè)固定面板
 */
#define GRAPH_WIDTH   200       // 波形顯示區(qū)域?qū)挾?#define GRAPH_HEIGHT  120       // 波形顯示區(qū)域高度
#define GRAPH_X       10        // 波形區(qū)左上角X坐標(biāo)
#define GRAPH_Y       60        // 波形區(qū)左上角Y坐標(biāo)
#define PANEL_WIDTH   80        // 實(shí)時(shí)數(shù)值面板寬度
#define PANEL_X       240       // 數(shù)值面板左上角X坐標(biāo)(補(bǔ)充:原代碼240超出屏寬,建議改為150)
#define PANEL_Y       0         // 數(shù)值面板左上角Y坐標(biāo)

// -------------------------- 初始化函數(shù) --------------------------
/**
 * @brief 系統(tǒng)初始化入口函數(shù)
 * @details 完成串口、TFT屏、INA219傳感器、數(shù)據(jù)緩存、靜態(tài)UI的初始化
 */
void setup(void) {
  // 1. 串口初始化(調(diào)試用,波特率115200)
  Serial.begin(115200);

  // 2. TFT屏初始化
  tft.init(TFT_WIDTH, TFT_HEIGHT);       // 初始化屏顯參數(shù)
  tft.invertDisplay(false);              // 關(guān)閉顯示反轉(zhuǎn)(true為反色顯示)
  tft.setRotation(1);                    // 旋轉(zhuǎn)屏幕(0-3,1為90度順時(shí)針)
  tft.fillScreen(BACKGROUND);            // 清屏(背景色)
  showSplashScreen();                    // 顯示啟動(dòng)畫面
  delay(1500);                           // 啟動(dòng)畫面停留1.5秒

  // 3. INA219傳感器初始化
  sw.begin();                            // 啟動(dòng)軟件I2C
  sw.setClock(100000);                   // 設(shè)置I2C時(shí)鐘頻率(100kHz,INA219最大支持400kHz)
  if (!INA.begin()) {                    // 檢測INA219是否連接
    Serial.println("Failed to find INA219 chip");
    while (1) { delay(10); }             // 硬件錯(cuò)誤,死循環(huán)報(bào)錯(cuò)
  }
  // 校準(zhǔn)INA219(最大預(yù)期電流0.5A,分流電阻0.1Ω)
  if (!INA.setMaxCurrentShunt(0.5, 0.1)) {
    Serial.println("Calibration failed!");
    while(1);                            // 校準(zhǔn)失敗,死循環(huán)報(bào)錯(cuò)
  }

  // 4. 歷史數(shù)據(jù)緩存初始化(清零)
  for (int i = 0; i < HISTORY_SIZE; i++) {
    voltageHistory[i] = 0;
    currentHistory[i] = 0;
    powerHistory[i] = 0;
  }

  // 5. 繪制靜態(tài)UI框架(僅初始化時(shí)繪制一次)
  drawStaticUI();

  // 初始化完成提示
  Serial.println("System initialized");
  Serial.print("INA219_LIB_VERSION: ");
  Serial.println(INA219_LIB_VERSION);
}

// -------------------------- 主循環(huán)函數(shù) --------------------------
/**
 * @brief 系統(tǒng)主循環(huán)
 * @details 每秒采集一次數(shù)據(jù),更新緩存、UI和串口輸出,循環(huán)執(zhí)行
 */
void loop(void) {
  // 1. 讀取INA219數(shù)據(jù)(核心傳感器數(shù)據(jù)采集)
  float busVoltage = INA.getBusVoltage();        // 讀取總線電壓(V)
  float current = INA.getCurrent_mA() - 0.8;     // 讀取電流(mA),減去0.8mA校準(zhǔn)零點(diǎn)偏移
  float power = INA.getPower_mW();               // 讀取功率(mW)

  // 2. 存儲(chǔ)數(shù)據(jù)到歷史緩存(循環(huán)覆蓋)
  voltageHistory[historyIndex] = busVoltage;
  currentHistory[historyIndex] = current;
  powerHistory[historyIndex] = power;

  // 3. 更新屏幕顯示(實(shí)時(shí)數(shù)值+波形)
  updateUI(busVoltage, current, power);

  // 4. 更新緩存索引(循環(huán)復(fù)用緩存)
  historyIndex = (historyIndex + 1) % HISTORY_SIZE;

  // 5. 串口輸出調(diào)試信息(格式化打?。?  Serial.println("ntBUS(V)ttSHUNT(mV)tCURRENT(mA)tPOWER(mW)tOVFttCNVR");
  Serial.print("t");
  Serial.print(busVoltage, 2);                  // 總線電壓(保留2位小數(shù))
  Serial.print("tt");
  Serial.print(INA.getShuntVoltage_mV(), 2);    // 分流電阻電壓(mV)
  Serial.print("tt");
  Serial.print(current, 2);                     // 電流(mA)
  Serial.print("tt");
  Serial.print(power, 2);                       // 功率(mW)
  Serial.print("tt");
  Serial.print(INA.getMathOverflowFlag());      // 數(shù)學(xué)溢出標(biāo)志(1=溢出,需重新校準(zhǔn))
  Serial.print("tt");
  Serial.print(INA.getConversionFlag());        // 轉(zhuǎn)換完成標(biāo)志(1=數(shù)據(jù)有效)
  Serial.println();

  // 6. 采樣間隔(1秒,可根據(jù)需求調(diào)整,最小受INA219轉(zhuǎn)換時(shí)間限制)
  delay(1000);
}

// -------------------------- 屏幕顯示功能模塊 --------------------------
/**
 * @brief 啟動(dòng)畫面顯示
 * @details 系統(tǒng)初始化時(shí)顯示品牌/功能提示,提升用戶體驗(yàn)
 */
void showSplashScreen() {
  tft.fillScreen(BACKGROUND);          // 清屏
  tft.setTextColor(ST77XX_YELLOW);     // 設(shè)置文本顏色為黃色
  tft.setTextSize(3);                  // 文本大?。?=8x8像素,3=24x24像素)
  tft.setCursor(70, 80);               // 設(shè)置文本光標(biāo)位置(X,Y)
  tft.print("POWER");                  // 打印"POWER"
  tft.setCursor(85, 120);              // 調(diào)整光標(biāo)位置
  tft.print("MONITOR");                // 打印"MONITOR"
  
  tft.setTextColor(ST77XX_CYAN);       // 切換文本顏色為青色
  tft.setTextSize(1);                  // 縮小文本大小
  tft.setCursor(90, 180);              // 調(diào)整光標(biāo)位置
  tft.print("Initializing...");        // 打印初始化提示
}

/**
 * @brief 繪制靜態(tài)UI框架
 * @details 繪制僅需初始化一次的界面元素(標(biāo)題、邊框、坐標(biāo)軸、面板、圖例)
 */
void drawStaticUI() {
  tft.fillScreen(BACKGROUND);          // 清屏

  // 1. 繪制標(biāo)題
  tft.setTextColor(TEXT_COLOR);
  tft.setTextSize(2);
  tft.setCursor(50, 5);
  tft.print("POWER MONITOR");

  // 2. 繪制波形區(qū)邊框
  tft.drawRect(GRAPH_X, GRAPH_Y, GRAPH_WIDTH, GRAPH_HEIGHT, AXIS_COLOR);
  drawAxes();  // 繪制坐標(biāo)軸

  // 3. 繪制實(shí)時(shí)數(shù)值面板(右側(cè))
  tft.fillRect(PANEL_X, PANEL_Y, PANEL_WIDTH, 240, PANEL_COLOR);  // 面板背景
  tft.drawRect(PANEL_X, PANEL_Y, PANEL_WIDTH, 240, TEXT_COLOR);   // 面板邊框
  tft.setTextColor(TEXT_COLOR);
  tft.setTextSize(1);
  tft.setCursor(PANEL_X + 10, PANEL_Y + 10);
  tft.print("REALTIME");
  tft.setCursor(PANEL_X + 15, PANEL_Y + 20);
  tft.print("VALUES");
  tft.drawFastHLine(PANEL_X, PANEL_Y + 35, PANEL_WIDTH, TEXT_COLOR);  // 分隔線

  // 4. 繪制波形圖例
  drawLegend();

  // 5. 繪制坐標(biāo)軸標(biāo)簽
  tft.setTextSize(1);
  tft.setCursor(GRAPH_X - 5, GRAPH_Y - 15);
  tft.print("Value");          // Y軸標(biāo)簽
  tft.setCursor(GRAPH_X + GRAPH_WIDTH - 30, GRAPH_Y + GRAPH_HEIGHT + 5);
  tft.print("Time (s)");       // X軸標(biāo)簽

  // 6. 繪制數(shù)值面板靜態(tài)文本(V/I/P標(biāo)簽)
  drawPanelStaticText();
}

/**
 * @brief 繪制波形區(qū)坐標(biāo)軸
 * @details 繪制X/Y軸、軸尖標(biāo)記和水平網(wǎng)格線,提升波形可讀性
 */
void drawAxes() {
  // 繪制Y軸(垂直軸)
  tft.drawFastVLine(GRAPH_X, GRAPH_Y, GRAPH_HEIGHT, AXIS_COLOR);
  tft.drawLine(GRAPH_X, GRAPH_Y, GRAPH_X - 3, GRAPH_Y + 5, AXIS_COLOR);  // Y軸上尖
  tft.drawLine(GRAPH_X, GRAPH_Y, GRAPH_X + 3, GRAPH_Y + 5, AXIS_COLOR);

  // 繪制X軸(水平軸)
  tft.drawFastHLine(GRAPH_X, GRAPH_Y + GRAPH_HEIGHT, GRAPH_WIDTH, AXIS_COLOR);
  tft.drawLine(GRAPH_X + GRAPH_WIDTH, GRAPH_Y + GRAPH_HEIGHT, 
               GRAPH_X + GRAPH_WIDTH - 5, GRAPH_Y + GRAPH_HEIGHT - 3, AXIS_COLOR);  // X軸右尖
  tft.drawLine(GRAPH_X + GRAPH_WIDTH, GRAPH_Y + GRAPH_HEIGHT, 
               GRAPH_X + GRAPH_WIDTH - 5, GRAPH_Y + GRAPH_HEIGHT + 3, AXIS_COLOR);

  // 繪制水平網(wǎng)格線(4等分)
  for (int i = 1; i < 4; i++) {
    int yPos = GRAPH_Y + i * GRAPH_HEIGHT / 4;  // 網(wǎng)格線Y坐標(biāo)
    for (int x = GRAPH_X; x < GRAPH_X + GRAPH_WIDTH; x += 4) {  // 虛線繪制
      tft.drawPixel(x, yPos, 0x5AEB);  // 淺灰色像素(RGB565)
    }
  }
}

/**
 * @brief 繪制數(shù)值面板靜態(tài)文本
 * @details 繪制V/I/P標(biāo)簽和單位,僅初始化時(shí)繪制
 */
void drawPanelStaticText() {
  tft.setTextColor(TEXT_COLOR);
  tft.setTextSize(2);

  // 電壓標(biāo)簽
  tft.setCursor(PANEL_X + 10, PANEL_Y + 50);
  tft.print("V:");
  // 電流標(biāo)簽
  tft.setCursor(PANEL_X + 10, PANEL_Y + 110);
  tft.print("I:");
  // 功率標(biāo)簽
  tft.setCursor(PANEL_X + 10, PANEL_Y + 170);
  tft.print("P:");

  // 單位標(biāo)注
  tft.setTextSize(1);
  tft.setCursor(PANEL_X + 55, PANEL_Y + 70);
  tft.print("V");    // 電壓單位
  tft.setCursor(PANEL_X + 55, PANEL_Y + 130);
  tft.print("mA");   // 電流單位
  tft.setCursor(PANEL_X + 55, PANEL_Y + 190);
  tft.print("mW");   // 功率單位
}

/**
 * @brief 繪制波形圖例
 * @details 繪制電壓/電流/功率的顏色標(biāo)識(shí),方便用戶識(shí)別波形
 */
void drawLegend() {
  int legendY = GRAPH_Y + GRAPH_HEIGHT + 25;  // 圖例Y坐標(biāo)

  // 電壓圖例
  tft.fillRect(20, legendY, 15, 3, VOLTAGE_COLOR);  // 顏色塊
  tft.setTextColor(VOLTAGE_COLOR);
  tft.setTextSize(1);
  tft.setCursor(40, legendY - 3);
  tft.print("VOLTAGE");

  // 電流圖例
  tft.fillRect(100, legendY, 15, 3, CURRENT_COLOR);
  tft.setTextColor(CURRENT_COLOR);
  tft.setCursor(120, legendY - 3);
  tft.print("CURRENT");

  // 功率圖例
  tft.fillRect(180, legendY, 15, 3, POWER_COLOR);
  tft.setTextColor(POWER_COLOR);
  tft.setCursor(200, legendY - 3);
  tft.print("POWER");
}

/**
 * @brief 更新整個(gè)UI界面
 * @details 包含實(shí)時(shí)數(shù)值更新和波形繪制,是界面動(dòng)態(tài)更新的核心函數(shù)
 * @param voltage 總線電壓(V)
 * @param current 電流(mA)
 * @param power 功率(mW)
 */
void updateUI(float voltage, float current, float power) {
  // 1. 更新右側(cè)數(shù)值面板
  updatePanelValues(voltage, current, power);

  // 2. 清空波形區(qū)(保留邊框和坐標(biāo)軸)
  tft.fillRect(GRAPH_X + 1, GRAPH_Y + 1, GRAPH_WIDTH - 1, GRAPH_HEIGHT - 1, BACKGROUND);
  drawAxes();  // 重新繪制坐標(biāo)軸(避免被清空)

  // 3. 計(jì)算波形最大值(用于歸一化顯示)
  float maxVal = 0.1;  // 初始值(避免除以0)
  for (int i = 0; i < HISTORY_SIZE; i++) {
    if (voltageHistory[i] > maxVal) maxVal = voltageHistory[i];
    if (currentHistory[i] > maxVal) maxVal = currentHistory[i];
    if (powerHistory[i] > maxVal) maxVal = powerHistory[i];
  }
  maxVal *= 1.15;  // 留15%余量,避免波形超出顯示區(qū)

  // 4. 繪制波形(循環(huán)繪制歷史數(shù)據(jù)點(diǎn))
  for (int i = 1; i < HISTORY_SIZE; i++) {
    // 計(jì)算緩存索引(循環(huán)讀?。?    int prevIndex = (historyIndex + i - 1) % HISTORY_SIZE;
    int currIndex = (historyIndex + i) % HISTORY_SIZE;

    // 計(jì)算X坐標(biāo)(時(shí)間軸)
    int x1 = GRAPH_X + (i-1) * 2;
    int x2 = GRAPH_X + i * 2;
    if (x2 > GRAPH_X + GRAPH_WIDTH) break;  // 超出顯示區(qū)則停止

    // 繪制電壓波形(歸一化到顯示區(qū)高度)
    int y1_voltage = GRAPH_Y + GRAPH_HEIGHT - constrain(voltageHistory[prevIndex] / maxVal * GRAPH_HEIGHT, 0, GRAPH_HEIGHT);
    int y2_voltage = GRAPH_Y + GRAPH_HEIGHT - constrain(voltageHistory[currIndex] / maxVal * GRAPH_HEIGHT, 0, GRAPH_HEIGHT);
    tft.drawLine(x1, y1_voltage, x2, y2_voltage, VOLTAGE_COLOR);

    // 繪制電流波形
    int y1_current = GRAPH_Y + GRAPH_HEIGHT - constrain(currentHistory[prevIndex] / maxVal * GRAPH_HEIGHT, 0, GRAPH_HEIGHT);
    int y2_current = GRAPH_Y + GRAPH_HEIGHT - constrain(currentHistory[currIndex] / maxVal * GRAPH_HEIGHT, 0, GRAPH_HEIGHT);
    tft.drawLine(x1, y1_current, x2, y2_current, CURRENT_COLOR);

    // 繪制功率波形
    int y1_power = GRAPH_Y + GRAPH_HEIGHT - constrain(powerHistory[prevIndex] / maxVal * GRAPH_HEIGHT, 0, GRAPH_HEIGHT);
    int y2_power = GRAPH_Y + GRAPH_HEIGHT - constrain(powerHistory[currIndex] / maxVal * GRAPH_HEIGHT, 0, GRAPH_HEIGHT);
    tft.drawLine(x1, y1_power, x2, y2_power, POWER_COLOR);
  }

  // 5. 繪制Y軸數(shù)值標(biāo)簽(最大值、中間值、0)
  tft.setTextColor(0xAD75);  // 淺紫色
  tft.setTextSize(1);
  tft.setCursor(GRAPH_X + 2, GRAPH_Y + 5);
  tft.print(maxVal, 1);              // 最大值(保留1位小數(shù))
  tft.setCursor(GRAPH_X + 2, GRAPH_Y + GRAPH_HEIGHT/2 + 5);
  tft.print(maxVal/2, 1);            // 中間值
  tft.setCursor(GRAPH_X - 5, GRAPH_Y + GRAPH_HEIGHT + 5);
  tft.print("0");                    // 最小值
}

/**
 * @brief 更新實(shí)時(shí)數(shù)值面板
 * @details 清空原有數(shù)值區(qū)域并打印新值,避免文本重疊
 * @param voltage 總線電壓(V)
 * @param current 電流(mA)
 * @param power 功率(mW)
 */
void updatePanelValues(float voltage, float current, float power) {
  tft.setTextColor(TEXT_COLOR);
  tft.setTextSize(1);

  // 1. 更新電壓數(shù)值
  tft.fillRect(PANEL_X + 25, PANEL_Y + 65, 30, 12, PANEL_COLOR);  // 清空原有數(shù)值
  tft.setCursor(PANEL_X + 25, PANEL_Y + 70);
  tft.print(voltage, 2);  // 保留2位小數(shù)

  // 2. 更新電流數(shù)值
  tft.fillRect(PANEL_X + 25, PANEL_Y + 125, 30, 12, PANEL_COLOR);
  tft.setCursor(PANEL_X + 25, PANEL_Y + 130);
  tft.print(current, 2);

  // 3. 更新功率數(shù)值
  tft.fillRect(PANEL_X + 25, PANEL_Y + 185, 30, 12, PANEL_COLOR);
  tft.setCursor(PANEL_X + 25, PANEL_Y + 190);
  tft.print(power, 2);
}

/******************************************************************************
 * 深圳市在芯間科技有限公司
 * 淘寶旗艦店:零知派
 * 網(wǎng) 址:https://shop533070398.taobao.com
 * 版權(quán)說明:
 *  1.本代碼的版權(quán)歸【深圳市在芯間科技有限公司】所有,僅限個(gè)人非商業(yè)性學(xué)習(xí)使用。
 *  2.嚴(yán)禁將本代碼或其衍生版本用于任何商業(yè)用途(包括但不限于產(chǎn)品開發(fā)、付費(fèi)服務(wù)、企業(yè)內(nèi)部使用等)。
 *  3.任何商業(yè)用途均需事先獲得【深圳市在芯間科技有限公司】的書面授權(quán),未經(jīng)授權(quán)的商業(yè)使用行為將被視為侵權(quán)。
******************************************************************************/

系統(tǒng)流程圖

wKgZO2njKVKAVCB-AASMoAKmlxY751.png

2.4 INA219庫文件解析

1)傳感器軟件I2C 初始化

初始化傳感器對(duì)象,指定 I2C 地址和軟件 I2C 總線

INA219::INA219(const uint8_t address, SoftWire *wire)  // SoftWire使用I2C
{
  _address     = address;
  _wire        = wire;
  //  no calibrated values by default.
  _current_LSB = 0;
  _maxCurrent  = 0;
  _shunt       = 0;
  _error       = 0;
}


bool INA219::begin()
{
  if (! isConnected()) return false;
  return true;
}


bool INA219::isConnected()
{
  if ((_address < 0x40) || (_address > 0x4F)) return false;
  _wire->beginTransmission(_address);
  return ( _wire->endTransmission() == 0);
}

2)寄存器讀寫函數(shù)

INA219 通過 I2C 讀寫寄存器實(shí)現(xiàn)數(shù)據(jù)交互

uint16_t INA219::_readRegister(uint8_t reg)
{
  _wire->beginTransmission(_address);
  _wire->write(reg);
  int n = _wire->endTransmission();
  if (n != 0)
  {
    _error = -1;
    return 0;
  }

  uint16_t value = 0;
  if (2 == _wire->requestFrom(_address, (uint8_t)2))
  {
    value = _wire->read();
    value read();
  }
  else
  {
    _error = -2;
    return 0;
  }
  return value;
}


uint16_t INA219::_writeRegister(uint8_t reg, uint16_t value)
{
  _wire->beginTransmission(_address);
  _wire->write(reg);
  _wire->write(value >> 8);
  _wire->write(value & 0xFF);
  int n = _wire->endTransmission();
  if (n != 0)
  {
    _error = -1;
  }
  return n;
}

三、項(xiàng)目演示

3.1監(jiān)測過程與比較

系統(tǒng)實(shí)時(shí)顯示電壓、電流和功率信息,并通過波形圖表展示歷史數(shù)據(jù)變化趨勢

界面包含三個(gè)主要區(qū)域

左側(cè)波形區(qū):實(shí)時(shí)顯示電壓、電流、功率的三通道波形;右側(cè)數(shù)據(jù)區(qū):實(shí)時(shí)數(shù)值顯示,包含單位標(biāo)識(shí);底部圖例:顏色標(biāo)識(shí)區(qū)分不同參數(shù)

wKgZPGnjKfKAZS-VABeLo3MGDkU178.png

Tips

零知派標(biāo)準(zhǔn)板上的A1和A0都與Vs+引腳連接引出排針接口,通過跳線帽短接直接切換0x41、0x44和0x45 I2C總線地址,本項(xiàng)目將A1通過跳線帽短接,I2C地址為0x44

wKgZPGnjKkaAYueZAAUn8N-2eDk681.png

3.2 萬用表對(duì)比測試

將萬用表分別打到量程為20V的電壓檔以及20mA的電流檔

進(jìn)行電壓檔測試

wKgZO2njKleADGMyABM00lAPd1A574.png

進(jìn)行電流檔測試

wKgZO2njKl6AQIomABhUtOpogt8346.png
參數(shù) 萬用表測量值 系統(tǒng)測量值 誤差
電壓 4.90V 4.97V +0.07V
電流 1.917mA 1.893mA -0.024mA
功率 9.393mW 9.408mW -0.015mW

注:電壓值和電流值誤差控制在整個(gè)溫度范圍內(nèi)的0.5%精度

3)通過串口輸出數(shù)據(jù),便于進(jìn)一步分析

wKgZPGnjKnCAByQ3AAWuDMh0L78018.png

3.3 視頻演示

?https://live.csdn.net/v/522314?spm=1001.2014.3001.5501

系統(tǒng)啟動(dòng)過程、實(shí)時(shí)數(shù)據(jù)監(jiān)測、波形顯示效果,以及在不同負(fù)載條件下系統(tǒng)的響應(yīng)特性??梢钥吹疆?dāng)電路負(fù)載變化時(shí),電流和功率讀數(shù)實(shí)時(shí)更新,波形圖表平滑滾動(dòng),系統(tǒng)響應(yīng)迅速且穩(wěn)定。

四、INA219 電流功率監(jiān)測計(jì)技術(shù)講解

INA219是一款基于I2C接口的高端電流分流和功率監(jiān)控器,能夠監(jiān)測分流器壓降和電源電壓。其內(nèi)部包含16位ADC、可編程增益放大器(PGA) 和精密基準(zhǔn)電壓源,能夠?qū)崿F(xiàn)高精度測量

4.1 INA219工作原理

根據(jù)芯片手冊,經(jīng)過分流電阻N(采樣電阻)后,能夠采集到的最低有效電壓LSB為10uV。

wKgZPGnjKwiAJSKBAAClRZA_m9A226.png

利用歐姆定律計(jì)算電流公式:

I_{current}=frac{V_{shunt}}{R_{shunt}}

電流測量:根據(jù)Rshunt(0.1Ω)分流電阻兩端的電壓降計(jì)算;電壓測量:直接測量總線電壓(支持0-26V范圍);功率計(jì)算:內(nèi)部乘法器實(shí)時(shí)計(jì)算功率

4.2I2C通信協(xié)議

本項(xiàng)目采用軟件模擬 I2C(SoftWire)與 INA219 通信

1)串行總線地址

wKgZPGnjKx-ARWIrAABHi0OHMk4765.png

INA219 有兩個(gè)地址引腳A0 和 A1都設(shè)置為GND,該從機(jī)地址為0x40

2)軟件I2C時(shí)序

wKgZO2njKzuALnw5AADhQb7QbwQ963.png

總線上的所有從機(jī)在 SCL 的上升沿移入從機(jī)地址字節(jié),其中最后一位指示要進(jìn)行的是讀操作還是寫操作。在第九個(gè)時(shí)鐘脈沖期間,被尋址的從機(jī)通過生成確認(rèn)信號(hào)并將 SDA 拉至低電平來響應(yīng)主機(jī)

4.3寄存器配置

1)配置寄存器(0x00)

wKgZO2njK8WAE9KmAACPivRNpD8374.png

BRNG位(13):總線電壓范圍選擇(0=16V, 1=32V);PG位(11-12):PGA增益設(shè)置(00=±40mV, 01=±80mV, 10=±160mV, 11=±320mV);BADC位(7-10):總線ADC分辨率和平均模式;SADC位(3-6):分流ADC分辨率和平均模式;

eg:MODE位(0-2):操作模式選擇

wKgZPGnjK9KAG9JOAADw5hlKVT4190.png

陰影部分的值為默認(rèn)值,采取連續(xù)分流和總線測量模式

2)校準(zhǔn)寄存器(0x05)

校準(zhǔn)值計(jì)算公式:

wKgZPGnjK-aAeaTyAAAx7otm4Zo429.png

其中電流LSB = 最大預(yù)期電流 / 32768

Current_LSB=10010^-6=100uA=0.0001A

計(jì)算基準(zhǔn)值:Cal=0.04096/(Current_LSB/R)=0.04096/(0.0001A0.1R)=4096=0x1000

校準(zhǔn)寄存器與縮放

wKgZO2njLF2AVnYTAABWBBLqZAM690.png

如果發(fā)現(xiàn)測量到的電流值有誤,用電流表測到的實(shí)際值為0.290A,INA219測量結(jié)果為0.342A

采用Cal的校準(zhǔn)公式(縮放校準(zhǔn)后的)Cal=4096*0.290/0.3421 = 3472 = 0x0D90

五、常見問題解答(Q&A)

Q1:測量值不準(zhǔn)確怎么辦?

A:可以嘗試:重新校準(zhǔn)傳感器,確保setMaxCurrentShunt()函數(shù)的參數(shù)與實(shí)際使用的分流電阻匹配;進(jìn)行零點(diǎn)校準(zhǔn),在無負(fù)載情況下測量電流值,并在代碼中進(jìn)行補(bǔ)償

Q2:軟件 I2C 通信不穩(wěn)定怎么辦?

A:可以:調(diào)整i2c_delay參數(shù),確保通信時(shí)序正確;降低通信速率(如從 400kHz 降至 100kHz)

Q3:軟件I2C通信失敗如何排查?

A:檢查引腳配置是否正確(SCL接零知標(biāo)準(zhǔn)板A5、SDA接零知標(biāo)準(zhǔn)板A4);采用I2C掃描函數(shù)確認(rèn)INA219地址設(shè)置(默認(rèn)0x40)

項(xiàng)目資源整合

INA219 庫(支持 SoftWire): RobTillaart/INA219

INA219 數(shù)據(jù)手冊: INA219 DataSheet

?

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • STM32
    +關(guān)注

    關(guān)注

    2313

    文章

    11189

    瀏覽量

    374567
  • 功率
    +關(guān)注

    關(guān)注

    14

    文章

    2130

    瀏覽量

    75987
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    ——STM32驅(qū)動(dòng)INA219電流功率監(jiān)測計(jì)實(shí)現(xiàn)高精度電源管理

    目基于STM32F103RBT6微控制器和INA219電流
    發(fā)表于 04-18 16:14

    標(biāo)準(zhǔn)板+INA219鋰電池監(jiān)測系統(tǒng)全功能演示

    監(jiān)測系統(tǒng)
    PCB56242069
    發(fā)布于 :2026年04月18日 15:12:35

    深入解析INA199:高精度電流監(jiān)測的理想之選

    深入解析INA199:高精度電流監(jiān)測的理想之選 在電子設(shè)計(jì)領(lǐng)域,精確的電流監(jiān)測對(duì)于系統(tǒng)的性能和穩(wěn)
    的頭像 發(fā)表于 04-15 17:10 ?406次閱讀

    汽車級(jí)高精度電流檢測放大器INA293-Q1:特性、應(yīng)用與設(shè)計(jì)要點(diǎn)

    汽車級(jí)高精度電流檢測放大器INA293-Q1:特性、應(yīng)用與設(shè)計(jì)要點(diǎn) 在電子設(shè)計(jì)領(lǐng)域,電流檢測放大器是實(shí)現(xiàn)精確
    的頭像 發(fā)表于 04-15 15:45 ?101次閱讀

    ——STM32驅(qū)動(dòng)INA226 高精度功率監(jiān)測儀(可視化數(shù)據(jù)記錄儀+一鍵導(dǎo)出Excel)

    本項(xiàng)目基于標(biāo)準(zhǔn)板(主控芯片為 STM32F103RBT6)和 INA226 高精度電流/
    發(fā)表于 04-11 13:39

    高精度電流監(jiān)測INA250的特性與應(yīng)用解析

    高精度電流監(jiān)測INA250的特性與應(yīng)用解析 在電子設(shè)計(jì)領(lǐng)域,精確的電流監(jiān)測至關(guān)重要,它能為系統(tǒng)
    的頭像 發(fā)表于 03-24 17:10 ?122次閱讀

    深入解析INA199:高精度電流監(jiān)測的理想之選

    深入解析INA199:高精度電流監(jiān)測的理想之選 在電子設(shè)計(jì)領(lǐng)域,電流監(jiān)測是一項(xiàng)至關(guān)重要的任務(wù),它
    的頭像 發(fā)表于 02-27 16:25 ?377次閱讀

    高精度電流檢測放大器INA281-Q1:特性、應(yīng)用與設(shè)計(jì)要點(diǎn)

    高精度電流檢測放大器INA281-Q1:特性、應(yīng)用與設(shè)計(jì)要點(diǎn) 在電子設(shè)計(jì)領(lǐng)域,電流檢測是一項(xiàng)至關(guān)重要的任務(wù),特別是在各種電源
    的頭像 發(fā)表于 02-25 14:35 ?299次閱讀

    深入解析MAX44298:高精度電流、電壓與功率監(jiān)測的理想之選

    深入解析MAX44298:高精度電流、電壓與功率監(jiān)測的理想之選 在電子設(shè)計(jì)領(lǐng)域,準(zhǔn)確監(jiān)測電流、電
    的頭像 發(fā)表于 01-13 15:05 ?258次閱讀

    申矽凌推出高精度雙向電流功率監(jiān)測器CAD2738

    聚焦高性能傳感器和混合信號(hào)芯片供應(yīng)商申矽凌微電子推出高精度、寬共模輸入,支持高低側(cè)的雙向電流/功率監(jiān)測器CAD2738。產(chǎn)品能提供母線電流
    的頭像 發(fā)表于 12-29 11:30 ?1013次閱讀
    申矽凌推出<b class='flag-5'>高精度</b>雙向<b class='flag-5'>電流</b><b class='flag-5'>功率</b><b class='flag-5'>監(jiān)測</b>器CAD2738

    同是電流檢測芯片F(xiàn)P137 與 INA139,實(shí)際性能差距有多大?

    定向控制)算法提供高精度的實(shí)時(shí)電流反饋 ,沒有它,F(xiàn)OC這種能讓電機(jī)更平穩(wěn)、更高效的先進(jìn)控制技術(shù)就無法實(shí)現(xiàn)。 一句話總結(jié): 它確保了電機(jī)系統(tǒng)能安全、高效、智能且平穩(wěn)地運(yùn)行。 INA1
    發(fā)表于 11-17 10:45

    INA240電流檢測放大器使用及電流計(jì)算(附STM32驅(qū)動(dòng)代碼)

    本文介紹了INA240電流檢測放大器的使用及電流計(jì)算方法,并結(jié)合STM32單片機(jī)對(duì)其進(jìn)行驅(qū)動(dòng)。INA
    的頭像 發(fā)表于 09-28 17:32 ?2063次閱讀
    <b class='flag-5'>INA</b>240<b class='flag-5'>電流</b>檢測放大器使用及<b class='flag-5'>電流</b>計(jì)算(附<b class='flag-5'>STM32</b><b class='flag-5'>驅(qū)動(dòng)</b>代碼)

    開源——STM32F407VET6驅(qū)動(dòng)SHT41溫濕度傳感器完整教程

    摘要:本項(xiàng)目基于STM32F407VET6增強(qiáng)板驅(qū)動(dòng)SHT41高精度溫濕度傳感器,實(shí)現(xiàn)±0.
    的頭像 發(fā)表于 07-09 18:53 ?1871次閱讀
    <b class='flag-5'>零</b><b class='flag-5'>知</b>開源——<b class='flag-5'>STM32</b>F407VET6<b class='flag-5'>驅(qū)動(dòng)</b>SHT41溫濕度傳感器完整教程

    開源——STM32F4驅(qū)動(dòng)MAX31865實(shí)現(xiàn)PT100高精度測溫

    材料增強(qiáng)板(STM32F407VET6) MAX31865模塊(支持三線制PT100) 三線制PT100傳感器 0.96寸I2C OLED顯示屏(SSD1306驅(qū)動(dòng)) 杜邦線若干2
    發(fā)表于 05-26 18:52

    INA219 26V、12位、I2C、輸出數(shù)字功率監(jiān)測器技術(shù)手冊

    INA219 是一款具備 I^2^C 或 SMBUS 兼容接口的分流器和功率監(jiān)測計(jì)。該器件監(jiān)測分流器電壓降和總線
    的頭像 發(fā)表于 05-16 10:29 ?1308次閱讀
    <b class='flag-5'>INA219</b> 26V、12位、I2C、輸出數(shù)字<b class='flag-5'>功率</b><b class='flag-5'>監(jiān)測</b>器技術(shù)手冊