打印
[其他]

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

[复制链接]
750|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
t60yz|  楼主 | 2022-12-30 18:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#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[2] = {0};
    IIC_ReadByte(&EG2801_GPIO, &eg2801_buff[0]);
    IIC_ACK(&EG2801_GPIO);
    IIC_ReadByte(&EG2801_GPIO, &eg2801_buff[1]);
    if (ACK)
        IIC_ACK(&EG2801_GPIO);
    else
        IIC_NACK(&EG2801_GPIO);
    return ((eg2801_buff[1] << 8) | eg2801_buff[0]);
}


/*********************************************
函数名: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 | 只看该作者
这个测量的精度怎么样              

使用特权

评论回复
5
ulystronglll| | 2023-1-9 15:24 | 只看该作者
这个稳定性怎么样?              

使用特权

评论回复
6
sesefadou| | 2023-1-9 15:43 | 只看该作者
锂电池电量计芯片               

使用特权

评论回复
7
robertesth| | 2023-1-9 18:12 | 只看该作者
MM32还有hal吗?              

使用特权

评论回复
8
gygp| | 2023-1-10 19:08 | 只看该作者
EG2801 用于测量电流和电压的吗?

使用特权

评论回复
9
hearstnorman323| | 2023-1-10 20:20 | 只看该作者
EG2801 最大量程是多少?              

使用特权

评论回复
10
vivilyly| | 2023-1-10 21:19 | 只看该作者
可以支持几路数据的采集?              

使用特权

评论回复
11
vivilyly| | 2023-1-11 20:37 | 只看该作者
EG2801并提供一组I2C接口与主系统进行通信

使用特权

评论回复
12
febgxu| | 2023-2-2 12:37 | 只看该作者
这个可以测量22v的电压的吗?              

使用特权

评论回复
13
cashrwood| | 2023-2-2 12:46 | 只看该作者
EG2801 是什么模块呢?              

使用特权

评论回复
14
xiaoyaodz| | 2023-2-2 13:20 | 只看该作者
这个测量电流电压的范围是多少?              

使用特权

评论回复
15
hilahope| | 2023-2-2 13:49 | 只看该作者
测量电压和电流的方案是什么?              

使用特权

评论回复
16
hudi008| | 2023-2-4 11:55 | 只看该作者
有相关的应用电路设计和完整的程序吗?

使用特权

评论回复
17
mollylawrence| | 2023-2-4 13:46 | 只看该作者
功率是怎么计算的?               

使用特权

评论回复
18
plsbackup| | 2023-2-4 17:07 | 只看该作者
怎么还能移植hal?              

使用特权

评论回复
19
Jacquetry| | 2023-3-12 22:38 | 只看该作者
有没有相关例程啊

使用特权

评论回复
20
OKAKAKO| | 2023-3-13 10:28 | 只看该作者
EG2801设备内用嵌入式微控制器

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

170

主题

1009

帖子

0

粉丝