标准版
#第六届立创电赛#PC性能监视器

创建时间:2年前

视频

  • 立创电赛《PC性能监视器》-个人和项目简介.mp4

  • 立创电赛《PC性能监视器》-功能演示.mp4

  • 立创电赛《PC性能监视器》-方案设计详解.mp4

描述

<h2>1.项目功能介绍</h2> <p>本项目实现了一个可以实时监控电脑状态的硬件设备。它拥有一块4.3寸的LCD彩色显示屏,可以实时监视CPU、内存、硬盘、显卡的实时状态,方便掌握电脑主要硬件的负载。既适合游戏玩家了解系统的瓶颈所在,也适合用来观察是否有非法的后台程序在长期占用电脑的资源(比如挖矿类木马程序)。</p> <p>同时,本项目也适合作为机箱美化的副屏使用。本项目使用的是上位机配合串口通讯的解决方案,仅需一根TYPE-C连接线就能工作,对比市场上现有的HDMI接口的小型显示屏+AID64之类的系统监控软件的解决方案,本项目拥有成本低廉,系统资源占用小,方便灵活的优点。市场上的HDMI方案虽然通用性强,但是作为副屏时一方面会浪费一个HDMI接口加一个用于供电的USB接口,另一方面还会加大显卡的压力,浪费系统性能。</p> <p>最后,因为整个系统的性能冗余比较充足,所以在开发者手中,本项目也可以作为一款开源的嵌入式GUI开发平台来使用。</p> <p><strong>本项目硬件部分100%使用立创EDA进行设计。</strong></p> <p><strong>因为本项目软件、硬件完全开源,可以随意浏览、下载本项目资源,或在此基础上进行二次开发。但是禁止商用</strong></p> <p><img src="//image.lceda.cn/pullimage/WzOp2JOmfqisCo3PT8ehdaC3jcdb4mK1g9Gkj31d.png" alt="image.png"></p> <h2>2.项目属性</h2> <p>本项目为首次公开,为本人原创项目。项目未曾在别的比赛中获奖。</p> <h2>3.开源协议</h2> <p>本项目完全开源,包括PC端的上位机代码和MCU端的代码。使用GPL3.0协议分发。禁止商用。</p> <h2>4.硬件部分</h2> <h3>显示系统</h3> <p>首先是面子问题。出于实用性,我们需要尽量在一个屏幕上显示更多的内容,所有我们不能使用过于小型的屏幕。但是屏幕太大也不好,太大的屏幕一方面会增加DIY的难度,提高整个系统的制作成本(屏幕的费用,PCB打样的费用,控制系统的费用等等),另一方面,也会造成桌面空间的浪费,做为机箱副屏使用时也会降低对机箱的兼容性。经过综合考虑,我选择了通用的4.3寸分辨率为480x272的LCD显示屏,面板材质为TN,硬件接口为RGB:</p> <p><img src="//image.lceda.cn/pullimage/DD5W2mYaCF8ebyYAAnqM9h2lHCo0vUKqjGoDvJNS.png" alt="image.png"></p> <p>此类显示屏是事实上的商业显示屏标准,在市场上很容易买到,价格也十分低廉。甚至可以从各种报废的设备中拆解得到(如各种媒体播放器设备)。</p> <p>480x272的分辨率虽然不高,但是在本系统中已经够用。4.3寸的大小,使得驱动板打样的费用非常便宜,同时在保证显示足够内容的基础上不会显得太大或者太小。</p> <p>由于此类显示屏使用的是恒流背光系统,所以我们需要一个恒流的背光驱动电路。在此,我选择了PT4103这款LED恒流驱动IC。PT4103是一款升压型的LED恒流驱动IC,拥有开路保护的功能,同时支持PWM调光,而且在3.3V的系统中即可正常工作,可以完全满足本项目的需求。</p> <p>关于驱动电流的选择,我并没有按照屏幕数据表上的设定使其工作在20mA,而是设定为10mA,这可以保护背光,同时减小整个系统的功耗。经过测试,10mA和20mA的背光亮度区别并不大。但是如果你在自己制作时使用了IPS屏幕,则应该使用标准的20mA驱动电流。</p> <p><img src="//image.lceda.cn/pullimage/Wmf7G9NFIsjv5MSp4juGOiwwD1O5v6m6VbNAZjbj.png" alt="image.png"></p> <h3>控制系统</h3> <p>由于屏幕使用的是RGB接口,而且对于嵌入式系统而言,这个屏幕的分辨率已经不低了。所以为了驱动这块儿屏幕的同时保证整个UI系统的流畅性,我们需要一款性能较高的MCU。由于本项目立项时,全世界的范围内正处于“缺芯”状态,各种型号的MCU不是没货就是价格大涨。经过综合的权衡后,这里选择了STM32F746ZG这款MCU作为整个控制系统的核心。此MCU带有LTDC控制器,可以非常方便的驱动RGB接口的显示屏。同时该MCU还带有DMA2D加速器,可以对UI系统的绘制提供加速,保证界面的流畅性。另外,由于该MCU相对比较冷门,所以价格还算可以接受。</p> <p><img src="//image.lceda.cn/pullimage/TG9W9AQcjzxI00VIj6ILVzjCXi6sOiwkUPJZWy0A.png" alt="image.png"></p> <p>由于F746ZG的定位是经济型MCU,所以内部的SRAM无法满足屏幕的显存需求,所以这里还添加了一颗型号为W9825G6KH的SDRAM作为系统显存使用。实际制作时,任何容量在8M以上,速度在108MHz以上的SDRAM都可以满足需求。</p> <p><img src="//image.lceda.cn/pullimage/ak6GSRydyCpaVpGif81YEKdexGOcT0z44AcnQXj5.png" alt="image.png"></p> <p>本项目使用MCU的内置Flash即可满足所以代码+资源文件的存储,但是为了后期的功能扩展,额外预留了NOR Flash的扩展电路。如果不需要进行高级功能的开发,此部分可以省略:</p> <p><img src="//image.lceda.cn/pullimage/FbX4BDuuc7MQVerVNwsfftkoRawh6acU3gjXo6HD.png" alt="image.png"></p> <h3>通讯系统</h3> <p>为了与上位机通讯,我们需要一款USBUART桥接芯片,在这里,使用经典的CH340E接口芯片即可,便宜稳定性能好。电路中额外设计了一颗RGB灯,可以用来指示通讯状态</p> <p><img src="//image.lceda.cn/pullimage/PeK0v31WYA42llxwUvvC9SUFxuG0aNHQIVt07f0k.png" alt="image.png"></p> <p>相关电路(为了防止意外的短路或者过载情况,还设计了有一颗自恢复保险丝)</p> <p><img src="//image.lceda.cn/pullimage/5mG7CAbDsPnWsUrbrLkcwAK4ygCPfFXKyTaRSZEl.png" alt="image.png"></p> <h3>供电系统</h3> <p>整个系统的功耗并不大,所以使用经典的LDO:AMS1117即可满足需求:</p> <p><img src="//image.lceda.cn/pullimage/NB0CIU6bbrkWGdgi9EF5tpoMxK7Okd8FcdoqNhBd.png" alt="image.png"></p> <h3>外围/IO系统</h3> <p>本系统设计了4个轻触按键用来提供对整个系统的控制,四个按键均为通用,功能由所在的UI界面决定:</p> <p><img src="//image.lceda.cn/pullimage/24sFIAsBJum2R39Xo9pfjACGG8O5Uj3aogCGOGHS.png" alt="image.png"></p> <p>RTC晶振和后备电池的设计,保证了电脑在关机的情况下,本设备也可以作为一款桌面时钟使用:</p> <p><img src="//image.lceda.cn/pullimage/AwpO5xV8HxdtyygjLjxMk48yMUeJq3jr7PybjM7L.png" alt="image.png"></p> <p>在早期的设想中,考虑到了高温和高系统占用率下的蜂鸣器报警功能,实际使用中发现,此功能过于鸡肋(且烦人),所以在最终代码中去掉了该功能。但是考虑到未来可能的功能开发,所以相关电路在硬件设计上依然保留:</p> <p><img src="//image.lceda.cn/pullimage/Zu7MIE17CyCJhEPuTxjgyGcRLAqdtrWWnsr31lnE.png" alt="image.png"></p> <h3>PCB设计</h3> <p>为了节省成本,本项目为双层PCB设计,如果你在实际制作时有更多的预算,推荐使用4层板,并且对SDRAM部分走线进行等长处理。</p> <p><strong>顶层(背面)</strong></p> <p><img src="//image.lceda.cn/pullimage/Ee0BoURXBvP7yOYF68K6xZdxl8ZWVAWjo08i9Ne9.png" alt="image.png"></p> <p><strong>底层(正面)</strong></p> <p><img src="//image.lceda.cn/pullimage/qeDH14cNJg7xvs0ArrQYU8dEufaJKtKmVJKdDGsI.png" alt="image.png"></p> <p><strong>3D模拟图</strong></p> <p><img src="//image.lceda.cn/pullimage/t1qX9YaU0etuRxoJae1m0yzUTnr9nJkBdF4VM5wT.png" alt="image.png"></p> <p><strong>各部分说明</strong></p> <p><img src="//image.lceda.cn/pullimage/4uFzpHoGYUsIOuzRcfUZN7iWAMr8a0nLkU4fWzfR.png" alt="image.png"></p> <h2>5.软件部分</h2> <h3>MCU端软件开发</h3> <p>本项目使用ST官方推出的免费IDE:STM32CubeIDE配合STM32 HAL库来开发。开发语言为C语言。编译器为IDE自带的GCC编译器。</p> <p><img src="//image.lceda.cn/pullimage/UkjFJsyd58iXzIUXCfE5V26oNIlMPc8497pJDeeY.png" alt="image.png"></p> <p>相较于Keil,CubeIDE的代码编辑器更为友好,与STM32的配合也更加流畅。</p> <p>因为本项目牵扯到了与上位机的通讯,所以为了方便开发,使用了开源的FreeRTOS系统框架。系统中设计了UI主线程、通讯线程、按键扫描线程和蜂鸣器控制线程(已废弃,仅为兼容性保留)共四个线程协同完成功能,线程具体信息如下</p> <p><img src="//image.lceda.cn/pullimage/XmBURxPU1ew2GCTFQblvmaRjQJSHNOLLFVaPfliT.png" alt="image.png"></p> <p>UI系统作为下位机开发终点,使用的是开源的LVGL库来实现:</p> <p><img src="//image.lceda.cn/pullimage/4ON8qfZ0NlFFtVcc21TgGjeMNG9DfKwbf54CsslM.png" alt="image.png"></p> <p>LVGL是一个强大的嵌入式UI框架,可以在内存不超过1M的嵌入式系统中提供可以媲美手机等高性能移动设备的UI显示体验。</p> <p>在本项目中,UI系统的结构如下:</p> <p><img src="//image.lceda.cn/pullimage/yN1J72RCcuknVPF9UVvTxR7fLqtetyVPUNC8meLy.png" alt="image.png"></p> <p>其中待机界面为系统上电,但未与PC上位机连接时显示的界面,此时显示内容为时钟。因为大部分的PC主板都可以设计为关机时继续为USB提供电力,所以此功能使得关机后,本设备依然可以作为一个时钟来使用。第一次上电并建立通讯后,会自动从待机界面跳转至概览界面。但是在任何其他界面断开连接进入待机界面后,再次恢复连接时,会自动回到断开连接之前显示的界面。</p> <p>此界面的壁纸可以在代码中替换。</p> <p><img src="//image.lceda.cn/pullimage/liN6qyjzB3I8LFksbE7iPMZylHnXSWIKsImSxJIb.png" alt="image.png"></p> <p>在与上位机成功建立通讯后,系统会自动跳转至概览界面,在此界面下,可以用图标的形式同时查看CPU、内存、硬盘和GPU的主要状态,如CPU/内存占用率,硬盘的活动时间比例等。除了待机界面外的所有界面顶端都有一个状态栏。状态栏除了显示对应四个按钮在当前界面下的功能外,还提供了系统时间显示功能(这在运行全屏程序比如游戏时是很有用的)。</p> <p><img src="//image.lceda.cn/pullimage/UJIdCyi1WlzMVBWFsRJxujZeFa8IixB2UBxUn9Gu.png" alt="image.png"></p> <p>在此界面下,可以选择对应的图表进入详情查看界面,显示关于此硬件更多,更加详细的数据。此处显示了CPU的名称,300秒内的使用率,速度和温度:</p> <p><img src="//image.lceda.cn/pullimage/zWK86A0rTzceGtcfQ7kDOhtXtTrMXohN6WOQKyqw.png" alt="image.png"></p> <p>在概览界面下,也可以进入设置界面,设置屏幕的亮度:</p> <p><img src="//image.lceda.cn/pullimage/d4z7eT4DRXY4VRbS01HSPbVLVlgNcVYl3FaGjXAm.png" alt="image.png"></p> <h3>PC端上位机部分</h3> <p>PC端上位机部分是整个系统的开发最大的难点,因为需要获取硬件的状态并传输至设备端,而读取硬件的信息已经属于比较底层的部分了,操作系统的库中并未显式提供各项操作的API。我并没有类似的开发经验,所以刚开始的时候一筹莫展。在尝试了驱动法、WMI查询法之后,偶然发现了开源的OpenHardwareMonitor项目,这个项目提供了一套方便的,可以访问底层硬件驱动信息的API框架,并且提供了一个示例WinForm程序,这使得开发的难度大幅度下降。</p> <p>最终,本项目上位机部分使用C#开发,使用OpenHardwareMonitor项目作为底层驱动框架。因为上位机不需要太多的功能,所以在UI框架的选择上放弃了WPF而是使用了经典WinForm框架以最大成都减小系统消耗,加快启动速度,并防止出现监控软件自己占用了太多系统资源的情况。</p> <p>开发环境使用的是经典的Visual Studio 2019社区版,开发Win上的程序没有比这个更合适的了。</p> <p><img src="//image.lceda.cn/pullimage/FeLTH1k4DtJC8YJVVzpTMxOtwbml2kbDVeQRteyc.png" alt="image.png"></p> <p>上位机的界面很简单,通过选择设备所在的串口,点击开始服务/停止服务即可。这个界面可以完全隐藏到系统后台中,仅在系统栏中展示。</p> <p><img src="//image.lceda.cn/pullimage/Nrik95TUq8WO4KyVrabxKFPvudgCK9O83mmSZIov.png" alt="image.png"></p> <p>由任务管理器可以看到,最终的软件运行消耗是非常小的:</p> <p><img src="//image.lceda.cn/pullimage/U1dpTn1ydOHMlDPcGXjBF1wA61HL9lddffTxiVW3.png" alt="image.png"></p> <p><strong>需要注意的是,因为需要访问底层驱动,所以PC端服务的运行需要管理员权限。</strong></p> <h2>6.BOM清单</h2> <p><img src="//image.lceda.cn/pullimage/CR6NuKLcaoTXS8feeTFoT6Qr1EwS5JwhGb69abNV.png" alt="image.png"></p> <h2>7.大赛LOGO验证</h2> <h3>空板</h3> <p><img src="//image.lceda.cn/pullimage/Nhr7oARwfH9IFNvmd9GQpnTV6lUQAXXOw2KVqE15.png" alt="image.png"></p> <h3>焊接成品</h3> <p><img src="//image.lceda.cn/pullimage/5X2pmG4ycvYo1bOaxUiNajvX5UiXg1ACtC2rQwLy.png" alt="image.png"></p> <h3>更多图片</h3> <p><img src="//image.lceda.cn/pullimage/L1wvz8HnLfVPfELXFZzIuaKcew9VJ2IJ66qwjoq7.png" alt="image.png"></p> <p><img src="//image.lceda.cn/pullimage/ySYRJYaT9qDXAlhQNrxqv5as5c4LB07Uv9d3EAjd.png" alt="image.png"></p> <h2>其他链接</h2> <p><a href="https://www.freertos.org/" target="_blank">FreeRTOS - Market leading RTOS (Real Time Operating System) for embedded systems with Internet of Things extensions</a><br> <br> <br> <a href="https://lvgl.io/" target="_blank">LVGL - Light and Versatile Embedded Graphics Library</a><br> <br> <br> <a href="https://github.com/openhardwaremonitor" target="_blank">Open Hardware Monitor (github.com)</a></p>

