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

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

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

INA226驅(qū)動程序

Harmony&嵌入式學(xué)習(xí) ? 來源:Harmony&嵌入式學(xué)習(xí) ? 作者:Harmony&嵌入式學(xué) ? 2023-07-17 09:26 ? 次閱讀

INA226是一款分流/功率監(jiān)視器,具有IPCTM或SMBUS兼容接口。該器件監(jiān)視分流壓降和總線電源電壓。可編程校準(zhǔn)值、轉(zhuǎn)換時間和取平均值功能與內(nèi)部乘法器相結(jié)合,可實現(xiàn)電流值(單位為安培)和功率值(單位為瓦)的直接讀取。

wKgaomSzusWAaoeAAAGa9q8Da1s718.png

INA226可在OV至36V的共模總線電壓范圍內(nèi)感測電流,與電源電壓無關(guān)。該器件由一個2.7V至5.5V的單電源供電,電源電流典型值為330uA。該器件的額定工作溫度范圍為-40°C至125°C,PC兼容接口上具有多達16個可編程地址。
C文件



#define _LED_C_

#include "led.h"
#include "delay.h"
#include "system.h"




#define IIC_PORT	GPIOA																				//IIC IO端口
#define IIC_RCC 	RCC_APB2Periph_GPIOA												//端口時鐘
#define IIC_SDA GPIO_Pin_5																		//SDA引腳
#define IIC_SDA_H	GPIO_SetBits(IIC_PORT,IIC_SDA)							//拉高SDA
#define IIC_SDA_L	GPIO_ResetBits(IIC_PORT,IIC_SDA)						//拉低SDA
#define IIC_SDA_READ()	GPIO_ReadInputDataBit(GPIOA,IIC_SDA)	//讀取SDA

#define IIC_SCL GPIO_Pin_4																		//SCL引腳
#define IIC_SCL_H	GPIO_SetBits(IIC_PORT,IIC_SCL)							//拉高SCL
#define IIC_SCL_L	GPIO_ResetBits(IIC_PORT,IIC_SCL)						//拉低SCL



char time=5;


void INA_IIC_Delay()
{unsigned char x;
	for(x=1;x>0;x--)
	{
		__NOP();__NOP();__NOP();__NOP();__NOP();
	}
}


void INAInit(void)
{
    GPIO_InitTypeDef  GPIO_InitStructure;

    RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOA, ENABLE);
    GPIO_StructInit(&GPIO_InitStructure);
    GPIO_InitStructure.GPIO_Pin  =  IIC_SDA | IIC_SCL;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
		IIC_SDA_H;
	  IIC_SCL_H;
	
}


void INA_IIC_SDA_OUT(void)	//SDA配置為輸出
{
	GPIO_InitTypeDef GPIO_INIT;
	GPIO_INIT.GPIO_Mode=GPIO_Mode_Out_PP;
	GPIO_INIT.GPIO_Pin=IIC_SDA ;
	GPIO_INIT.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(IIC_PORT,&GPIO_INIT);
}
void INA_IIC_SDA_IN(void)	//SDA配置為輸入
{
	GPIO_InitTypeDef GPIO_INIT;
	GPIO_INIT.GPIO_Mode=GPIO_Mode_IPU;
	GPIO_INIT.GPIO_Pin=IIC_SDA ;
	GPIO_INIT.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(IIC_PORT,&GPIO_INIT);
}

void INA_IIC_Start(void)	//開始信號
{
	IIC_SDA_H;
	IIC_SCL_H;
	INA_IIC_Delay();
	IIC_SDA_L;
	INA_IIC_Delay();
	IIC_SDA_L;
}
void INA_IIC_Stop(void )	//結(jié)束信號
{
	IIC_SDA_L;
	IIC_SCL_H;
	INA_IIC_Delay();
	IIC_SDA_H;
	INA_IIC_Delay();
	IIC_SCL_L;
	
	IIC_SCL_H;
	IIC_SDA_H;
}
bool INA_IIC_ACK_Read(void)	//讀取應(yīng)答信號
{
	bool ack;
	IIC_SDA_H;
	INA_IIC_SDA_IN();

	IIC_SCL_H;
	INA_IIC_Delay();
	if(IIC_SDA_READ() == SET) ack=false;
	else ack=true;
	IIC_SCL_L;
	INA_IIC_SDA_OUT();
	return ack;
}
void INA_IIC_ACK_Send(bool ack)	//發(fā)送應(yīng)答信號
{
	IIC_SCL_L;
	if(ack == true) 
		IIC_SDA_L;
	else IIC_SDA_H;
	IIC_SCL_H;
	INA_IIC_Delay();
	IIC_SCL_L;
}
void INA_IIC_Send_Byte(unsigned char byte)	//IIC發(fā)送一位數(shù)據(jù)
{
	unsigned char i;
	IIC_SCL_L;
	for(i=0;i>8);
	data_temp[1]=(unsigned char )(data & 0xFF);
	INA_IIC_Start();
	INA_IIC_Send_Byte(addr);	//發(fā)送INA219地址
	INA_IIC_Send_Byte(reg);							//發(fā)送寄存器地址
	INA_IIC_Send_Byte(data_temp[0]);						//發(fā)送高8位數(shù)據(jù)
	data++;
	INA_IIC_Send_Byte(data_temp[1])	;					//發(fā)送低8位數(shù)據(jù)
	INA_IIC_Stop();
}

 
void INA226_Init(void)
{	
	INAInit();
	DELAY_Ms(10);
	INA226_SendData(INA226_ADDR1,CFG_REG,0x484f);//設(shè)置轉(zhuǎn)換時間204us,求平均值次數(shù)128,采樣時間204*128,設(shè)置模式為分流模式和總線連續(xù)模式
	INA226_SendData(INA226_ADDR1,CAL_REG,0x0012);//設(shè)置分流電壓轉(zhuǎn)轉(zhuǎn)電流轉(zhuǎn)換參數(shù)
}
 


