首页 > 编程语言 >【STM32项目】基于STM32的测量温度与压力的数据处理设计(完整工程资料源码)

【STM32项目】基于STM32的测量温度与压力的数据处理设计(完整工程资料源码)

时间:2024-04-07 11:00:30浏览次数:15  
标签:硬件 DS18B20 STM32 单片机 源码 模块 数据处理 数据 温度

前言:

        项目的架构涉及两个关键组成部分,即硬件组件和软件开发。具体到硬件组成,项目包含若干关键模块,如:STM32微控制器作为项目的脑部控制中心,重力感应模块用于检测和记录重力数据,温度感应模块负责监测环境温度,以及液晶显示模块用于向用户展示实时数据和其他信息。

        在软件开发方面,项目涉及编写用于管理和处理重力监测与温度监测数据的代码,以及控制液晶显示屏输出信息的程序。这些软件部件不仅需要实现其各自的功能,还要与硬件模块协同工作,以确保整个系统的顺畅运行和数据的准确传递。最终,项目将通过软件编程实现这些模块的综合管理和数据整合,形成一个协调一致的工作整体。

目录:

目录:

一、总体设计思路:

二、元器件选择

2.1 主控制器选择

2.2  显示模块选择

2.3 总体设计方案

 三、硬件设计:

3.1 硬件设计原则

3.2 硬件电路

3.3 硬件参数

3.4 重量检测模块

3.4.1 芯片概述

3.4.2HX711芯片原理

1. 5kg 传感器:

3.4.3 HX711芯片特点:

3.4.4  HX711通信引脚:

3.4.5 HX711硬件:

 3.4.6 重量检测模块电路图

3.5 温度检测模块

3.5.1 硬件概述

3.5.2 硬件原理

2.5.3 主要特性

3.5.4 内外结构

3.5.5 部件介绍

3.5.6 电路原理图

3.6 显示模块

3.7 按键模块

3.8 项目原理图的绘制

四、软件设计

4.1 设计思路

4.2 编程环境及语言简介

4.3 主流程序设计

4.4 硬件主要模块子程序设计

        4.4.1 重量数据采集子程序

4.4.2 温度数据采集子程序

五、调试与分析:

5.1 硬件调试

5.1.1 硬件连接测试

5.1.2 硬件功能测试

5.2 软件调试

5.2.1 软件测试方案

5.2.2  软件测试过程

5.3 整机调试分析

六、总结

七、资源下载链接:毕设&课设&项目&竞赛-基于STM32的测量温度与压力的数据处理设计.zip资源-CSDN文库

资源详情: 


一、总体设计思路:   

        在该项目的硬件开发部分,核心处理单元采用的是STM32系列中的STM32F103C8T6单片机,这是一个基于ARM Cortex-M3内核的32位微控制器。该芯片集成了64KB的程序存储空间,能够在2V至3.6V的电压范围内工作,并能够在-40°C至85°C的温度范围内稳定运行。在本设计方案中,STM32F103C8T6被选用作为项目的主控制芯片,负责整个系统的指挥与协调。

        对于硬件监测模块,压力传感器部分负责侦测压力变化,并将其转换为相应的电信号输出。在此项目中,该传感器特别用于重力监测功能。温度检测采用了DS18B20传感器,这是一种广泛使用的数字温度传感器,能够提供较高精度的温度数据。而LCD1602显示屏则用于可视化展示温度和重力等关键数据信息。

        在硬件连接方面,DS18B20和压力传感器及LCD1602显示屏的数据输出端口分别与STM32单片机上的PB0至PB7引脚相连,同时,它们的电源和接地端直接与单片机开发板上相应的电源和接地端接通,这样可以方便地为这些模块提供电源。

        软件开发部分,采用了Keil5集成开发环境,并使用C语言对各个模块进行程序设计。此外,系统的硬件原理图和印刷电路板(PCB)的设计工作是通过Altium Designer软件完成的,这是一种常用于电子设计自动化的高级工具,它支持从原理图绘制到PCB布局和生产文件的生成。

二、元器件选择

2.1 主控制器选择

        在考虑单片机选择的两个方案中,方案一提到的是使用AT89C51单片机,这款单片机源于经典的51系列,属于8位处理器。它以简洁的输入输出接口和对初学者友好的特性著称。AT89C51不仅能够方便地对某些寄存器位进行操作,还支持位级的逻辑运算,这使得它在进行某些特定操作时相当高效。此外,它在RAM空间设计上提供了一个双重区间,为用户带来更多的编程便利。然而,AT89C51也存在一些局限性,例如当需要扩展更多功能时,其简单的I/O端口和有限的资源可能会成为软硬件设计的瓶颈,且它不具备直接输出高电平信号的能力。

        方案二考虑的是采用STM32单片机,这是一款32位的高性能处理器。STM32因其出色的性能价格比而广受欢迎,它拥有优秀的外设支持和处理速度,最高时钟频率可以达到72MHz。此外,STM32在功耗、集成度以及功能性方面也表现出色,为开发者提供了强大的系统设计能力。与AT89C51相比,虽然STM32的成本略高,但它所能带来的功能扩展性和处理速度的提升,使得更多开发者倾向于选择它作为项目的核心处理器。

        从两款单片机的特点对比来看,尽管AT89C51对于初学者来说可能更友好,且具有特定的优点,但考虑到本项目对于处理能力、功能集成度以及系统扩展性的需求,STM32单片机显然是更合适的选择。因此,综合考量后,方案二中的STM32单片机被选定为本系统的核心处理单元,以满足项目开发的高性能需求。