文档

SCH_性能监视器_MCU

SCH_性能监视器_存储

SCH_性能监视器_显示

SCH_性能监视器_IO&POWER

PCB_PC性能监视器

BOM

ID Name Designator Footprint Quantity
1 CR1220 BAT BATTERY-2 1
2 0.1u C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C19,C22,C23,C24,C25,C26,C27,C28,C29,C31,C32,C36,C39,C40,C41,C42 C0402 30
3 20p C15,C16 C0402 2
4 5p C17,C18 C0402 2
5 2.2u C20,C21 C0402 2
6 10uF C48,C46,C47,C38 CAP-SMD_L3.2-W1.6-R-RD 4
7 10uH L1 L0805 1
8 K2-3.6×6.1_SMD NRST KEY-SMD_2P-L6.2-W3.6-LS8.0 1
9 NC R1 C0402 1
10 1k R2,R19 C0402 2
11 0 R3 C0402 1
12 25MHz X1 OSC-SMD_4P-L3.2-W2.5-BL 1
13 32.768KHz X2 MC-306_4P-L8.0-W3.2-P5.5-BL 1
14 STM32F746ZGT6 U1 LQFP-144_L20.0-W20.0-P0.50-LS22.0-BL 1
15 1u C30 C0402 1
16 10k R4,R7 C0402 2
17 W9825G6KH-6 U2 TSOP-54_L22.2-W10.2-P0.80-LS11.8-BL 1
18 GD25Q64CSIGR_C691901 U3 SOIC-8_L5.3-W5.3-P1.27-LS8.0-BL 1
19 10uF C33 C1206 1
20 0.1uF/35V C34 C0805 1
21 10uF/35V C35 C1206 1
22 B5819W_C181206 D1 SOD-123_L2.8-W1.8-LS3.7-RD 1
23 2.2uH L2 IND-SMD_L4.0-W4.0 1
24 FPC 0.5MM 40P Pull type H2.0mm Pick up LCD CONN-SMD_AFC07-S40ECC-00 1
25 10k R5 R0805 1
26 10 R6 R0805 1
27 PT4103B23F U4 SOT-23-6_L2.9-W1.6-P0.95-LS2.8-BR 1
28 FST-9650B-3V BUZZER BUZ-SMD_L9.6-W9.6-LS10.0-R 1
29 47uF C37,C43,C44,C45 CAP-SMD_L3.2-W1.6-R-RD 4
30 0.5A/6V F1 F0805 1
31 LED-RGB-3528 PWD LED 3528-4PIN 1
32 WST3400 Q1 SOT-23-3_L2.9-W1.3-P1.90-LS2.4-BR 1
33 100 R8,R20,R21 C0402 3
34 5.1k R13,R14 C0402 2
35 TS-1010A-B SW1,SW2,SW3,SW4 SW-SMD_TS-1010A-B 4
36 2.54-5P SWD CONN-SMD_2.54-5P-WT 1
37 CH340E U5 MSOP-10_L3.0-W3.0-P0.50-LS5.0-BL 1
38 AMS1117-3.3 U6 SOT-223-3_L6.5-W3.4-P2.30-LS7.0-BR 1
39 TYPE-C-31-M-12 USB USB-C_SMD-TYPE-C-31-M-12 1

