毕业设计 基于C语言的在线温度计设计和制作

0 项目说明

基于C语言的在线温度计设计和制作

提示:适合用于课程设计或毕业设计,工作量达标,源码开放

1 前言

主要设计自主研发的温度采集和温度数据的储存处理显示过程,继而实现在线温度计系统。在线温度计主要主要包括温度采集单元、数据的储存处理和显示。

随着信息化与工业化的深度融合,信息技术渗透到了工业企业产业链的各个环节,条形码、二维码、RFID、工业传感器、工业自动控制系统、工业物联网、ERP、CAD/CAM/CAE/CAI等技术在工业企业中得到广泛应用,尤其是互联网、移动互联网、物联网等新一代信息技术在工业领域的应用,工业企业也进入了互联网工业的新的发展阶段,工业企业所拥有的数据也日益丰富。工业企业中生产线处于高速运转,由工业设备所产生、采集和处理的数据量远大于企业中计算机和人工产生的数据,从数据类型看也多是非结构化数据,生产线的高速运转则对数据的实时性要求也更高。因此,工业大数据应用所面临的问题和挑战并不比互联网行业的大数据应用少,某些情况下甚至更为复杂。

2 项目介绍

在线温度计系统的整体描述为:将孤立的温度数据孤岛通过wifi组成一个统一的信息网络,基于这个信息网络实现对温度大数据的利用,该系统一般包括数据采集终端网络、数据处理平台、用户终端,第三方平台等。

当传感器数据被采集到终端后,终端主控芯片和数据处理平台的数据服务器建立无线链路,可以按需求配置为将数据包实时主动推送或定时推送,也可以根据服务器的请求被动的发送数据包,数据服务器收到数据包后根据数据来源有序的存放在数据库中,用户可以通过网页服务器提供的web页面查看、管理和分析数据。也可以通过API接口直接和数据服务器交互得到分析后的数据。

3 硬件设计

3.1 总体设计

采用STM32的主控芯片,加载DS18B20数字温度采集芯片作为温度采集,通信使用ESP8266 高性能Wi-Fi网络解决方案,整体系统集成度高,复杂度小,故障率低,性能稳定可靠。

3.2 主控

主控采用STM32单片机,Stm32单片机最高可工作到72MHz,系统主时钟采用无源晶振,频率为8MHz,通过片内锁相环实现倍频,配置芯片内部存储器,可实现我们所需要的工作频率,作为系统的工作时钟。

3.3 实时时钟(RTC)

作为温度数据需要有一个和当前环境相关的一个主键,那就是温度采集的时间,STM32单片机自带RTC时钟,因此不需要外置的时钟芯片,作为内置时钟,减小了额外的硬件开销,怎加了系统的可靠性(芯片级的相对PCB级的可靠性更高)。

STM32的实时时钟(RTC)是一个独立的定时器。STM32 的 RTC 模块拥有一组连续计数的计数器,在相应软件配置下,可提供时钟日历的功能。修改计数器的值可以重新设置系统当前的时间和日期。

RTC模块和时钟配置系统(RCC_BDCR 寄存器)是在后备区域,即在系统复位或从待机模式唤醒后 RTC 的设置和时间维持不变。但是在系统复位后,会自动禁止访问后备寄存器和 RTC,以防止对后备区域(BKP)的意外写操作。所以在要设置时间之前,先要取消对备份区域(BKP)的写保护。

RTC由两个主要部分组成,第一部分(APB1 接口)用来和 APB1 总线相连。此单元还包含一组16bit寄存器,可通过APB1总线对其进行读写操作。APB1接口由APB1总线时钟驱动,用来与APB1总线连接。

另一部分(RTC核心)由一组可编程计数器组成,分成两个主要模块。第一个模块是RTC的预分频模块,它可编程产生1秒的RTC时间基准TR_CLK。RTC的预分频模块包含了一个20位的可编程分频器(RTC预分频器)。如果在RTC_CR寄存器中设置了相应的允许位,则在每个TR_CLK周期中RTC产生一个中断(秒中断)。第二个模块是一个32位的可编程计数器,可被初始化为当前的系统时间,一个32位的时钟计数器,按秒钟计算,可以记录4294967296秒,约合136年左右,在本应用中,这已经是足够了的了。

3.4 温度传感器

DS18B20是由 DALLAS半导体公司推出的一种的“一线总线”接口的温度传感器。与传统的热敏电阻等测温元件相比,它是一种新型的体积小、适用电压宽、与微处理器接口简单的数字化温度传感器。

一线总线结构具有简洁且经济的特点,可使用户轻松地组建传感器网络[2],从而为测量系统的构建引入全新概念,测量温度范围为-55~+125℃,精度为±0.5℃。现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。它能直接读出被测温度,并且可根据实际要求通过简单的编程实现 9~l2 位的数字值读数方式。它工作在 3—5.5 V 的电压范围,采用多种封装形式,从而使系统设计灵活、方便,设定分辨率及用户设定的报警温度存储在EEPROM 中,掉电后依然保存。

3.5 无线联网模块

ESP8266是一个完整且自成体系的Wi-Fi网络解决方案,能够通过外部应用处理器加载所有Wi-Fi网络功能。

ESP8266提供强大的片上处理和存储能力,使其可通过GPIO口集成传感器及其他应用的特定设备,实现了最低前期的开发和运行中最少地占用系统资源。ESP8266高度片内集成,包括天线开关balun、电源管理转换器,因此仅需极少的外部电路,且包括前端模块在内的整个解决方案在设计时将所占PCB空间降到最低。


