当前位置:首页 > 工业控制 > 电路设计项目集锦
[导读]我患有注意力缺陷多动症(ADHD),我尝试过大多数常见的提高效率的方法:应用程序、计时器、闹钟、便签纸、白板。但真正起作用的还是携带一本实体笔记本。把事情写下来,把清单直接摆在眼前,没有任何通知干扰,也没有需要打开的应用程序。一旦我开始这样做,我的工作效率就明显提高了,而且这个习惯保持得越久,效率就越高。

我患有注意力缺陷多动症(ADHD),我尝试过大多数常见的提高效率的方法:应用程序、计时器、闹钟、便签纸、白板。但真正起作用的还是携带一本实体笔记本。把事情写下来,把清单直接摆在眼前,没有任何通知干扰,也没有需要打开的应用程序。一旦我开始这样做,我的工作效率就明显提高了,而且这个习惯保持得越久,效率就越高。

不过,笔记本也有其自身的问题。我总是会忘记带铅笔。当事情繁多时,页面上的空间管理就成了另一项艰巨的任务。要在不同日期之间保持条理井然简直是一团糟。于是我开始思考,能否利用笔记本中那些有效部分(专一、不受干扰、始终向我展示我需要做的事情)的功能,同时解决纸张所无法胜任的问题。

这就是 STIK-eNote。它是一款类似厚实商务卡钱包大小的翻盖式设备。其背面是一个电子纸显示屏,即使设备关闭并处于休眠状态,也能一直显示当前的任务列表。打开设备后,会露出一个实体的 QWERTY 键盘和一块彩色 TFT 显示屏,这样您就可以进行编辑操作。再次合上设备,它就会重新进入休眠状态,而电子纸则会保留最后输入的内容。

这仍是一个原型产品。目前的版本是通过模块手工连接而成的,但印刷电路板已经完成了整体设计,固件也实现了端到端的运行。此页面详细介绍了整个系统的运作方式。

其功能是什么

这两块显示屏的功能完全不同。

TFT(一款 1.8 英寸的 ST7735S 显示屏)是主要的显示界面。它负责任务编辑、日历、番茄钟计时器以及设置等功能。导航操作起来非常迅速,因为渲染是在一个精灵缓冲区中进行的(这是一种软件帧缓冲区,会在一次操作中将整个画面存储在内存中,然后一次性推送到屏幕上),这样就避免了在慢速 SPI 总线上逐个元素写入时会出现的闪烁现象。此外,TFT 只在键盘使用时才处于开启状态,因此即使这是一个背光彩色显示屏,电池消耗也是可控的。

电子纸(尺寸为 2.13 英寸,型号为 GDEQ0213B74)是持久显示设备。它位于设备背面,无论设备的其他部分是否处于唤醒状态,它都会一直亮着,这很正常,因为电子纸在无电源的情况下也能保持图像。当设备唤醒时,电子纸会依次执行之前推送给它的任何任务和即将到来的事件。由于电泳墨水的工作原理,更新速度较慢,但电子纸只是偶尔会被短暂查看。

整个系统由一款 ESP32-S3(N16R8 版本)驱动,该芯片有两个核心,并且有足够的运行空间来同时处理显示渲染和键盘轮询操作,不会让其中一个操作阻碍另一个操作的进行。N16 表示有 16MB 的 NOR 闪存,用于存储持久数据。R8 表示有 8MB 的 PSRAM,用于存储经常使用的数据,比如显示所需的那些数据(显示缓冲区就存放在那里)。

屏幕

任务清单

主界面。任务以可滚动列表的形式呈现,每个任务都带有复选框,可通过“活跃”、“已完成”或两者同时筛选。点击“a”按钮可添加任务,使用方向键进行导航,按回车键可切换任务的完成状态。任务以固定大小的二进制数据块的形式存储在 NVS(ESP32 的非易失性存储器)中,因此即使电源关闭,列表也能保持不变。容量为 20 个任务和 50 个日程事件,两者都由固定数组支持,因此数据路径中完全不存在动态内存分配。

日历 — 月视图

在任何位置按下“fn + c”组合键即可进入日历界面。月视图会显示完整的网格,带有活动日的标记。导航可通过方向键进行。

日历 — 周视图

周视图会以日为单位展示当前这一周的活动安排,这正是我通常想要看到的,因为它能让我清楚地了解接下来几天的安排情况。

日历 - 事件视图

对某一天或某项活动详细记录会涵盖所有信息:活动名称、备注、地点、时间、持续时长。活动可以与任务关联起来,因此一个预定的时间段可以指向具体的待办事项。

番茄钟

按下 fn + p 键即可开始番茄工作模式。计时器会在屏幕上进行倒计时,当一个工作时段结束时,设备会将总结信息推送到电子纸屏幕上,并进入睡眠状态,这样即使我暂时离开,工作时段的中间状态也能得以保留。

