作为一名硬件工程师,时常需要使用串口进行数据接收、设备调试等工作,而在使用串口转USB设备时,相信大家经常遇到一个问题“这个设备对应的COM号是多少?”
众所周知该问题可以通过查看设备管理器解决,虽然步骤繁琐但尚可接受,而如果需要同时使用多个串口,将COM号与硬件串口对应起来并不容易,使得调试工作还没开始就被浪费掉不少时间。
因此,本项目应运而生,采用4to1串口HUB+MCU的方案,只需将设备连接电脑,单片机将配合上位机脚本对串口进行扫描,自动将串口硬件对应的上位机COM端口号在本设备上进行显示,节约您宝贵的时间。核心功能4路串口集线器,可通过USB转4路ttl串口显示每个对外串口所对应的电脑COM端口号在电脑USB数据异常断开连接后及时提醒用户
本项目硬件结构如下:
其中CH344Q负责TTL串口转USB业务,MCU负责通信路径切换并与上位机进行通信,其中MCU为来自武汉芯源半导体的通用高性能MCU:CW32F003E4P7。
系统内部供电由一路DCDC从5V转3V3,对外电源来自USB5V并通过LDO输出3V3。
1、USB转串口
本项目核心为CH344Q芯片实现USB转串口功能,一路USB可扩展为4路串口。
芯片主要特性如下(截图自芯片数据手册):
CH344Q芯片外围电路设计基本参考原厂设计,如下:
芯片的ACT引脚用以指示USB连接状态,芯片得到供电但未通信成功时为高电平(此处添加R99上拉电阻是为了避免芯片初始化过程中引脚电平不稳定造成单片机识别错误),芯片通信成功时ACT引脚为低电平,引脚串接一个10Ω保护电阻连接至单片机引脚用以读取USB连接状态,从而可以在USB连接错误并且断线超时通过蜂鸣器及时提醒用户。
串口通信速率实测:
本设备的串口理论最高支持6M波特率,实测4通道可同时进行460800波特率下的正常通信,由于设备限制,暂未测试更高速率。
2、单片机及外设
考虑到本项目可能需要在工业控制/调试等复杂电磁环境中使用,因此选用了抗干扰能力较强的CW32系列单片机,结合项目对IO数量、外设、成本等实际需求,最终选用了CW32F003E4P7这款单片机。
注:若项目对单片机IO数量要求较少,则可以选择同系列的CW32F003F4U7或CW32F003F4P7。其中E4P7为21路IO,F4U7和F4P7为17路IO,他们在其他性能上大致相同。
CW32F003E4P7为来自武汉芯源半导体的通用高性能MCU,其内核为ARM® Cortex®-M0+ ,最高主频48MHz。
注:MCU具体资料可以访问武汉芯源半导体官网获取:CW32F003E4P7-武汉芯源半导体官网 (whxy.com)
该MCU拥有宽电压工作范围,工作电压:1.65V 至 5.5V,可以直接采用USB5V进行供电,本项目中考虑到需要与屏幕等外设进行通信,为避免出现通信兼容性问题,采用常规3.3V供电。
该MCU内置20K字节FLASH,数据保持25年@85℃、3K 字节RAM、22字节OTP存储器,本项目显示页面较多,需要使用字库以便进行UI编程,较大的内置FLASH可以存入更加精细的字库甚至是多套字体,代码解析可以查看下文中的“UI交互”章节。
考虑到本项目对时钟精度的要求相对不高,因此采用CW32F003E4P7的内部RC振荡器作为时钟源,其内置48M、32K、10K、150K等多个振荡器。在编程时,对时序严格的串口通信部分需要采用硬件定时器、其他逻辑部分可以采用软件定时器,代码解析可以查看下文中的“定时机制”章节。
该MCU的通信接口包括两路低功耗UART(支持小数波特率),其中一路作为与电脑的通信接口、另一路作为调试接口;一路12Mbit/s的SPI 接口,用以刷新显示屏,一路1Mbit/s的I2C 接口(暂未使用),完美满足项目需求。
调试接口采用1.25间距插座,调试接口与本人其他项目相同(不包括2023年前的部分项目),包括有SWD+UART+RST引脚。在不焊接调试接口插座的情况下可兼容1.25/1.27探针烧录,便于批量化生产。
本项目选用了一款0.96寸TFT彩屏,使用SPI与单片机进行通信,使用了一颗数字三极管进行屏幕亮度控制,相较于传统的三极管+MOS管方案,外围电路更加简洁。为降低设备使用时的功耗设计有自动屏幕亮度调节,可在COM端口号扫描完成的一分钟后自动降低屏幕亮度,该“暗屏时间”可以自行设置,也可以关闭自动熄灭屏功能。
单片机的其他外设还包括两颗按键、一颗蜂鸣器。
需要注意的是,本项目使用了一颗“压电式”无源蜂鸣器,相较于传统的“电磁式”无源蜂鸣器只需要一颗三极管就能驱动发声,压电式蜂鸣器必须使用推挽电路进行驱动才能使得压电陶瓷基于逆压电效应进行发生。由于本项目对音量的需求不高,因此采用5V电压驱动蜂鸣器,若希望压电式蜂鸣器发出较高音量(这也是压电式蜂鸣器的特色),则需要专用的驱动电路进行升压控制。
3、通信路径切换电路
通信路径切换电路是本项目的核心,为了更好的理解本项目的实现逻辑,首先需要理解两点:
(1)CW32主控芯片仅控制“通信路径切换”相关逻辑,而“USB转TTL电路”由CH344Q控制,两者业务相互独立,因此在“通信路径切换电路”进行切换操作的时候,不会对“USB转TTL电路”的工作造成影响,因此CW32可以在切换路径后是使用CH344Q的任一一路串口与上位机进行通信;
(2)单片机在扫描时的串口号为对外串口号,因此CH344Q芯片的串口号与对外串口号不同不影响扫描与最终扫描结果,修改COM号本对应关系仅为优化走线,避免绕线;
下面为通信路径切换电路图,及通信模式真值表:
如上图所示,四个串口的通信路径切换电路完全一致,各自由一颗4052“双刀四掷”模拟开关芯片进行切换,其中公共端为CH344一端,也就是HUB端,4052的A/B两个通道分别对应TX/RX,正好是一组串口,而“四掷”的四端分别为:
00:状态0,TX、RX都使用200K电阻接地,通信处于关闭状态。在早期设计中,采用了10K电阻接地的方案,发现会在4052切换时在串口发出一组00数据,在高速扫描时会向上位机发送大量无用数据造成干扰,因此改为200K电阻降低电平拉低的速度避免发送无用数据造成通信干扰;
01:状态1,当前通道的TX、RX分别对接单片机的RX、TX引脚,使单片机可以使用当前通道的“USB转TTL”功能与上位机(电脑)通信;(需要注意的是,任一时刻只能有一组串口与单片机串口通信,否则将造成通信错误或无法通信)
10:状态2,当前通道的TX、RX使用0Ω电阻短接,处于内部回环状态。不过由于4052有导通电阻,因此实际在短接情况下RX、TX间存在约100Ω串阻;
11:状态3,TX、RX与对外接口连接,即正常通信模式;
4052的状态控制IO也就是A0、A1被默认下拉,单片机可以使用IO控制,4片4052的A0为统一控制,而A1可以独立控制。通过这样的方法,我们可以在保证每一路串口都能够与单片机单独通信的同时,节约用以状态控制的IO。而如果需要制作8路串口集线器,则可以使用位移选择器芯片对A1轮询,控制其电平。
4、电源
设备具有两套独立的电源,一套5V-3V的DCDC电源负责对内供电,另外一套具有限流保护的5V及3.3V电源负责对外供电。
对外电源设计有MT9700进行300mA的限流保护,防止外部设备异常或短路时损坏电脑。如果外接设备超载会触发保护,“电源输出”指示灯将熄灭用以提示。大部分电脑的USB接口保护电流在0.5-1A,因此即使本设备的对外5V发生短路也不会造成USB保护,但部分电脑的保护阈值较小,会造成USB口进入保护模式,这种情况下USB数据线被关断,您会发现设备的PWR指示灯亮起,但USB指示灯熄灭,此时蜂鸣器会报警,这种情况下需要断开设备与电脑的连接并重启电脑,USB口遍可恢复正常工作。
对外电源还设计有LDO用以输出一路3.3V,便于用户在调试单片机等设备时使用。需要注意的是,3.3VOUT上级电源为5VOUT,因此与5VOUT共享输出功率限制,任一一路输出电源超载都会触发保护。
MT9700的使能引脚采用3.3V进行上拉,配合使用大电阻对电容充电控制输出使能引脚,使得对外电源输出时间晚于板载设备启动,电源上电时序图如下:
其中1通道为USB电源(5V),过冲情况取决于供电设备(电脑),与本设备无关;2通道为3.3V;3通道为单片机RST引脚;4通道为5VOUT(M9700输出),5VOUT输出时间晚于板载设备启动保证外设按顺序启动。
5、对外接口
设备使用90°排针对外连接,使用标准2.54间距,可使用杜邦线,也兼容XH2.54等多种常用连接方式。
接口设置有TVS保护管,防止因为用户触摸时的静电损坏设备,提升设备可靠性。
每组串口设置有独立的TX、RX信号指示灯,其中TX绿色、RX蓝色,便于快速识别通信状态。每组指示灯都有独立的磁珠,防止在高速通信时将高频干扰耦合至电源线路。
如上图所示,每组4P排针的中间两根针为TX、RX,而外侧的两根针为GND
这样双侧都有GND管脚的设计是为了兼容不同的线序,提升用户体验。
模块背面印有引脚功能:G=GND,T=TX,R=RX 。
开源链接:
https://oshwhub.com/heyh/comportnumber-visualization-hub?
扫码加入QQ群 3群| 610403240