数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 6694|回复: 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-12-29 11:52:34 | 显示全部楼层
求助大佬,不用TCA9548A可以吗?单路用只有材料ESP12F,0.96OLED屏,sw3518s模块,请问代码如何修改?
回复 支持 反对

使用道具 举报

发表于 2024-9-10 14:59:59 | 显示全部楼层
牛批,寄存器手册在哪下载呀
回复 支持 反对

使用道具 举报

发表于 2024-9-7 19:21:08 | 显示全部楼层
单片机的原理图能发上吗
回复 支持 反对

使用道具 举报

发表于 2024-8-30 07:53:43 来自手机浏览器 | 显示全部楼层
挺有意思的,这个板子和屏幕有成品卖吗,整一个回来,
回复 支持 反对

使用道具 举报

发表于 2024-7-19 08:23:53 来自手机浏览器 | 显示全部楼层
学习了,改天也搞一个
回复 支持 反对

使用道具 举报

发表于 2024-7-17 21:09:01 | 显示全部楼层
回复 支持 反对

使用道具 举报

发表于 2024-7-17 21:06:51 | 显示全部楼层

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

发表于 2024-5-8 01:25:23 来自手机浏览器 | 显示全部楼层
你这方案,可利用性太多了,正好手上有几个充电宝快充板,可以好好改造一下桌面充电坞
回复 支持 反对

使用道具 举报

发表于 2024-5-1 06:13:44 来自手机浏览器 | 显示全部楼层
感谢分享,好好学习,
回复 支持 反对

使用道具 举报

发表于 2024-4-12 14:05:50 | 显示全部楼层
为何不直接再加一个功能 修改支持pd100w  的支持 我记得是要改革寄存器吧
回复 支持 反对

使用道具 举报

发表于 2024-4-11 08:56:10 | 显示全部楼层
沨の痕 发表于 2024-4-8 23:27
lz能添加改100w设置

我在淘宝9块买这个模块,到手测试就是100W的,不过这个模块没有散热,跑100W 五六分钟后温度100多度,建议还是不要用到这么大的功率为宜,这种是非隔离的,出问题输入高压直通输出把设备搞坏得不偿失。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-10 20:51:43 | 显示全部楼层
沨の痕 发表于 2024-4-9 13:54
请问附件是包含打板文件和程序

只有工程文件,正文是程序
回复 支持 反对

使用道具 举报

发表于 2024-4-9 13:54:56 | 显示全部楼层
feng4253 发表于 2024-4-9 01:39
sw.setMaxCurrent5A();就是打开100w的代码,设置最大电流为5A,20v输出最大就是100W。 ...

请问附件是包含打板文件和程序
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-9 01:39:17 来自手机浏览器 | 显示全部楼层
沨の痕 发表于 2024-4-8 23:27
lz能添加改100w设置

sw.setMaxCurrent5A();就是打开100w的代码,设置最大电流为5A,20v输出最大就是100W。
回复 支持 反对

使用道具 举报

发表于 2024-4-8 23:27:35 | 显示全部楼层
lz能添加改100w设置
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

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

使用道具 举报

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

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

使用道具 举报

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

使用道具 举报

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

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

使用道具 举报

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

本版积分规则

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

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-8-26 04:39 , Processed in 0.124800 second(s), 13 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

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