组装3D打印机(下手前调查)

最近上头了,要搞3d打印机,而且主要玩打印机,所以准备DIY

2023/10

方案一览

目前找到的方案有:

  1. Voron 2.4
  2. Voron Tridents

软件

控制器

  1. Klipper
  2. Marlin

建模

  1. blender
  2. meshlab – archlinux 编译失败
  3. openscad

切片

Voron

Voron 2.4 (flying Gantry)

看起来具有更高的可玩性

优点

  1. 时间长,玩家多,mod多

缺点

  1. 系统缺陷:违背运动学定律,导致系统一部分弯曲[1]
  2. 不易维护,皮带老化速度快[2]

Voron Tridents (tripoints leveling)

相对便宜,但是对于玩打印机来说,价格不是决定因素

优点

  1. 构建相对容易,校准快 [3]

缺点

  1. 高处过重,系统共振[1]
  2. 高度受限,不能超过250mm[2]

Voron 0.1

优点

缺点

他人分享

成功例

  1. 3000元方案: https://tieba.baidu.com/p/8195524624?pid=146420825662&cid=0#146420825662
  2. https://tieba.baidu.com/p/7385199457?pid=139616747000&cid=0#139616747000
  3. 带兔子多色: https://www.bilibili.com/video/BV1GF411t7pF/?spm_id_from=trigger_reload&vd_source=15f3a73f7a06c58e94d62416ea4036d1
  4. b站野生小虾米:https://www.bilibili.com/video/BV1Mu411z7AZ/?spm_id_from=..search-card.all.click&vd_source=15f3a73f7a06c58e94d62416ea4036d1
    • 型材 misumi:全套hfs:500 – 经济型nfs:300+
    • 电机
      • ab电机 0.6NM
      • z电机 0.42NM
      • 信浓,雷赛等没有推荐
    • 开关电源
      • 品牌
        • 台湾明纬
        • 深圳明纬
        • 河南明伟
      • LRS – 薄电源
      • 350W,热床220V的情况,200W就足够
      • 风扇很吵,6010风扇,可以换
      • 负公差 – 容易套入,但是不用过于在意负公差
    • 皮带
      • 9mm,10mm会和打印件摩擦
      • 同步轮最好9,买不到可以用10
    • 热床
      • 3kg铝板较重,可以最后装
      • 用玻璃当PEI板材测试,防止损失大
    • 螺母
      • 船型螺母 – 可以从外面装
      • 不要全用弹珠螺母
        • 部分位置会造成位置过长
        • 弹珠螺母不会掉下去
    • 拖链
      • 开口式 – 推荐,容易布线
      • 闭口式 – 不推荐,穿线不容易
      • 尺寸: 10×11
    • 调平 – 微动开关
      • TTC 微动
      • 更换型号需要修改配置 – z自动偏移
    • 电气导轨
      • 如果用理线槽,需要变短,注意计算长度,留出1mm余量

失败例

  1. 高度过高 – https://tieba.baidu.com/p/7291311093?pid=138670967892&cid=0#138670967892

2. 纹路缺陷 – 无答案

参考

  • [1] Voron 2.4 & Tridents 缺陷
  • [2]Voron Trident vs Voron 2.4: The Differences

https://all3dp.com/2/voron-trident-vs-2-4-differences/#

  • [3] Which Voron should you build

成果

购物清单,目前花了1600左右,准备组装voron v0.2r1,等待货物送达中.BOM如下:

https://docs.google.com/spreadsheets/d/1Ek6zdi4ttX-TjzbVQYM0EhhznqHYpk7oFu0q86mKzZw/edit?usp=sharing

选择理由

  1. 足够小,作为初次接触这个领域,一个较小的机器可以比较容易的移动。如果是voron2.4的话,可能就不是那么容易移动了。
  2. 第一次组装,希望能够在一个相对成熟的平台上尽可能熟悉各个组件。同时也希望能够以较小的成本而进行试错。其他版本的voron来试错成本有些高。
  3. 找到了B站“小明就小明吧”帮忙购买了所有非电子组件,有一位经验者带路,一定程度上能够减少翻车概率😄(之所以没有买电子相关组件,是因为我对电子领域有一些了解,简单翻看各个控制板的文档,基本就能理解他们实现了什么功能和优缺点;但是对于其他领域,我暂时还没有足够的经验,作为上班族,为了减少拼装周期,UP帮忙购买能够帮我节省大量的时间去挨家选购,很赞)
  4. UP“有空来玩玩”关于voron 0.2做了一套相对完善的说明教程,后续参考应该比较容易

