INA226+STC89C52RC读取电流电压功率

1.关于INA226模块的介绍,参考

https://blog.csdn.net/qq_40893012/article/details/106069907

2.关于STC89C52RC单片机的介绍,参考

http://news.eeworld.com.cn/mcu/2015/1030/article_23405.html

3.用到的工具:

  1. VSCode(或其他代码编辑器)
  2. Keil5:编译代码,生成.hex文件,该格式文件可以下载到单片机中
  3. STC-ISP:类似串口工具,可将.hex文件下载到单片机中

4.开发过程:

  1. 单片机中读电流的程序已写好,如下(初始化过程在此忽略):
设置读电流的AT指令:
uchar Check_Serial_Current_AT_CMD(void)
{
	if(0==strncmp(serial_data_bubfer, "AT+Curr?", 8)) //读取电流
	{
		return 1;
	}
	
	else 
	{
		return 0;
	}
}
判断上层是否将AT指令正确传入:
if(1==Check_Serial_Current_AT_CMD())  //读电流的AT指令是否解析OK
			{
				Get_Shunt_Current(&Current);  //读取电流
				num2char(str, Current, 3, 1);     //读取电流的浮点数转换成字符串
				memset(send_buffer,0,10);
				strcat(send_buffer,"I=");
				strcat(send_buffer,str);              //发送字符串组合 I=123.4
				send_str_com(send_buffer);   //串口发送字符串
			}
读电流的方法:
void Get_Shunt_Current(float *Current)//mA
{
	//Current[0] = (INA226_GetShunt_Current(INA226_ADDR1)* 2.5f);
	//Current[0] = INA226_GetShunt_Current(INA226_ADDR1)/ 10.0f;
	Current[0] = INA226_GetShunt_Current(INA226_ADDR1);
	//Current[0] = INA226_GetShunt_Current(INA226_ADDR1)/ 100.0f;
}
  1. 以上是读取电流的整个过程,下面介绍怎么读取电压:
同样,首先定义AT指令
uchar Check_Serial_voltage_AT_CMD(void)
{
	if(0==strncmp(serial_data_bubfer, "AT+volt?", 8)) //��ȡ����
	{
		return 1;
	}
	
	else 
	{
		return 0;
	}
}
判断上层是否将AT指令正确传入:
else if(1==Check_Serial_voltage_AT_CMD())
			{
				GetVoltage(&Voltage);
				num2char(str, Voltage, 3, 1);
				memset(send_buffer,0,10);
				strcat(send_buffer,"V=");
				strcat(send_buffer,str);
				send_str_com(send_buffer); 
			}
读电压的方法
void GetVoltage(float *Voltage)//mV
{
	// Voltage[0] = INA226_GetVoltage(INA226_ADDR1)*1.25f;
	Voltage[0] = INA226_GetVoltage(INA226_ADDR1)*0.00125;
}

5.遇到的问题:
读电压时,有两个方法:
一是读取分流电压

void Get_Shunt_voltage(float *Voltage)//uV
{
	// Voltage[0] = (INA226_GetShuntVoltage(INA226_ADDR1)*2.2);//这里原来乘的系数是2.5
	Voltage[0] = (INA226_GetShuntVoltage(INA226_ADDR1))*1.4;//这里原来乘的系数是2.5
}

二是读取总线电压

void GetVoltage(float *Voltage)//mV
{
	// Voltage[0] = INA226_GetVoltage(INA226_ADDR1)*1.25f;
	Voltage[0] = INA226_GetVoltage(INA226_ADDR1)*0.00125;
}

分流电压此处不可取,因为读出来是常值“3”
此处取总线电压,乘以系数0.00125(实际这个系数可以更精确),即可读取出总线电压

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值