u16 INA226_ReadData(u8 addr)
{
	u16 temp=0;
	INA_IIC_Start();
 
	INA_IIC_Send_Byte(addr+1);
	
	
	temp = INA_IIC_Read_Byte();
	temp

H文件


#ifndef __LED_H
#define __LED_H

// Files includes
#include 

#include "mm32_device.h"
#include "hal_conf.h"

#define 	CFG_REG	 		0x00		//
#define 	SV_REG 			0x01		//分流電壓,分流電阻為0.1歐姆
#define 	BV_REG 			0x02		//總線電壓
#define 	PWR_REG 		0x03		//電源功率
#define 	CUR_REG 		0x04		//電流
#define 	CAL_REG 		0x05		//校準(zhǔn),設(shè)定滿量程范圍以及電流功率測數(shù)
#define 	ONFF_REG 		0x06		//屏蔽 使能
#define 	AL_REG 			0x07		//警報功能的閾值
#define 	INA226_GET_ADDR 0XFF//唯一芯片識別號
#define   INA226_ADDR1	0x80  //芯片地址
#define   INA226_ADDR2	0x88  //芯片地址
 
#define     CAL             456     //0.00512/(Current_LSB*R_SHUNT) = 470  //電流偏大改小

typedef struct
{
	float voltageVal;			  //mV
	float Shunt_voltage;		//uV
	float Shunt_Current;		//mA
	float powerVal;
}INA226;
 
 
void INA226_Init(void);
void INA226_SetRegPointer(u8 addr,u8 reg);
void INA226_SendData(u8 addr,u8 reg,u16 data);
 
u16 INA226_ReadData(u8 addr);

u16 INA226_Get_ID(u8 addr);				    //獲取ID
u16 INA226_GetVoltage( u8 addr);		  //獲取總線電壓
u16 INA226_GetShunt_Current(u8 addr);	//獲取分流電壓
u16 INA226_GetShuntVoltage(u8 addr);	//分流電壓
u16 INA226_Get_Power(u8 addr);			  //獲取功率
 
u16 INA226_GET_CAL_REG(u8 addr);
void GetVoltage(float *Voltage);		
void Get_Shunt_voltage(float *Current);
void Get_Shunt_Current(float *Current);
//void Get_Power(float *Current);
void GetPower();//W
 
extern INA226 INA226_data;
#define Key4                   GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8)    //RST
#define Key3                   GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_5)    //DOWN
#define Key2                   GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_6)    //UP
#define Key1                   GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_7)    //MODE


#define IN3                   GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)
#define IN4                   GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_4)
#define IN5                   GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_5)
#define IN6                   GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8)
#define IN7                   GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_9)
#define KEY8                  GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_10)
#define KEY9                  GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_15)
#define KEY10                 GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2)
#define KEY11                 GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)
#define KEY12                 GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_11)

#endif



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

    關(guān)注

    33

    文章

    8596

    瀏覽量

    151145
  • 監(jiān)視器
    +關(guān)注

    關(guān)注

    1

    文章

    780

    瀏覽量

    33139
  • 驅(qū)動程序
    +關(guān)注

    關(guān)注

    19

    文章

    836

    瀏覽量

    48038
  • 乘法器
    +關(guān)注

    關(guān)注

    8

    文章

    205

    瀏覽量

    37057
收藏 人收藏

    評論

    相關(guān)推薦

    INA226讀取vbus電壓異常的原因?怎么解決?

    BQ24610我在項目中使用了兩片ina226,一片用于監(jiān)測BQ24610給電池充電時的電流和電池電壓,另一片用于檢測一路buck電路的輸入電壓及電流。原理圖如下 兩路ina226模塊掛載在同一
    發(fā)表于 07-29 07:57

    請問INA226怎么校準(zhǔn)?校準(zhǔn)寄存器應(yīng)該寫入多少?

    如圖使用INA226高端檢測,電流LSB是1MA,平均數(shù)16,連續(xù)檢測,校準(zhǔn)寄存器為0xA00。電流顯示單位A,位數(shù)為00.00A,shunt電阻2mΩ,最大檢測電流20A。 在實際測試中,負(fù)載
    發(fā)表于 08-02 07:49

    請問INA226的RSHUNT側(cè)位電阻如何計算?

    INA226的RSHUNT 側(cè)位電阻如何計算
    發(fā)表于 08-08 07:28

    自己搭的INA226的板子,怎么用官方的INA226EVM Software軟件調(diào)試?

    我是自己搭的INA226的板子,怎么用官方的INA226EVM Software軟件調(diào)試,不知道板子怎么和電腦連接。
    發(fā)表于 08-15 07:30

    請問INA226是沒有辦法測量空載電流嗎?

    INA226使用INA226做微安級電流檢測,使用低端檢測,在接負(fù)載時測量正常,而在空載時(斷開負(fù)載,IN+懸空,IN-接GND)出現(xiàn)異常測量,異常測量值為6.55mV左右,四路測量中兩路出現(xiàn)這樣的異常; 請問INA226是沒
    發(fā)表于 08-16 06:04

    INA226低邊連接時負(fù)載輸出是否可以接-30V電壓?

    INA226低邊連接時負(fù)載輸出是否可以接-30V電壓?INA226雙向電流管理是什么意思?
    發(fā)表于 09-14 08:37

    INA226并聯(lián)電壓反饋的十六進駐數(shù)據(jù)后兩位FF不會變化嗎?

    請問各位,有沒用過INA226的。 我用INA226的并聯(lián)電壓來反饋數(shù)據(jù),比如,我輸入1A 電流,我得到INA226的并聯(lián)電壓的十六進制數(shù)是25FF,可是,我輸入1.001A或者1.01A時,照理
    發(fā)表于 12-18 08:21

    INA226采樣正弦波信號,怎么配置INA226來做這個采樣做合適?

    公司項目碰到一個頻率為120hz,幅值為0~2倍設(shè)定值的正弦波電流,設(shè)計上已經(jīng)使用了INA226,所以想請教下怎么配置INA226來做這個采樣做合適,謝謝!
    發(fā)表于 12-20 08:12

    使用INA226如何進行程序與模塊測試

    使用INA226如何進行程序與模塊測試
    發(fā)表于 10-13 06:47

    STM32HAL庫硬件I2C如何驅(qū)動INA226保姆級?

    STM32HAL庫硬件I2C如何驅(qū)動INA226保姆級?
    發(fā)表于 02-07 06:35

    INA226模塊的相關(guān)資料推薦

    筆者最近有個項目需要測量電流參數(shù),于是買來INA226模塊測試一下。文章目錄應(yīng)用電路程序設(shè)計模塊測試應(yīng)用電路首先測試的INA226模塊如下圖所示。INA226模塊原理圖如下圖所示。官方
    發(fā)表于 02-08 07:12

    INA226 支持報警功能的 36V、雙向、超高精度、低側(cè)/高側(cè)、I2C 輸出電流/功率監(jiān)控器

    電子發(fā)燒友網(wǎng)為你提供TI(ti)INA226相關(guān)產(chǎn)品參數(shù)、數(shù)據(jù)手冊,更有INA226的引腳圖、接線圖、封裝手冊、中文資料、英文資料,INA226真值表,INA226管腳等資料,希望可以
    發(fā)表于 11-02 18:03
    <b class='flag-5'>INA226</b> 支持報警功能的 36V、雙向、超高精度、低側(cè)/高側(cè)、I2C 輸出電流/功率監(jiān)控器

    STM32HAL庫硬件I2C驅(qū)動INA226保姆級教程

    STM32HAL庫硬件I2C驅(qū)動INA226保姆級教程廢話不多說直接上代碼ina226.h/**@brief STM32 HAL Library for INA226 Curren
    發(fā)表于 12-04 16:51 ?141次下載
    STM32HAL庫硬件I2C<b class='flag-5'>驅(qū)動</b><b class='flag-5'>INA226</b>保姆級教程

    INA226使用之程序與模塊測試

    筆者最近有個項目需要測量電流參數(shù),于是買來INA226模塊測試一下。文章目錄應(yīng)用電路程序設(shè)計模塊測試應(yīng)用電路首先測試的INA226模塊如下圖所示。INA226模塊原理圖如下圖所示。官方
    發(fā)表于 12-04 18:51 ?149次下載
    <b class='flag-5'>INA226</b>使用之<b class='flag-5'>程序</b>與模塊測試

    使用INA226/INA228監(jiān)控AM263x MCU上的總線電壓和功率測量

    電子發(fā)燒友網(wǎng)站提供《使用INA226/INA228監(jiān)控AM263x MCU上的總線電壓和功率測量.pdf》資料免費下載
    發(fā)表于 08-31 09:38 ?2次下載
    使用<b class='flag-5'>INA226</b>/<b class='flag-5'>INA</b>228監(jiān)控AM263x MCU上的總線電壓和功率測量