但是也有一些缺点:

  1. 对于追求3d打印来说,打印面积过小,性价比不高
  2. 这个价格其实已经可以买到拓竹的成品机器了,然而DIY性能不如成品的机率比较大

BOM 变动

  1. 主要是减少试错成本的方针进行的
  2. 为了拆装容易,不需要封箱。因此pdd几块钱买个防尘罩
  3. 用电安全很重要,花了约100元把原本几块钱的220v开关换成了漏电保护器,并且放在强电箱内。也购买了绝缘胶带,准备视情况对开关电源的220v电源也进行处理。不过一般情况下不打算靠电闸来开关,打算接个智能插座。
  4. 操作安全也很重要,护目镜、手套都是推荐购买的。

Aipi-Eyes-S1 调试笔记

lvgl

作为gl库挺好用的,但是缺少上层ui支持,纯手写有点累人。

squareline说不上好用。

lwip

断言错误:timeout != null

运行后,lwip报错如下

Assertion "sys_timeout: timeout != NULL, pool MEMP_SYS_TIMEOUT is empty" failed at line 3
11 in /workspace/aipi/aithinker_Ai-M6X_SDK/components/net/lwip/lwip/src/core/timeouts.c

解决方法:

lwipopts_user.h中定义,默认是10,适当增大即可消除这个错误

错误本质是timeout的mem区域定义过小,导致melloc失败

#define MEMP_NUM_SYS_TIMEOUT 20

socket没有必要断开

http是基于socket的一坨文本,传输过程中没有必要一包一个连接,可以一个连接用到底。

正好避免了不断的内存申请和释放。

大数据recv

jellyfin数据包比较大,登录的数据包就超过了3k,超越了MSS大小(1360)。

没想到什么好的解决方法,只能开个大buffer。

讨巧的办法:如果数据到达MSS极限就再收一次,希望不会有恰好的。正常的也许判断下第一包里面的数据size会好些。

cJSON

cJSON的子元素不要delete,全部是用完直接delete根部即可。不然会导致越界错误。

minicom 在lf时换行

参考:https://unix.stackexchange.com/questions/283924/how-can-minicom-permanently-translate-incoming-newline-n-to-crlf

$HOME/.minirc.dfl添加

pu addcarreturn    Yes

Jellyfin

登录

大部分指令整理在:

https://github.com/feilongfl/JellyfinBox/issues/5

使用登录数字可以避免在不到4寸的屏上面戳密码

apikey

需要套一层:Mediabrowser Token=”$token”

ref: https://github.com/jellyfin/jellyfin/issues/7190

使用http://jellyfin.lan:8096/api-docs/swagger/index.html可以调试大部分API

转码

对于MCU播放来说,flac之类的无损过于庞大了(也许也能播放),而且音频文件格式也不少,为了通用,通过jellyfin可以自动转码,重点在于transcodingContainer参数

curl 'http://192.168.10.110:8096/Audio/ca6d68582302e6e6fdcb576974db06e9/universal?UserId=c45083f066864d658bbeb7fe9a9b443d&DeviceId=TW96aWxsYS81LjAgKFgxMTsgTGludXggeDg2XzY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTE2LjAuMC4wIFNhZmFyaS81MzcuMzZ8MTY5NjA1OTYyNjg2MA11&audioBitRate=96000&audioCodec=mp3&transcodingContainer=mp3&api_key=86d7bbfa776748a1afa742f28b8c4cc9&PlaySessionId=1696157558093&StartTimeTicks=0&EnableRedirection=true&EnableRemoteMedia=false' \
  -H 'Accept: */*' \
  -H 'Cache-Control: no-cache' \
  -H 'Pragma: no-cache' \
  -H 'Range: bytes=0-' \
  -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36' | mplayer -

转码2

貌似jellyfin不支持转换pcm格式,需要改改代码

核心处理在:Jellyfin.Api/Helpers/AudioHelper.cs

通过ffmpegCommandLineArguments来控制ffmpeg进行转码。

