整个带屏数字小键盘吧,先搞定 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输入电压


阅读全文 »

成本60元,用ESP32-S3做个开源游戏机,能玩FC/NES、GameBoy,还有专属彩色PCB

前言

之前复刻了一个基于全志 F1C200S 的模拟器游戏机,但是做下来感觉还是比较麻烦的,主要有两个痛点:

  • 一个是元件太多,像 DC-DC 就有三路,以及焊接难度大,像屏幕的 0.5mm FPC 插座
  • 另外一个是 Linux 系统的编译,过程比较复杂,也没有清晰的教程,想要定制的话比较麻烦

因此就想找找看有没有更简单的方式可以做模拟器游戏机,刚好平时用 ESP32-S3 系列比较多,并且相对于以前的游戏机来说,双核 240MHz 的性能也是足够的,应该可以用来模拟各种游戏机,就去找了一下。

然后就在 GitHub 上找到了 RetroGo 这个项目,一个完整的模拟器固件,支持 ESP32 系列 MCU,但是并没有找到直接对应的硬件项目,在立创开源平台上也没找到简单易用的,那就自己从头搞一个吧~

PS. 这个游戏机也可以当 ESP32-S3 开发板来用,具备 SPI 屏幕、TF 读卡器、I2S 功放、用户按键等多种外设 😃。

RetroGo 介绍

RetroGo 是一个开源的模拟器固件,主要支持的是乐鑫的 ESP32 系列 MCU,例如 ESP32、ESP32-S3,支持的模拟器也相当多,常见的 FC/NES、GameBoy、GameBoy Color 等都支持。

项目地址:https://github.com/ducalex/retro-go

Preview

Retro-Go is



阅读全文 »

做键盘必备,抛掉ST-Link,通过USB烧录固件,STM32F103使用STM32duino-bootloader 踩坑记录

前言

之前在 DIY 基于 QMK 固件的键盘的时候,直接借鉴了立创开源平台上的项目,使用了 ATmega32A 作为主控,ATmega32A 本身并没有硬件 USB 接口,把它作为键盘主控是通过使用 USBaspLoader 这样一个 bootloader 来实现的。

但是毕竟是软件实现,在以前复刻时,使用 ATmega32A 的键盘还是能正常配合 MacBook 使用的,但是最近发现在连接到 MacBook 之后,会很快丢掉连接,这下不得不去找一个带硬件 USB 接口的 MCU 了。

这时我就把眼光放到了 STM32F103C8T6 上,玩了这么久的 ESP32、CH32V003 什么的,还是没能逃过 STM32 😃。

而且相对 ATmega32A,STM32F103C8T6 的系统资源就丰富太多了,64KB Flash、20KB RAM 用来烧录一个 QMK 固件那是相当够用了,什么宏、层的数量,都开到最大。

最后的重点,作为习惯了使用 USB 直接烧录固件的人,也希望给 STM32F103C8T6 刷固件时也可以直接通过 USB 刷,这就找到了 STM32duino-bootloader 这个项目。

阅读全文 »

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

自从用上嘉立创 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 侧边栏中通过菜单打开 …

阅读全文 »