2.2  显示模块选择

        在选择显示模块的两个方案中,方案一考虑了LCD1602液晶显示屏。LCD1602是一款经典的显示设备,具有两行显示的特点,每行能够显示16个字符,总计可以显示32个字符。尽管它的显示能力有限,但它的体积小巧,能够显示字符、数字和字母等基本内容。LCD1602的操作简单,通过简易的控制指令即可实现多样的显示效果。其低廉的价格和不错的性价比,使其成为许多项目的首选。

        方案二提出了OLED12864液晶显示屏作为另一种选择。OLED12864拥有128×64像素的分辨率,能够显示更加丰富和复杂的图形信息,包括字符、数字、动画和曲线图等。它以其超薄、轻便的特性以及快速的响应速度和卓越的显示效果而著称。OLED12864的显示效果普遍认为比LCD1602更加清晰和动态。此外,OLED12864可以直接通过I/O口与8位处理器相连,并通过编程指令进行控制,显示能力强大且灵活。

        比较两种显示模块,LCD1602在成本和简易性方面具有优势,适用于不需要复杂图形显示的基本应用。而OLED12864以其高分辨率、优秀的显示效果和灵活的图形处理能力,更适合需要高质量图形显示和动态效果的应用场景。

        鉴于本系统开发对显示模块的要求,考虑到需要较高的显示质量和更丰富的交互能力,选择OLED12864作为显示模块将是更理想的选择。它不仅可以提供更加清晰和动态的视觉效果,而且可以通过编程实现更加复杂的用户界面和图形展示,这将极大地提升用户体验和系统的交互性能。因此,最终决定采用OLED12864显示屏作为本项目显示模块的核心组件。

2.3 总体设计方案     

        在本次设计的测量系统中,核心处理单元是基于STM32单片机的架构。系统主要由以下模块组成:DS18B20温度传感器、压力传感器、按键控制模块、电源管理模块,以及OLED12864显示屏。此设计的目标是利用DS18B20温度传感器来获得环境的温度信息,及通过压力传感器来测量压力大小。这些数据经过模拟到数字的转换后,由STM32单片机进行处理分析,将处理后的数据以数字形式显示在OLED12864显示屏上,从而实现对温度和压力的实时监测。

系统的工作流程如下:

        1. 数据采集阶段:系统会通过DS18B20温度传感器模块不断采集周围环境的温度数据,同时,压力传感器也会同步检测当前的压力水平。这些传感器采集到的数据是模拟信号。

        2. 信号转换:由于STM32单片机处理的是数字信号,因此,来自传感器的模拟信号需要通过AD转换器转换为数字信号。这一过程是实时进行的,以确保数据的准确性和时效性。

        3. 数据处理:经过转换的数字信号被送入STM32单片机中进行处理。在这一阶段,单片机根据预设的程序逻辑,对温度和压力数据进行分析和计算,得到具体的测量值。

        4. 结果显示:处理后的数据经过格式化处理后,通过单片机控制OLED12864显示屏,将温度和压力的测量结果清晰地显示出来。用户可以通过查看OLED显示屏,直观地了解当前环境的温度和压力状况。

        5. 用户交互:通过按键模块,用户可以实现对测量系统的基本控制,如启动/停止数据采集,切换显示信息等操作。这为用户提供了简便的交互方式,增加了系统的实用性和灵活性。

        系统的电源模块负责为上述各个模块提供稳定的电源,确保系统能够稳定运行。整个测量系统的设计旨在实现对环境温度和压力的精准测量,并通过OLED显示屏提供一种直观、实时的数据展示方式,满足用户对于环境监测的需求。

图2.1 系统构架图 

 三、硬件设计:

3.1 硬件设计原则

        硬件电路的设计构成了本次研究的核心环节,因此在整个设计过程中,我们采取了几个关键策略来确保设计的高效性与稳定性。

        首先,为了优化设计周期并保障电路的可靠性,我们优先选择了那些历经时间考验的经典电路及我们已经非常熟悉的硬件组件。这样做不仅可以缩短设计与调试阶段的时间,而且还能显著降低在电路设计过程中遇到问题的可能性。即便在设计过程中遇到问题,我们也能够迅速地识别并解决,因为这些经典电路的工作原理和可能出现的问题我们都已经相当熟悉了。

        其次,在着手进行硬件电路设计之前,我们深入研究了各个组件的最佳工作条件。通过广泛查阅相关资料,我们确保了在设计阶段就能够将这些最佳工作条件纳入考虑范围,从而优化电路的整体性能。这种方法不仅提高了电路的稳定性,还减少了在后期因组件工作条件不匹配而导致的错误排查时间。

        最后,硬件电路设计的过程中,我们不仅仅局限于硬件层面的问题,也将软件设计纳入考量。在某些情况下,特定的功能既可以通过硬件实现,也可以通过软件实现。在这种情况下,我们通过综合考虑硬件成本与软件处理效率,来决定最终采用的实现方式。比如,若硬件实现方式会显著增加成本且对总体设计复杂度有较大增加,而软件实现方式仅仅会略微增加CPU处理时间,那么我们可能会倾向于软件实现。这样的决策过程确保了我们能够设计出既经济又高效的电路。

        通过这种精心的策略布局,我们的硬件电路设计不仅稳定可靠,同时也优化了设计成本与效率,为整个项目的成功奠定了坚实的基础。

