基于STM32电压检测和电流检测

1.硬件平台

  • CPU:STM32F103C8
  • 屏幕:0.96寸OLED屏幕(SPI接口)
  • 电压测量模块: INA226(IIC接口)
  • 点流测量模块:ACS712(ADC采集)

2.功能实现

1.可测量直流电压0~36V,适用于低电压电子电路中。
2.可测量直流电0~5A范围内,目前采用的ACS712测量量程为5A,该模块有多个量程,可测量到20A
3.实时功率监测
4.电池电量监测(采用电压压降方式计算)

3.硬件介绍

3.1 INA226模块

  INA226是具有I2C™或SMBUS兼容接口的电流分流器和功率监控器。该设备同时监视并联电压降和总线电源电压。可编程的校准值,转换时间和平均值与内部乘法器结合使用,可以直接读取以安培为单位的电流和以瓦特为单位的功率。INA226感应共模总线电压上的电流,该电压可在0 V至36 V之间变化,与电源电压无关。该器件采用2.7V至5.5V单电源供电,典型功耗为330 µA。该器件的额定工作温度范围为–40°C至125 \ xC2°C,并且在I 2 C兼容接口上具有多达16个可编程地址。


  根据实物和原理图可看出IN和OUT 之间进接了一个0.002R电阻。在官方提供说明文档介绍改模块是可以测量直流电压0~36V,可测量总线共模电流,测量电流范围为-20A ~ 20A之间。测量精度为±1%。但在实际使用过程中发现仅能测量测量到电压值。测量电压时接线方式为:
  INPUT接电源正极,GND接电源负极。
  按照模块使用说明提示在将模块串联接入电路(即OUPUT接入到负载),实际测量发现无法获取到正常电流值,因此采用ACS712模块通过ADC方式完成电流测量。

3.2 INA226模块相关寄存器和设备地址

   1.INA226一共有6个寄存器(0x0~0x5),关于各个寄存器详细介绍这里则不展开介绍,可自行下载相关资料。

   2.INA226模块采用IIC通讯,根据原理图可知地址A1 A0 ==00,再参考官方技术文档可知模块设备地址为:0x40

从时序可以看出,第8位为读写使能位,则地址和读写为组合则为:读0x81,写0x80

3.3 INA226模块时序图

   在时钟下降沿沿时发送数据,上升沿读取数据。
  3.3 INA226模块驱动