设置

设置功能可控制显示偏好和低功耗模式。开启低功耗模式后,CPU 频率会降低,FreeRTOS 的轮询延迟会增加。这种变化感觉上并非十分显著,但在一天的使用过程中会逐渐累积起来。

睡眠显示(电子纸)

电子纸睡眠显示屏会通过多达十屏的内容(活跃任务、即将发生的事件)进行循环显示,其睡眠周期为 10 秒。每次唤醒时,固件会检查接下来应该显示的是哪一屏,如果有任何变化则更新显示屏,并再次进入睡眠状态。整个循环过程中的平均耗电量非常低,因为面板在空闲状态下不消耗任何电量,而 ESP32 只会短暂处于唤醒状态。在进入睡眠状态之前,我们还会预先准备好屏幕内容,因此在这种低功耗状态下无需进行相关高强度的计算。

软件架构

该固件是基于 Arduino 框架在 PlatformIO 上构建的,而 FreeRTOS 则负责处理双核分离操作。

双核分离模式

核心 0 只做一件事:监听键盘输入。它运行一个专门的 FreeRTOS 任务,持续检查 I2C 总线(地址为 0x5F,即 M5Stack 卡键盘模块)以获取按键操作。一旦发现按键操作,它会将输入信息封装到一个 SystemEvent 结构体中,并将其推送到一个共享的 FreeRTOS 队列中。核心 0 不会触碰显示屏或状态机。

核心 1 负责运行主应用程序循环。它会阻塞在事件队列上,处理到来的各类事件,更新状态机,并触发渲染过程。由于键盘检测和显示渲染分别在完全独立的两个核心上进行,且两者之间有一个队列隔开,因此两者不会相互影响而使对方停滞。这一点在实际应用中非常重要;SPI 显示写入速度较慢,如果键盘在同一核心上与 CPU 时间竞争,那么在输入延迟方面就会有所体现。

状态机

用户界面中的所有内容都是一个状态。例如:STATE_UI_LIST(用户界面列表)、STATE_UI_CALENDAR(用户界面日历)、STATE_SLEEP(睡眠状态)、STATE_EPAPER_UPDATE(电子纸更新)等等。状态转换会通过事件队列进行:按键操作到来后,当前状态处理程序会决定如何处理它,如果需要进行状态转换,新的状态就会被设置,然后相关的处理程序会在下一个循环周期中接管。

显示管理器

“DisplayManager”类负责管理两个屏幕。对于 TFT 屏幕,它会维护一个软件精灵(来自 TFT_eSPI 库的内存帧缓冲区),在将所有绘制内容推送到硬件之前,这些绘制操作都在这里完成,这样一来就能消除在慢速 SPI 总线上使用动态用户界面时可能出现的闪烁现象。

电子纸这一部分的处理更为复杂。显示管理器会筛选出当前的任务列表和即将到来的日程事件,然后将它们封装到 EpaperViewItem 结构体中,每个结构体代表一个最多包含六个项目的单个屏幕。在每次睡眠周期唤醒时,它会确定接下来要显示的屏幕,并决定是进行部分刷新还是完全刷新。完全刷新的频率较低,因为这需要几秒钟的时间,并且会让面板通过黑白模式闪烁几次;部分更新速度较快,但如果连续多次进行则会累积出现鬼影现象,所以管理器会定期强制进行完全刷新以清除缓冲区。

初始化顺序

有一点值得注意:电子纸需要先进行初始化,然后进入休眠状态,之后液晶显示屏才能进行初始化。如果同时启动这两部分,会导致 SPI 总线争用,最终两个显示屏都会处于不确定的状态。从这两个库的文档中都无法明显看出这种顺序,而且花了好一段时间才弄清楚。

“坚持”

任务和日程事件通过 ESP32 的偏好设置库被序列化到 NVS 中。所有内容都以固定大小的二进制块形式存储在固定大小的数组中(最大任务数 = 20,最大日程事件数 = 50),不存在任何动态分配。在电源接通时,主设置程序会将其重新读取出来,设备便会从上次停止的地方继续运行。

硬件设计

“电源路径”

电源由一块 800 毫安时的锂聚合物电池提供。一个 TPS613222ADBVR 同步升压转换器将电池电压提升至稳定的 +5 伏电源轨,然后从那里,一个 XC6206P332MR-G LDO 将其降至 +3.3 伏,以供所有逻辑级外围设备使用。ESP32、两个显示屏以及键盘都运行在 3.3 伏电源轨上。这种先升压后降压的拓扑结构并非最节能的选择(在 3.3 伏降压环节使用开关稳压器会更节省功率),但这两部分的辅助元件需求极低,这使得物料清单简短,而且板子也更便于在原型上手工焊接。