3.2 硬件电路     

        在本次开发中,我们采用了STM32F103C8T6作为核心数据处理单元。这是一款属于STM32系列的微控制器,拥有64个引脚和128K的flash存储空间。该芯片支持单线串行输出和JTAG接口,因其卓越的性能、低成本及低功耗特性,成为了微控制器领域的一个优秀代表。它是STM32系列中提供了性价比极高的解决方案。

        对于微控制器系统而言,晶振电路的选择至关重要。我们选择了晶振电路作为时钟源,因为它可以提供极其稳定的频率。晶振电路的优点在于它的频率精度高,且能够在一定程度上抵抗外部环境变化带来的干扰。确保了系统运行的稳定性和可靠性,这对于需要精确时钟信号的应用来说至关重要。

        此外,该微控制器还支持高级的掉电保护模式。在这个模式下,当系统进入省电状态时,随机存储器(RAM)中的数据能够被自动保存,而微控制器会停止所有活动。在这种状态下,系统不会进行任何操作,直到它接收到新的中断信号或者被复位。这种存储保护机制为数据安全提供了额外的保障,确保了即使在断电等极端情况下数据也不会丢失,这对于许多关键应用非常重要。

        总之,STM32F103C8T6微控制器与其外围电路的结合,为我们提供了一个功能强大、响应快速、成本效益高、能耗低的数据处理平台,非常适合广泛的应用场景,从简单的家电控制到更复杂的工业自动化系统。

3.3 硬件参数

        STM32F103C8T6是一款基于ARM Cortex-M 内核

STM32系列的32位的微控制器程序存储器容量是64KB,需要电压2V~3.6V,工作温度为-40°C ~ 85°C。STM32F103C8T6单片机电路的示意图如图3.1所示:

图3.1 STM32F103C8T6原理图

本设计用到的引脚如下图(图3.2)所示:

图3.2 STM32F103C8T6模块电路图

图3.3 STM32F103C8T6最小系统板

图3.4 硬件图解

3.4 重量检测模块

3.4.1 芯片概述

        本系统采用HX711称重传感器模块来进行对物品重量的检测。HX711是专为高精度称重传感器设计的24位 A/D 转换器,与同类型其它芯片相比,该芯片是专门为称重传感器设计的,称重传感器只需要一个HX711芯片即可完成称重信号的处理及AD转换;对于单片机来说,获取此刻的重量值,只需一个简单函数读取此时AD值,并通过一个线性方程的转换后即可获取此时物体的精确重量。

        HX711芯片集成了其他同类型芯片所需的外围电路,包括稳压电源、片内时钟发生器等,具有集成度高、响应速度快等优点。并且抗干扰能力强。降低了电子秤的整体成本,提高了整机的性能和可靠性。芯片与内部MCU芯片的接口和编程非常简单,所有的控制信号都由引脚控制,无需对芯片内部的寄存器进行编程。输入选择开关可以任意选择通道A或通道B并连接到其内部的低噪声可编程放大器。A通道可编程增益为128或64,对应的满量程差分输入信号幅度分别为±20mV或±40mV。通道B具有32的固定增益以确定系统参数。IC内提供的稳压电源可以直接给IC内的外部传感器和A/D转换器供电,板上不需要额外的模拟电源,片上时钟发生器不需要任何外部元件。自动上电复位功能简化了上电初始化过程。该芯片为16 管脚的 SOP-16 封装,图3.5为HX711引脚图:

图3.5 HX711引脚图

图3.6 HX711引脚功能图

3.4.2HX711芯片原理

1. 5kg 传感器:

        满量程输出电压=激励电压*灵敏度1.0mv/v。例如:供电电压是5v ,乘以灵敏度1.0mv/v=满量程5mv。相当于有5Kg 重力产生时候产生5mV 的电压。

2. 711模块对产生的5mV 电压进行采样

        711模块A 通道带有128倍信号增益,可以将5mV 的电压放大128倍,然后采样输出24bit AD 转换的值,单片机通过指定时序将24bit 数据读出。

