t60yz 发表于 2022-12-30 18:14

单片机 MM32 HAL EG2801 电量计 代码 中文资料 例子 代码

#include "main.h"
#include "hal_iic.h"
#include "eg2801.h"

EG2801_RAM EG2801_RAM_DATA =
{
    .Flags = 0,
    .StateOfCharge = 100,
};
const IIC_PIN EG2801_GPIO =
{
    .SCL_PORT= GPIOB,
    .SCL_PIN   = GPIO_Pin_6,

    .SDA_PORT= GPIOB,
    .SDA_PIN   = GPIO_Pin_7,

    .DelayTick = 2,
    .ADDR      = 0x28
};

/*********************************************
函数名:EG2801_Init
功能:电池管理器件初始化
形参:
返回值:
备注:
作者:薛建强
时间:2019/06/28
使用:
**********************************************/
void EG2801_Init(void)
{
    /*赋初值*/
    EG2801_RAM_DATA.Flags = 0;
    EG2801_RAM_DATA.StateOfCharge = 100;
    IIC_Init(&EG2801_GPIO);//IIC初始化
}

/*********************************************
函数名:EG2801_read_DATA
功能:利用IIC从EG2801读取2个字节
形参:ACK--1应答 0不应答
返回值:读取到的2个字节
备注:
作者:薛建强
时间:2019/06/28
使用:
**********************************************/
uint16_t EG2801_read_DATA(uint8_t ACK)
{
    uint8_t eg2801_buff = {0};
    IIC_ReadByte(&EG2801_GPIO, &eg2801_buff);
    IIC_ACK(&EG2801_GPIO);
    IIC_ReadByte(&EG2801_GPIO, &eg2801_buff);
    if (ACK)
      IIC_ACK(&EG2801_GPIO);
    else
      IIC_NACK(&EG2801_GPIO);
    return ((eg2801_buff << 8) | eg2801_buff);
}


/*********************************************
函数名:EG2801_read_Vcc
功能:读取EG2801数据
形参:
返回值:
备注:EG2801_RAM_DATA.StateOfCharge --电池剩余电量百分比

作者:薛建强
时间:2019/06/28
使用:
**********************************************/
uint8_t temp = 0;
void EG2801_read_Vcc(void)
{

    /*读取剩余电量*/
    IIC_Start(&EG2801_GPIO);
    IIC_WriteByte(&EG2801_GPIO, EG2801_GPIO.ADDR); //写命令
    IIC_Wait_ACK(&EG2801_GPIO);
    IIC_WriteByte(&EG2801_GPIO, 0x55);             //命令码
    IIC_Wait_ACK(&EG2801_GPIO);
    IIC_WriteByte(&EG2801_GPIO, 0x2C);             //寄存器地址--电池剩余电量百分比
    IIC_Wait_ACK(&EG2801_GPIO);

    IIC_Start(&EG2801_GPIO);
    IIC_WriteByte(&EG2801_GPIO, EG2801_GPIO.ADDR | 1); //读命令
    IIC_Wait_ACK(&EG2801_GPIO);
    temp = EG2801_read_DATA(0);
    if (temp <= 100)
    {
      EG2801_RAM_DATA.StateOfCharge =temp;
    }
    else
    {
      EG2801_RAM_DATA.StateOfCharge = 0;
    }

    IIC_Stop(&EG2801_GPIO);

    /*读取电池状态 EG2801中文资料.pdf--9页*/
    IIC_Start(&EG2801_GPIO);
    IIC_WriteByte(&EG2801_GPIO, EG2801_GPIO.ADDR); //写命令
    IIC_Wait_ACK(&EG2801_GPIO);
    IIC_WriteByte(&EG2801_GPIO, 0x55);             //命令码
    IIC_Wait_ACK(&EG2801_GPIO);
    IIC_WriteByte(&EG2801_GPIO, 0x0A);             //寄存器地址
    IIC_Wait_ACK(&EG2801_GPIO);

    IIC_Start(&EG2801_GPIO);
    IIC_WriteByte(&EG2801_GPIO, EG2801_GPIO.ADDR | 1); //读命令
    IIC_Wait_ACK(&EG2801_GPIO);
    temp = EG2801_read_DATA(0);
    if (temp != 0xff)
    {
      EG2801_RAM_DATA.Flags =temp;
    }

    IIC_Stop(&EG2801_GPIO);
}






t60yz 发表于 2022-12-30 23:54

#ifndef __EG2801_
#define __EG2801_
#include "main.h"
#include "eg2801.h"


typedef struct_EG2801_RAM
{

//    uint16_t    Temperature;
//    uint16_t    Voltage;
    uint16_t    Flags;
//    uint16_t    RemainingCapacity;
//    uint16_t    FullChargeCapacity;
//    uint16_t    AverageCurrent;
//    uint16_t    TimeToEmpty;
//    uint16_t    TimeToFull;
//    uint16_t    StandbyCurrent;
//    uint16_t    StandbyTimeToEmpty;
//    uint16_t    MaxLoadCurrent;
//    uint16_t    MaxLoadTimeToEmpty;
//    uint16_t    AvailableEnerge;
//    uint16_t    AveragePower;
//    uint16_t    TimeToEptyAtCnstPwr;
//    uint16_t    Internal_Temp;
//    uint16_t    CycleCount;
    uint16_t    StateOfCharge;
//    uint16_t    StateOfHealth;

uint8_t ChargeImg;          //0--没有充电1--开始充电
} EG2801_RAM;

extern EG2801_RAM EG2801_RAM_DATA;

void EG2801_Init(void);
void EG2801_read_Vcc(void);

#endif


豌豆爹 发表于 2023-1-9 11:38

中文资料 例子资料在哪里啊,没看到

deliahouse887 发表于 2023-1-9 14:12

这个测量的精度怎么样            

ulystronglll 发表于 2023-1-9 15:24

这个稳定性怎么样?            

sesefadou 发表于 2023-1-9 15:43

锂电池电量计芯片               

robertesth 发表于 2023-1-9 18:12

MM32还有hal吗?            

gygp 发表于 2023-1-10 19:08

EG2801 用于测量电流和电压的吗?

hearstnorman323 发表于 2023-1-10 20:20

EG2801 最大量程是多少?            

vivilyly 发表于 2023-1-10 21:19

可以支持几路数据的采集?            

vivilyly 发表于 2023-1-11 20:37

EG2801并提供一组I2C接口与主系统进行通信

febgxu 发表于 2023-2-2 12:37

这个可以测量22v的电压的吗?            

cashrwood 发表于 2023-2-2 12:46

EG2801 是什么模块呢?            

xiaoyaodz 发表于 2023-2-2 13:20

这个测量电流电压的范围是多少?            

hilahope 发表于 2023-2-2 13:49

测量电压和电流的方案是什么?            

hudi008 发表于 2023-2-4 11:55

有相关的应用电路设计和完整的程序吗?

mollylawrence 发表于 2023-2-4 13:46

功率是怎么计算的?               

plsbackup 发表于 2023-2-4 17:07

怎么还能移植hal?            

Jacquetry 发表于 2023-3-12 22:38

有没有相关例程啊

OKAKAKO 发表于 2023-3-13 10:28

EG2801设备内用嵌入式微控制器
页: [1]
查看完整版本: 单片机 MM32 HAL EG2801 电量计 代码 中文资料 例子 代码