编译jellyfin需要在ubuntu等有dpkg的平台才可以编译(linux)

自动转码PCM

参考:https://github.com/jellyfin/jellyfin/pull/10321

jellyfin编译

装ubuntu

装nodejs

参考:https://github.com/nodesource/distributions

装dotnet

参考:https://learn.microsoft.com/en-us/dotnet/core/install/linux-scripted-manual#scripted-install

编译jellyfin-web

需要有个客户端来调试

参考:https://github.com/jellyfin/jellyfin-web

编译jellyfin

调试参考:https://github.com/jellyfin/jellyfin#running-from-the-command-line

./build -t native -p linux.amd64

生成的文件竟然在../bin,这个构建系统可能是有问题吧…

重置服务器

错过了初次向导,导致无法设置密码时候可以使用

rm ~/.config/jellyfin/ -rv

AIPI

声音 – i2s

不知道为啥官方不给个声音例程。。。

官方默认的声音是aipi-eyes-s2的,s1需要用8388_pcm

而且翻遍sdk也没找到解码器…

测试硬件方法

参考:https://segmentfault.com/a/1190000016652277

测试声音可以用下面指令生成一段测试音乐,方便测试

ffmpeg -y -i d.mp3 -acodec pcm_s16le -f s16le -ac 2 -ar 16000 16k.pcm
xxd -i 16k.pcm 16kpcm.h

但是需要注意flash大小,并且注意section。也就能存几句歌左右,不过能听个大概。

同时,DMA每次传输有上限(具体没测试),不能一次传完大的音乐。需要利用isr多次传输。

采样率相关

输出音乐如果女变男或者节奏变慢,需要加快i2s采样率。

如果变成nightcore,那么应该减少采样率

杂音

感觉是传输中有多余字符或字符丢失,但是目前没找到什么好办法

-> Jellyfin服务器下载的数据ffmpeg播放没有问题

-> curl下载数据和MCU 的 lwip socket读取数据不一致(串口打印)

-> python试一下发现socket读回来的ffmpeg也有杂音

-> 看起来socket直接读回来的数据和http下载的有区别

-> 比较两个文件,除了HTTP头,还多出两千多个byte,这个应该就是原因了

-rw-r–r– 1 feilong feilong 15257333 10月 2日 14:19 test.bin
-rw-r–r– 1 feilong feilong 15255040 10月 2日 14:23 wget.pcm

-> 除了标头以外,找到了下面4种差异

0x0a,0x31,0x30,0x30,0x30,0x30,0x0d,0x0a,0x0d
0x0d,0x0a,0x30,0x0d,0x0a,0x0d,0x0a
0x0d,0x0a,0x31,0x30,0x30,0x30,0x30,0x0d,0x0a
0x0d,0x0a,0x63,0x36,0x30,0x30,0x0d,0x0a

看起来HTTP会添加长度说明,奇数个byte的时候,打破了16bit对齐的音频数据

Stable Diffusion 照片修改(不使用webui)

最近沉迷于stable diffusion的研究,一般的教程都在讲述如何使用webui来生成图片。但是作为一名程序员,单纯点点点是满足不了我想理解它底层原理的欲望。

本文叙述基于Diffusers和ROCM(Amd GPU)的简单示例。

安装

注:基于Manjaro系统

新建python工程

最近感觉poetry比较火的样子 🙂

mkdir sd_script
cd sd_script
poetry new .

# 我习惯把venv放在工程目录
poetry config virtualenvs.in-project true --local
poetry env use python3.10

# 一顿乱装
poetry add diffusers transformers accelerate scipy safetensors omegaconf
# 参考:https://pytorch.org/get-started/locally/
poetry source add --priority=supplemental pytorch https://download.pytorch.org/whl/rocm5.4.2
poetry add --source pytorch torch torchvision torchaudio

# 进入venv
source .venv/bin/activate.fish

写点代码

from diffusers import StableDiffusionImg2ImgPipeline, DPMSolverMultistepScheduler
from PIL import Image

pipe = StableDiffusionImg2ImgPipeline.from_single_file(
    # https:civitai.com/models/7240
    "./model/model/MeinaMix.v13.safetensors"
)
pipe.scheduler = DPMSolverMultistepScheduler.from_config(
    pipe.scheduler.config, use_karras_sigmas=True
)