3. 详细讲解程序计算原理:

        步骤1 :计算传感器供电电压

        HX711可以在产生VAVDD 和AGND 电压,即711模块上的E+和E-电压。

        该电压通过VAVDD=VBG(R1 +R2 )/R2计算。VBG 为模块基准电压1.25v,R1 = 20K,R2 = 8.2K,因此得出VAVDD = 4.3V。为了降低功耗,该电压只在采样时刻才有输出,因此用万用表读取的值可能低于4.3v,因为万用表测量的是有效值。

        步骤2 :计算AD 输出最大值

        在4.3V 的供电电压下5Kg 的传感器最大输出电压是4.3v*1mv/V = 4.3mV,经过128倍放大后,最大电压为4.3mV*128 = 550.4mV,经过AD 转换后输出的24bit 数字值最大为:550.4mV*2 24 /4.3V ≈ 2147483

​​​​​​​        步骤3 :程序中数据的转换

        程序中通过HX711_Buffer = HX711_Read();获取当前采样的AD 值,最大2147483,存放在long 型变量HX711_Buffer 中,因long 型变量计算速率和存放空间占用资源太多,固除以100,缩放为int 型,便于后续计算。

                Weight_Shiwu = HX711_Buffer/100;

                Weight_Shiwu 最大为21474。

​​​​​​​​​​​​​​        步骤4 :将A 值反向转换重力值

        假设重力为A Kg,(x<5Kg),测量出来的AD 值为y,5Kg 传感器输出,发送给AD 模块儿的电压为A Kg * 4.3mV / 5Kg = 0.86A mV,经过128倍增益后为128 * 0.86A = 110.08AmV,转换为24bit 数字信号为110.08A mV * 2 24 / 4.3V = 429496.7296A,所以y = 429496.7296A /100 = 4294.967296 A,因此得出A = y / 4294.967296 Kg ≈ y / 4.30 g。所以得出程序中计算公式Weight_Shiwu = (unsigned int)((float)Weight_Shiwu/4.30+0.05);//+0.05是为了四舍五入百分位。

        需要注意的是:因为不同的传感器斜率特性曲线不一样,因此,每一个传感器需要矫正这里的4.30这个除数。

3.4.3 HX711芯片特点:

        A 两路可选择差分输入

        B片内低噪声可编程放大器,可选增益为32,64和128

        C片内稳压电路可直接向外部传感器和芯片内A/D 转换器提供电源

        D片内时钟振荡器无需任何外接器件,必要时也可使用外接晶振或时钟

        E上电自动复位电路

        F简单的数字控制和串口通讯:所有控制由管脚输入,芯片内寄存器无需编程

        G可选择10Hz或80Hz的输出数据速率

        H同步抑制 50Hz 和 60Hz 的电源干扰

        I 耗电量(含稳压电源电路):典型工作电流:< 1.6mA, 断电电流:< 1 µ A

        J工作电压范围:2.6 ~ 5.5V

        K工作温度范围:-40 ~ +85℃

        ​​​​​​​L 16 管脚的 SOP-16 封装

​​​​​​​3.4.4  HX711通信引脚:

        HX711芯片与单片机的通讯只需要两个引脚,时钟引脚PD_SCK及数据引脚DOUT,用来输出数据,选择输入通道和增益。当数据输出管脚DOUT为高电平时,表明A/D转换器还未准备好输出数据,此时串口时钟输入信号PD_SCK应为低电平。当DOUT从高电平变低电平后,PD_SCK应输入25至27个不等的时钟脉冲,如图3.6所示:

          

图3.6 HX711通信引脚图

        HX711为串行数据总线型A/D转化器。作为串行通讯方式,那么掌握其时序图对于该器件的使用和操作起到了至关重要的作用。串口通讯线由管脚PD-SCK和DOUT组成,用来输出数据,选择输入通道和增益。当数据输出管脚DOUT为高电平,表明A/D转换器还未准备好输出数据,此时串口时钟输入信号PD-SCK应为低电平。当DOUT从高电平变低电平后,PD-SCK应输入25至27个不等的时钟脉冲。其中第一个时钟脉冲的上升沿将读出输出24位数据的最高位(MSB),直至第24个时钟脉冲用来选择下一个A/D转换的输入通道和增益。时序如图3.7所示:

   图3.7 HX711时序图

3.4.5 HX711硬件:

图3.7为HX711硬件:

  

图3.8 HX711硬件

  

图3.9 HX711连接方式 

        图3.10为实物连接方式图,蓝线接地,绿线dt数据接到stm32的PB7,黄线时钟接到PB8,橙线电源。

  

图3.10 HX711连接方式实物图

 3.4.6 重量检测模块电路图

  

图3.11 重量检测模块电路图 

3.5 温度检测模块

