91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

MCU芯片AS32A601與INA226芯片精確測量實現(xiàn)與應(yīng)用

安芯 ? 來源:jf_29981791 ? 作者:jf_29981791 ? 2025-11-23 23:16 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一、引言

為滿足精準(zhǔn)的電源管理需求,國科安芯推出的AS32X601開發(fā)板特別搭載了INA226雙向電流/功率監(jiān)測芯片。該芯片不僅支持高達36V的總線電壓,更能通過其集成的Δ-Σ ADC對分流電阻器上的壓降進行高精度采樣,從而實現(xiàn)毫伏級電壓與微安級電流的精確測量。這一特性使其非常適用于電池充放電監(jiān)控、服務(wù)器/工控設(shè)備能耗分析以及太陽能系統(tǒng)發(fā)電效率評估等高級應(yīng)用場景。

二、INA226簡介

2.1****引腳功能
wechat_2025-11-23_231302_056.png

INA226有兩個地址引腳,A0和A1。下圖描述了16個可能地址中的每一個的引腳邏輯。INA226模塊A0 A1****引腳被下拉至 ** GND ** ,故 ** IIC 地址則為 ** Write1000 0000 0x80 Read1000 0001 0x81

2.2****寄存器介紹

2.2.1配置寄存器 0x00

配置寄存器設(shè)置控制設(shè)備的工作模式。該寄存器控制分流和總線電壓測量以及所用的平均模式的轉(zhuǎn)換時間設(shè)置。

2.2.2分流電壓寄存器**** 0x01

用于存儲當(dāng)前的分流電壓讀數(shù)Vshunt。負(fù)數(shù)采用二進制補碼格式表示。生成一個負(fù)數(shù)的補碼方法是:對其絕對值的二進制數(shù)取反,然后加1。如果最高有效位(MSB)為1,則表示這是一個負(fù)數(shù)。最小分辨率(Vshunt _LSB)為 2.5uV。

注:分流電壓最大81.92mV,而該模塊的采樣電阻是0.1R,故最大電流為 81.92mV / 0.1R = 819.2mA

分流電壓計算:Vshunt = 寄存器值 * Vshunt _LSB(2.5uV)

2.2.3.總線電壓寄存器 ** 0x02**

用于存儲最近一次的總線電壓讀數(shù) Vbus。如果啟用了平均功能,則該寄存器顯示的是平均后的數(shù)值。滿量程范圍為 40.96V(對應(yīng) 7FFF);最小分辨率(Vbus_LSB)為 1.25 mV。

總線電壓計算:Vbus = 寄存器值 * Vbus_LSB(1.25 mV )

2.2.4.功率寄存器 ** 0x03**

用于存儲功率讀數(shù) Power ,如果啟用了平均功能,該寄存器將顯示平均值。功率寄存器的最低有效位(LSB)在內(nèi)部被設(shè)定為等于 Current_LSB 所設(shè)定值的 25 倍。功率寄存器通過將電流寄存器的十進制值與總線電壓寄存器的十進制值相乘來記錄以瓦特(Watts)為單位的功率。

功率計算: Power = 寄存器值 * Power_ LSB

由手冊可知 Power_LSB(功率最小分辨率) = Current_LSB(電流最小分辨率) * 25

Current_LSB 手冊給出了計算公式,如下

Current_LSB = 最大電流 / 2^15 = 819.2mA / 2^15 = 0.025mA

2.2.5.電流寄存器 ** 0x04**

用于存儲電流讀數(shù) Current,如果啟用了平均功能,該寄存器將顯示平均值。電流寄存器的值是通過將分流電壓寄存器中的十進制值與校準(zhǔn)寄存器中的十進制值相乘來計算的

電流值 = 寄存器值 * Current_LSB(0.05mA) (Current_LSB 的計算在上文功率寄存器小節(jié)已經(jīng)給出)

2.2.6.基準(zhǔn)寄存器 ** 0x05**