# rocm不配拥有名字
pipe.to("cuda")

# 明明不是R18 ...
if pipe.safety_checker is not None:
    pipe.safety_checker = None

# 天灵灵,地灵灵,神灵灵,祖宗灵灵。
prompt = "masterpiece, best quality, ultra detail,(2girl), upper body,close up, smile, happy, open eye, with glasses"
nprompt = "NSFW,(worst quality, low quality:1.4), (bad_prompt_version2:1), muscular, greyscale, monochrome, lineart, 2koma, 3koma, 4koma, manga, 3D, 3Dcubism, pablo picasso, disney, marvel, mutanted breasts, mutanted nipple, cropped, lowres, bad anatomy, bad hands, text, error, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality, normal quality, jpeg artifacts, signature, watermark, username, blurry,  artist name, lowres, trademark, watermark, title, text, deformed, bad anatomy, disfigured, mutated, extra limbs, ugly, missing limb, floating limbs, disconnected limbs, out of frame, mutated hands and fingers, poorly drawn hands, malformed hands, poorly drawn face, poorly drawn asymmetrical eyes, (blurry:1.4), duplicate, (worst quality, low quality:1.4)"

init_image = Image.open('./resources/xxxxx.jpg').convert("RGB")
init_image.thumbnail((512, 512))

image = pipe(prompt=prompt, 
             negative_prompt=nprompt, 
             image=init_image, 
             strength=0.45, 
             guidance_scale=7.5,
             num_inference_steps=100
             ).images[0]
image.save("output.png")

成果

下面是一张在上海后滩拍摄的照片。

原图(人脸已扣掉,两个扣脚大汉😄)

输出(两个萌妹 😄)

stable-diffusionclipdrop XL 体验

刷B站时候刷到了https://clipdrop.co/stable-diffusion,找chatgpt生成了提示词。

记录下体验结果

chatgpt

我希望为文字生成图片工具生成提示词, 要求如下:
- 使用英文一句话描述
- 图像内有三个日系画风女孩
- 三个女孩在PCB板上合作搬运电阻和电容
- PCB使用蓝色阻焊
- PCB上应该有没有焊接的零件散落

prompt是根据下面图片描述的:

chatgpt输出



根据您的要求,我为文字生成图片工具生成了以下提示词(英文描述):

"Three Japanese-style girls collaborate on a PCB board, moving resistors and capacitors, with scattered unassembled components on a blue solder-masked PCB."

希望这个提示能够满足您的需求,为您的文字生成图片工具提供准确的描述!

直接使用这个生成了三次元图片,效果不好

一次修改

Three Japanese-style anime girls collaborate on a PCB board, moving resistors and capacitors, with scattered unassembled components on a blue solder-masked PCB.

添加 anime限定词,限定为二次元世界

二次修改

Three cute Japanese-style anime girls collaborate on a PCB board, moving resistors and capacitors, with scattered unassembled components on a blue solder-masked PCB.

有点丑,添加cute限定,结果就比较好了。

但是,这貌似是一个抽奖的过程,附上几张我觉得比较好的图片。

chatgpt learn – Guidelines

learn from DLAI – Learning Platform Beta (deeplearning.ai)

Write clear and specific instructions

Use delimiters – 使用分隔符明确指令和数据

例如告诉chatgpt三个反引号内是处理目标,“`目标文本“`

Ask for structured output – 要求结构化输出

输出json/html以便后续处理

Check whether conditions are satisfied – 要求模型检查前置条件

告诉模型如果输入不对时候主动提示不正确

Few-shot prompting – 提供示例

给一个例子会更好点

Give the Model time to think

Specify the steps to complete a task – 要求模型按步骤完成

可以避免“一步到错”

Instruct the model to work out its own solution before rushing to a conslusion – 要求结论给出前,模型先计算完成

不然模型可能只比较结论,不比较过程

Model Limitations

Hallucination (虚假知识)

回复看起来真实的错误内容

要求模型先从文本中找到相关内容,使用引用内容来回答问题。

FPGA 原理和结构 「天野英晴」 读书笔记

复习下基础知识

基础知识

