数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 6750|回复: 33

sw3518快充模块增加 电压、电流显示(二)

[复制链接]
发表于 2024-2-29 16:47:15 | 显示全部楼层 |阅读模式
在上一个帖子中我做了显示部分:sw3518快充模块增加 电压、电流显示 但打板有错误,我就重新打了一块板,特点是模块化,引出了7个通道,支持7个i2c设备,修改代码就可以实现多显示屏+多快充模块的组合,只需要焊接4根线,就可以添加一块快充模块:






这是打的板,是免费打的样,做工还不错,我一次打了5块,就是有个电阻位置❀错了,不过不影响:

这是焊接好的样子:

按钮是用来复位和下载程序用的,虽然电源写的是5V,实际可以支持到30v,所以可以直接接在主电源上,下面是工程文件和打板文件,需要的话可以自己打板来耍,好多公司打样是免费的:


我还试了白色oled的,也挺好看的:

还写了中文的代码,接一个模块挺好,也可以接两块模块:


快充模块接线方法:左边是SDA,右边是SCK,

有的朋友说太细,不好焊接,说说我的方法:
1、必须是纯铜漆包线,头发粗细就差不多了;
2、不要刮漆,直接用电烙铁上锡,挂锡要长一点;
3、烙铁头要尖,我用的是刀头的,先焊接SDA(就是里面那根),把线对其,用镊子压住不动,用烙铁头烫上锡的漆包线,这样就好了,然后用同样的方式焊另一根。
4、最后用502或热熔胶,有条件的用绿油固定就行了。
是不是很简单,需要协助的朋友可以留言,我们共同探讨。
下面是中文的代码:

//该代码是单块模块使用
#include <Arduino.h>
#include <h1_SW35xx.h>
#include <U8g2lib.h>
#include <Wire.h>
#include "TCA9548A.h"
#define setFont_6 u8g_font_5x7
U8G2_SH1106_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/U8X8_PIN_NONE);  //该驱动是1.3寸的OLED屏幕。---------
using namespace h1_SW35xx;
TCA9548A I2CMux;  // 地址可以传递到构造函数中
//TCA9548A(0x70);//不焊接选择电阻的i2c地址。
SW35xx sw(Wire);


void setup() {

  Serial.begin(115200);  //显示屏和引脚初始化
  Wire.begin();
  u8g2.enableUTF8Print();
  I2CMux.begin(Wire);  // Wire instance is passed to the library
  I2CMux.closeAll();   // Set a base state which we know (also the default state on power on)
  I2CMux.openChannel(0);
  u8g2.begin();
  I2CMux.closeChannel(0);
  pinMode(LED_BUILTIN, OUTPUT);  // Initialize the LED_BUILTIN pin as an output
  sw.setMaxCurrent5A();//设置最大电流
}

void loop() {
  digitalWrite(LED_BUILTIN, LOW);  // Turn the LED on (Note that LOW is the voltage level

  u8g2.setFont(setFont_6);
  u8g2.setFontDirection(0);
  u8g2.clearBuffer();
  VIWH();     //框架绘制并显示//通道0
  sw35XX();   //电流、电压数据读取通道1
  I2CMux.openChannel(0);
  u8g2.sendBuffer();
  I2CMux.closeChannel(0);
  digitalWrite(LED_BUILTIN, HIGH);  // Turn the LED off by making the voltage HIGH

}


const char *fastChargeType2String(SW35xx::fastChargeType_t fastChargeType) {
  switch (fastChargeType) {
    case SW35xx::NOT_FAST_CHARGE:
      return "NOT_FAST";
      break;
    case SW35xx::QC2:
      return "QC2.0";
      break;
    case SW35xx::QC3:
      return "QC3.0";
      break;
    case SW35xx::FCP:
      return "FCP";
      break;
    case SW35xx::SCP:
      return "SCP";
      break;
    case SW35xx::PD_FIX:
      return "PD Fix";
      break;
    case SW35xx::PD_PPS:
      return "PD PPS";
      break;
    case SW35xx::MTKPE1:
      return "PE1.1";
      break;
    case SW35xx::MTKPE2:
      return "PE2.0";
      break;
    case SW35xx::LVDC:
      return "LVDC";
      break;
    case SW35xx::SFCP:
      return "SFCP";
      break;
    case SW35xx::AFC:
      return "AFC";
      break;
    default:
      return "unknown";
      break;
  }
}

void sw35XX() {
  I2CMux.openChannel(1);
  /* 与总线上1通道显示的地址交互的代码 */
  float vin=sw.vin_mV;
  float vout=sw.vout_mV;
  float aa=sw.iout_usba_mA;
  float ac=sw.iout_usbc_mA;
  float W1 = vout/1000 * (aa+ac)/1000;
  sw.readStatus();
  sw.begin();
  Serial.println("==================CN1=====================");
  printf("Current input voltage:%dmV\n", sw.vin_mV);
  u8g2.setCursor(26, 12);
  u8g2.print(vin/1000);
  printf("Current output voltage:%dmV\n", sw.vout_mV);
  u8g2.setCursor(50, 28);
  u8g2.print(vout/1000);
  printf("Current USB-C current:%dmA\r\n", sw.iout_usbc_mA);
  printf("Current USB-A current:%dmA\r\n", sw.iout_usba_mA);
  u8g2.setCursor(50, 40);
  u8g2.print((ac+aa)/1000);
  printf("Current fast charge type:%s\n", fastChargeType2String(sw.fastChargeType));

    u8g2.setCursor(50, 63);
  u8g2.print(fastChargeType2String(sw.fastChargeType));
  if (sw.fastChargeType == SW35xx::PD_FIX || sw.fastChargeType == SW35xx::PD_PPS)
    printf("Current PD version:%d\n", sw.PDVersion);

  printf("temperature:", sw.readTemperature());
  u8g2.setCursor(90, 12);
  u8g2.print(sw.readTemperature()/100);
  u8g2.setCursor(50, 52);
  u8g2.print(W1);
  Serial.println("=======================================");
  Serial.println("");
  I2CMux.closeChannel(1);
  delay(400);
}