附件

附件名 下载
Schematic_PC性能监视器_v1.0.pdf
Gerber_PCB_PC性能监视器_v1.0.zip
BOM.xlsx
MCU软件.hex
上位机程序.zip
STM32F746ZG-Perfmon.zip
PerformanceMonitorServerWinForm.zip

评论(16)

  • 表情
    emoji
    小嘉工作篇
    小嘉日常篇
  • 图片
成功
工程所有者当前已关闭评论
立创电赛 回复
<p><span class="colour" style="color: rgb(34, 34, 34);"><strong>恭喜入围“航顺HK32MCU杯”第六届立创电子设计开源大赛前八,更多详情见:</strong></span><a href="https://diy.szlcsc.com/posts/2745c50726da4cbca856be6e52dd7383" target="_blank">https://diy.szlcsc.com/posts/2745c50726da4cbca856be6e52dd7383</a><span class="colour" style="color: rgb(34, 34, 34);"></span></p>
liuyufanlyf 回复
<p>很不错的创意</p>
hk005 回复
<p>强,向高手 学习</p>
xc777 回复
<p>这个好!可以照着作一个自己使用吗?</p>
立创电赛 回复
<p>恭喜您在“航顺HK32MCU杯”第六届立创电子设计开源大赛中获得三等奖</p>
weiye_lu 回复
<p>"航顺HK32 MCU杯"用STM32都能参赛的吗</p>
micespring 回复
<p>大赛没有限制使用的MCU类型。我本来是准备用MCU屏+航顺的F4做的,但是一直没货。</p>
Lance 回复
<p>楼主您好!在复刻您的项目中,上位机使用Visual Studio2017去运行的时候发现读取CPU温度和GPU的温度失败,还想请问一下楼主这个问题如何解决,使用Visual Studio时直接在int? cpuTempValue = (int?)cpuPackageTempertureSensor.Value;上报错。复刻项目想使用自己的屏幕,但是由于楼主是使用了操作系统,并不好从单片机层面去获取通信协议,只好从上层上位机开始自己重写协议,但是碰到获取CPU温度报错的情况发生,还请楼主给个解答!谢谢楼主!</p>
micespring 回复
<p>你看一下是不是以管理员权限运行的Visual Studio,因为需要读取驱动这种底层操作。</p>
micespring 回复
<p>请随意</p>
Lance 回复
<p>使用了管理员权限运行的Visual Studio,注释掉获取温度部分就成功了,但是不知道为什么就是卡在获取温度那边!</p>
micespring 回复
<p>我也不太清楚,可能是openhardware的兼容性问题吧。后面我在想能不能通过系统的API来获取这些参数。</p>
Lance 回复
<p>好吧 谢谢楼主的帮助,我回头再试试,倒是没有直接试过生成的EXE,都是从Visual Studio启动的 我再研究研究看什么问题 要是解决了的话我还会来知会一声!</p>
oldwang717 回复
<p>amd的cpu运行这个工程就有问题,如果是intel的cpu就没问题</p>
micespring 回复
<p>这个真的挺不好意思的,毕竟我的电脑是intel的,没法针对AMD进行测试</p>
oldwang717 回复
<p>12代的intel 12700也会报错,可能openhardware不支持新版的cpu?</p>
goToTop
svg-battery svg-battery-wifi svg-books svg-more svg-paste svg-pencil svg-plant svg-ruler svg-share svg-user svg-logo-cn svg-double-arrow