該寄存器為器件提供用于產(chǎn)生測量差分電壓的分流電阻值。它還設(shè)置電流寄存器的分辨率。編程該寄存器可設(shè)置 Current_LSB 和 Power_LSB。該寄存器也適用于整體系統(tǒng)校準(zhǔn)。

該寄存器主要是設(shè)置系統(tǒng)基準(zhǔn)的,將 基準(zhǔn)值(CAL) 寫入寄存器即可

Current_LSB= 0.05mA (上文功率寄存器小節(jié)已經(jīng)給出) ,根據(jù)原理圖可知 Rshunt = 0.1R

CAL = 0.00512 / (0.00005A * 0.1R) = 1024 = 0x0400

三、I2C時序說明

**3.1 **寫時序

FlagStatus I2C_MEEPROMWriteByte(I2C_TypeDef* I2Cx, uint8_t addr, uint16_t reg, uint16_t data, uint32_t timeout)

{

/ 等待總線釋放 /

while (!I2C_CheckStatus(I2Cx, I2C_BUS_IDLE))

{

I2C_StartClear(I2Cx);

I2C_GenerateStop(I2Cx);

I2C_ClearITPendingBit(I2Cx);

if ((timeout--) == 0)

{

return RESET;

}

delay_ms(1);

}

I2C_GenerateStart(I2Cx);

/ 等待啟動信號完成 /

while (!I2C_CheckStatus(I2Cx, MASTER_START_READY))

{

if ((timeout--) == 0)

{

return RESET;

}

delay_ms(1);

}

I2C_Send7bitAddress(I2Cx, addr, I2C_WRITE);

I2C_StartClear(I2Cx);

I2C_ClearITPendingBit(I2Cx);

/ 等待從機接收完成地址并發(fā)送ack /

while (!I2C_CheckStatus(I2Cx, MSEND_WADDR_ACK))

{

if ((timeout--) == RESET)

{

I2C_GenerateStop(I2Cx);

I2C_ClearITPendingBit(I2Cx);

return RESET;

}

delay_ms(1);

}

I2C_SendData(I2Cx, (uint8_t)(reg >> 0));

I2C_ClearITPendingBit(I2Cx);

/ 等待從機接收完成數(shù)據(jù)并發(fā)送ack /

while (!I2C_CheckStatus(I2Cx, MSEND_DATA_ACK))

{

if ((timeout--) == 0)

{

I2C_GenerateStop(I2Cx);

I2C_ClearITPendingBit(I2Cx);

return RESET;

}

delay_ms(1);

}

I2C_SendData(I2Cx, (data&0xff00)>>8);

I2C_ClearITPendingBit(I2Cx);

/ 等待從機接收完成數(shù)據(jù)并發(fā)送ack /

while (!I2C_CheckStatus(I2Cx, MSEND_DATA_ACK))

{

if ((timeout--) == 0)

{

I2C_GenerateStop(I2Cx);

I2C_ClearITPendingBit(I2Cx);

return RESET;

}

delay_ms(1);

}

I2C_SendData(I2Cx, data&0x00ff);

I2C_ClearITPendingBit(I2Cx);

/ 等待從機接收完成數(shù)據(jù)并發(fā)送ack /

while (!I2C_CheckStatus(I2Cx, MSEND_DATA_ACK))

{

if ((timeout--) == 0)

{

I2C_GenerateStop(I2Cx);

I2C_ClearITPendingBit(I2Cx);

return RESET;

}

delay_ms(1);

}

I2C_GenerateStop(I2Cx);

I2C_ClearITPendingBit(I2Cx);

return 1;

}

3.2 讀時序

FlagStatus I2C_MEEPROMRead(I2C_TypeDef* I2Cx, uint8_t addr, uint16_t reg, uint8_t* pData, uint32_t Size, uint32_t timeout)