#include "sys.h"
#include "myiic.h"
#define     CFG_REG         0x00        //
#define     SV_REG          0x01        //分流电压
#define     BV_REG          0x02        //总线电压
#define     PWR_REG         0x03        //电源功率
#define     CUR_REG         0x04        //电流
#define     CAL_REG         0x05        //校准,设定满量程范围以及电流和功率测数的
#define     ONFF_REG        0x06        //屏蔽 使能 警报配置和转换准备就绪
#define     AL_REG          0x07        //包含与所选警报功能相比较的限定值
#define     INA226_GET_ADDR 0XFF        /
//初始化INA226
void INA226_Init(void)
{   IIC_Init();INA226_SendData(INA226_ADDR1,CFG_REG,0x8000);    //重新启动INA226_SendData(INA226_ADDR1,CFG_REG,0x484f); //设置转换时间204us,求平均值次数128,采样时间为204*128,设置模式为分流和总线连续模式INA226_SendData(INA226_ADDR1,CAL_REG,CAL); //设置分辨率//INA226_SendData(INA226_ADDR1,CAL_REG,0x0012);//设置分流电压转电流转换参数   INA226_Get_ID(INA226_ADDR1);                    //获取ina226的id
}
//设置寄存器指针
void INA226_SetRegPointer(u8 addr,u8 reg)
{IIC_Start();IIC_Send_Byte(addr);IIC_Wait_Ack();IIC_Send_Byte(reg);IIC_Wait_Ack();IIC_Stop();
}//发送,写入数据
void INA226_SendData(u8 addr,u8 reg,u16 data)
{u8 temp=0;IIC_Start();IIC_Send_Byte(addr);IIC_Wait_Ack();IIC_Send_Byte(reg);IIC_Wait_Ack();temp = (u8)(data>>8);IIC_Send_Byte(temp);IIC_Wait_Ack();temp = (u8)(data&0x00FF);IIC_Send_Byte(temp);IIC_Wait_Ack();IIC_Stop();
}//读取数据
u16 INA226_ReadData(u8 addr)
{u16 temp=0;IIC_Start();IIC_Send_Byte(addr+1);IIC_Wait_Ack();temp = IIC_Read_Byte(1);temp<<=8;    temp |= IIC_Read_Byte(0);IIC_Stop();return temp;
}
//1mA/bit
u16 INA226_GetShunt_Current(u8 addr)
{u16 temp=0;   INA226_SetRegPointer(addr,CUR_REG);temp = INA226_ReadData(addr);if(temp&0x8000)    temp = ~(temp - 1);    return temp;
}//获取id
void INA226_Get_ID(u8 addr)
{u32 temp=0;INA226_SetRegPointer(addr,INA226_GET_ADDR);temp = INA226_ReadData(addr);ina226_data.ina226_id = temp;
}//获取校准值
u16 INA226_GET_CAL_REG(u8 addr)
{   u32 temp=0;INA226_SetRegPointer(addr,CAL_REG);temp = INA226_ReadData(addr);return (u16)temp;
}//1.25mV/bit
u16 INA226_GetVoltage(u8 addr)
{u32 temp = 0;INA226_SetRegPointer(addr,BV_REG);temp = INA226_ReadData(addr);return (u16)temp;
}//2.5uV/bit
u16 INA226_GetShuntVoltage(u8 addr)
{int16_t temp = 0;INA226_SetRegPointer(addr,SV_REG);temp = INA226_ReadData(addr);if(temp&0x8000)  temp = ~(temp - 1);    return (u16)temp;
}//获取电压
void GetVoltage(float *Voltage)//mV
{*Voltage = INA226_GetVoltage(INA226_ADDR1)*Voltage_LSB;
}

3.4 ACS712模块

  ACS712基于霍尔感应的原理设计,由一个精确的低偏移线性霍尔传感器电路与位于接近IC表面的铜箔组成(如下图所示),电流流过铜箔时,产生一个磁场, 霍尔元件根据磁场感应出一个线性的电压信号,经过内部的放大、滤波、斩波与修正电路,输出一个电压信号,该信号从芯片的第七脚输出,直接反应出流经铜箔电流的大小。ACS712根据尾缀的不一样,量程分为三个规格:±5A、±20A、±30A 。输入与输出在量程范围内为良好的线性关系,其系数Sensitivity分别为,185 mV/A、100 mV/A、66mV/A。因为斩波电路的原因,其输出将加载于0.5Vcc上。ACS712的Vcc电源 一般建议采用5V。输出与输入的关系为Vout=0.5Vcc+IpSensitivity。一般输出的电压信号介于0.5V~4.5V之间。
  典型的应用:电机领域,载荷检测和管理,开关电源领域,和各种电子产品过电流故障保护。
   器件特点

  • 80KHZ带宽
  • 总输出误差为1.5%
  • 采用小型贴片SOIC8封装
  • 1.2mΩ内部电阻
  • 左侧大电流引脚(PIN1-4)与右侧低电压引脚(PIN5-8)最小绝缘电压为2100V
  • 5V单电压工作
  • 该器件不可应用于汽车领域


  ACS712模块为霍尔传感器,通过ADC采集电压值,载根据电压与电流的线性关系时序电流转换,输入电流与输出电压对应曲线及计算公式:
  ACS712ELCTR-05B电流电压对应关系如下图,Ip=0A即没有输入电流的时候,对应输出电压为2.5V.精确度为185mV/A即为图中斜线的斜率。取VCC=5V,计算公式为:
