3D打印机小型彩屏交互方案-WT2606B模组跑UI实战
现在市面上不少3D打印机还在用12864那种段码液晶屏,蓝底白字,能显示的温度和进度信息很有限。稍微高端一点的机器上了全彩TFT屏,体验一下子就好很多,但很多方案是用主控MCU直接驱屏,占了大量算力和Flash空间,搞不好切个圆角都掉帧。有些厂家想加彩屏但不想换主控,也有些想把屏和主控解耦方便后续迭代UI,这时候就需要一个独立的屏显芯片来干这个活。
WT2606B就是干这个的。
WT2606B芯片是个什么东西
WT2606B是唯创知音做的一颗TFT屏显SoC,定位是人机交互显示方案,你把图片和视频素材丢进去,MCU通过串口发几条指令就能控制屏幕显示什么内容。芯片自己跑UI,不占你主控的资源。
核心参数,RISC-V 140MHz内核,128Mbit Flash存素材,供电2.8到4.5V,QFN40封装5×5mm。图形加速器支持DMA、旋转、混叠、缩放,能推到480×480分辨率30帧刷新。双串口设计,一路跟主控MCU通信,一路可以接语音芯片。带DAC音频输出,能播提示音。27个GPIO,待机电流小于100微安,关机小于5微安。工作温度负40到正85度。
QFN40的封装不大,塞进3D打印机控制板上面没什么压力。128Mbit换算下来16MByte,对UI素材来说够用了,存几百张界面图加上几段开机动画绰绰有余。
屏幕怎么选
芯片支持QSPI和SPI两种接口的TFT屏,分辨率从240×296到410×502都可以跑。3D打印机上最常见的是3.5寸到4.3寸的TFT屏。做桌面级机器的话,240×296或者320×385的分辨率够用了。SPI接口走线少一些但刷新速度不如QSPI,如果追求流畅度优先选QSPI接口的屏。软件层面可以自动适配分辨率,不用改代码。
整个系统怎么连
WT2606B有个双串口的设计,这个对3D打印机方案来说挺关键的。主串口接3D打印机的主控MCU,另一个串口可以接语音识别芯片或者别的模块。MCU只需要一个串口就能同时控制显示和接收语音指令。
管脚连接上,MCU的TX接WT2606B的RX1,MCU的RX接WT2606B的TX1。RX1和TX1是硬件DMA收发,通信效率比普通IO口模拟串口高不少。INT1脚接MCU的一个GPIO,低电平的时候走串口透传模式,高电平的时候才响应控制指令。INT2脚默认低电平,高电平表示有透传数据过来。BUSY脚控制功放使能,播放音频的时候才打开功放,省电也省噪。
QSPI接口的D0到D3、CLK、CS直接接屏幕对应的脚就行。BLK脚接屏幕背光控制,可以软件开关背光,也能用D5指令做PWM调光。如果3D打印机上有个呼吸灯指示打印状态,D5指令能输出3路10KHz的PWM,直接拿来用。
通信协议是标准UART,3.3V TTL电平,默认波特率115200。数据格式1位起始位、8位数据位、无校验、1位停止位。每条指令以7E开头EF结尾,中间是长度、扩展码、代表码、命令码、参数和校验码。
3D打印机UI怎么设计
3D打印机的UI页面其实不算多,但每个页面信息密度不低。我理了一下典型页面。
**开机动画**。用视频播放功能,开机的时候播一段2到3秒的品牌动画。WT2606B支持单次播放、单视频循环、全部视频循环三种模式,开机动画用单次播放就行,播完自动进入主界面。
**主菜单**。文件选择、预加热、设置、关于这几个入口。用图片堆叠功能做,背景图加几个图标按钮。D9指令最多支持1个背景加49个图标,对一个主菜单来说绰绰有余。图标位置可以自定义坐标,想做几宫格就几宫格。
**打印状态页**。这是最核心的页面。喷头温度、热床温度、打印进度、当前层号、剩余时间,这些信息需要实时刷新。用D9自定义图标位置的指令来做,把温度数字、进度条、层号都当成图标贴在背景图上面。MCU拿到新数据就发D9指令更新对应位置的图标。
举个例子,喷头温度从180度升到200度,你提前做好0到300度每个数字的图片素材,MCU算出当前温度对应的图片索引,用D9指令把图标贴到固定坐标就行。进度条也同理,做好不同百分比的进度条图片,按进度切换。
刷新的时候可以选5种显示模式,直接刷新、下进、上进、右进、左进。温度数字这种频繁更新的用直接刷新就好,页面切换的时候可以用左进或者上进,视觉效果好一些。
**设置页**。温度调节、打印速度、风扇转速这些。和打印状态页类似,用图标加背景的组合。调节的时候可以用D5的PWM输出做个呼吸灯效果,正在调哪个参数就闪哪个。
**二维码配网页面**。3D打印机要联网的话,手机扫二维码配WiFi是最方便的。D4指令可以直接在屏幕上显示二维码,字符串最长199个字符,放一个WiFi配置链接完全够。手机扫完码跳转到配网页面,输完密码传回MCU,整个过程比在屏幕上一个字符一个字符选要快太多。
**异常提示**。断料、堵头、温度异常这些情况,弹一个全屏提示图加一段提示音。A0指令播音频,D0指令切到对应的提示图片,两个指令一起发就行。
**打印完成**。播一段完成动画加提示音,然后进待机。
串口指令实操
3D打印机UI最常用的几条指令,我挑出来逐个讲。
**D0 表情以及图片播放**。这是最核心的显示指令。参数1是图片索引两字节大端,参数2是播放速度0到15,参数3是显示模式0到4,0直接刷新,1下进,2上进,3右进,4左进,参数4是推动速度0到10。比如要显示第7张图片,用右进方式,推动速度10,发7E 00 0B FF 02 D0 00 07 02 03 0A F2 EF。芯片收到后返回7E 00 07 FF 02 D0 00 D8 EF,反码00表示执行成功。
**D9 自定义图标位置**。往屏幕指定坐标贴图标。参数是图标索引加x坐标加y坐标,每组6字节,最多49个图标加1个背景。背景可以是动图,但速度不可调,默认8。比如在第0行第0列放第33号图标,在坐标(182, 182)放第115号图标,一条指令搞定。
**D3 清屏**。直接黑屏,停止正在播放的表情进入黑屏状态。切页面的时候可以先清屏再显示新页面,避免残影。
**D7 屏幕背光开关**。1打开0关闭。3D打印机空闲的时候可以关背光省电,有操作再打开。
**A0 播放音频**。参数是音频索引,从1开始,两字节大端。按键提示音、报警音、完成提示音都能用这个。
**AE 音量设置**。0到31级。晚上打印可以把音量调小。
**D4 二维码显示**。参数1是字符串总长度,参数2是二维码大小1到255,参数3是字符串内容。直接传一个URL进去就行。
**D5 占空比设置**。3路PWM输出,频率10KHz。参数第一个字节表示设置哪路PWM,按位与判断,0x1是PWM1,0x2是PWM2,0x4是PWM3。第二个字节是占空比。用来做呼吸灯或者背光调光都行。
**D2 暂停继续播放表情**。参数1播放0暂停。播放动画的时候可以暂停,比如开机动画播到一半用户按了按键要进系统。
这里有个实际要注意的点。D0指令的图片索引是固定的,素材在Flash里的存储顺序就是索引顺序。所以制作素材的时候要规划好编号,哪些是背景图、哪些是图标、哪些是动画,分开编号段。后面要加新素材的话,可以用唯创填充工具提前预留位置,不用重新刷整个Flash。
还有一个容易踩的,D0指令返回的反码能告诉你具体哪里出错了。01是索引超过文件数量,02是速度范围有误,03是表情数据域有误,04和05分别是参数3和参数4错误。调试的时候盯着返回码看,比瞎猜效率高很多。
素材制作和升级
图片素材用唯创的图片转换工具转成BIN文件。支持的格式有GIF、PNG、JPG,其中GIF是动画。转换的时候有个选项要注意,背景图选不透明,压缩率高一些。图标选需要透明,这样叠图效果才是透明的。
转完BIN文件之后,用程序升级工具合成一个.wtui文件,这个文件不能大于14M。合成的时候动画BIN文件一定要放在前面,按文件名排序。命名的时候前面加数字前缀,01_xxx.gif、02_xxx.gif这样排,不会错。
后续要单独更新某张图片或者某个视频,不用重新刷整个Flash。用图片视频升级功能,选要替换的BIN文件,改一下编号就能升级。双击编号栏可以更改升级编号,对指定编号图片进行更新,注意编号不能大于已存在的文件数量。这个对3D打印机产品来说挺实用的,比如换了新UI主题,只更新变化的部分就行。
OTA也支持,通过串口发FD握手信息,再用F0推固件数据包。FD指令的固件内容分四种,0x01是程序,0x02是单个表情,0x03是全部表情加程序,0x04是全部表情。F0每包512字节,从包序号0开始推,芯片确认后再发下一包。3D打印机联网之后,有新UI可以直接推给用户。
还有一个FE指令可以查询单个表情包占用的空间大小,返回四个字节大端法。在规划Flash空间分配的时候用得上。
文件填充工具也提一下。如果你计划编号1到16放GIF,但实际只用了1到10,想把后面新增的GIF直接放在11到16上,可以用这个工具生成预估大小的BIN文件临时占位。后续更新时用图片视频升级功能替换就行,填充后的BIN文件不会失去原有的显示效果。
功耗管理
3D打印机不工作的时候,屏幕可以关掉省电。WT2606B有两种低功耗模式,关机模式小于5微安,待机模式小于100微安。待机模式下能直接接收指令快速进入工作状态,初始化默认就是待机。
实际用的时候,打印完成或者用户长时间没操作,MCU发D7关背光,然后让芯片进待机。下次有按键或者开始打印,发个指令就能唤醒,屏幕很快就能亮起来。对桌面级3D打印机来说,这个待机功耗基本可以忽略。
几个坑
**素材编号**。一定要规划好编号段。把图标和背景图混着编号,后面加新素材的时候位置全乱了,只能重新刷整个Flash。建议背景图从1开始编号,图标从某个大数开始,比如1000,动画从另一个段开始。这样后续扩展不会打架。
**动画文件顺序**。合成.wtui文件的时候,动图BIN文件必须放前面,按文件名排序。这个规格书里特意强调了,顺序不对升级会失败。
**D9图标数量**。最多49个图标加1个背景。如果界面元素超过49个,就要拆成多个页面或者合并一些图标。3D打印机的打印状态页信息比较多,设计界面的时候要算好图标数量,别到时候发现放不下。
**透传模式**。INT1脚低电平是透传模式,高电平才是控制模式。如果你的MCU上电默认输出低电平,芯片就一直在透传模式,发什么指令都没反应。初始化的时候先把INT1拉高,这个搞反了能调一天。
**Flash容量**。128Mbit是16MByte。看着不少,但如果存了很多高清动画和大量界面图,也会满。做素材的时候控制好图片分辨率和颜色深度,GIF动画帧数别太多。用FE指令查一下每个表情包的实际占用,心里有个数。
**透明处理**。图标转BIN文件的时候一定要选需要透明,不然叠在背景图上面会带一块白底。背景图选不透明就行。这个搞反了界面会很难看。
小结
WT2606B做3D打印机的彩屏交互方案,核心优势是MCU零负担。你不用在主控上跑复杂UI框架或者写一堆屏驱代码,串口发几条指令就完事。128Mbit的Flash够存大量UI素材,双串口设计让显示和语音可以并行,OTA支持后续UI迭代。QFN40的封装小,塞进现有控制板不费劲。
如果你正在做3D打印机的彩屏升级,或者新机器不想用主控直接驱屏,这颗芯片值得试一试。规格书V1.06版本的指令集已经很完善了,图片、视频、音频、二维码、PWM、OTA这些场景都覆盖了,基本不用写什么底层代码就能把UI跑起来。当然这颗芯片原厂也提供配套的UI设计,可以直接让原厂帮忙来完成这些配套的工作。