{

uint32_t num = 0x00;

/ 等待總線釋放 /

while (!I2C_CheckStatus(I2Cx, I2C_BUS_IDLE))

{

I2C_StartClear(I2Cx);

I2C_GenerateStop(I2Cx);

I2C_ClearITPendingBit(I2Cx);

if ((timeout--) == 0)

{

return RESET;

}

delay_ms(1);

}

I2C_AcknowledgeConfig(I2Cx, I2C_IICAA_ACK);

I2C_GenerateStart(I2Cx);

/ 等待啟動信號完成 /

while (!I2C_CheckStatus(I2Cx, MASTER_START_READY))

{

if ((timeout--) == 0)

{

I2C_StartClear(I2Cx);

I2C_GenerateStop(I2Cx);

I2C_ClearITPendingBit(I2Cx);

return RESET;

}

delay_ms(1);

}

I2C_Send7bitAddress(I2Cx, addr, I2C_WRITE);

I2C_StartClear(I2Cx);

I2C_ClearITPendingBit(I2Cx);

/ 等待從機接收完成地址并發(fā)送ack /

while (!I2C_CheckStatus(I2Cx, MSEND_WADDR_ACK))

{

if ((timeout--) == 0)

{

I2C_GenerateStop(I2Cx);

I2C_ClearITPendingBit(I2Cx);

return RESET;

}

delay_ms(1);

}

// I2C_SendData(I2Cx, (uint8_t)(reg >> 8));

// I2C_ClearITPendingBit(I2Cx);

// / 等待從機接收完成數(shù)據(jù)并發(fā)送ack /

// while (!I2C_CheckStatus(I2Cx, MSEND_DATA_ACK))

// {

// if ((timeout--) == 0)

// {

// I2C_GenerateStop(I2Cx);

// I2C_ClearITPendingBit(I2Cx);

// return 0;

// }

// delay_ms(1);

// }

I2C_SendData(I2Cx, (uint8_t)(reg >> 0));

I2C_ClearITPendingBit(I2Cx);

/ 等待從機接收完成數(shù)據(jù)并發(fā)送ack /

while (!I2C_CheckStatus(I2Cx, MSEND_DATA_ACK))

{

if ((timeout--) == 0)

{

I2C_GenerateStop(I2Cx);

I2C_ClearITPendingBit(I2Cx);

return RESET;

}

delay_ms(1);

}

I2C_GenerateStart(I2Cx);

I2C_ClearITPendingBit(I2Cx);

/ 等待從機接收完成數(shù)據(jù)并發(fā)送ack /

while (!I2C_CheckStatus(I2Cx, MASTER_START_REPEAT))

{

if ((timeout--) == 0)

{

I2C_GenerateStop(I2Cx);

I2C_ClearITPendingBit(I2Cx);

return RESET;

}

delay_ms(1);

}

I2C_Send7bitAddress(I2Cx, addr, I2C_READ);

I2C_ClearITPendingBit(I2Cx);

/ 等待從機接收完成地址并發(fā)送ack /

while (!I2C_CheckStatus(I2Cx, MSEND_RADDR_ACK))

{

if ((timeout--) == 0)

{

I2C_StartClear(I2Cx);

I2C_GenerateStop(I2Cx);

I2C_ClearITPendingBit(I2Cx);

return RESET;

}

delay_ms(1);

}

for (num = 0; num < Size; num++)

{

if (num == (Size - 1))

{

/* IIC sends NACK */

I2C_AcknowledgeConfig(I2Cx, I2C_IICAA_NACK);

}

else

{

I2C_AcknowledgeConfig(I2Cx, I2C_IICAA_ACK);

}

I2C_StartClear(I2Cx);

I2C_ClearITPendingBit(I2Cx);

/* Wait for the slave to send the completed data, and the host will send an ack */

while (!(I2C_CheckStatus(I2Cx, MREAD_DATA_ACK) || I2C_CheckStatus(I2Cx, MREAD_DATA_NACK)))

{

if ((Timeout--) == 0)

{

I2C_StartClear(I2Cx);

I2C_GenerateStop(I2Cx);

I2C_ClearITPendingBit(I2Cx);

return RESET;

}

delay_ms(1);

}

*pData++ = I2C_ReceiveData(I2Cx);

}

I2C_StartClear(I2Cx);

I2C_GenerateStop(I2Cx);

I2C_ClearITPendingBit(I2Cx);

return SET;

}