逻辑电路基础

  • 布尔代数
  • 逻辑表达式
    • 乘积的和
    • 和的乘积
  • 真值表 -> LUT
  • 组合逻辑电路
    • 当前的输出取决于当前输入,不包含记忆元件
    • 异或 Exclusive-OR (第一次直到单词这么写,惭愧啊)
      • 简写XOR,EOR,EXOR(后面这俩还真是第一次见)
  • 时序逻辑电路
    • 含有记忆元件的逻辑电路
    • 同步时序逻辑电路
      • 状态变化由时钟信号控制
      • 有限状态机模型
        • Mealy 输出=输入+状态 (输入直接影响输出)
          • 通常状态少,电路规模小
          • 输入立刻反映到输出,导致逻辑元件不等长布线,容易冒险
        • Moore 输出=状态 (输入影响状态)
          • 状态数量多,电路规模大
          • 不易冒险
        • todo:书上的图挺好,后续贴过来
    • 异步时序逻辑电路(FPGA一般不使用)
      • 这本书没讲,后面有机会补上

同步电路设计

  • 触发器(Flip Flop,FF)
    • FPGA 一般采用DFF
    • CMOS工艺电路
      • todo:抄图
    • 建立时间(setup time),保持时间(hold time)
    • 亚稳态(metastable)
    • 时序分析
      • 评估是否满足时序约束(需求)
      • 动态时序分析
        • 过于耗时,很少采用
        • todo:需要了解下
      • 静态时序分析(static time analysis, STA)
        • 只需要电路网表,遍历一次电路拓补,分析速度快
      • 资源充足时,编译容易,时间短
  • 单向时钟同步电路
    • 时钟偏移(skew):时钟信号到达时间错位
    • 时钟抖动(jitter)
    • FPGA通过驱动能力强的专用总线(global buffer)将多层时钟树的时钟低偏移连接在所有FF上。

FPGA 定位和历史

  • 逻辑器件分类
    • 标准器件
      • 标准逻辑
        • 怀疑书中指与或非门等标准器件
      • 固定用途定制芯片(Application Specific Standard Parts,ASSP)
      • 可编程逻辑器件(Programmable Logic Device,PLD)
        • FPGA是一种设计自由度高的PLD。
        • 半导体厂商可以量产,用户无需开模即可定制电路
    • 定制芯片
      • 全定制芯片
        • 优势:性能(速度),集成度(门数),设计自由度
        • 劣势:NRE,TAT高(费用和时间)
      • 半定制芯片(缩短NRE和TAT)
        • 门阵列(gate array)
        • 嵌入式阵列(embedded array)
        • 标准单元ASIC
        • 结构化ASIC
  • FPGA历史
    • 1970s
      • FPLA – NXP
        • AND-OR阵列
      • PAL – Lattice
        • 改进版FPLA
        • 耗电量大无法普及
    • 1980s
      • GAL – Lattice
        • 固定OR阵列结构
        • CMOS EEPROM进行编程
      • FPGA – Xilinx
        • LUT+FF
        • CMOS SRAM
        • 可重配置
      • CPLD – Altera,AMD,Lattice
      • 反熔丝FPGA – Actel,QLuickogic(这俩公司没听过…)
    • 1990s
      • 日本厂商尝试加入,没有成功
      • FPGA(SRAM)- Altera,AT&T,AMD,Atmel
      • FPGA(FLASH)-GateField
      • FPGA(BCiMOS)-DynaChip
    • 2000s
      • FPGA,SoPD – Altera,Xilinx
    • 2010s
      • 高端 FPGA – AMD(Xilinx),Intel(Altera)
        • 动态可重配置
        • 车载FPGA
        • 光FPGA
        • SoPD (Zynq,DE1SOC等带有处理器的FPGA)
      • 中低端:Lattice,GOWIN

FPGA 概要

todo:9/4

FPGA结构

todo:9/4

设计流程和工具

todo:9/5

设计原理

todo:9/6

硬件算法

todo:9/7

PLD、FPGA应用案例

todo:9/8

新器件,新架构

todo:9/9

WIFI+USBIP+MCU=无线USB设备

请注意,本文提供方法基于zephyr OS制作,由于目前zephyr项目的USB子系统处于大规模重构状态,所以本方案不受zephyr正式支持。详细请参考:

https://github.com/zephyrproject-rtos/zephyr/pull/46862

背景