3.5.1 硬件概述

        本次通过DS18B20模块进行温度的信息采集。它是一种体积小、适用电压宽、微处理器接口简单的新型数字温度传感器,测温范围-55~+125℃,精度±0.5℃,工作在3-5℃。电压范围3V至5V。用户设置的报警温度存储在EEPROM中并在断电后保留。

        DS18B20是美国DALLAS半导体公司继DS1820之后最新推出的一种改进型智能温度传感器。与传统的热敏电阻相比,它能够直接读出被测温度并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。可以分别在93.75 ms和750 ms内完成9位和12位的数字量,并且从DS18B20读出的信息或写入DS18B20的信息仅需要一根口线(单线接口)读写,温度变换功率来源于数据总线,总线本身也可以向所挂接的DS18B20供电,而无需额外电源。因而使用DS18B20可使系统结构更趋简单,可靠性更高。它在测温精度、转换时间、传输距离、分辨率等方面较DS1820有了很大的改进,给用户带来了更方便的使用和更令人满意的效果。

        DS18B20是常用的数字温度传感器,其输出的是数字信号,具有体积小,硬件开销低,抗干扰能力强,精度高的特点。  DS18B20数字温度传感器接线方便,封装成后可应用于多种场合,如管道式,螺纹式,磁铁吸附式,不锈钢封装式,型号多种多样,有LTM8877,LTM8874等等。

        主要根据应用场合的不同而改变其外观。封装后的DS18B20可用于电缆沟测温,高炉水循环测温,锅炉测温,机房测温,农业大棚测温,洁净室测温,弹药库测温等各种非极限温度场合。耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。

3.5.2 硬件原理

        DS18B20的读写时序和测温原理与DS1820相同,只是得到的温度值的位数因分辨率不同而不同,且温度转换时的延时时间由2s减为750ms。DS18B20的测温原理如图3.9所示,图中低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器1,高温度系数晶振随温度变化其震荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入,图中还隐含着计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲后进行计数,进而完成温度测量。

        计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将-55 ℃所对应的基数分别置入减法计数器1和温度寄存器中,减法计数器1和温度寄存器被预置在 -55 ℃ 所对应的一个基数值。

        减法计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器1的预置值减到0时温度寄存器的值将加1,减法计数器1的预置将重新被装入,减法计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。

        图3.12中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正减法计数器的预置值,只要计数门仍未关闭就重复上述过程,直至温度寄存器值达到被测温度值,这就是DS18B20的测温原理。

        另外,由于DS18B20单线通信功能是分时完成的,它有严格的时隙概念,因此读写时序很重要。系统对DS18B20的各种操作必须按协议进行。操作协议为:初始化DS18B20(发复位脉冲)→发ROM功能命令→发存储器操作命令→处理数据。各种操作的时序图与DS1820相同。

图3.12 DS18B20测温原理图 

图3.13为ds18b20实物图:

图3.13 ds18b20实物图 

2.5.3 主要特性

        (1)适应电压范围3.0V~5.5V,在寄生电源方式下可由数据线供电。

        (2)DS18B20与微处理器之间仅需要—条口线即可双向通讯。

        (3)支持多点组网功能,多个DS18B20可以并联在唯—的三线上,实现组网多点测温。

        (4)不需要任何外围元件,全部传感元件及转换电路集成在外形如一只三极管的电路内。

        (5)测温范围-55℃~+125℃,在-lO℃~+85℃时精度为±0.5℃。

        (6)可编程的分辨率为9位~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃,可实现高精度测温。

        (7)在9位分辨率时,最多93.75ms便可把温度转换为数字,12位分辨率时最多750ms便可把温度值转换为数字。

        (8)直接输出数字温度信号,以一线总线串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力。

        (9)电源极性接反时,芯片不会因发热而烧毁,但不能正常工作。

        (10)3DS18B20遵循单总线协议,每次测温时必须有初始化、传送ROM命令、传送RAM命令、数据交换等4个过程。

3.5.4 内外结构

        DS18B20的外部有三个管脚,外部结构如图3.14所示。其中,VDD为电源输入端,DQ为数字信号输入/输出端,GND为电源地。

图3.14 DS18B20外部结构图 

        DS18B20内部结构主要包括4部分:64位光刻ROM、温度传感器、非易失的温度报警触发器TH和TL、配置寄存器,如图3.15所示:

图3.15 DS18B20内部结构图 

3.5.5 部件介绍

        1. 存储器

        DS18B20的存储器包括高速暂存器RAM和可电擦除RAM,可电擦除RAM又包括温度触发器TH和TL,以及一个配置寄存器。存储器能完整的确定一线端口的通讯,数字开始用写寄存器的命令写进寄存器,接着也可以用读寄存器的命令来确认这些数字。当确认以后就可以用复制寄存器的命令来将这些数字转移到可电擦除RAM中。当修改过寄存器中的数时,这个过程能确保数字的完整性。

        高速暂存器RAM是由8个字节的存储器组成;。用读寄存器的命令能读出第九个字节,这个字节是对前面的八个字节进行校验。

        2. 64-位光刻ROM

        64位光刻ROM的前8位是DS18B20的自身代码,接下来的48位为连续的数字代码,最后的8位是对前56位的CRC校验。64-位的光刻ROM又包括5个ROM的功能命令:读ROM,匹配ROM,跳跃ROM,查找ROM和报警查找。

        3. 外部电源的连接

        DS18B20可以使用外部电源VDD,也可以使用内部的寄生电源。当VDD端口接3.0V—5.5V的电压时是使用外部电源;当VDD端口接地时使用了内部的寄生电源。无论是内部寄生电源还是外部供电,I/O口线要接5KΩ左右的上拉电阻。

        4. 配置寄存器

        配置寄存器是配置不同的位数来确定温度和数字的转化。

        可以知道R1,R0是温度的决定位,由R1,R0的不同组合可以配置为9位,10位,11位,12位的温度显示。这样就可以知道不同的温度转化位所对应的转化时间,四种配置的分辨率分别为0.5℃,0.25℃,0.125℃和0.0625℃,出厂时以配置为12位。

        5. 温度的读取

        DS18B20在出厂时以配置为12位,读取温度时共读取16位,前5个位为符号位,当前5位为1时,读取的温度为负数;当前5位为0时,读取的温度为正数。温度为正时读取方法为:将16进制数转换成10进制即可。温度为负时读取方法为:将16进制取反后加1,再转换成10进制即可。例:0550H = +85 度,FC90H = -55 度。