电池充电由一个与 USB-C 输入相连的 TPB4056A20-ES1R 单电池线性充电器来完成。USB-C 连接器上的两个 5.1kΩ 的 CC 电阻将其配置为 5V 的接收端。

显示总线

这两块显示屏分别连接在完全独立的 SPI 总线上。电子纸显示屏使用的是 FSPI(在 S3 上为 SPI2,引脚 5/6/7/15/16/17)。TFT 显示屏则使用的是 HSPI(SPI3,引脚 8/9/10/11/12/13)。将它们置于独立的总线上并非可选操作。用于驱动这两块显示屏的两个驱动库都基于相同的底层图形基础架构,而它们对于总线所有权的时序假设存在足够大的差异,以至于共享总线在早期的调试过程中导致了持续性的故障。将总线分开处理解决了这个问题。

唤醒电路

该设备通过铰链中的线性霍尔效应开关(DRV5032FADBZR)从深度睡眠状态中唤醒。当盖子打开时,磁铁会远离传感器,从而使开关的输出状态发生变化。一个 RC 差分器将开关的电平变化转换为一个短暂的上升沿脉冲,这就是 ESP32 的唤醒引脚实际所需的东西。如果没有这个差分器,当盖子打开时,开关输出会一直保持高电平,这会干扰自动睡眠功能;该设备本应在无操作一段时间后能够自行进入睡眠状态,而一个一直保持高电平的唤醒引脚会妨碍这一正常运作。

I2C 电平转换

M5Stack 卡基板采用 5V 的 I2C 电压标准,而 ESP32 是 3.3V 的产品。两个 BSS138 N 型场效应管负责处理 SDA 和 SCL 线路的双向电平转换,每个通道的低电平和高电平侧均设有 10kΩ 的上拉电阻。这是一个广为人知的 I2C 电平转换参考电路,在这里运行可靠。

PCB 设计

该印刷电路板采用的是 STIK-eNote V2 的设计,是在 KiCad 软件中绘制的。该电路板的尺寸目标为 3.5 英寸×2.0 英寸,特意将宽度限制在这一尺寸,以便在机箱中为其旁边放置锂电池留出空间,因为键盘决定了设备的整体尺寸。

使这种布局变得有趣的一点是:通常情况下,使用 ESP32 时,你会利用可配置的 GPIO 矩阵将微控制器的引脚与外围设备所期望的任何物理引脚顺序进行映射,并将线路布置成直线。但实际上,这两个显示库、FreeRTOS 以及这些特定显示设备的特殊特性相结合,意味着某些引脚必须作为默认的 HSPI 和 FSPI 引脚使用,不能进行重新映射。因此,当线路需要交叉时,就会进行交叉。为了处理这种交叉情况,会在不同层之间布设大量的过孔来传输信号,这在铜层中形成了技术债务,但这是软件迫使印刷电路板承担的债务。

底层是一个完整的接地平面,其周边围绕着一个排除区域,以避开 ESP32 模块的天线端部。该模块的设计是稍微悬空于电路板边缘之上,而在天线下方浇筑铜质材料会使其失谐,因此这个隔离区域确保了在 2.4GHz 频段内的信号完整性。

组件尺寸的选定是基于手工焊接这一因素考虑的。无源元件采用的是 0603 尺寸。集成电路均为标准的 SOIC 或 SOT-23 封装形式。没有采用 0402 或 QFN 尺寸,因为在某个时刻,要进行焊接操作的人就是我本人。

### 材料清单(关键组件)

| 编号 | 部件 | 功能 |

|-----|------|----------|

| U6 | ESP32-S3-WROOM-1-N16R8 | 主控制芯片 |

| U3 | TPS613222ADBVR | 5V 升压转换器 |

| U5 | XC6206P332MR-G | 3.3 伏低压差稳压器 |

| U1 | TPB4056A20-ES1R | 锂电池充电器 |

| U2 | DRV5032FADBZR | 霍尔效应盖板开关 |

| 问题5、问题7 | BSS138 | I2C 级联转换器 MOSFET |

| ULCD | ST7735S 1.8 英寸 TFT 显示屏 | 有源显示屏 |

| U_EPD | GDEQ0213B74 | 电子纸持久显示屏 |

| U_KB | M5Stack 卡片式键盘 KB v1.1 | I2C 拼字键盘 |

| — | 800毫安锂聚合物电池 | 电池 |

包含设计标识、制造商零件编号、数量及描述的完整物料清单已存于数据库中。

建造它

软件

要求:使用 Python 3 版本,安装 PlatformIO 命令行工具。

在首次启动时,设备会依次初始化两个总线(电子纸先,然后是 TFT),加载从 NVS 中保存的任务和事件,并进入任务列表视图。导航使用方向键,回车键用于选择,a 键用于添加任务,c 键用于查看日历,p 键用于设置番茄钟模式。设备在无操作一段时间后会自动进入睡眠状态,并在任何按键操作或盖子打开时唤醒。