void VIWH() {
  I2CMux.openChannel(0);
  u8g2.drawStr(114, 6, "o");  //摄氏度圆圈
  u8g2.enableUTF8Print();//enable UTF8
  u8g2.setFont(u8g2_font_wqy12_t_gb2312b);//设置中文字符集
  u8g2.drawRFrame(0,0,128,15,3);// 绘制一个空心框(圆角)
  u8g2.drawStr(120, 12, "C");
  u8g2.setCursor(2, 12);
  u8g2.print("输入     V");
    u8g2.setCursor(64, 12);
  u8g2.print("温度:");
    u8g2.setCursor(10, 28);
  u8g2.print("电压:           V");
    u8g2.setCursor(10, 40);
  u8g2.print("电流:           A");
    u8g2.setCursor(10, 52);
  u8g2.print("功率:           W");
    u8g2.setCursor(10, 63);
  u8g2.print("快充:");
  I2CMux.closeChannel(0);
}



库文件可以在我上一个帖子里下载。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x

打赏

参与人数 4家元 +96 收起 理由
169403977 + 6
sunnyquan + 30
aec + 30 謝謝分享
拿糖糖换媳妇 + 30 優秀文章

查看全部打赏

发表于 2024-2-29 19:55:54 | 显示全部楼层
谢谢分享,回头试试
回复 支持 反对

使用道具 举报

发表于 2024-2-29 22:25:14 来自手机浏览器 | 显示全部楼层
这充电线也不错,我以前还以为带电流电压显示的是像车充一样的假把式呢。
话说国标一直没让电源充电头带电压电流累计等功能,就是在放任劣质电池市场。
倘若电瓶车充电器带这种显示功能,普通人都能看出来,电池的大概容量,充电时长,等更容易受到控制
回复 支持 反对

使用道具 举报

发表于 2024-3-1 11:53:25 | 显示全部楼层
谢谢楼主分享  没有整体整合  有点乱
回复 支持 反对

使用道具 举报

发表于 2024-3-2 09:06:26 | 显示全部楼层
谢谢分享             
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-3-2 10:43:10 来自手机浏览器 | 显示全部楼层
by64214 发表于 2024-3-1 11:53
谢谢楼主分享  没有整体整合  有点乱

图片只是测试,后期会整理装壳的
回复 支持 反对

使用道具 举报

发表于 2024-3-4 08:31:04 | 显示全部楼层
学习了,就是没时间弄
回复 支持 反对

使用道具 举报

发表于 2024-3-4 15:17:00 | 显示全部楼层
非常好,谢谢分享

回复 支持 反对

使用道具 举报

发表于 2024-3-4 15:20:24 | 显示全部楼层
模块自己做把引脚接出来不就好焊了
回复 支持 反对

使用道具 举报

发表于 2024-3-5 10:11:24 来自手机浏览器 | 显示全部楼层
“就是有个电阻位置放错了,不过不影响……”,楼主说的这个电阻指的是哪个?
回复 支持 反对

使用道具 举报

发表于 2024-3-5 22:25:48 | 显示全部楼层
谢谢分享~学习了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-3-7 02:57:07 来自手机浏览器 | 显示全部楼层
aec 发表于 2024-3-5 10:11
“就是有个电阻位置放错了,不过不影响……”,楼主说的这个电阻指的是哪个? ...

r11,应该接GPIO15,画成接在GPIO2了,造成模块休眠了,把电阻换个方向,下面一张图片有电阻的焊接位置。
回复 支持 反对

使用道具 举报

发表于 2024-3-9 14:24:07 | 显示全部楼层
下了个打板文件和工程文件,一下55家元!哈哈哈哈
回复 支持 反对

使用道具 举报

发表于 2024-3-12 09:59:51 | 显示全部楼层
请教下大佬,有没有功能简单,只需要显示一路,便宜,小巧,还能直接用大佬程序的主控
回复 支持 反对

使用道具 举报

发表于 2024-3-12 11:02:41 来自手机浏览器 | 显示全部楼层
leoooooooooo 发表于 2024-3-12 09:59
请教下大佬,有没有功能简单,只需要显示一路,便宜,小巧,还能直接用大佬程序的主控 ...

就是楼主这个单路的要是改成0.91oled显示就小巧了
回复 支持 反对

使用道具 举报

发表于 2024-3-12 11:21:22 | 显示全部楼层
这是通过I2C从SW3518获取电压、电流数据吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-3-13 02:27:24 来自手机浏览器 | 显示全部楼层
leoooooooooo 发表于 2024-3-12 09:59
请教下大佬,有没有功能简单,只需要显示一路,便宜,小巧,还能直接用大佬程序的主控 ...

esp8266已经是最便宜和最简单的了,其他主控的话stm32也可以,就是引脚定义需要简单修改,还要更小巧的,可以将8266芯片和flash取出来重新画电路板。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-3-13 02:28:16 来自手机浏览器 | 显示全部楼层
tomyluo 发表于 2024-3-12 11:21
这是通过I2C从SW3518获取电压、电流数据吗?

是的哦,读取sw3518内部寄存器数据,并显示出来。
回复 支持 反对

使用道具 举报

发表于 2024-3-13 10:32:58 | 显示全部楼层
做的非常不错
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 微信登录

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-9-4 13:06 , Processed in 0.124801 second(s), 9 queries , Gzip On, Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

快速回复 返回顶部 返回列表