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

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

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

INA219電流采集驅(qū)動

Harmony&嵌入式學習 ? 來源:Harmony&嵌入式學習 ? 作者:Harmony&嵌入式學 ? 2023-07-17 09:23 ? 次閱讀

針對cortexm系列

wKgZomSzuPiAdIO1AAB5a5_A6mo512.png

INA219 是一款具備 I 2C 或 SMBUS 兼容接口的分流器 和功率監(jiān)測計。該器件監(jiān)測分流器電壓降和總線電源電 壓,轉(zhuǎn)換次數(shù)和濾波選項可通過編程設(shè)定??删幊绦?值與內(nèi)部乘法器相結(jié)合,支持直接讀取電流值(單位: 安培)。通過附加乘法寄存器可計算功率(單位: 瓦)。I 2C 或 SMBUS 兼容接口 具有 16 個可編程地 址。

c文件

#include "ina219.h"

void INA_REG_Write(unsigned char reg,unsigned int data);

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

void INA_IIC_INIT(void)		//IIC初始化
{
	GPIO_InitTypeDef GPIO_INIT;
	RCC_APB2PeriphClockCmd(IIC_RCC,ENABLE);
	
	GPIO_INIT.GPIO_Mode=GPIO_Mode_Out_PP;
	GPIO_INIT.GPIO_Pin=IIC_SDA | IIC_SCL;
	GPIO_INIT.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(IIC_PORT,&GPIO_INIT);
	
	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)	//讀取應答信號
{
	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ā)送應答信號
{
	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(INA219_ADDRESS);	//發(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 INA_Init(void )	
{
	INA_IIC_INIT();
	INA_REG_Write(INA219_REG_CONFIG,INA219_CONFIG_value);
	INA_REG_Write(INA219_REG_CALIBRATION,INA_CAL);
}
unsigned int INA_GET_Voltage_MV(void)	//獲取電壓(單位:mv)
{
	unsigned char data_temp[2];
	INA_Read_Byte_s(0x02,data_temp);
	return (int)((((data_temp[0]> 3)*4);	//右移3為去掉:bit2,CNVR,OVF三位,再乘以 4MV (官方文檔規(guī)定),得到當前總線的電壓值
}
unsigned int INA_GET_Current_MA(void)		//獲取電流(單位:mA)
{
	unsigned char data_temp[2];
	INA_REG_Write(INA219_REG_CONFIG,INA219_CONFIG_value);
	INA_Read_Byte_s(INA219_REG_CURRENT,data_temp);
	return (int)((((data_temp[0]

H文件


#ifndef _INA219_H_
#define _INA219_H_
#include "stm32f10x.h"
#include "stdbool.h"
// I2C Address Options
/*
#define INA219_I2C_ADDRESS_CONF_0               (u8)(0x40 

審核編輯:湯梓紅

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

    關(guān)注

    31

    文章

    5268

    瀏覽量

    119640
  • 接口
    +關(guān)注

    關(guān)注

    33

    文章

    8352

    瀏覽量

    150508
  • 電流采集
    +關(guān)注

    關(guān)注

    0

    文章

    5

    瀏覽量

    6547
收藏 人收藏

    評論

    相關(guān)推薦

    INA226/INA219測量出來的電流值是有效值還是瞬時值?

    我想確認下比如INA226, INA219等檢測芯片,測量出來的電流值是有效值還是瞬時值?
    發(fā)表于 07-30 07:25

    利用INA219作為電池輸入的電壓電流采集,會出現(xiàn)燒毀的情況怎么解決?

    利用INA219作為電池輸入的電壓電流采集(前端未加TVS),在使用過程中出現(xiàn)INA219整體燒毀直接冒火碳化,請問出現(xiàn)這種問題一般什么原因?qū)е拢坷擞浚?
    發(fā)表于 08-05 08:11

    請問INA219電流LSB最小能達到多少?

    各位好,請教下INA219電流LSB最小能達到多少?
    發(fā)表于 08-14 08:02

    INA219電流過大怎么處理?

    如下圖的設(shè)計,其他所有電路均不焊接情況下,排除短路,只要焊接上INA219,3V3就會達到104mA (不過不是LDO的極限),這看起來并不正常,但是我從電路上沒看到不正常的地方,我是INA219,top mark是A219
    發(fā)表于 08-19 06:40

    使用ina219電流時,要進行標定嗎?

    使用ina219電流時,要進行標定嗎?還有校準寄存器如何使用?謝謝
    發(fā)表于 09-05 06:09

    有關(guān)INA219芯片的使用問題

    在使用TI 公司的INA219芯片進行電流,電壓以及功率的數(shù)值進行測量時,遇到了如下幾個問題1.只有先配置Calibration Register 才能檢測到電流嗎?如何精準的配置
    發(fā)表于 01-20 10:26

    請問INA219軟件怎樣讀出eZdspC5535上INA219的數(shù)據(jù)?

    INA219軟件 怎樣讀出eZdspC5535上INA219的數(shù)據(jù)?
    發(fā)表于 06-18 11:33

    如何去使用INA219零漂移雙向電流/功率監(jiān)測計呢

    INA219是什么?如何去使用INA219零漂移雙向電流/功率監(jiān)測計呢?
    發(fā)表于 10-15 06:54

    INA219電壓電流表的資料分享

    描述電壓電流INA219這真的是一個很酷的小設(shè)備,它不僅可以讓你測量電流,還可以測量電壓。通過一點乘法,您甚至可以測量功率。在電壓方面,您可以直接超過 Arduino 5 伏的限制。事實上,您最多
    發(fā)表于 08-18 07:16

    INA219,pdf(Zerø-Drift,

    The INA219 is a high-side current shunt and power monitor with an I2C interface. The INA219
    發(fā)表于 09-24 23:17 ?57次下載

    INA219 26V、雙向、零漂移、低側(cè)/高側(cè)、I2C 輸出電流/功率監(jiān)控器

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

    INA219電量監(jiān)測芯片的使用經(jīng)驗和資料及使用步驟詳細說明

    手冊如上,INA219 是TI推出的具有I2C 接口的零漂移雙向電流/功率監(jiān)測計,INA219內(nèi)部結(jié)構(gòu)圖如上,芯片同是支持差分分壓電流檢測跟總線電壓檢測
    的頭像 發(fā)表于 09-08 11:37 ?7.4w次閱讀

    電壓電流INA219開源項目

    電子發(fā)燒友網(wǎng)站提供《電壓電流INA219開源項目.zip》資料免費下載
    發(fā)表于 07-29 10:42 ?31次下載
    電壓<b class='flag-5'>電流</b>表<b class='flag-5'>INA219</b>開源項目

    INA219電流電壓檢測模塊

    電子發(fā)燒友網(wǎng)站提供《INA219電流電壓檢測模塊.zip》資料免費下載
    發(fā)表于 08-09 11:31 ?13次下載
    <b class='flag-5'>INA219</b><b class='flag-5'>電流</b>電壓檢測模塊

    隔離INA219模塊開源分享

    電子發(fā)燒友網(wǎng)站提供《隔離INA219模塊開源分享.zip》資料免費下載
    發(fā)表于 11-22 09:18 ?4次下載
    隔離<b class='flag-5'>INA219</b>模塊開源分享