描述
<h1><strong>USB-Meter-Pro 项目说明</strong></h1>
<h2><strong>概述</strong></h2>
<hr>
<p>立创训练营|立创电子设计大赛作品,作品完成于2022/08/26。<br>
本作品使用国民技术N32G430C8L7作为主控MCU,其余主要元器件有TFT彩屏,W25存储芯片,ina199电流采样芯片,DCDC降压芯片等。实现typec类接口的消费产品的电流电压检测,电压表,小游戏机等功能。硬件设计学习参考至开源平台的诸多大佬,程序独立设计完成,体积较为小巧,外观也还凑合。
<img src="//image.lceda.cn/pullimage/aM4YupupbvOTUnO79R0H2ezEiriC8lQ3QLq0Hp4y.png" alt="1.png">
<br></p>
<h2><strong>功能介绍</strong></h2>
<hr>
<ol>
<li>上电后会显示主菜单栏目,功率计上方内嵌了两个轻触按键(后面简称“上左右键”),短按可以上下切换选择光标位置,右下方内嵌按键(后面简称"下键")短按进入所选功能界面,在对应功能界面长按下键均可返回至上一级菜单; <img src="//image.lceda.cn/pullimage/6vIq5aiLA8R0uhEiABozjuKDo1JSvUw6RKsPAvh3.png" alt="2.png"></li>
<li>[power meter],对应type-c功率计功能,界面显示充电电流电压(配有对应颜色曲线显示变化波动)、充电功率、充电时间,以及采样时间间隔(upd)和曲线展示的时间范围(range),并且可通过上左右键改变采样时间间隔及其对应曲线时间范围(短按加减时间,长按可多倍快速加减时间); <img src="//image.lceda.cn/pullimage/p4njA0E4zP7FwIBo1ZNLiqqwLVtDJWZ9NiXWiL1z.png" alt="3.png"></li>
<li>[play game],字面意思“game”,此为摸鱼功能,参考谷歌恐龙小游戏设计的简单游戏,恐龙不停奔跑,玩家需要让恐龙跳跃(上右键)避开路上的仙人掌障碍物,玩家进行的时间越长,得分会越高,且障碍物移动速度也会不断加快以增加游戏难度。游戏结束后会自动保存本次成绩,可进入“record”页面查看成绩,系统会记录若干次最新成绩,以及历史最高成绩,存储在w25芯片中,掉电不丢失; <img src="//image.lceda.cn/pullimage/JwOdyx4aoYXgQyF61HJUBzec6HXV5w1KfanKcskX.png" alt="4.png"></li>
<li>[ex voltage],电压表功能(0-30V),功率计预留弯排针侧面引出调试下载接口以及一个pwm输出口(暂时未开发)和adc电压检测引脚,通过两根公对母杜邦线连接gnd和adc即可当作简单的电压表使用且能曲线显示电压变化(同样具备功率测量时的时间调节功能);<img src="//image.lceda.cn/pullimage/QE6369iIW0Yx81WueS3J7ohmcLaNQWFNPDA88gcE.png" alt="5.png"></li>
<li>[author infor],显示作者(本菜鸟)相关信息,欢迎各位大佬来指点小弟一二,或者有兴趣的小伙伴来一起愉快的玩耍(づ ̄ 3 ̄)づ; <img src="//image.lceda.cn/pullimage/14Zcljo6YPrMivaoJCXmjpI4IwboWNGAFsW6dKPA.png" alt="6.png"></li>
<li>板载led红灯指示是否有供电,led蓝灯指示是否有按键按下;</li>
</ol>
<p><br></p>
<h2><strong>硬件设计</strong></h2>
<hr>
<ul>
<li>
<h3>mcu:国民技术<strong>N32G430C8L7</strong></h3>
<table>
<tr>
<th style="text-align: center;">引脚功能分配:</th>
<th style="text-align: center;">pin</th>
<th style="text-align: center;">application</th>
<th style="text-align: center;">pin</th>
<th>application</th>
</tr>
<tr>
<td style="text-align: center;">PD14</td>
<td style="text-align: center;">osc_in</td>
<td style="text-align: center;">PA2</td>
<td style="text-align: center;">adc_in3(ina199)</td>
</tr>
<tr>
<td style="text-align: center;">PD15</td>
<td style="text-align: center;">osc_out</td>
<td style="text-align: center;">PA1</td>
<td style="text-align: center;">adc_in1(voltage)</td>
</tr>
<tr>
<td style="text-align: center;">PA13</td>
<td style="text-align: center;">swdio</td>
<td style="text-align: center;">PB12</td>
<td style="text-align: center;">spi_nss(w25)</td>
</tr>
<tr>
<td style="text-align: center;">PA14</td>
<td style="text-align: center;">swclk</td>
<td style="text-align: center;">PB13</td>
<td style="text-align: center;">spi_sck(w25)</td>
</tr>
<tr>
<td style="text-align: center;">PA9</td>
<td style="text-align: center;">debug_uart_tx</td>
<td style="text-align: center;">PB14</td>
<td style="text-align: center;">spi_miso(w25)</td>
</tr>
<tr>
<td style="text-align: center;">PA10</td>
<td style="text-align: center;">debug_uart_rx</td>
<td style="text-align: center;">PB14</td>
<td style="text-align: center;">spi_miso(w25)</td>
</tr>
<tr>
<td style="text-align: center;">PA0</td>
<td style="text-align: center;">pwm(舵机)</td>
<td style="text-align: center;">PB8</td>
<td style="text-align: center;">BLK(tft)</td>
</tr>
<tr>
<td style="text-align: center;">PB11</td>
<td style="text-align: center;">adc_in4(电压表)</td>
<td style="text-align: center;">PB3</td>
<td style="text-align: center;">CS(tft)</td>
</tr>
<tr>
<td style="text-align: center;">NRST</td>
<td style="text-align: center;">RST</td>
<td style="text-align: center;">PB6</td>
<td style="text-align: center;">DC(tft)</td>
</tr>
<tr>
<td style="text-align: center;">PB0</td>
<td style="text-align: center;">sw1</td>
<td style="text-align: center;">PB7</td>
<td style="text-align: center;">RES(tft)</td>
</tr>
<tr>
<td style="text-align: center;">PB1</td>
<td style="text-align: center;">sw2</td>
<td style="text-align: center;">PB5</td>
<td style="text-align: center;">SDA(tft)</td>
</tr>
<tr>
<td style="text-align: center;">PB2</td>
<td style="text-align: center;">sw3</td>
<td style="text-align: center;">PB4</td>
<td style="text-align: center;">SCL(tft)</td>
</tr>
<tr>
<td style="text-align: center;">PB10</td>
<td style="text-align: center;">led</td>
</tr>
</table>
</li>
</ul>
<p><br></p>
<ul>
<li>
<h3>外部接口</h3>
<ul>
<li>typec公母一对 </li>
<li>2x4弯排针:调试串口,sw下载口,pwm(舵机),adc捕获(电压表), 3.3V,GND排针</li>
<li>三个功能按键</li>
<li>主板右下方有一对焊盘用以短接拉低rst复位,右上方也有一对焊盘并入type-c输入接口的VBUS和GND,用以测试。 </li>
</ul>
</li>
</ul>
<p><br></p>
<ul>
<li>
<h3>电流采样:<strong>INA199A3DCKT</strong></h3>
<p>200电压放大倍率,直接模拟量输出</p>
</li>
<li>
<h3>电压采样:电阻分压(1/10)AD检测</h3>
<p>字面意思,电阻串联分压</p>
</li>
<li>
<h3>1.14寸TFT彩屏<strong>ST7789V</strong></h3>
<p>选用插接式,pcb上焊接fpc插座(0.5mm,不太好焊接)</p>
</li>
<li>
<h3>DC-DC降压 <strong>SY8303AIC</strong></h3>
<p>type-c连通cc引脚线,支持pd快充,电压较高因此使用dcdc降压电路输出3.3V供电给其它芯片</p>
</li>
<li>
<h3>存储芯片<strong>W25Q32JVSSIQ</strong></h3>
</li>
</ul>
<p><br></p>
<h2><strong>软件设计</strong></h2>
<hr>
<h3>底层驱动:</h3>
<ol>
<li>adc三路通道分别检测INA199输出的电流模拟量信号,充电电压,外部检测电压;</li>
<li>tft屏幕cv的中景园的驱动程序,适配普通io作为模拟SPI通信使用;</li>
<li>配置硬件spi通信驱动w25;</li>
<li>启用TIM2的channel2作为PWM输出;</li>
<li>使用TIM6定时器中断,作为按键检测;</li>
</ol>
<h3>上层应用逻辑:</h3>
<ol>
<li>基本流程图 <img src="//image.lceda.cn/pullimage/8ANMQGPuWMmv8Q4REMHqCXro3dlSJygY3nXyMtD1.png" alt="7.png"></li>
<li>最核心的部分即菜单控制功能(srv_menu.c),所有基础功能都在这里被集中组合调用起来,并通过按键和屏幕实现人机交互。采用枚举和结构体组合的方式来封装每一个菜单界面及其对应的交互功能,每个子菜单功能都是独立的,通过id号来相互跳转界面,移交控制权,互不干扰,可以比较方便的裁剪和扩展子菜单及其相应的功能,具体实现请看代码文件(时间仓促未整理,可能些许凌乱);<img src="//image.lceda.cn/pullimage/boBqWDRI801h00bYqwDcl2fWtzm7WxTaCFO1RPzY.png" alt="8.png"></li>
</ol>
<p><br></p>
<h2><strong>学习|踩坑 记录</strong></h2>
<hr>
<ol>
<li>mcu boot0引脚忘了设置接地,mcu引脚飞线极度痛苦(焊工不佳,长达两小时)。<img src="//image.lceda.cn/pullimage/5ReRley6FjPkzUKKShJyy481RDOvsxzFWyaI8PaH.jpeg" alt="9.jpg"></li>
<li>link无法下载,弹窗显示“RDDI-DAP ERROR”。原因,下载器杜邦线过长(0.8m),信号无法稳定传输。</li>
<li>adc初始化,1M时钟配置无法选用外部晶振。原因:暂时未知(更新:外部晶振为正常初始化的原因)。</li>
<li>淘宝IPS屏幕引脚展示与实物顺序相反,插上即烧,跟淘宝卖家一通扯皮后免费给我补发了个1.14寸的IPS屏(原0.96),连夜加班重新布局设计了新的PCB打样。</li>
<li>W25q32芯片驱动代码在gitee上找的,debug了一天,最后还是大佬帮助发现驱动不完善,擦除没有延时,读取错位。心态炸裂。。。。。(更新:补充,系统时钟若配置成128M Hz则无法读写W25,降低频率则可,玄学原因未知)</li>
<li>配置定时器发现外部晶振没有正常初始化成功,原因未知(更新:焊接问题,重新焊接后正常启动)。</li>
<li>新板子充电电流读数为零,排查了大半天发现运放ina199信号线接反了,被迫割铜皮飞线。<img src="//image.lceda.cn/pullimage/KhMNjIx7fq0dVYg2OVBC1iF3wwToDb8Zds2MPrYU.jpeg" alt="10.jpg"></li>
</ol>
<p><br></p>
<h2><strong>补充</strong></h2>
<hr>
<h3>参考资料:</h3>
<ul>
<li><a href="https://oshwhub.com/limengmeng12345/ji-chu-ying-usb-dian-ya-biao#P1" target="_blank">立创官方案例</a></li>
<li>代码上传至gitee仓库:<a href="https://gitee.com/dead-poem/usb-meter-pro.git" target="_blank">gitee仓库</a></li>
<li>哔哩哔哩视频:<a href="https://www.bilibili.com/video/BV17G4y1k7Yc?vd_source=6c6ddc65aa9a516f6055f95eb2779c53" target="_blank">视频传送门</a></li>
<li>补图:
<img src="//image.lceda.cn/pullimage/K0XS3OhhM8gkIFg8x9OE5OqQu8uUYazZYZxbzz67.jpeg" alt="11.jpg">
<img src="//image.lceda.cn/pullimage/GP5HkGMFFHv3TfXjzeiSk43L1jcPIoTaWPNr0QbK.jpeg" alt="12.jpg">
<img src="//image.lceda.cn/pullimage/ZbANPFLdnP7OhAlquyoi3rPEOpSNp8IletR37Apl.jpeg" alt="13.jpg">
<img src="//image.lceda.cn/pullimage/BBPPuzR2uuxc7iDgyxRCPKRnTbGsqrWkkKeOpzeg.jpeg" alt="14.jpg">
<img src="//image.lceda.cn/pullimage/3qbKx3kB441oEQDyUvUseDWFJVcjktbdVD6e6VJC.jpeg" alt="15.jpg">
<img src="//image.lceda.cn/pullimage/Ckm6gspWzqVqChiqEsUfGR1JiDPwOQAO9ywCmSJ8.jpeg" alt="16.jpg"></li>
</ul>
-
电压表测试.mp4
-
功率计测试.mp4
-
游戏测试.mp4
评论(1)