四、程序

指令

#define I2C I2C0

// INA226 I2C地址(根據(jù)A0和A1引腳配置決定)

#define INA226_ADDRESS 0x40

// INA226寄存器定義

#define INA226_REG_CONFIG 0x00

#define INA226_REG_SHUNT_VOLT 0x01

#define INA226_REG_BUS_VOLT 0x02

#define INA226_REG_POWER 0x03

#define INA226_REG_CURRENT 0x04

#define INA226_REG_CALIB 0x05

#define INA226_REG_MASK_ENABLE 0x06

#define INA226_REG_ALERT_LIMIT 0x07

#define INA226_REG_MANUFACTURER 0xFE

#define INA226_REG_DIE_ID 0xFF

#define Byte_NUMBER 2

main.c

void main()

{

Systemclock_Init();

uint8_t rdata[2] = {0};

delay_init(SMU_ClocksStruct.AXIBus0_Frequency/1000000);

#ifdef DEBUG

IIC0_RESET();

delay_ms(100);

IIC0_SET();

#endif

/* Initialize print usart */

User_Print_Init(115200);

Printf( "INNA226 test begin! n");

User_I2C_Init();

/* Configuration Register */

I2C_MEEPROMWriteByte(I2C, INA226_ADDRESS, INA226_REG_CONFIG, 0x4527, 1000);

delay_ms(1);

/* Calibration Register */

I2C_MEEPROMWriteByte(I2C, INA226_ADDRESS, INA226_REG_CALIB, 0x0A00, 1000);

delay_ms(1);

/* Printf INNA226 ID */

I2C_MEEPROMRead(I2C, INA226_ADDRESS, INA226_REG_MANUFACTURER, rdata, Byte_NUMBER, 2000);

Printf("INNA226 ID:%x%x rn",rdata[0], rdata[1]);

for (int i = 0; i<10; i++)

{

/* Printf INA226_REG_SHUNT_VOLT */

uint16_t shuntVolt=0;

I2C_MEEPROMRead(I2C, INA226_ADDRESS, INA226_REG_SHUNT_VOLT, rdata, Byte_NUMBER, 2000);

shuntVolt = rdata[0]<<8&0xff00 | rdata[1];

Printf("SHUNT VOLT: %f mVrn", shuntVolt2.50.001);

delay_ms(10);

uint16_t busVolt=0;

I2C_MEEPROMRead(I2C, INA226_ADDRESS, INA226_REG_BUS_VOLT, rdata, Byte_NUMBER, 2000);

busVolt = rdata[0]<<8&0xff00 | rdata[1];

Printf("busVolt: %f mVrn", shuntVolt*1.25);

delay_ms(10);

/* Printf INA226_REG_POWER */

uint16_t Power=0;

I2C_MEEPROMRead(I2C, INA226_ADDRESS, INA226_REG_POWER, rdata, Byte_NUMBER, 2000);

Power = rdata[0]<<8&0xff00 | rdata[1];

Printf("Power: %f mWrn", Power*1.25);

/* Printf INA226_REG_SHUNT_VOLT */

uint16_t current=0;

I2C_MEEPROMRead(I2C, INA226_ADDRESS, INA226_REG_CURRENT, rdata, Byte_NUMBER, 2000);

current = rdata[0]<<8&0xff00 | rdata[1];

Printf("CUURET :%f mArn", current*0.02);

delay_ms(100);

Printf("--------------------------rn");

}

while (1);

}

五、實驗結(jié)果