3.5.6 电路原理图

        其设计电路原理图如图3.16所示:

图3.16 温度检测模块电路图

3.6 显示模块

        在此次设计中,主要采用OLED模块完成称重数据以及温度数据的显示。在本设计之中,单片机的引脚直接与显示模块实现数据连接,以电平信号的输入和输出的形式实现显示数据的命令下达。在本系统的总体设计中需要显示的数据都将通过单片机将数据显示在显示模块上。液晶显示器采用的是OLED12864液晶显示屏,采用IIC通讯,引脚连接VCC电源,GND接地。其原理图如下图3.15所示:

图3.17 显示模块电路图 

3.7 按键模块

        本次设计选择采用独立按键来进行功能操作。这种按键的突出优点就是它的软件和硬件相对比较简单,易于操作。当按键处于正常状态时,即处于未开机状态时,CPU对应的I/O接口由于内部有上拉电阻,其输入状态为高电平;当按键被按下后,对应的I/O接口由高电平状态转变为低电平状态。通过I/O接口状态,就可以判断出按键的状态。以此来实现设置阈值的功能。其原理图如下图3.18所示:

图3.18 按键模块电路图

3.8 项目原理图的绘制

        图3.19为本次项目的原理图,该原理图使用Altium Designer绘制,五个模块分别是oled显示模块,stm32核心板模块,按键模块,ds18b20温度模块与力模块。


        图3.17为本次项目的原理图,该原理图使用Altium Designer绘制,五个模块分别是oled显示模块,stm32核心板模块,按键模块,ds18b20温度模块与力模块。

四、软件设计

4.1 设计思路

        结合原理图连接制作完成硬件设计之后,下一步就需要对软件程序进行设计开发,系统采用了的是C语言技术进行开发,开发工具使用的是KEIL5。本设计的程序设计,首先进行各个功能模块程序的编写,接着进行main()主程序的编写,把各个功能模块调入进去,编写完成之后进行程序的BUG调试。采用模块化的程序编写有利于检查以及后期类似开发工作的使用,使用到相关模块的时候,直接拿来使用即可。比如显示模块,当在以后的开发工作中使用到的时候可以直接把之前写好的程序进行使用即可,增强了程序的复用性。不仅如此,当我们的系统出现代码的错误时候,可以进行各个模块的调试来确认发生的错误,为我们的开发工作提高了很大的效率。程序主要由一个主函数和多个子函数构成,将温度模块与重力检测模块以及显示模块分别构建函数后,封装,在主函数中调用。

        良好的程序编写习惯很多好处。具体如下所示:

        各个数据检测模块、反馈模块的数据能够单独获得,方面每个小模块进行数据检测以及排错处理。

        在每个阶段数据处理完成后配合相关的提示语,能够清楚地看到系统进行到那个阶段,出现错误提示后,也能很快的进行错误排查。

        各个模块封装数据的完整性,为后期数据添加以及错误排查提供了良好的基础。

4.2 编程环境及语言简介

        本次系统的程序设计开发,采用的是Keil5开发软件以及C语言技术。系统能够顺利完成,程序能够顺利编写,其中离不开优秀的开发编程软件Keil5软件。Keil5软件是一款常用的单片机开发程序软件,这个软件可以使用C语言以及汇编语言的开发,简单明了的操作界面以及编写程序规则的提示都对开发者带来了极好的体验,可以大大减少开发者的开发周期。以至于,开发者进行51单片机或者STM32单片机系统的软件程序开发时几乎都是使用Keil5软件来编写,等待编写完成之后,Keil5还可以进行程序的仿真,来进一步确认程序的编写是否存在明显的错误。

        STM32单片机系统的程序软件的开发通常采用两种语言,C语言或者汇编语言,这两种语言经过编译之后都可以让单片机系统来进行识别。C语言对于初学者来说更友好,无论是在语言上、功能结构上都很清楚的看出每个程序要做的动作,汇编语言则需要学习更多的汇编知识才可上手。为了系统更快的开发,本次选用了C语言来作为开发系统的软件程序语言。通过编写完各个模块的功能程序的时候,需要在主程序main()方法中调用使用。编写完成程序之后,就可以进行编译而生成HEX文件来被单片机系统的主控制器来识别,从而完成本次系统的开发。下图(图4.1)是keill5开发环境页面:

图4.1 keill5开发环境页面图