目前,我们有许多MCU项目利用USB协议与PC进行通信,绝大多数使用USB从机协议,随着Wifi协议的广泛使用以及速度的提升,我认为绝大多数的USB设备都可以经由网络协议而渐渐变得无线化。

但是,如果完全将协议栈转换为网络,会导致一系列兼容软件或驱动需要再次适配,较大的开发量和不明显的收益使得各大厂商在这方面进展缓慢。

本文介绍一种基于USBIP的USB设备无线化方法,希望能够推进设备线束的无线化进程。

USB with WIFI

灵感来源(废话部分,技术无关,可以跳过😄)

前段时间有幸从artery公司木一川先生处得到一片at32 demo板,正巧促使我简单的学习了一下openocd和cmsisdap。发现cmsis-dap协议很容易就可以在zephyr中引用,以获得大量开发板支持。

但是如果只是制作一个普通的dap仿真器,比较缺少挑战性,因此我决定尝试制作无线的仿真器。

最初的目标是通过TCP转发cmsis-dap协议,修改openocd以支援网络设备,但是后面我意识到这会导致windows的KEIL和IAR等IDE环境难以运用。

因此,我将目标转向USB设备的网络访问,因此了解了USBIP协议,并且偶然发现zephyr OS中对USBIP是有部分实现的,我只需要简单的将他扩展到其他设备即可,因此便有了本文。

方案介绍

再次提示,本方案虽然基于zephyr OS制作,但是由于zephyr OS的USB subsystem处于大规模重构状态,所以不受zephyr主线支持!

实现代码请参考:https://github.com/zephyrproject-rtos/zephyr/pull/46862

实际在下面设备中运行通过:

传统USB程序结构

这里指的传统zephyr USB 设备程序(因为zephyr系统目前没有host设备,这也是大规模重构的原因)。

如果您的程序目前采用其他方式架构(可能大部分程序都是吧),您首先需要将其移植到zephyr OS。(目前USB subsystem处于不稳定状态,商业用户需要谨慎考虑)

zephyr OS USB DEVICE

USBIP 网络USB设备

本方案工作在UDD层,通过注册zephyr USB device驱动,并将其转换为USBIP协议。因此没有虽然没有USB硬件,但是在操作系统看来和有USB驱动是一样的。

示意图

注意:

  • 这不是标准USBIP Server的实现,但是我认为对于绝大多数的USB设备已经足够实现功能

使用

MCU程序

建议创建如下application

  • 启动后的wifi配置:帐号,密码,功耗等(有线网络可忽略)
  • 静态IP或DHCP服务

简单使用教程

  • 使用usbip客户端,确认基本通信
usbip list -r FEILONG-CMSIS-DAP
  • 挂载usbip设备
sudo usbip attach -r FEILONG-CMSIS-DAP -b 1-1
  • 调试可以使用wireshark,内置有USBIP协议。

windows

请参考

https://github.com/cezanne/usbip-win

有些功能可能需要使用zadig安装驱动:

https://zadig.akeo.ie/

linux

linux用户应该不需要多说,参考archlinux wiki即可使用。

https://wiki.archlinux.org/title/USB/IP

注意:

在linux上使用时,如果在使用过程中,没有detach直接复位、断电等,会造成linux内核出现异常,重启后即可解决。(windows没有发现此类问题)

参考链接

CMOS芯片结构与制造技术

CMOS学习中…

LSI、VLSI制造基本技术

  • 基础工艺技术
  • 晶圆吸杂去除被金属刀片切割的单晶硅片上沾染的金属
    • 外部吸杂离子注入
    • 内部吸杂氢气中退火处理
  • 氧化氧气中加热形成二氧化硅薄膜
    • 依据氧化气氛分类
    常用干氧、湿氧、干痒相结合的方式混合含氯气体(氯气、氯酸等)捕获Na离子,改善SiO2表面稳定性。
    • 干氧氧化
      • 可以使用氮气和氩气稀释氧气,减慢氧化速度 形成超薄氧化膜
    • 水汽氧化
    • 湿气氧化
    • 依据集成电路制造工艺区分
    • 初始氧化
    • 基地氧化
    • 预氧化
    • 场区氧化
    • 栅氧化
    • 多晶氧化
    • 源漏氧化
  • 光刻通过光照将光掩模版的电路打印在光刻胶上
    • 工序
    • 硅片处理
    • 涂黏附剂
    • 涂胶
    • 前烘
    • 曝光
    • 显影
    • 后烘
    • 光源
    • 0.8um 高压水银灯 436nm
    • 0.35um i线 365nm
    • 0.13um UV光KrF 248nm
    • 0.10um ArF 193nm
    • 更窄 F2 157nm
  • 腐蚀或刻蚀
    • 湿法腐蚀腐蚀剂浸泡光刻后硅片
    • 精度不高
    • 干法刻蚀
    • 等离子刻蚀依靠气体辉光放电刻蚀
    • 反应离子刻蚀纵向刻蚀,精度较高
  • 去胶
  • 离子注入对Si衬底掺杂,改变电特性
    • 高能离子注入
    • 低能离子注入0.13um以下
  • 扩散退火氮气约1000度加热
  • 薄膜沉淀CVD工艺