Vout = 2.5 + 0.185*Ip

3.5 ACS712驱动

#include "adc.h"
/***************ADC规则通道初始化*************
**硬件接口:PB0 -- ADC1_CH8(模拟)
**
*注:ADC的工作频频率不能超过14MHZ
********************************************/
void ADC1_RegularChannel_Init(void)
{//1.开时钟RCC->APB2ENR|=1<<9;//ADC1时钟RCC->APB2ENR|=1<<3;//PB0时钟RCC->APB2RSTR|=1<<9;//ADC复位时钟RCC->APB2RSTR&=~(1<<9);//关复位/*2.GPIO配置*/GPIOB->CRL&=0xFFFFFFF0;//模式输入方式/*3.ADC时钟频率配置*/RCC->CFGR&=~(0x3<<14);//清除原来配置RCC->CFGR|=0x2<<14;//ADC工作频率72MHZ/6=12MZH/*4.配置ADC核心寄存器*/
//  ADC1->CR1&=~(0xF<<16);//独立模式ADC1->CR2|=1<<23;//启动温度传感器(测量CPU温度)ADC1->CR2|=1<<20;//规则通道外部触发转换模式ADC1->CR2|=0x7<<17;//外部事件通过开关事件触发
//  ADC1->CR2&=~(1<<11);//右对齐(地位对齐,高位补0)ADC1->SMPR1|=0x7<<18;//温度传感器采样时间通道16ADC1->SMPR2|=0x7<<24;//通道8采用时间ADC1->SQR1&=~(0xF<<20);//规则通道转换的通道数目为1个转换
//  ADC1->CR2&=~(1<<1);//单次转换模式ADC1->CR2|=1<<0;//开启ADCADC1->CR2|=1<<3;//初始化校准while(ADC1->CR2&1<<3);//等待初始化校准完成ADC1->CR2|=1<<2;//开始校准while(ADC1->CR2&1<<2){}//等待校准完成
}
/****************ADC1规则通道获取数值***************/
u16 ADC1_GetRegularCHx(u8 chx)
{ADC1->SQR3&=~(0x1F<<0);//清除原来寄存器中的值ADC1->SQR3|=chx;//要转的通道号ADC1->CR2|=1<<22;//开启转换规则通过while(!(ADC1->SR&1<<1)){}//等待转换完成return ADC1->DR;
}

4.实物测量效果


示例地址:https://download.csdn.net/download/weixin_44453694/85520132