4.3 主流程序设计

        系统开始启动工作之后,完成初始化,以STM32单片机为核心微控制器,通过使用温度模块检测环境的温度信号,重量检测模块进行物品的称重信号采集,当检测到信号时通过AD转换,传递给单片机处理,单片机刷新OLED完成数据显示。系统主程序流程图如图4.2所示:

图4.2 主流程图 

4.4 硬件主要模块子程序设计

        4.4.1 重量数据采集子程序

        本设计通过HX711称重传感器对称重物品的重量信号进行录取,信号经过AD转换传输至单片机进行数据处理。执行的过程如图4.3所示。

图4.3 称重数据采集子程序流程图

        1. 主要程序说明:

                                                         图4.4  力模块程序及注释图

 ​​​​​​​

图4.5 力模块引脚定义图 

        图4.6为stm32f103系列与stm32f101系列的固件函数库图,本项目使用了GPIO库、RCC库、HAL库、TIM库等。

图4.5 stm32f103系列固件函数库 

4.4.2 温度数据采集子程序

        本设计DS18B20传感器完成温度的信号采集,将DS18B20传感探测到的温度信号,通过AD转换之后将数据传递至核心板处理。执行的过程如图4.7所示:

图4.7 温度数据次采集子程序流程图 

        1.指令的使用

                ds18b20是单总线协议。

                当主机需要对多个DS18B20中的某一个进行操作时,主机首先逐个与DS18B20挂接-搜索ROM(FOH),读出其序列号-读ROM(33H),然后发出匹配ROM(55H),紧接着提供64位序列号,之后的操作就是针对该DS18B20的了。

                如果只有一个DS18B20测温,就不需要搜索ROM、读ROM以及匹配ROM等操作了,只要用跳过ROM(CCH),就可进行如下温度转换(44H)和读取操作(BEH)了。其流程如图4.8所示:

图4.8 指令取用流程 

        2.主要程序说明

图4.9 温度模块初始化图 

图4.10 初始化程序及注释图 

图4.11 写指令模块图 

图4.12 写指令程序及注释图

图4.13 读指令模块图 

图4.14 读指令程序及注释图

下图(图4.11)为ds18b20读温度的过程:

图4.15 读温度过程图 

图4.16 读温度程序及注释图 

        将以上程序整理封装之后,在主函数中调用即可,如果程序报错,还可以迅速找到错误的部分进行改错。

4.4.3 显示数据子程序

        对于本次OLED显示的程序设计,主要是按照OLED的操作首先来进行程序的编写,即按照写指令、写数据,写地址的方式对需要写入的数据依次进行写入。具体流程图如图4.17所示:

图4.17显示模块子程序流程图 

五、调试与分析:

5.1 硬件调试

        完成系统设计与开发之后,接下来的一个重要步骤那就是硬件电路的调试。首先通过原理图来查看电路连接顺序是否错误,查看一些线路是否已经完全连接在其相应的管脚上,因为模块需要飞线加上线路多的情况下是非常容易连接错误的,接着需要借助万能表来测试焊接电路是否能够正确导通,用万能表测试过程中如果万能表的蜂鸣器正常响起那就说明是可以导通,反之就是不导通,有可能就是存在虚焊、焊接错误等问题,这时就需要仔细去排查,虚焊问题可以通过电烙铁来重新焊接,焊接完成再用万能表测试,蜂鸣器正常响起那就说明是焊接正确的,最后需要对电源进行测试,在给系统上电之前,需要对各个模块承受电流的估量,可以借助稳压电源来进行测试,系统上电之后需要仔细观察各个模块的反应是否正常,发现异常后,需要立即断掉电源,正常运行一分钟后,在单片机附件按下复位键,观察系统整体反应,正常运行就完成了硬件电路的测试。

5.1.1 硬件连接测试

        在整个测量系统开发完成后,首先要做的就是对硬件工作环境的测试。对其各个数据采集模块进行回传数据检测,能够成功的获取而部分采集数据。本文设计的系统要在外界环境下进行工作,要对其管脚进行测试,在不同环境下进行数据的获取,看是否会出现错误。以及管脚是否会出现松动,如果连接不牢靠 ,也会出现相关数据获取的不成功。数据获取的不成功,会直接导致后期工作的运行。对电路板的各个模块要认真检查,这样才能保证系统长期稳定的运行下去。当硬件系统的某个地方出现问题,也要用万用表对其进行错误分析排查。硬件稳定的工作环境是后面逻辑数据处理的前提。

5.1.2 硬件功能测试

        连接完系统之后,确认无误可以进行功能测试,本次的功能测试先从各个模块来进行调试,看是否能够正常运行,确认好各个模块正常运行之后,就可以进行联调,看是否能够达到我们的所需的要求。系统功能测试用例与结果如表5.1所示:

表5.1 硬件模块测试结果

编号

测试目标

测试内容

测试结果

1

单片机模块

1.测试单片机是否可以正常工作

成功

2

传感器模块

1.测试传感器模块是否正常工作

2.测试传感器模块数据准确性

成功

3

显示模块

1.测试显示模块是否正常工作

2.验证数据是否正常刷新

成功