硬件

目前的原型是通过使用现成模块手工组装而成的。PCB 文件存放在共享库中,任何想要进一步完善它的人都可以获取;蚀刻图、原理图、物料清单以及 KiCad 项目文件都存放在 project_02/hardware 目录下。

接下来会怎样

目前的印刷电路板设计是可行的,但这只是对原型进行整合的初步尝试。在下一次修订时,我会对一些内容进行修改。

连接显示屏的通孔插头将被拆除。在主印刷电路板与铰链上半部分的小显示屏适配板之间安装一个合适的板对板连接器,会比当前贯穿铰链的那条线缆连接方式更简洁、更耐用。这种连接方式在原型机中是可以接受的,但在日常携带使用时就不合适了。

这些显示屏与键盘的尺寸并不完全匹配。TFT 屏幕还算合适,但电子纸屏幕明显比其下方的键盘窄很多。未来的版本将会使用尺寸与键盘相匹配的显示屏。尤其是电子纸屏幕,其性能还有很大的提升空间,而无需改变其物理结构。

在电源方面,将线性的 3.3V 调压器替换为降压转换器有助于延长电池续航时间,特别是因为 ESP32 的电流消耗较大,以至于低压降稳压器在满负载状态下会散发出相当多的热量。对于此次设计阶段而言,这种改动在 PCB 上的复杂性方面并不值得,但如果是完善版的话,这样做就是值得的。

本文编译自hackster.io

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读

我想要更深入地了解射频系统、电源管理、印刷电路板布局以及便携式通信设备,所以我没有购买现有的 Meshtastic 节点,而是完全从零开始在 KiCad 软件中设计了自己的设备。

关键字: 射频系统 电源管理 印刷电路板 ESP32-S3

我一直乐于将“识别”这一概念拓展得更丰富——将其转化为一种能够实时响应用户的互动体验。这一次,我将格罗夫视觉人工智能 V2、XIAO ESP32-S3 和 Processing 结合在一起,创建了一个类似《水果忍者》的互...

关键字: 人工智能 ESP32-S3

该项目是于亚眠大学拉萨莱分校计算机工程专业第四学年期间开发的。我们的主要目标是设计并构建一个可靠、完整的物联网监测解决方案——实现从物理信号采集到高级云端软件处理之间的无缝衔接。

关键字: 印刷电路板 Arduino 物联网

这款机器对于印刷电路板实验而言特别具有研究价值,原因在于它在同一平台上集成了两种不同的激光源:一个功率为 20 瓦、波长在 450 至 455 纳米范围内的蓝色二极管激光器,以及一个功率为 20 瓦、波长在 1064 纳...

关键字: 印刷电路板 二极管激光器 xTool

“Project Aura”是一款基于 ESP32-S3 平台的开源空气质量监测设备,配备了工业级的 Sensirion 传感器、一块 4.3 英寸的 IPS 触摸屏、无焊点组装工艺,并且通过 MQTT 协议实现了与 H...

关键字: ESP32-S3 传感器 IPS 触摸屏

物联网设备智能化,TinyML(微型机器学习)技术通过将轻量级神经网络部署到资源受限的边缘设备,实现了从“感知”到“认知”的跨越。ESP32-S3作为乐鑫科技推出的旗舰级Wi-Fi/蓝牙双模芯片,凭借其双核Xtensa...

关键字: ESP32-S3 Ethos-U55

开源硬件生态以共享设计文件为核心,通过社区协作推动硬件创新。其核心特点包括设计透明性、组件互操作性和社区参与性。设计透明性使开发者能直接查看硬件工作原理,例如ESP32-S3的电路原理图和PCB布局文件完全公开,开发者可...

关键字: Arduino ESP32-S3

在PCB(印刷电路板)设计中,导热过孔是实现热量垂直传导的关键结构,广泛应用于电源模块、处理器、汽车电子等高热流密度场景。细心观察会发现,不少导热过孔周边会分布着若干无网络的小焊盘——这些不连接任何电路网络的铜质结构看似...

关键字: 印刷电路板 垂直传导 网络

我已经测试了几十个ESP32显示器,但没有一个让我停下来说“等等,这改变了一切”——直到CrowPanel Advance显示器出现在我的办公桌上。这不仅仅是一个更大的屏幕;这是当有人真正听取了制作者的要求时所发生的事情...

关键字: 触摸屏 AI ESP32-S3

当我们翻看老照片时,我们的脑海里充满了各种声音——厨房里的笑声,火车站的嗡嗡声,有人说“记得吗?”我们建造这个项目是为了让那些声音回归,而不仅仅是活在记忆中。现在一张图片就能说明一切——简短而温暖的短语,比如你爱的人又在...

关键字: 扬声器 ESP32-S3 MCU
关闭