标签存档: 电子DIY

听人劝吃饱饭,试试CH334R来做USB 2.0 Hub

之前用 SL2.1A 做了个 USB 2.0 Hub,有网友说不如用 CH334R,售价更便宜,还支持更高级的 MTT,这不得马上了解一下。

之前使用 SL2.1A 做 USB Hub 的文章在这里:还在花钱买?5元DIY一个四口USB 2.0 Hub

CH334R 介绍

在 CH334R 的数据手册中找到它的介绍,的确是支持 MTT 的。

CH334 和 CH335 是符合 USB2.0 协议规范的 4 端口 USB HUB 控制器芯片,上行端口支持 USB2.0 高速和 全速,下行端口支持 USB2.0 高速 480Mbps、全速 12Mbps 和低速 1.5Mbps。不但支持低成本的 STT 模式(单 个 TT 分时调度 4



阅读全文 »

整个带屏数字小键盘吧,先搞定 QMK 固件支持 STM32F103 的 I2C Remap

之前参考立创开源平台的夏天大佬,做了一个基于 ATMega32A MCU + QMK 固件的 40% 配列键盘,不过最后又想用起来的时候发现,可能因为 ATMega32A 用的是软件模拟 USB,所以在 Mac 上的兼容性有点问题,因此就想着自己重新搞一个键盘。

在 QMK 固件的 MCU 支持列表里面翻了一下,发现 STM32F103C8T6 也是支持范围,而且搞一个 STM32duino-bootloader 就可以直接通过 USB 刷机,也是相当方便了。

关于 STM32F103 使用 STM32duino-bootloader,之前已经写了篇文章分享 做键盘必备,抛掉ST-Link,STM32F103通过USB烧录,STM32duino-bootloader踩坑记录

免费打样来测试

但是直接搞整个 40% 配列键盘,PCB 的尺寸超过了嘉立创免费打样的范围,因此准备先搞个数字小键盘来验证一下 STM32F103 做键盘的原理图。

照猫画虎搞个原理图

搞键盘主要就是确定行和列的引脚,为了最大能支持 104 键,就把能用的引脚全用上了。

另外为了使用 OLED 屏幕,这里使用了 PB8、PB9 作为 I2C 通信引脚。

qmk-stm32f103-i2c-remap-1

原理图画了之后,先拿开发板测试一下固件能不能用吧,然后就发现 PB9、PB8 …

阅读全文 »

还在花钱买?5元DIY一个四口USB 2.0 Hub

作为一个电子 DIY 爱好者,在平时做开发的时候会有众多低速 USB 设备需要使用,例如 USB 转串口、小功率设备 USB 供电等,一般电脑并没有那么多 USB 接口可供使用。

但是作为一个成熟的电子 DIY 爱好者,也该学会自己解决这个问题了,直接买芯片 DIY 一个四口 USB 2.0 Hub 吧 😃,也可以顺便学习一下差分布线以及 PCB 阻抗特性。

成品照片

diy-usb-hub-1

功能需求

对于一个简单场景使用的 USB 2.0 Hub 来说,没有太多功能需求,主打一个能用就行,满足以下几个需求就可以:

  • USB Type-C 连接,便于使用现有线材
  • 四口输出,体积需要小巧一点
  • 带过流保护,防止损坏上级电路

硬件选型

USB 2.0 Hub 芯片有不少,例如 CH334、FE1.1S、SL2.1A 等,最后综合功能需求、可参考项目、芯片封装等因素,选择了 SL2.1A。

SL2.1A 是一颗高集成度,高性能,低功耗的 USB2.0 集线器主控芯片;该芯片采用 STT 技术,单电源供电方式,芯片供电电压为 5V,内部集成



阅读全文 »

不要放过闲置快充头,DIY一个带屏幕显示功率的USB-PD电源诱骗器

之前搞完了基于 CH32V003 的 USB 电流表,并把整个开发过程总结成一个教程《全开源!使用 7 毛钱的单片机 DIY USB 电流表教程,入坑硬件设计、固件开发、外观建模》

在此之前,其实已经了解到了 CH224K 这个芯片,同样也是沁恒出的,可以很简单地通过单电阻或者三个 IO 的方式来控制设备端与 USB PD 充电器通信,并且协商到指定的充电电压,在某些需要特定电压的场合就比较有用。

既然已经完成了 USB 电流表,并且电流表也自带了用户按键,那就是再多加一个功能页面的事,顺便把 PD 诱骗也集成掉吧~

成品照片

主界面

img

PCB

img

功能设计和元件选型

CH224K 介绍

CH224 单芯片集成 USB PD 等多种快充协议,支持 PD3.0/2.0,BC1.2 等升压快充协议,自动检测 VCONN 及模拟 E-Mark 芯片,最高支持 100W 功率,内置 PD 通讯模块,集成度高,外围精简。集成输出电 压检测功能,并且提供过温、过压保护等功能。可广泛应用于各类电子设备拓展高功率输入如无线充电 器、电动牙刷、充电剃须刀、锂电池电动工具等各类应用场合。

主要功能:

  • 支持4V至22V输入电压


阅读全文 »

一个开源小钢网丝印台项目使用体验

自从用上嘉立创 PCB 打样之后,DIY 项目是越搞越复杂,一块 PCB 上几十个元件都是家长便饭了,一开始还会用针铜锡膏,次数多了之后,觉得这个效率还是非常低的。

然后开始尝试直接做钢网,使用钢来来刷锡膏,的确方便很多,即使元件再多,也基本上一分钟就能完成刷锡膏的操作,不用再用针筒一个一个焊盘的去点锡。

但是毕竟是 DIY,家里也不会有丝印台,通常在刷锡膏的时候,都是将钢网和 PCB 对齐后,使用胶带将钢网固定在桌面上,但是这样有一个不方便的地方,就是如果同样的 PCB 需要多次刷锡膏,就可能会存在二次刷锡膏的时候对不齐的情况。

刚好有天刷到一个视频,介绍了一个开源的桌面小钢丝丝印台,做了一个,这里分享一下。

另外配合摸索出来的牛皮网钢网,省钱技能又上一个台阶 😃

最终成品

diy-solder-paste-table-1

整体 3D 打印还算简单,大概注意一下摆放方向就可以了。

作者在项目介绍里说明了需要的配件,包含两种规格,最终实践下来我发现可以不用买多种规格,可以直接某宝搜索以下类型的螺丝螺母:

  • M3*12 内六角杯头螺丝螺母垫片套装
  • 蝶形螺母 M3

基本上这些就可以满足组装需求了。

使用过程

我使用这个丝印台的时候没有去用正经钢网,还是用的牛皮纸钢网。

测试用的 PCB 是 1.0mm 厚度,板子太小得弄两块垫在后面。

diy-solder-paste-table-2

先把钢网和 PCB 焊盘对齐,对齐之后,就可以把夹具的螺母拧紧了。

diy-solder-paste-table-3

对齐之后直接刷锡膏,由于这个是牛皮纸做的,因此要额外小心,刮板要从 PCB 内部开始,要不然就会导致牛皮纸变形了。

diy-solder-paste-table-4

最终刷锡膏效果,有点没对齐导致锡膏有点歪了。

diy-solder-paste-table-5

刷完锡膏就可以上加热台铁板烧了。

使用感受

  • 整体尺寸不算大,测量了一下 PCB 在 60x80mm 以内稍微合适一点
  • 使用牛皮纸的时候,夹具在螺母拧紧之后,会因为中间有厚度,而螺丝位置没有厚度,会整体变形,导致并不能很好地夹紧牛皮纸,不知道正经钢网会不会好一点
  • 同样因为使用牛皮网,PCB 板子比较小的时候,刮锡膏前后没有支撑,最好还是多放一块可以更好地回收锡膏


阅读全文 »

全开源!使用 7 毛钱的单片机 DIY USB 电流表教程,入坑硬件设计、固件开发、外观建模

之前已经连载完了 DIY USB 电流表的所有章节,这里汇总介绍一下这个项目,希望对电子 DIY 感兴趣的朋友们有所帮助。

这个 DIY USB 电流表的所有内容都已经开源,包括:

  • 硬件原理图
  • 硬件 PCB 布局布线
  • MCU 固件代码
  • 外壳 3D 模型 STL 文件
  • 面板生产文件

在文末可以找到开源项目的所有资料,其中硬件部分在立创开源平台,其他部分在 GitHub 中。

PS. 我也还是一个初学者,如果文章中有一些错误或不足,还请多多指教。

项目介绍

这是一个基于沁恒 CH32V003 和德州仪器 INA219 的 DIY USB 电流表,使用 CH32V003 作为主控 MCU 来读取和显示电压电流数据,INA219 作为电压电流监测计,并且通过两个按键来进行交互。

主要元件

  • MCU:CH32V003
  • 电压电流监测:INA219
  • 显示设备:SSD1306 OLED
  • 输入输出:USB Type-C
  • 采样电阻:10mR

功能设计



阅读全文 »

DIY USB 电流表(10):完结篇,外壳和面板设计

在截止到前一篇 《DIY USB 电流表(9):Flash 模拟 EEPROM 存储累计电量》 后,我们已经完成了 DIY USB 电流表的所有硬件和软件开发工作,接下来就需要设计一个稍微正经一点的外壳将 PCB 包装起来,除了更好看一点的同时,还可以防止裸露的 PCB 接触到导体之后造成意外短路的情况。

另外,为了体验一下嘉立创的亚克力面板定制服务,这次的 USB 电流表外壳采用面板 + 外壳的方式来完成,PCB 通过 M2 自攻螺丝固定在 3D 打印的外壳上,再将面板通过双面胶粘贴到外壳上。

当然我也是 3D 建模业余选手,只会基本的长方体布尔切割操作什么的,设计的外壳主打一个能用就行 🙈。

PS. 我也还是一个初学者,如果文章中有一些错误或不足,还请多多指教。

导出 PCB 3D 模型

为了更好的确定外壳的尺寸和各个接口、按键的位置,可以先在立创 EDA 专业版中导出 PCB 的 3D 模型文件,这样在建模软件里可以有更直观的参考。

diy-usb-meter-10-1

外壳设计

最终外壳基本上就是根据 PCB 的外形设计了一个 1.7mm 厚,带圆角的边框,并且在两个按键的位置预置了两个和外壳一体的按钮。

diy-usb-meter-10-2

PCB 上的按键为了能给按键手柄留出行程空间,是突出 …

阅读全文 »

DIY USB 电流表番外篇:使用 PlatformIO Inspect 分析和优化固件体积

在前一篇 《DIY USB 电流表(8):绘制功率曲线》 的开发过程中,我还碰到一个额外的问题,在最终开源的代码中虽然已经解决了,但是在文章中并没有提到,这就是编译固件体积超出 Flash 限制的问题。

这里就分享一下碰到 CH32V003 固件编译后体积超过 Flash 如何查找原因、解决问题的过程。

PS. 我也还是一个初学者,如果文章中有一些错误或不足,还请多多指教。

编译后固件体积超标

在定义了功率历史数据缓存的变量,添加数据存储、屏幕画点驱动、按键检测等代码之后,照常编译一下固件,检查一下代码有没有错误,却突然发现编译出错了:

diy-usb-meter-inspect-1

一看错误原因: region 'FLASH' overflowed by 772 bytes,这就意味着编译完的固件体积已经超过了 CH32V003 的限制,毕竟CH32V003 只有 16KB 的用户代码空间。

在前几篇中编译完成也可以发现,固件体积已经快到达极限了,没想到这么快就已经超出不够用了。

排查固体体积构成

幸好 PlatformIO 提供了 Inspect 功能,可以用于分析固件编译产物中的各种资源使用情况,包括 Flash 占用、内存使用、静态代码检查等,通过这个工具,就可以快速分析固件编译完后,哪块代码或资源占用的体积最大。

PlatformIO Inspect 文档可以参考这里: https://docs.platformio.org/en/latest/home/index.html#project-inspect

使用 Inspect

要使用 PlatformIO Inspect 功能很简单,直接在 PlatformIO 侧边栏中通过菜单打开 …

阅读全文 »

DIY USB 电流表(8):检测按键和绘制功率曲线

在前一篇 《DIY USB 电流表(7):读取和显示 INA219 电流电压数据》 中,我们已经基本完成了这个 DIY USB 电流表的核心功能开发,已经可以在屏幕上显示当前电源输入电压、负载的电流、功率以及累计电量等数据,如果不需要更多功能,已经可以结项了 😃。

但是如果想拿这个 USB 电流表在一些分析场景使用,那么还需要再增加一些功能,例如,是否可以通过这个 USB 电流表来记录给手机充电时的功率曲线,这样可以知道手机的快充是什么样的节奏来完成充电的。

这次我们就来完成这个功能,记录负载的功率历史,并绘制成曲线来显示功率趋势。

PS. 我也还是一个初学者,如果文章中有一些错误或不足,还请多多指教。

准备工作

在开始绘制功率曲线之前,同样有一些准备工作需要进行,例如在多了一个功率曲线页面之后,原来的电压数据页面怎么办,怎么切换多个页面?

在最早的功能设计中,我们已经给这个 DIY USB 电流表添加了两个按键,现在就可以通过这两个按键来完成页面切换操作了。

按键检测

按键原理图

在原理图中可以看到,两个按键已经接到 CH32V003 的 PD2、PD3 引脚,在初始化代码中,加上初始化两个引脚为输入模式。

diy-usb-meter-8-1
diy-usb-meter-8-2

按键状态结构体

为了维护按键的状态,我们先定义一个结构体来维护状态。在 ButtonState 结构体中,定义了一个 ts 字段,这个用来记录按键状态变化时的时间戳,这样可以在状态变化时,例如从低电平变化为高电平时,计算出来按键按下去的持续时间,如果超过 3000 毫秒,就认为是长按事件。

#pragma once

#include "drivers/clock.h"
#include "drivers/gpio.h"

#define BTN_LEFT    0
#define 


阅读全文 »

DIY USB 电流表(7):读取和显示 INA219 电流电压数据

在前一篇 《DIY USB 电流表(6):点个屏,使用 I2C 驱动 0.96 寸 OLED》 中,我们已经完成了屏幕显示驱动的开发,并且根据需求,列出了需要展示的数据项,确定了一下最终显示内容的布局。

在之前,显示的内容都是占位的测试数据,在这一节,就可以开始真正去读取 INA219 传感器的数据,将电路中测量的电压、电流等数据显示在屏幕上,这又是一节枯燥的编码工作 🙈。

PS. 我也还是一个初学者,如果文章中有一些错误或不足,还请多多指教。

准备工作

在开始读取 INA219 的数据之前,同样也要准备一些相关的库,例如 INA219 数据的读取、参数的配置,以及在 CH32V003-GameConsole 中所使用的 I2C 封装并未提供读取 I2C 数据方法,另外,为了计算 USB 电流表运行时间内消耗的电量,也需要有相关的计时方法。

I2C 读取方法

在 CH32V003-GameConsole 的代码中,已经有了 i2c_tx.h,提供了 I2C 写入相关的方法,对于一个游戏机来说,拥有写入方法就足够了,它只需要用 I2C 来刷新屏幕,但是在我们的 USB 电流表项目中,还需要使用 I2C 去读取 INA219 的数据,因此需要去封装一个 I2C 读取方法。

在开始编写 …

阅读全文 »