描述
<p><p><strong>目录</strong></p>
<p><a href="#_Toc173754330">一、总体方案设计 1</a></p>
<p><a href="#_Toc173754331">二、硬件电路设计 1</a></p>
<p><a href="#_Toc173754332">(一)主控及晶振电路 1</a></p>
<p><a href="#_Toc173754333">(二)传感器模块 2</a></p>
<p><a href="#_Toc173754334">(三)测试LED 5</a></p>
<p><a href="#_Toc173754335">(四)74HC595 5</a></p>
<p><a href="#_Toc173754336">(五)唤醒按键 5</a></p>
<p><a href="#_Toc173754337">(六)数码管 6</a></p>
<p><a href="#_Toc173754338">(七)电源系统 6</a></p>
<p><a href="#_Toc173754339">(八)SWD下载调试接口 6</a></p>
<p><a href="#_Toc173754340">三、软件设计 7</a></p>
<p><a href="#_Toc173754341">(1)总体设计 7</a></p>
<p><a href="#_Toc173754342">(2)数码管模块 7</a></p>
<p><a href="#_Toc173754343">(3)定时器模块 9</a></p>
<p><a href="#_Toc173754344">(4)传感器模块 10</a></p>
<p><a href="#_Toc173754345">四、电路制作与调试 12</a></p>
<p><a href="#_Toc173754346">(1)电路制作 12</a></p>
<p><a href="#_Toc173754347">(二)代码编写 13</a></p>
<p><a href="#_Toc173754348">(3)PCB焊接 14</a></p>
<p><a href="#_Toc173754349">(四)程序烧录 15</a></p>
<p><a href="#_Toc173754350">(五)故障排除 16</a></p>
<p><a href="#_Toc173754351">(六)项目成品 16</a></p>
<p><a href="#_Toc173754352">附录 17</a></p>
<p><a href="#_Toc173754353">(一)项目原理图 17</a></p>
<p><a href="#_Toc173754354">(二)项目PCB图 18</a></p>
<h1><a id="_Toc173754330"></a>一、总体方案设计</h1>
<p>本设计目的是实现便捷与直观的获取当前环境的温度与湿度,整个系统采用一枚STM32G030K6T6作为主控芯片,该芯片使用Arm Cortex-M0+内核,最大主频64Mhz,具有32KB的Flash以及8K的SRAM,供电电压在2.0V~3.6V之间。使用I<sup>2</sup>C协议与SHT40传感器进行通信,读取温度与湿度;通过主控芯片进行数据处理后将数据发送至3个74HC595驱动两个共阴极三位数码管进行显示;由预留SWD下载调试接口完成程序的烧录,通过两个LED灯进行初步测试。</p>
<p>本设计采用两节7号电池进行供电,考虑到功耗问题,默认不开机,进入睡眠模式;当有按键按下时,触发中断,此时结束睡眠模式,执行按键判断,获取温湿度并启动数码管进行显示;同时启动定时器中断,显示数据1s后再次进入睡眠,等待下次唤醒。</p>
<p><img style="max-width: 100%;" src="//image.lceda.cn/oshwhub/a3d0892c23aa40fe9c7ee2d6b48e2332.jpg" /></p>
<p>图1 系统框图</p>
<h1><a id="_Toc173754331"></a>二、硬件电路设计</h1>
<h2><a id="_Toc173754332"></a>(一)主控及晶振电路</h2>
<p><img style="max-width: 100%;" src="//image.lceda.cn/oshwhub/5f97572f8ec44d5a8748a6e090b43f14.png" /></p>
<p>图2 主控及晶振电路原理图</p>
<p><strong>1. 主控及晶振电路</strong></p>
<p><strong>(1)主控电路:</strong>使用一片STM32G030K6T6完成数据的输入、处理与输出,在芯片的电源输入端使用一枚磁珠与滤波电容并联,滤除杂波、防止串扰,稳定电源的输入;。</p>
<p><strong>(2)晶振电路:</strong>芯片虽然内置时钟,但精度上存在一定误差,使用一枚32.768KHz的无源晶振,外接两个18pF电容,构成外部时钟源。</p>
<h2><a id="_Toc173754333"></a>(二)传感器模块</h2>
<p><strong>1. SHT40传感器工作原理与特点</strong></p>
<p><strong>(1)工作原理:</strong></p>
<p><img style="max-width: 100%;" src="//image.lceda.cn/oshwhub/ee6bb392cfd24a939bf2fb8d33549267.png" /></p>
<p>图3 SHT40传感器功能框图</p>
<p>温湿度传感器获取模拟量数据后,通过模数转换器将其转变为数字信号,并在校准后将数据放在寄存器中进行存储;通过I<sup>2</sup>C同信协议完成指令的写入与读取数据的操作。</p>
<p><strong>(2)特点:</strong> ‌它能够在测量范围内提供高精度和高稳定性的测量结果。‌SHT40的主要特点和优势包括:</p>
<p>高精度测量:‌SHT40能够测量相对湿度从0至100%,‌温度范围从-40℃至125℃,‌并且具有±1.8%的湿度精度和±0.2℃的温度精度。‌这些精度指标在同类产品中属于领先水平,‌能够满足大多数应用的需求。‌</p>
<p>优异的稳定性:‌通过内部增加的自校准功能,‌SHT40具有更好的长期稳定性,‌能够有效地补偿传感器老化和温度漂移,‌确保测量数据的准确性和一致性。‌快速响应:‌SHT40在灵敏度和响应速度上也进行了优化,‌尤其在湿度测量方面,‌其响应时间更快,‌能够更迅速地捕捉到环境变化。‌这种特性使其在需要快速响应的应用场景中非常适用。‌</p>
<p>低功耗设计:‌SHT40在继承了前代产品低功耗和紧凑封装的基础上,‌进一步优化了功耗控制,‌更适合于低功耗应用,‌如物联网(IoT)设备和能源敏感的系统。‌其电源电压范围从1.08 V扩展到3.6 V,‌非常适合移动和电池驱动应用。‌</p>
<p>增强抗干扰能力:‌SHT40还增强了抗干扰能力,‌能够更好地抵抗电磁干扰(EMI)和其他环境因素的影响,‌确保在复杂环境中也能提供可靠的测量结果。‌</p>
<p>SHT40因其高精度、‌低功耗和快速响应等特性,‌被广泛应用于智能楼宇、‌天气站、‌仓库存储、‌养殖、‌孵化等场景</p>
<p><strong>2. SHT40传感器电路原理</strong></p>
<p>该传感器共4个引脚,分别为:见表1。</p>
<table style="border-collapse: collapse;" border="1">
<tbody>
<tr>
<td>
<p>引脚名称</p>
</td>
<td>
<p>SDA</p>
</td>
<td>
<p>SCL</p>
</td>
<td>
<p>VDD</p>
</td>
<td>
<p>GND</p>
</td>
</tr>
<tr>
<td>
<p>定义</p>
</td>
<td>
<p>数据线</p>
</td>
<td>
<p>时钟</p>
</td>
<td>
<p>电源</p>
</td>
<td>
<p>接地</p>
</td>
</tr>
</tbody>
</table>
<p>表1 SHT40引脚定义表</p>
<p><strong><img style="max-width: 100%;" src="//image.lceda.cn/oshwhub/ff867dba6f134ff38c029f4bf6b83304.png" /></strong></p>
<p>图4 SHT40传感器典型应用电路图</p>
<p>在管脚SDA与SCL上都需要一个10KΩ的上拉电阻,且正极与接地之间存在一个100nF的电容;通过观察传感器的实物图可以发现,厂家出厂时配备了100nF的电容,但上拉电阻需要在使用中自行布置。</p>
<p><img style="max-width: 100%;" src="//image.lceda.cn/oshwhub/9e193a44d33a47b4931adfbf9c6ce5df.jpg" /></p>
<p>图5 SHT40传感器实物图</p>
<p>传感器上关于管脚定义无任何标识,需要注意的是在插入传感器之前要确定管脚方向,因为传感器插反将会电源反接,瞬间烧毁传感器。</p>
<p><img style="max-width: 100%;" src="//image.lceda.cn/oshwhub/ad75b52ef2fc4c6fadaac9f86586d7c4.png" /></p>
<p>图6 传感器模块电路原理图</p>
<p>在实际电路使用时,使用一个4Pin排母,这样方便传感器的拆装与检查;同时,在排母的1、4脚处增加上拉电阻,2、3脚接入3V直流电路,从而完成传感器模块的硬件电路搭建。</p>
<h2><a id="_Toc173754334"></a>(三)测试LED</h2>
<p><img style="max-width: 100%;" src="//image.lceda.cn/oshwhub/fdd6bf32868b4323b6c996ad3bfc0808.png" /></p>
<p>图7 测试LED电路原理图</p>
<p>两个测试LED灯是为了方便调试程序对出现的问题进行测试,将问题具体现象直观展示所设计,LED负极接入单片机,正极通过4.7KΩ电阻接入3V电源,当单片机对应引脚输出为低电平时,LED灯点亮。</p>
<h2><a id="_Toc173754335"></a>(四)74HC595</h2>
<p><img style="max-width: 100%;" src="//image.lceda.cn/oshwhub/d13c65e16b204934a031d1379e35e1fe.png" /></p>
<p>图8 74HC595驱动电路原理图</p>
<p>通过使用3个74HC595芯片进行驱动2个3位共阴数码管,U2与U3分别负责LED1与LED2的段码输送,U4负责实现数码管的位选。C23、C24、C25三个滤波电容在PCB板处要靠近三个595芯片,进行电源滤波。</p>
<h2><a id="_Toc173754336"></a>(五)唤醒按键</h2>
<p><img style="max-width: 100%;" src="//image.lceda.cn/oshwhub/e6da0b54aa0346d8bee7588e9c5da55b.png" /></p>
<p>图9 按键电路原理图</p>
<p>将按键的一端与单片机管脚相连,另一端与地线相连,通过读取单片机该管脚的高低电平即可识别按键是否按下。</p>
<h2><a id="_Toc173754337"></a>(六)数码管</h2>
<p><img style="max-width: 100%;" src="//image.lceda.cn/oshwhub/adb2061381524e5b894dfd278e3c494f.png" /></p>
<p>图10 数码管显示电路原理图</p>
<p>使用两个三位的共阴数码管,每个元件上单片机驱动595芯片输出高电平时就能点亮对应的数码管</p>
<h2><a id="_Toc173754338"></a>(七)电源系统</h2>
<p><img style="max-width: 100%;" src="//image.lceda.cn/oshwhub/74b7c58a4fdb40449d2feb6db1d0da09.png" /></p>
<p>图11 电源系统电路原理图</p>
<p>在电源处设置两颗精度为±0.1%的分压电阻,用于检测电池电压,通过单片机的ADC进行电压读取;同时考虑到电池可能装反等情况,在电池电压的输入端加入一个场效应管,防止电池反接。</p>
<h2><a id="_Toc173754339"></a>(八)SWD下载调试接口</h2>
<p><img style="max-width: 100%;" src="//image.lceda.cn/oshwhub/32cda30e02d749a1804a06a352727849.png" /></p>
<p>图12 SWD下载调试接口电路原理图</p>
<p>使用4Pin的排针作为信号引脚,方便用杜邦线连接,实现MCU的程序烧录。</p>
<h1><a id="_Toc173754340"></a>三、软件设计</h1>
<h2><a id="_Toc173754341"></a>(1)总体设计</h2>
<p><img style="max-width: 100%;" src="//image.lceda.cn/oshwhub/ef956957470e420cb77a51ee6bac09a8.jpg" /></p>
<p>图13 软件整体流程图</p>
<p>当有按键按下时,触发中断,此时结束睡眠模式,执行按键判断,获取温湿度并启动数码管进行显示;同时启动定时器中断,显示1S数据后再次进入睡眠,等待下次唤醒。若想检测电池电压,可增加ADC相关代码;若想进行定时读取,可以增加RTC实时时钟代码;</p>
<h2><a id="_Toc173754342"></a>(2)数码管模块</h2>
<p>在gpio.c文件的用户区编写测试代码,SN74HC595的引脚初始化已经生成好了,现在要做的是编写相关的驱动函数与显示函数;</p>
<p>SN74HC595驱动时序相对简单,首先输入高电平或低电平到SER引脚中,随后产生一个SCLK的上升沿,将数据发送出去,这里是8位数据移位寄存器,所以循环8次,最后一个RCLK的上升沿将数据锁存住,保持不变,直到下一次发送;</p>
<p>这里模拟一下发送时序;假如的数据是0xFE(1111 1110)</p>
<p>此时先发送最高位,也就是0xFE&0x80,判断高低电平;随后数据被送入QA;</p>
<p>然后继续,发送次高位,也就是(0xFE<<1)&0x80,判断高低电平,随后之前的数据被挤到QB,这个数据移位到QA。</p>
<p>依次类推,根据前面的原理图可知,这两个数码管的阴极总共是6个阴极,全部连接在SN74HC595-U6上,通过这一个595芯片,可以指定某一个位导通,同时,两个数码管的阳极,又分别连接在另外两个595芯片上,通过这两个芯片配合,就可以实现单个位显示数据;并根据数码管中LED导通的顺序,从而使数码管显示不一样的值;</p>
<p><img style="max-width: 100%;" src="//image.lceda.cn/oshwhub/99b9d1dd1a1940198d34c3131d1a0bd3.jpg" /></p>
<p>图14 数码管显示模块流程图</p>
<h2><a id="_Toc173754343"></a>(3)定时器模块</h2>
<p><img style="max-width: 100%;" src="//image.lceda.cn/oshwhub/004460ff575f47d8953fce85b7ead2fe.jpg" /></p>
<p>图15 定时器执行模块流程图</p>
<p>通过定时器完成数码管的动态显示与计数功能,两行数码管轮流显示,但因人眼的视觉暂留效果影响,所以两行数码管看上去为同时显示;当sleep_flag到达1000,即1S时间到达时,结束数码管显示,并使系统进入休眠模式。</p>
<h2><a id="_Toc173754344"></a>(4)传感器模块</h2>
<p><img style="max-width: 100%;" src="//image.lceda.cn/oshwhub/67086156b53c4d0e8b71a00a7c1a8a3a.png" /></p>
<p>图16 传感器型号与地址对应图</p>
<p><img style="max-width: 100%;" src="//image.lceda.cn/oshwhub/3fc073d702444c5b8fc95be3fff29dfa.png" /></p>
<p>图17 传感器通信时序图</p>
<p><img style="max-width: 100%;" src="//image.lceda.cn/oshwhub/83f0fb5be1cb4e26b661d251f11dde0d.png" /></p>
<p>图18 传感器指令概述图</p>
<p>传感器使用I<sup>2</sup>C协议进行通信,完成指令的输入与数据的传输;打开SHT40的相关数据手册,重点查看IIC地址与数据传输协议。</p>
<p>由数据手册可知,0x44是IIC地址;当地址最低位是0,表示写入,最低位是1,表示读取;当发送0xFD指令时,代表高精度测量温湿度;并且数据手册提供了相关温湿度的计算公式如下。</p>
<p>(1)</p>
<p>(2)</p>
<p>通过调用HAL库中关于I<sup>2</sup>C通信函数,可以很便捷的将数据读取出来。具体通信流程如下图所示。</p>
<p><img style="max-width: 100%;" src="//image.lceda.cn/oshwhub/dd389eb91e494cf4ad4c7c016454d115.jpg" /></p>
<p>图19 传感器通信流程图</p>
<h1><a id="_Toc173754345"></a>四、电路制作与调试</h1>
<h2><a id="_Toc173754346"></a>(1)电路制作</h2>
<p><strong>1.原理图绘制:</strong>使用嘉立创EDA(专业版)绘制本次项目原理图,绘制时将电路按功能模块进行区分,便于后续查找与PCB的绘制。</p>
<p><img style="max-width: 100%;" src="//image.lceda.cn/oshwhub/a58c0ccd927a457b9db51f08f683faaa.png" /></p>
<p>图20 项目原理图</p>
<p><strong>2.PCB绘制与制作:</strong>将原理图元件导入PCB后按功能进行分区,合理排布元器件位置,设置好导线规则进行走线、补泪滴、铺铜、优化(删除空岛、修剪铺铜形状、删除传感器下方铺铜、删除晶振下方铺铜);DRC检查无误后提交嘉立创打板订单,同时根据生成的BOOM元件清单进行元件购买,对订货周期过长的器件进行替换。</p>
<p><img style="max-width: 100%;" src="//image.lceda.cn/oshwhub/8e1fcdf2c91f4cb1b82c3f764f38dfad.png" /></p>
<p>图21 PCB顶层图</p>
<h2><a id="_Toc173754347"></a>(二)代码编写</h2>
<p><strong>1.创建工程:</strong>使用STM32CubeMX软件进行基础代码生成与配置</p>
<p><strong>2.设置参数:</strong>根据原理图,设置所有外设引脚</p>
<p>将SN74HC595引脚设置为推挽输出、快速模式,同时依据原理图对其进行重命名,方便后续代码编写;将按键引脚设置为上拉输入模式并对其进行重命名;将测试LED灯设置为推挽输出模式并对其进行重命名;打开ADC、定时器、IIC功能;配置时钟树;填写输出工程的名称,选择工程输出路径以及适配的IDE;生成相关文件的.c与.h文件;选择HAL库创建工程。</p>
<p><img style="max-width: 100%;" src="//image.lceda.cn/oshwhub/daa9195d8f39435abf22067700c50834.png" /></p>
<p>图22 芯片引脚定义图</p>
<p><strong>3.使用Keil5 MDK软件进行程序的编写与测试</strong></p>
<p>工程源码见附录。</p>
<h2><a id="_Toc173754348"></a>(3)PCB焊接</h2>
<p>在PCB板与元件到货后进行焊接。</p>
<p><img style="max-width: 100%;" src="//image.lceda.cn/oshwhub/be396c10fb3e4ef2aecb094c30eef5ae.jpg" /></p>
<p>图23 PCB板正面图</p>
<p><img style="max-width: 100%;" src="//image.lceda.cn/oshwhub/5d1938941cdf43068af442912858ecb4.jpg" /></p>
<p>图24 PCB板背面图</p>
<p><img style="max-width: 100%;" src="//image.lceda.cn/oshwhub/a480de4454264016bb7e5eb95b347211.jpg" /></p>
<p>图25 项目成品正面图</p>
<p><img style="max-width: 100%;" src="//image.lceda.cn/oshwhub/d68d70b78c5a47a1b0e246fd832d2827.jpg" /></p>
<p>图26 项目成品背面图</p>
<h2><a id="_Toc173754349"></a>(四)程序烧录</h2>
<p>1.打开keil工程文件;</p>
<p>2.将DP-LINK针脚与PCB板上的调试口相连接;</p>
<p>3.点击编译(Build),点击下载(Download);</p>
<p><img style="max-width: 100%;" src="//image.lceda.cn/oshwhub/863736c2797740d88e1c1a9f176aa4a4.png" /></p>
<p>图27 编译、下载按钮位置图</p>
<p>4.断开DP-LINK,放入电池。</p>
<h2><a id="_Toc173754350"></a>(五)故障排除</h2>
<p>故障1:程序烧录故障。</p>
<p>故障描述:连接下载器后烧录程序报错,Keil提示invalid rom table。</p>
<p>解决过程:由于有让MCU进入休眠模式的代码,在上电后它会立即进入休眠模式,以保持低功耗运行。此时可以先插好ST-LINK,在Keil程序编译好,然后按下唤醒按钮,在数码管仍在显示数值的过程中,手快速地点击Keil的下载按钮即可。</p>
<p>故障原因:MCU进入休眠模式。</p>
<p>故障2:数码管不显示。</p>
<p>故障描述:烧录程序后第一行用于显示温度的数码管不显示,湿度数码管工作正常。</p>
<p>解决过程:因为湿度数据正常显示,能够读取传感器数据,且数码管显示正常无乱码,这说明软件有正常运行;所以问题大致出现在硬件上,通过分析电路原理图判断,因为第二行数码管工作正常,所以U3-595芯片无异常,问题大致出在主控芯片与U2-595芯片或主控芯片与U4-595芯片的连接上,使用万用表测量各线路通断,检查是否存在虚焊;若不存在虚焊则可能U2-595芯片损坏。</p>
<p>故障原因:U2-595芯片13脚虚焊,OE使能未接地,输出 QA - QH 被禁用。</p>
<h2><a id="_Toc173754351"></a>(六)项目成品</h2>
<p><img style="max-width: 100%;" src="//image.lceda.cn/oshwhub/1534b01628574a099c6a6b2a1028127d.png" /></p>
<p>图28运行结果图</p>
<p><a href="<a href="https://t.bilibili.com/956897706884726793?share_source=pc_native%22>%E6%BC%94%E7%A4%BA%E8%A7%86%E9%A2%91</a></p" target="_blank">https://t.bilibili.com/956897706884726793?share_source=pc_native">演示视频</a></p</a>>
<h1><a id="_Toc173754352"></a>附录</h1>
<h2><a id="_Toc173754353"></a>(一)项目原理图</h2>
<p><img style="max-width: 100%;" src="//image.lceda.cn/oshwhub/a58c0ccd927a457b9db51f08f683faaa.png" /></p>
<h2><a id="_Toc173754354"></a>(二)项目PCB图</h2>
<p><img style="max-width: 100%;" src="//image.lceda.cn/oshwhub/a6bf83f7cb324cd8bdee989cd8d27251.png" /></p>
<p><img style="max-width: 100%;" src="//image.lceda.cn/oshwhub/9afdffdfe5b34f9baba4d2fe19e52507.png" /></p></p>
评论(0)