装有ESP8266的系统表现出来的领先特征有:节能VoIP在睡眠/唤醒模式之间的快速切换、配合低功率操作的自适应无线电偏置、前端信号的处理功能、故障排除和无线电系统共存特性为消除蜂窝、蓝牙、DDR、LVDS、LCD干扰。

4 软件设计

单片机上的软件采用三层构架。
在这里插入图片描述

最底层为CHIP层,这一层的直接操作寄存器配置芯片来直接和芯片及芯片内部外设打交道的芯片层,主要包括adc、bkp、can、cec、crc、dac、dbgmcu、dma、exti、flash、fsmc、gpio、i2c、iwdg、pwr、rcc、rtc、sdio、spi、tim、usart、wwdg等。这一层最基本的API由STMicroelectronics公司的STM32F10x_StdPeriph_Driver软件包提供,为了方便使用和提高效率,在兼容STM32F10x_StdPeriph_Driver的基础上使用STM32FGLIB对其优化使其对上层表现为效率更高,移植更方便,更便于理解,主要使用的方式为使用汇编或寄存器配置提高效率,外设配置文件化来达到目的。

第二层为HAL_Driver层,包含所有硬件外设驱动这一层依赖于CHIP层如果这一层的驱动完全依赖于STM32FGLIB,可以具有更高的移植性,当改变底层芯片时代码不需要任何改变,当外设接口改变,比如使用不同的IO口,不同的串口,或者是当SPI硬件接口不够用,必须使用软件模拟SPI时可以做到不更改代码,仅仅需要修改配置文件就可以兼容最新硬件的目的。

这一层对上提供外设硬件API,在本设计中DS18B20为温度传感器,则需要在HAL_Driver中增加DS18B20这一配置,并实现两个通用API:

  1. Void DS18B20_Init(void);
  2. Float DS18B20_GetTemp(void);

最上层为应用逻辑层,实现应用的逻辑调用,在这一层的逻辑实现是基于调用器的,考虑到MCU上资源的紧缺,没有使用完整的操作系统,完整的操作系统任务调度是需要复杂的现场保护恢复等实现,带来运行效率的下降和资源消耗,因此在本设计中参考协程的思想实现任务的简单调度。

/***SYS***/
#include "sys.h"
#include "sys_os.h"
#include "minos_delay.h"
#include "stm32_config.h"
int main(void)
{
	SYS_INIT();
	/***总循环***/
	while (1)
	{
		RunTaskA(task_rtc, 1);//实时时钟(RTC)
		RunTaskA(TaskSensor, 2);//传感器数据采集
		RunTaskA(TaskSmartConfig, 3);//SmartConfig
		RunTaskA(TaskCache, 4);//数据缓存
		RunTaskA(TaskDataEx, 5);//数据通信
	}
}

4.1 数据采集

DS18B20的其内部结构图。
在这里插入图片描述

DS18B20的地址序列码就是出厂前被被光刻在ROM上的64bit序列号,每颗DS18B20的64bit序列号均不相同。64bit地址序列码的排列是:前 8 bit是产品家族码,接着48bit是DS18B20 的序列号,最后8bit是前面56bit的循环冗余校验码(CRC=X8+X5 +X4 +1)。DS18B20的地址序列码的作用是使每一颗DS18B20的通信地址都各不相同,这样就可实现在一根总线上挂接多个DS18B20。

所有的单总线器件要求采用严格的信号时序,以保证数据的完整性。DS18B20共有6种信号类型:复位脉冲、应答脉冲、写0、写1、读0和读1[5]。所有这些信号,除了应答脉冲以外,都由主机发出同步信号。并且发送所有的命令和数据都是字节的低位在前。

这几个信号的时序分别为:

  1. 复位脉冲和应答脉冲:单总线上的所有通信都是以初始化序列开始。主机输出低电平,保持低电平时间至少480us,以产生复位脉冲。接着主机释放总线,4.7K 的上拉电阻将单总线拉高,延时 15~60 us,并进入接收模式(Rx)。接着 DS18B20 拉低总线 60~240 us,以产生低电平应答脉冲,若为低电平,再延时 480 us。

  2. 写时序:写时序包括写 0 时序和写 1 时序。所有写时序至少需要 60us,且在 2 次独立的写时序之间至少需要 1us 的恢复时间,两种写时序均起始于主机拉低总线。写 1 时序:主机输出低电平,延时 2us,然后释放总线,延时 60us。写 0 时序:主机输出低电平,延时 60us,然后释放总线,延时 2us。

  3. 读时序:单总线器件仅在主机发出读时序时,才向主机传输数据,所以,在主机发出读数据命令后,须马上产生读时序,以便从机能够传输数据[3],所有读时序至少需要 60us,且在 2 次独立的读时序之间至少需要 1us 的恢复时间。每个读时序都由主机发起,至少拉低总线 1us。主机在读时序期间必须释放总线,并且在时序起始后的 15us 之内采样总线状态[4]。典型的读时序过程为:主机输出低电平延时 2us,然后主机转入输入模式延时 12us,然后读取单总线当前的电平,然后延时 50us。在了解了单总线时序之后,我们来看看DS18B20 的典型温度读取过程,DS18B20 的典型温度读取过程为:复位发 SKIP ROM 命令(0XCC)发开始转换命令(0X44)延时复位发送 SKIP ROM 命令(0XCC)发读存储器命令(0XBE)连续读出两个字节数据(即温度)结束。

5 项目展示

温度采集终端

SmartConfig手机客户端

数据处理平台Web主页

每个时刻最大最小温度曲线

页面编程调制过程图

6 项目工程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值