假装做一个电子单词卡

背景

最近总能在淘宝刷到各个厂家的电子单词卡(如下图所示),作为一名电子工程师,感觉这个小玩意作为平时的产品设计练习会是个不错的话题。

从购买上来说,个人不是很推荐,理由如下:

  • 如果是购买给孩子使用,屏幕太小了,像素密度低,从商品照片里面看字体都很模糊。虽然是墨水屏,但是孩子们可能要贴近看屏幕,我认为不利于孩子们的视力。
  • 低成本墨水屏,没有背光,和在过亮或过暗的地方看书一样,不合适的光线依旧会导致视疲劳。

题外话 – 我目前在用的单词背诵组合

正式开始前,分享下我在使用的背单词组合:

  • Anki(Desktop+AnkiDroid)
  • 墨水屏安卓手机(海信A5Pro CC, 彩色墨水屏技术离实用化还有太远的距离,建议现阶段还是使用黑白屏)
  • 懒人支架,放在床头上夹住手机,保持平躺保护脊椎😄
  • 迷你手柄(如下图,按键还挺舒服)
    • 个人使用ABXY四个按键,竖过来可以握在手里

方案

淘宝的那种我也没有买实物,下面方案没有实际做出来,只从理论上判断可行性,现阶段没有实际制作的计划。

全体结构

Android APP

  • 每次同步时,同步当天单词表及字模(Flash寿命?)
  • 蓝牙升级
    • 固件来自服务器
  • 设置锁屏壁纸(个性化+蓝牙丢失后显示的联系方式设置)

固件

  • 功能一览
    • 蓝牙升级
      • WCH貌似有现成的解决方案(没用过😄)
    • 字库
      • 应该和OLED的字模用法是一致的
      • 需要区分语言,以便减小体积
    • E-INK驱动
    • 电源管理
      • 电量显示
      • 电量矫正
      • 充电指示
      • 低功耗设置
      • 按键唤醒
    • 壁纸(低功耗+蓝牙出发)
    • 单词同步
      • 压缩?
      • 增量?
      • 小数据库能跑动不?

硬件设计

我一般认为商品的价格,成本约60%,也就是说淘宝成品成本价格在70元上下。

猜测屏幕约40元,芯片+PCB+电池+外壳+按键30元

  • EINK屏幕
    • 最开始那个图的2.6寸屏幕其实不大,296×152像素的屏幕,在计算字模大小时候发现字真的很小。虽然是墨水屏,但是很担心小孩子们长时间使用这样的设备是否会对视力产生影响。个人还是更推荐黑白的墨水屏安卓手机或电子阅读器,一般几百元就可以搞定,并没有贵多少。
    • 题外话:我选择手机的一个理由一方面是当时没有这种设备,另一方面确实是因为字体比较大。
  • 锂电池容量和尺寸很难凭空想出来,不过可以参考目前在卖的方案尝试下
    • 充电电路网上遍地都是😄
  • USB串口
    • 烧录程序用
    • CH340N最小,应该够用
  • MCU – CH571F因为没有计划实际做,所以Flash容量不太好判断但是这个系列从datasheet上来看,很适合做这个。嘉立创商城价格约等于一瓶饮料
  • 接口
    • USB-C
  • 存储
    • 不太确定是否需要外挂存储芯片
  • 电阻电容MOS等
  • 按键
    • 开模的话可能要大批量才行
    • 遥感的十字按键看起来不错