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

[复制链接]
1260|19
 楼主| t60yz 发表于 2022-12-30 18:14 | 显示全部楼层 |阅读模式
  1. #include "main.h"
  2. #include "hal_iic.h"
  3. #include "eg2801.h"

  4. EG2801_RAM EG2801_RAM_DATA =
  5. {
  6.     .Flags = 0,
  7.     .StateOfCharge = 100,
  8. };
  9. const IIC_PIN EG2801_GPIO =
  10. {
  11.     .SCL_PORT  = GPIOB,
  12.     .SCL_PIN   = GPIO_Pin_6,

  13.     .SDA_PORT  = GPIOB,
  14.     .SDA_PIN   = GPIO_Pin_7,

  15.     .DelayTick = 2,
  16.     .ADDR      = 0x28
  17. };

  18. /*********************************************
  19. 函数名:EG2801_Init
  20. 功  能:电池管理器件初始化
  21. 形  参:
  22. 返回值:
  23. 备  注:
  24. 作  者:薛建强
  25. 时  间:2019/06/28
  26. 使  用:
  27. **********************************************/
  28. void EG2801_Init(void)
  29. {
  30.     /*赋初值*/
  31.     EG2801_RAM_DATA.Flags = 0;
  32.     EG2801_RAM_DATA.StateOfCharge = 100;
  33.     IIC_Init(&EG2801_GPIO);//IIC初始化
  34. }

  35. /*********************************************
  36. 函数名:EG2801_read_DATA
  37. 功  能:利用IIC从EG2801读取2个字节
  38. 形  参:ACK--1应答 0不应答
  39. 返回值:读取到的2个字节
  40. 备  注:
  41. 作  者:薛建强
  42. 时  间:2019/06/28
  43. 使  用:
  44. **********************************************/
  45. uint16_t EG2801_read_DATA(uint8_t ACK)
  46. {
  47.     uint8_t eg2801_buff[2] = {0};
  48.     IIC_ReadByte(&EG2801_GPIO, &eg2801_buff[0]);
  49.     IIC_ACK(&EG2801_GPIO);
  50.     IIC_ReadByte(&EG2801_GPIO, &eg2801_buff[1]);
  51.     if (ACK)
  52.         IIC_ACK(&EG2801_GPIO);
  53.     else
  54.         IIC_NACK(&EG2801_GPIO);
  55.     return ((eg2801_buff[1] << 8) | eg2801_buff[0]);
  56. }


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

  63. 作  者:薛建强
  64. 时  间:2019/06/28
  65. 使  用:
  66. **********************************************/
  67. uint8_t temp = 0;
  68. void EG2801_read_Vcc(void)
  69. {

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

  78.     IIC_Start(&EG2801_GPIO);
  79.     IIC_WriteByte(&EG2801_GPIO, EG2801_GPIO.ADDR | 1); //读命令
  80.     IIC_Wait_ACK(&EG2801_GPIO);
  81.     temp = EG2801_read_DATA(0);
  82.     if (temp <= 100)
  83.     {
  84.         EG2801_RAM_DATA.StateOfCharge =  temp;
  85.     }
  86.     else
  87.     {
  88.         EG2801_RAM_DATA.StateOfCharge = 0;
  89.     }

  90.     IIC_Stop(&EG2801_GPIO);

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

  99.     IIC_Start(&EG2801_GPIO);
  100.     IIC_WriteByte(&EG2801_GPIO, EG2801_GPIO.ADDR | 1); //读命令
  101.     IIC_Wait_ACK(&EG2801_GPIO);
  102.     temp = EG2801_read_DATA(0);
  103.     if (temp != 0xff)
  104.     {
  105.         EG2801_RAM_DATA.Flags =  temp;
  106.     }

  107.     IIC_Stop(&EG2801_GPIO);
  108. }






 楼主| t60yz 发表于 2022-12-30 23:54 | 显示全部楼层
  1. #ifndef __EG2801_
  2. #define __EG2801_
  3. #include "main.h"
  4. #include "eg2801.h"


  5. typedef struct  _EG2801_RAM
  6. {

  7. //    uint16_t    Temperature;
  8. //    uint16_t    Voltage;
  9.     uint16_t    Flags;
  10. //    uint16_t    RemainingCapacity;
  11. //    uint16_t    FullChargeCapacity;
  12. //    uint16_t    AverageCurrent;
  13. //    uint16_t    TimeToEmpty;
  14. //    uint16_t    TimeToFull;
  15. //    uint16_t    StandbyCurrent;
  16. //    uint16_t    StandbyTimeToEmpty;
  17. //    uint16_t    MaxLoadCurrent;
  18. //    uint16_t    MaxLoadTimeToEmpty;
  19. //    uint16_t    AvailableEnerge;
  20. //    uint16_t    AveragePower;
  21. //    uint16_t    TimeToEptyAtCnstPwr;
  22. //    uint16_t    Internal_Temp;
  23. //    uint16_t    CycleCount;
  24.     uint16_t    StateOfCharge;
  25. //    uint16_t    StateOfHealth;

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

  28. extern EG2801_RAM EG2801_RAM_DATA;

  29. void EG2801_Init(void);
  30. void EG2801_read_Vcc(void);

  31. #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设备内用嵌入式微控制器
您需要登录后才可以回帖 登录 | 注册

本版积分规则

189

主题

1191

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部