INA226电压电流检测程序

 参考程序如下

//INA226初始化配置:

#include "ina226.h"
#include "myiic.h"
#include "usart.h"	
#include "delay.h"
#include "lcd.h"
#include "led.h"
#include "stdio.h"
#include "string.h"


u8 Voltage_Current_data[64]={0x01,0xFA,0x01,0x00};//电压电流存储数组



//INA226初始化
void INA226_Init(void)
{ 	
 IIC_Init();//iic初始化
 delay_ms(10);	
}

//INA226参数配置

//INA226参数配置
//返回值:None
//写入校准值CAL=0.00512/(Current_LSB*Rshunt);-->>Current_LSB选择为1mA/bit,Rshunt=采样电阻0.1R
//**********Current_LSB=Maximum Expected Current/32768;-->>Maximum Expected Current=5A,2^15=32768
void INA226_Config(void)
{
	INA226_write(0x80,Config_Reg,Config_data);//配置寄存器参数配置
	INA226_write(0x80,Calib_Reg,Calib_data);//校准寄存器参数配置
	
	INA226_write(0x82,Config_Reg,Config_data);//配置寄存器参数配置
	INA226_write(0x82,Calib_Reg,Calib_data);//校准寄存器参数配置
	
	INA226_write(0x84,Config_Reg,Config_data);//配置寄存器参数配置
	INA226_write(0x84,Calib_Reg,Calib_data);//校准寄存器参数配置
	
	INA226_write(0x86,Config_Reg,Config_data);//配置寄存器参数配置
	INA226_write(0x86,Calib_Reg,Calib_data);//校准寄存器参数配置	
	
	INA226_write(0x88,Config_Reg,Config_data);//配置寄存器参数配置
	INA226_write(0x88,Calib_Reg,Calib_data);//校准寄存器参数配置	
}

//INA226数据读写

//INA226数据读取
//slaveaddr:从机地址
//readaddr:读取的寄存器地址
//返回值:16位数据data_temp
u16 INA226_Read(u8 slaveaddr,u8 readaddr)
{
	u8 data_H=0,data_L=0;
	u16 data_temp=0;
	
	IIC_Start();
	IIC_Send_Byte(slaveaddr);//从机地址
	IIC_Wait_Ack();
	IIC_Send_Byte(readaddr);//寄存器地址
	IIC_Wait_Ack();
	IIC_Stop();//
	
	IIC_Start();
	IIC_Send_Byte(slaveaddr+1);//进入接收模式				
	IIC_Wait_Ack();
	
	data_H=IIC_Read_Byte(1);	//读取数据高字节
	data_L=IIC_Read_Byte(0);	//读取数据低字节
	IIC_Stop(); //产生一个停止条件 
	
	data_temp|=data_H;
	data_temp<<=8;
	data_temp|=data_L;
	
	return data_temp;
}


//INA226数据写入
//slaveaddr:从机地址
//writeaddr:写入的寄存器地址
//writedata:要写入的数据
//返回值:None
void INA226_write(u8 slaveaddr,u8 writeaddr,u16 writedata)
{
	u8 data_temp[2];
	
	data_temp[0]=(u8)(writedata>>8);   //高字节
	data_temp[1]=(u8)(writedata&0xff); //低字节
		
	IIC_Start();
	IIC_Send_Byte(slaveaddr);//从机地址
	IIC_Wait_Ack();
	
	IIC_Send_Byte(writeaddr);//写入寄存器地址
	IIC_Wait_Ack();
	
	IIC_Send_Byte(data_temp[0]);//发送高字节	
	IIC_Wait_Ack();
	IIC_Send_Byte(data_temp[1]);//发送低字节			
	IIC_Wait_Ack();
	
	IIC_Stop(); //产生一个停止条件 
}

//INA233读取电压数据 

//INA233读取电压电流数据
//Power_LSB = 25 * Current_LSB
//BusVoltage_LSB = 1.25 mv/bit 固定值(由公式3计算得到)
//ShuntVoltage_LSB = 2.5uv/bit 固定值(由公式3计算得到)

//Bus Voltage Register的LSB = 1.25mV,FSR = 0x7FFF
//Shunt Voltage Register的LSB = 2.5uV,FSR = 0x7FFF
//Current Register的LSB = 0.02mA,FSR = 0x7FFF
//Power Register的LSB = Current_LSB * 25,FSR = 0xFFFF


//读取INA233电压(4组)
void INA226_Read_Voltage()
{
	u8 i;
	u16 Voltage_temp=0;
	float Data_V=0;
	u32 Voltage_data=0;
	char  INA226_V[20];
	
	for(i=1;i<6;i++)
	{
		switch(i)
		{
			case 1:
			{
				Voltage_temp=INA226_Read(0x80,Bus_V_Reg);//读取电压寄存器-->>Bus Voltage Register	
				Data_V=Voltage_temp*1.25;//乘LSB-->>1.25 mV
        Voltage_data=Data_V*100;//数据放大100
				
				Voltage_Current_data[4]=(Voltage_d
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值