内容介绍
内容介绍
1. 项目需求
- 能够读取温度、湿度,并能够在屏幕中显示
- 使用KiCad绘制外围电路和PCB
- 主控为带屏十二指神探
1.1 项目逻辑框图
这里主控为RP2040,通过I2C总线与NSHT30温湿度传感器进行通讯,同时通过spi与ST7789控制240x240LCD显示屏显示信息。
2. 完成的功能及达到的性能
2.1 使用KiCad绘制NSHT30的原理图和PCB
本次项目原理图部分设计如下图所示
原理图根据数据手册 中的典型电路进行设计,scl和sda的上拉电阻这里选的是4.7k
还有一个排针是用来与十二指神探进行连接的,这里参考的是官方给出的原理图
2.2 PCB部分注意事项
官方有一个使用设计指南里面对于PCB Layout有一个指导
里面建议的注意事项是
- 温湿度传感器芯片位置尽量远离热源;
- 降低温湿度传感器芯片与PCB间的热传导;(芯片周围不覆铜,走线尽量细,PCB上芯片周围开孔, 降低热传导,或者采用柔性软板将温湿度传感器与测试主板进行物理隔离)
- 降低温湿度传感器芯片耦合到PCB上之后的热惯性;(温湿度传感器所在的PCB尽量薄,例如采用单 独的FPC软板装配温湿度传感器)
但是这里我搞错了一些东西,导致我直接将传感器部分设置为禁止铺铜区,以至于测试时,传感器积热严重,读取的数据严重不准。 - 这个手册中的介绍非常详细,从原理图到PCB Layout,再到后续的焊接以及软件程序都有非常详尽的介绍。
2.3 PCB投板
推荐一个很好用的插件JLCPCB ,可以方便的一键生成Gerber文件以及坐标文件还有bom表,尤其是使用smt的时候,可以在里面进行器件的分配,非常的方便。打板回来后进行焊接。焊接后实物图
这里可以看到两个设计问题,第一个就是去耦电容放置的太远了,应该尽可能放置在芯片电源引脚附近。其次就是在温湿度传感器那一块,被我设置成禁止铺铜区,这个导致一个严重问题就是芯片积热,导致测量出来的温度极其不准。
2.4 程序设计
这里的程序设计参考了官方给的演示代码,是基于这个演示代码改的。
然后添加了nsht30的相关代码
# 设置nsht30的scl和sda引脚
nsht30_scl = Pin(21)
nsht30_sda = Pin(20)
# 设置nsht addr
nsht30_addr = 0x44
# 初始化模拟I2C
i2c0 = machine.I2C(0,scl=nsht30_scl,sda=nsht30_sda,freq=400000)
# 读取NSHT30传感器温湿度值的函数
def read_nsht30():
# 发送启动测量命令
i2c0.writeto(nsht30_addr, b'\x2c\x10')
sleep_ms(20) # 等待测量完成
# 读取温湿度值
data = i2c0.readfrom(nsht30_addr, 6)
temperature = ((data[0] << 8) | data[1]) * 175 / 0xFFFF - 45
humidity = ((data[3] << 8) | data[4]) * 100 / 0xFFFF
return temperature, humidity
# 显示测量结果
display.text(font2, "Temp="+str(temperature), 10, 70)
display.text(font2, "Humi="+str(humidity), 10, 100)
2.5 测试结果
最后进行上电测试
可以看到由于PCB布板时将nsht30附近的铜挖掉,导致积热严重以至于无法实现正确的温湿度测量。
3 总结感悟
- 最大的感悟就是设计的时候参考官方的使用手册和应用笔记真的是事半功倍,以及最重要的Datasheet。
- 还有一个就是设计的时候千万千万要看清楚想明白在动手,比如这次,手册里设计是要铺铜,结果看差了设计成没有铜,导致功能都实现不了:( 。
- 以及最最最重要的,千万不要有拖延症!!!拖到最后,连修改时间都没有
本次项目的所有资料都以附件形式上传。
KiCad文件
使用说明
全屏
附件下载
KICAD工程文件.zip
KICAD工程文件
Firmware.zip
本次项目Micropython代码
团队介绍
无
评论
0 / 100
查看更多