審核編輯 黃宇

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

    關(guān)注

    463

    文章

    54024

    瀏覽量

    466354
  • mcu
    mcu
    +關(guān)注

    關(guān)注

    147

    文章

    18938

    瀏覽量

    398627
  • INA226
    +關(guān)注

    關(guān)注

    0

    文章

    7

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

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

    AS32A601MCU芯片如何進行IAP升級?

    一、什么是IAP? IAP(In Application Programming,在應(yīng)用編程)是一種技術(shù),旨在實現(xiàn)用戶應(yīng)用程序的動態(tài)更新,而無需使用專門的編程工具或硬件。IAP升級對于物聯(lián)網(wǎng)設(shè)備
    的頭像 發(fā)表于 12-19 11:39 ?2028次閱讀
    <b class='flag-5'>AS32A601</b>型<b class='flag-5'>MCU</b><b class='flag-5'>芯片</b>如何進行IAP升級?

    AS32A601車規(guī)級微控制器的應(yīng)用探索

    AS32A601將180 MHz RISC-V內(nèi)核、2 MB 嵌入式 Flash、4 路 CAN-FD以及完整的 ASIL-B 安全機制集成于單顆芯片,為國產(chǎn)車規(guī)MCU提供了可批量上車的工程樣本。本文結(jié)合AEC-Q100、IS
    的頭像 發(fā)表于 11-18 14:42 ?1154次閱讀

    同是電流檢測芯片FP137 與 INA139,實際性能差距有多大?

    不可或缺的部分? ” 電流檢測IC在該模塊中,主要實現(xiàn)四個核心功能: ①扭矩控制:通過實時反饋電流信號,使MCU能夠精確調(diào)節(jié)輸出至電機的電壓,從而將扭矩穩(wěn)定在目標(biāo)值。 ②安全保護:持續(xù)監(jiān)測電流狀態(tài),當(dāng)
    發(fā)表于 11-17 10:45

    基于AS32A601MCU芯片的屏幕驅(qū)動IC方案的技術(shù)研究

    摘要 :在電子技術(shù)快速迭代的當(dāng)下,屏幕驅(qū)動IC作為人機交互的關(guān)鍵環(huán)節(jié),其技術(shù)演進受到廣泛關(guān)注。本文聚焦于基于國科安芯推出的AS32A601MCU芯片的屏幕驅(qū)動IC方案,通過深入剖析AS32A
    的頭像 發(fā)表于 10-31 15:04 ?445次閱讀

    AS32S601MCU芯片在商業(yè)衛(wèi)星電源系統(tǒng)伺服控制器中的性能分析與應(yīng)用解析

    摘要: 隨著商業(yè)航天的蓬勃發(fā)展,對高可靠、高性能且具備成本效益的MCU(微控制單元)需求日益增長。本文聚焦于國科安芯推出的AS32S601MCU芯片,深入分析其性能指標(biāo),并探討其在商
    的頭像 發(fā)表于 10-28 21:58 ?840次閱讀

    STM32 驅(qū)動 INA226 測量電流電壓功率

    一、INA226簡介 INA226 是一款分流/功率監(jiān)視器,具有 I2C或SMBUS 兼容接口。 該器件 監(jiān)視分流壓降和總線電源電壓。 可編程校準(zhǔn)值、轉(zhuǎn)換時間和取平均值功能與內(nèi)部乘法器相結(jié)合,可實現(xiàn)
    發(fā)表于 10-28 10:10

    車規(guī)級MCU在特種車輛車身控制中的應(yīng)用研究

    本文聚焦于車規(guī)級MCU(微控制單元)在特種車輛車身控制系統(tǒng)中的應(yīng)用,以國科安芯的車規(guī)級MCU芯片AS32A601為例,深入分析其技術(shù)特點、功能安全設(shè)計及在車身控制中的實際表現(xiàn)。
    的頭像 發(fā)表于 09-19 17:12 ?874次閱讀

    MCU芯片AS32S601在衛(wèi)星光纖放大器(EDFA)中的應(yīng)用探索

    摘要: 本文聚焦于國科安芯推出的AS32S601MCU芯片在衛(wèi)星光纖放大器(EDFA)中的潛在應(yīng)用,探討其技術(shù)特性、抗輻射性能及適用性。通過分析其在單粒子效應(yīng)脈沖激光試驗中的表現(xiàn),結(jié)合EDFA系統(tǒng)
    的頭像 發(fā)表于 07-23 17:52 ?1155次閱讀

    AS32A601在毫米波雷達AEB方案中的技術(shù)創(chuàng)新與應(yīng)用拓展

    摘要: 隨著汽車電子技術(shù)的不斷發(fā)展,自動緊急制動(AEB)系統(tǒng)作為提升行車安全的關(guān)鍵技術(shù),其性能和可靠性備受關(guān)注。本文深入探討了國科安芯推出的MCU芯片AS32A601在毫米波雷達AEB方案中
    的頭像 發(fā)表于 07-04 11:09 ?731次閱讀

    基于AS32A601的高可靠MCU在電動汽車VCU系統(tǒng)中的應(yīng)用策略

    摘要: 隨著電動汽車產(chǎn)業(yè)的蓬勃發(fā)展,對VCU系統(tǒng)的性能、可靠性和功能安全提出了更高要求。國科安芯推出的AS32A601以其卓越的性能、豐富的功能模塊以及出色的安全特性,為電動汽車VCU系統(tǒng)
    的頭像 發(fā)表于 06-27 16:13 ?705次閱讀

    AS32A601與ASM1042芯片在電力系統(tǒng)自動化監(jiān)控中的應(yīng)用效能分析

    摘要: 隨著電力系統(tǒng)的持續(xù)發(fā)展與日益復(fù)雜化,自動化監(jiān)控技術(shù)在保障電力系統(tǒng)穩(wěn)定、高效運行中扮演著關(guān)鍵角色。本文深入剖析了廈門國科安芯科技有限公司的AS32A601芯片與ASM1042芯片組合在電力系統(tǒng)
    的頭像 發(fā)表于 06-20 17:47 ?842次閱讀

    INA226 具有警報功能的、36V、16 位、超精密I2C輸出電流/電壓/功率監(jiān)控器技術(shù)手冊

    INA226 是具有 I2C? 或 SMBUS 兼容接口的電流分流器和功率監(jiān)測器。該器件同時監(jiān)控分流壓降和總線電源電壓。可編程校準(zhǔn)值、轉(zhuǎn)換時間、和均值計算,與一個內(nèi)部乘法器相組合,實現(xiàn)電流值(安培)和功率值(瓦)的直接讀取。
    的頭像 發(fā)表于 05-09 10:49 ?2592次閱讀
    <b class='flag-5'>INA226</b> 具有警報功能的、36V、16 位、超精密I2C輸出電流/電壓/功率監(jiān)控器技術(shù)手冊

    RISC-V JTAG:開啟MCU 芯片調(diào)試之旅

    在當(dāng)今電子科技飛速發(fā)展的時代, MCU 芯片成為眾多企業(yè)追求技術(shù)突破與創(chuàng)新的關(guān)鍵領(lǐng)域。而芯片的調(diào)試過程則是確保其性能與可靠性的重要環(huán)節(jié)。本文以國科安芯自研 AS32A601為例,旨在詳
    的頭像 發(fā)表于 05-07 17:57 ?2759次閱讀
    RISC-V JTAG:開啟<b class='flag-5'>MCU</b> <b class='flag-5'>芯片</b>調(diào)試之旅

    基于先進MCU的機器人運動控制系統(tǒng)設(shè)計:理論、實踐與前沿技術(shù)

    AS32A601為例,全面闡述其在機器人運動控制領(lǐng)域的卓越性能與廣泛應(yīng)用前景,旨在為機器人技術(shù)在多領(lǐng)域的深化發(fā)展提供有力支撐。 關(guān)鍵詞 :MCU;機器人;運動控制;AS32A601;前沿技術(shù) 一、引言 機器人運動控制系統(tǒng)作為機器
    的頭像 發(fā)表于 04-27 10:58 ?940次閱讀

    面向工業(yè)與汽車領(lǐng)域的高安全可靠MCU——AS32X601系列芯片解析

    (D-Flash)及512KB SRAM,均支持ECC校驗。 安全認(rèn)證 :汽車級型號AS32A601通過AEC-Q100 Grade1認(rèn)證,支
    的頭像 發(fā)表于 03-14 16:40 ?1138次閱讀