基于STM32电压检测和电流检测相关推荐

  1. 基于STM32的多点温湿度无线传输检测及控制(基于单片机的蔬菜大棚温湿度智能控制系统)

    基于STM32的多点温湿度无线传输检测及控制(基于单片机的蔬菜大棚温湿度智能控制系统) 一前言(含研究目的及意义) 1.研究目的 2.研究意义 二.研究工作的主要内容 三.理论创新成果 四.实践创新成 ...

  2. 基于单片机太阳能锂电池充电电压电流检测系统设计(毕业设计资料)

    116[电路方案]基于单片机太阳能锂电池充电电压电流检测系统 摘要: 本设计由STC89C52单片机+LCD1602液晶显示电路+A/D转换芯片PCF8591电路+电压检测电路+电流检测电路ACS71 ...

  3. K_A19_002 基于STM32等单片机采集水位检测传感数据 串口与OLED0.96双显示

    _A19_002 基于STM32等单片机采集水位检测传感数据 串口与OLED0.96双显示 一.资源说明 二.基本参数 参数 引脚说明 三.驱动说明 IIC地址/采集通道选择/时序 对应程序: 四.部 ...

  4. 基于STM32(HAL库)的水质检测(浑浊度、PH值、温度、手机APP显示、wifi上云)

    本系统由通过wifi将浑浊度.PH值.温度采集的数据发送到手机APP,超过设定的阈值报警. 一.硬件材料清单: 1.STM32C8T6:控制器 2.OLED显示屏:显示传感器采集的数据 3.PH传感器 ...

  5. 基于stm32单片机的空气质量检测仿真(仿真+源码+全套资料)

    资料编号:072 可以通过STM32的ADC检测当前的空气质量,LCD1602显示,并且可以自动控制风扇排气,也可以设置为手动排气.包含全套资料,下面是视频演示: 72-基于stm32单片机的空气质量 ...

  6. 基于stm32单片机有害气体监测检测Proteus仿真(仿真+源码+全套资料)

    资料编号:097 检测当前的有害气体浓度,LCD1602显示,并且可以自动打开关闭风扇,也可以通过手动按键打开关闭风扇通风,全套资料齐全,具体功能请看下面演示视频 97-基于stm32单片机有害气体监 ...

  7. 基于stm32单片机的甲醛气体检测proteus仿真(源码+仿真+参考论文)

    资料编号:056 检测当前的甲醛气体浓度,LCD1602显示,并且可以自动打开关闭风扇,也可以通过手动按键打开关闭风扇通风,全套资料齐全,具体功能请看下方演示视频 56-基于stm32单片机的甲醛气体 ...

  8. 基于stm32单片机有害气体监测检测Proteus仿真

    资料编号:097   下面是相关功能视频演示: 97-基于stm32单片机有害气体监测检测Proteus仿真(仿真+源码+全套资料) 功能介绍:检测当前的有害气体浓度,LCD1602显示,并且可以自动 ...

  9. 基于stm32单片机的温湿度火灾检测报警仓库管理系统(实物图+源码+原理图+全套资料)

     资料编号:083 采用stm32单片机,可以检测烟雾,温湿度,火焰,二氧化碳,并且显示,大于一定值可以蜂鸣器报警和自动换气 具体功能查看下面演示视频  全套资料齐全资料 83-基于Stm32单片机温 ...

  10. 基于STM32开发可燃气体智慧检测系统

    开发环境:Keil uVision5 \ STM32CubeMX 硬件型号:STM32F051K8(芯片), NB-iot(核心板) 涉及技术:ADC/SPI/UART/DMA/巴法云/AT命令/QT ...

最新文章

  1. BPDU tunnel技术简介
  2. 全国大学智能车竞赛完全模型组中的赛道标志
  3. 天气webservice服务
  4. 区块链技术应用的关键问题和挑战
  5. VMware拍摄快照(系统备份)
  6. [09-01]JavaScript 基础语法
  7. Failed to capture snapshot of output files for task ':UserAppModule:packagePreDebug' property 'outpu
  8. mobile cpu上禁用alpha test的相关总结
  9. STM8单片机读取18B20温度传感器
  10. STM32 GPIO应用
  11. python安装后如何使用-python运行环境,python安装后如何使用
  12. 扩展正则表达式egrep11
  13. spring 包的依赖问题
  14. 老毛子 安装 mysql_老毛子固件mysql启动失败的解决方法
  15. MATLAB图像分割系统设计
  16. 论文阅读: (ECCV 2022) Content-Oriented Learned Image Compression
  17. Linux编译代码卡死,Ubuntu下编译卡死的问题
  18. pba mode ( path based analysis for sta )
  19. 【毕业设计】基于单片机的手势检测识别系统 - arduino 物联网嵌入式
  20. 怎样成为一名优秀的平面设计师

热门文章

  1. 机器学习与数据挖掘学习之路
  2. 阿里天池大数据竞赛(杂)
  3. 计算机在线作业office,全国计算机一级office题库与答案
  4. rba有哪几個主要組成部分_RBA管理体系有哪些
  5. RT-Thread Studio升级首推完美暗黑主题
  6. Android如何监听蓝牙耳机的按键事件
  7. 从头配置一台医学影像处理的电脑 Ubuntu20.04
  8. 更新至2021各省份上传服务器地址(航信、百旺、税务UK)
  9. 开启Apache一直出现443端口被占用
  10. java怎么实现事务_java实现简单的事务