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

自从用上嘉立创 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 电流表(9):Flash 模拟 EEPROM 存储累计电量

在前一篇 《DIY USB 电流表(8):绘制功率曲线》 中,整个 USB 电流表的固件开发已经进入尾声,目前我们已经完成了电压电流数据显示、功率计算、多页面切换、历史功率曲线绘制等功能.

为了更好地保持数据,在 USB 电流表重新上电的情况下,也可以恢复之前测量的数据,例如在测试充电宝容量时,中间会断开并重新连上负载,这个时候我们需要将之前记录的数据保存下来,继续累计负载消耗的电量。

但是在之前的原理图设计中,整个电路并没有添加 EEPROM,CH32V003 也没有自带 EEPROM,这时我们可以使用 CH32V003 的代码存储区域来模拟 EEPROM 保存数据,这次就来完成这个功能吧。

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

CH32V003 存储器结构

根据 CH32V003 的数据手册可以知道,CH32V003 拥有 16KB 的用户代码区域。

diy-usb-meter-9-1

在 USB 电流表的固件编译之后,可以看到固件的大小,目前整个固件只占用约 12K 左右的空间,那可以就可以尝试使用剩余的空间来当作数据存储,模拟一下 EEPROM。

diy-usb-meter-9-2

存储器特性

在使用 Flash 来模拟 EEPROM 时,需要通过数据手册关注一下 Flash 的一些特性,例如擦写时间和擦写寿命等。

存储器特性

diy-usb-meter-9-3

从数据手册中可以看到,CH32V003 的 Flash 擦写 64 字节需要 2~3 …

阅读全文 »

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 读取方法。

在开始编写 …

阅读全文 »

DIY USB 电流表(6):点个屏,使用 I2C 驱动 0.96 寸 OLED

在前一篇 《DIY USB 电流表(5):使用 VSCode + PlatformIO 搭建固件开发环境》 中,我们已经完成了开发 USB 电流表固件的开发环境搭建,整个开发环境基于 Visual Studio Code + PlatformIO 来完成,并且跑通了一个基本的 Demo,验证了开发环境。

固件开发的第一步,我们先将最终输出数据的显示设备,0.96 寸 OLED 屏幕给点亮,这样在后续开发过程中,也可以通过屏幕来显示一个调试数据信息。

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

准备工作

在开始开发之前,我们需要做一些准备工作,使用 PlatformIO 创建项目并不包含很多使用示例,例如如何使用 GPIO,如何使用 I2C 总线等,并且使用 platform-ch32v 时,它的函数定义与官方示例也不太相同,因此我们需要找一个类似的开源项目作为参考,从而可以更快速地完成 USB 电流表的固件开发。

参考项目 CH32V003-GameConsole

项目地址:https://github.com/wagiminator/CH32V003-GameConsole

diy-usb-meter-6-1

我就从 CH32V003-GameConsole 这个项目了解到 CH32V003 这款 MCU,并且开始尝试使用的,刚好这个项目本身包含了 0.96 寸 OLED 屏幕的驱动以及 GPIO、ADC …

阅读全文 »

电子 DIY 入门知识整理:电源芯片 LDO、DC-DC

在开始继续开始玩电子 DIY 之后,就逐渐转到自己制作 PCB 并且使用贴片元件代替模块来制作产品了。之前一直使用的分立元件,都是用杜邦线连接各个成品模块,在换成贴片元件之后,对这些元件的各种封装规格什么的完全是一脸迷糊。

前面一篇 《电子 DIY 入门知识整理:电阻、电容、电感》 介绍了电阻、电容、电感的介绍、封装和选型,这次继续来介绍电源相关的内容,主要是 LDO 和 DC-DC,分享给同样开始想使用贴片元件进行电子 DIY 的朋友们。

PS. 我作为一个新入门电子 DIY 玩家,以下都是从一个初学者的角度整理的,并且主要介绍我使用过,稍微了解一点的元件,如有错误还请指正。

前言

对于设计一个电子电路来说,可能三分之一工作内容都是在确定电源供应、电源对电路的干扰、电源的稳定性等相关的内容。

在接触过几款 Linux 开发板的原理图以及 PCB 设计后,大概总结了一下发现,其实这些开发板中相当一部分内容都是跟电源相关,例如对于电压会有 3.3V、2.5V、1.8V 等不同的需要,对于每一种电压,也会有不同的电流需求,有一些 SoC 甚至会对上电时序也有一定的要求,因此搞定电源的设计之后,一般 Linux 开发板三分之一的工作已经完成了。

当然对于简单的电路来说,基本上可以 AMS1117 3.3V 走天下,在一些特殊的场合再考虑使用 DC-DC 电路。

LDO 低压差稳压器

LDO 作为常见的电源器件在电子 DIY 还是很常用的,很多 MCU 或者芯片的工作电压都在 3.3V,如果使用 USB 或者电池供电,一般都会高于 3.3V,这个时候就可以使用 …

阅读全文 »

DIY USB 电流表(5):使用 VSCode + PlatformIO 搭建固件开发环境

在前一篇 《DIY USB 电流表(4):PCB 焊接与调试》 中,我们已经完成了 USB 电流表的焊接,有了硬件之后,就可以开始给它注入灵魂——开发固件了。

首先完成开发环境的搭建,由于我平时都是使用的 MacBook 作为开发机,因此这里以 macOS 作为开发平台来介绍开发环境的搭建。当然 Visual Studio、PlatformIO 这些本身也都是跨平台的,在其他系统配置这一套开发环境的步骤也类似,也可以参考。

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

开发环境介绍

Visual Studio Code

diy-usbmeter-5-1

项目地址:https://code.visualstudio.com/

Visual Studio Code 是一款由微软开发且跨平台的免费源代码编辑器。该软件以扩展的方式支持语法高亮、代码自动补全、代码重构功能,并且内置了命令行工具和 Git 版本控制系统。用户可以更改主题和键盘快捷方式实现个性化设置,也可以通过内置的扩展程序商店安装其他扩展以拓展软件功能。

一般来说,做嵌入式固件开发工作,通常会在 Windows 系统上完成,并且有完整的 IDE 可以使用,例如像 Keil。或者像在这个项目中所使用的 MCU CH32V003,沁恒也提代了一个 IDE MounStudio。

但是因为现在很多嵌入式开发相关的工具链都提供了跨平台的平台,编译器、烧录程序等都可以直接在 macOS 平台上使用,因此现在使用 macOS 来作为嵌入式开发平台也并没有太大的阻碍。

我在 macOS 上使用的编辑器是 Visual Studio …

阅读全文 »