5.2 软件调试​​​​​​​

        在完成硬件测试后,接下来就是软件测试了。借助Keil5软件来打开程序,因为采用的是模块化的开发方式,单个模块程序放在一个文件里,最后通过直接调用在main()主程序就可以使用了,该方法可以让main()主程序看起来没那么繁琐,也为了更好去查看问题。运行程序后,注意查看是否会出现错误警告,当出现错误的时候,需要根据Keil5编译运行的日志进行仔细盘查,日志里会显示错误的具体行数,根据提示的行数,一行行去解决,多数的错误会出现在大小写,标点符号以及括号是否对应等小问题,这时候就需要很仔细去查看了,当发现是程序出了问题,可查看是否是配置参数、指针变量或者声明类型等常见类型的错误,尝试去解决,解决不了,可以通过网上查阅资料、书籍搜索或者咨询同学和老师的方式去解决这个问题。不断尝试、不断编译,当出现零错误零警告才是软件程序测试步骤的完成。

5.2.1 软件测试方案

        本系统的对于软件的测试方案选择黑盒测试方法,这样比较简便。

        黑盒测试就是测试人员把软件产品或阶段性产品看做是一个黑盒子,在测试过程中测试人员只需关心对这个软件黑盒进行操作会得到什么样的结果,而不必深入的去了解软件的内部实现。黑盒测试只考虑系统的输入和输出,不去管程序的内部结构和处理过程。

5.2.2  软件测试过程

        (1)使用Keil软件编写测量系统系统设计代码;

        (2)完成代码编程,代码编译,调试过程中出现显示异常,出现乱码,通过修订代码,编译成功;

        (3)将编译成功的HEX文件下载到STM32单片机;

                (4)连接下载口,打开KEIL5软件以及stlink进行程序烧录。

(5)进行温度、称重、显示传感器子程序调试。观察是否能够正确获取数据。

5.3 整机调试分析

        之后进行程序的调试修改,再用stlink进行程序烧录,烧录口在板子右边有4个插针,3.3  SWDIO,SWCLK,GND着4个脚就是下载端口。如图5.1所示,右侧灯亮起的旁边就是stlink连接处。

 图5.1 实物图

         完成硬件和软件的调试之后,就是对系统的整体测试了,这时候需要借助程序下载工具来完成,在下载时,需要注意选好单片机型号芯片、串口号以及波特率,下载成功后,观察单片机系统上出现的情况,接着对单个模块功能分别进行功能测试,观察是否成功实现功能,出现模块未能成功实现,就需要去进行软件结合硬件的测试了,直到找到问题并解决。经过多次测试,本系统能够实现其基本的功能,供电稳定,当系统正常运行时能够实时显示数据和进行报警、与上位机数据通信是否成功等功能。实物调试图如图5.2所示:

图5.2 实物调试分析图 

        可以看到,将手放到温度传感器上时,测量的温度有所改变,此时显示24℃。之后进行力的测试,测试图如下图(图5.3)所示:

图5.3 实物测试图 

图5.4 测试结果图 

        购买的hx711是5kg的,可以看到,上面没有东西时,显示屏上的数字是0,将充电宝放上去后,测得数据位340g。

        之后进行硬币测试,将几枚硬币的重量测试出来后,记录数据,而后依次增加硬币的数量,从而画出硬币数量与重量的关系曲线图,可以论证该测试是否准确。

 图5.5 5个硬币20g

图5.6 20个硬币80g

        依次测了5个、10个、15个、20个硬币,重量分别是20g、40g、60g、80g,画出两者之间的曲线图(图5.7),易看出重量一直递增,由此得出该重力测试没问题。因为称重传感器的分辨率是20g/DIV ,也就是监测到20g他才输出一格,所以说它测量到的数据全都是20的倍数。

图5.7 硬币数量与重量关系图 

六、总

        本次设计的测量系统以STM32单片机为核心微控制器,通过使用温度模块检测环境的温度信号,重量检测模块进行物品的称重信号采集,当检测到信号时通过AD转换,传递给单片机处理,单片机刷新OLED完成数据显示。通过对系统的整体设计、硬件设计以及软件程序的设计等等,每一块的设计都让我学习到了很多,硬件设计这部分,了解到了每个模块的作用、IO口的功能以及其注意事项。软件程序这部分,让我了解到了程序规范的重要性,好的编程风格能让自己的代码重复使用,本次测量系统的研究,充分体会到了程序模块化设计的便利性,最后经过系统测试,从单个功能再到系统整体功能均得到了很好的实现,并且在数据响应及时性、数据请求性以及数据处理能力等等,表现得都很好。当然,本次设计也有很多不足之处,比如数据智能处理部分,没能很好的进行数据的智能化处理,科学技术的飞速发展,更讲究事物的智能化处理,所以未来可以在这方面更好的进行设计。

七、资源下载链接:毕设&课设&项目&竞赛-基于STM32的测量温度与压力的数据处理设计.zip资源-CSDN文库

资源详情: 

标签:硬件,DS18B20,STM32,单片机,源码,模块,数据处理,数据,温度
From: https://blog.csdn.net/m0_63168877/article/details/137423830

相关文章