基于某STM32的PT100温度测量
- 格式:doc
- 大小:1.79 MB
- 文档页数:13
单片机基于stm32的数字温度计设计
数字温度计是一种用于测量环境温度的设备。
在这个问题中,我们将使用基于STM32的单片机来设计一个数字温度计。
为了设计这个温度计,我们需要以下组件和步骤:
1. STM32单片机:STM32是一种基于ARM架构的单片机,它具有强大的计算能力和丰富的外设接口,适用于各种应用。
2. 温度传感器:我们需要选择一种适合的温度传感器,常用的有数字式温度传感器,如DS18B20。
3. 连接电路:将温度传感器连接到STM32单片机。
这通常需要使用一些电子元件,如电阻、电容和连接线等来建立电路连接。
4. 编程:使用适合STM32单片机的编程语言,如C语言,来编写程序。
程序将读取温度传感器的数据,并将其转换为数字值。
5. 温度显示:将温度数据显示在合适的显示设备上,如LCD显示屏或七段数码管。
可以使用STM32单片机的GPIO口控制这些显示设备。
6. 数据处理:可以对温度数据进行进一步处理,如计算平均温度、设定警报阈值等。
以上是一个基本的数字温度计设计的流程。
具体的实现细节和代码编写可能需要根据具体的硬件和软件平台进行调整。
《基于Stm32的温湿度检测系统》篇一一、引言随着科技的进步和物联网的飞速发展,温湿度检测系统在各个领域的应用越来越广泛。
STM32系列微控制器以其高性能、低功耗的特点,广泛应用于各种嵌入式系统中。
本文将详细介绍一种基于STM32的温湿度检测系统,并阐述其设计思路、工作原理和性能特点。
二、系统概述基于STM32的温湿度检测系统主要由传感器模块、微控制器模块、通信模块以及显示模块等组成。
传感器模块负责采集环境中的温湿度数据,微控制器模块负责数据处理和控制系统工作,通信模块用于与其他设备进行数据传输,显示模块则用于显示温湿度数据。
三、硬件设计1. 传感器模块传感器模块选用DHT11温湿度传感器,该传感器具有响应速度快、精度高、稳定性好等优点。
DHT11通过I/O口与STM32微控制器进行通信,将采集到的温湿度数据传输给微控制器。
2. 微控制器模块微控制器模块采用STM32系列微控制器,负责整个系统的控制和数据处理。
STM32具有高性能、低功耗、丰富的外设接口等特点,可满足温湿度检测系统的需求。
3. 通信模块通信模块可根据实际需求选择不同的通信方式,如UART、SPI、I2C等。
本系统采用UART通信方式,通过串口与上位机进行数据传输。
4. 显示模块显示模块可选LED、LCD等显示设备。
本系统采用LCD显示屏,可实时显示温湿度数据。
四、软件设计软件设计主要包括传感器驱动程序、数据处理程序、通信程序以及显示程序等。
1. 传感器驱动程序传感器驱动程序负责初始化DHT11传感器,并读取其采集到的温湿度数据。
驱动程序采用轮询方式读取传感器数据,并通过I/O口将数据传输给微控制器。
2. 数据处理程序数据处理程序负责对传感器采集到的温湿度数据进行处理和转换。
本系统将原始的数字信号转换为摄氏度温度和相对湿度,以便于后续分析和处理。
3. 通信程序通信程序负责将处理后的温湿度数据通过UART口发送给上位机。
通信协议采用标准的串口通信协议,确保数据传输的可靠性和稳定性。
(1)测温电路部分测温环节电路输出的电压范围为0.3-3.3V。
下图是我设计的测温环节电路图。
选用PT1000(PT1000阻值变化幅度大,测温的灵敏度较PT100高一些;PT100更适合大范围测温)。
电桥电压为TL431产生的基准电压4V。
或者用REF3140产生一个稳定的4.096V作为电桥的输入电压。
R1和R2作为电桥的两臂,考虑到流过PT1000的电流不超过0.5mA,选择R1和R2阻值为7.5K。
电桥输入送到由OP07组成的差动放大电路中。
经过放大后电压输出送到STM32的AD采样端口。
由电桥平衡的计算公式可以算出,R3+R4=984.4欧,取值985欧;差动放大电路放大倍数为45.13倍,取值45倍。
此时根据选取的参数可以算出:在0摄氏度时:输出电压为287.366mV;15摄氏度时,输出电压为1.399V;40摄氏度时,输出电压为3.207V。
图1 测温部分电路图(2)温控部分TEC驱动芯片采用BTS7960电机驱动芯片。
BTS7960持续的漏极电流高达40A,能允许PWM的频率从0Hz到25kHz之间任意变化。
驱动电流可直接由输入逻辑电平控制。
输入INH和IN引脚的电平在1.75V以上就可以识别为高电平,1.4V以下就可以识别为低电平;可以用STM32单片机直接驱动。
其电平特性如图2所示。
图2 BTS7960电平特性本身BTS7960可以组成半桥驱动电路,在实际应用中,我将两片BTS7960组成全桥驱动电路。
可以实现对流通TEC电流的方向控制,即可以实现TEC制冷,也可以使TEC进行加热。
实际电路图如图3所示。
图3 TEC驱动电路PWM1接单片机定时器的PWM输出端口,进行占空比的调节。
CONTROL接单片机普通IO口,对BTS7960进行工作和休眠两种状态的控制(当设定为低电平进入睡眠状态)。
DIR接单片机普通IO口,控制流通TEC的电流方向。
当IN 输入为1时,高端MOSFET开通,低端MOS-FET关断,反之则高端关断低端开通。
基于STM32的温度测量系统梁栋(德州学院物理与电子信息学院,山东德州253023)摘要:温度是日常生活和农业生产中的一个重要参数,传统的温度计有反应缓慢,测量精度不高的和读数不方便等缺点,此外,通常需要人工去观测温度,比较繁琐,因而采用电子技术的温度测量就显得很有意义了。
面对电子信息技术的进步,生成了各种形式的温度测量系统。
本文设计了一个基于以STM32为核心的温度测量与无线传送的系统,温度信息采集使用数字化温度传感器DS18B20,无线传输使用ATK-HC05蓝牙模块的智能测温系统。
关键词 STM32; DS18B20; TFTLCD;智能测温系统1 绪论在现代社会的生产生活中,人们对于产品的精度要求越来越高,而温度是人们在生产生活中十分关注的参数,因此,对温度的测量以及监控就显得十分重要。
在某些行业中对温度的要求较高,由于工作环境温度的偏差进而引发事故。
如化工业中做酶的发酵,必须时刻了解所发酵酶的温度才可以得到所需酶;文物的保护同样也离不开温度的采集,不仅在考古文物的出土时间上,还是在档案馆和纪念馆中,温度的控制也是藏品保存关键,所以温度的检测对其也是具有重要意义的;另外大型机房的温度的采集,超出此范围会影响服务器或系统的正常工作等等。
传统方式监控温度往往很耗费人力,而且实时性差。
本文就设计了一个基于STM32的温度测量系统,在测量温度的同时能实现无线传输与控制。
STM32RBT6具有较低的价格、较高的测量精度、便捷的操作,同时在编程方面STM32也具有和其他单片机的优势之处,如51要求从基层编程,而STM32所有的初始化和一些驱动的程序都是以模板的形式提供给开发者,在此开发者只需要了些其他的模块功能和工作方式和少量的语法知识便可以进行编程,此优势不但节约了时间,也为STM32的发展做出了强有力的铺垫,而且STM32目前是刚刚被作为主流开发的单片机,所以其前景是无可估量的,这次毕业设计也是看好了其优越的发展趋势来选择的。
《基于Stm32的温湿度检测系统》篇一一、引言随着科技的进步,对环境的监控和控制变得日益重要。
其中,温湿度作为环境的重要参数,对于很多行业来说都具有非常重要的意义。
基于STM32的温湿度检测系统就是一种能高效准确监测和报告环境温湿度的解决方案。
该系统能够为环境控制和设备管理提供强大的技术支持。
二、STM32简介STM32是意法半导体公司推出的一款基于ARM Cortex-M内核的微控制器。
其具有高性能、低功耗、高集成度等特点,广泛应用于各种嵌入式系统中。
STM32的强大处理能力和丰富的外设接口使其成为构建温湿度检测系统的理想选择。
三、系统设计基于STM32的温湿度检测系统主要由传感器模块、STM32微控制器模块、显示模块以及通信模块等部分组成。
其中,传感器模块负责实时采集环境中的温湿度数据,STM32微控制器模块负责处理和分析这些数据,显示模块用于显示数据,通信模块则用于将数据传输到其他设备或系统。
四、传感器模块传感器模块是整个系统的核心部分,负责实时采集环境中的温湿度数据。
常见的温湿度传感器有DHT11、DHT22等。
这些传感器能够快速准确地获取环境中的温湿度数据,并将这些数据以电信号的形式输出。
五、STM32微控制器模块STM32微控制器模块负责处理和分析传感器模块采集的数据。
它通过I/O口与传感器模块进行数据交换,接收传感器输出的电信号,并将其转换为数字信号进行处理。
同时,STM32微控制器还能根据预设的算法对数据进行处理和分析,得出环境中的温湿度值。
六、显示模块显示模块用于显示温湿度数据。
常见的显示方式有LED数码管显示、LCD液晶屏显示等。
通过显示模块,用户可以直观地看到环境中的温湿度数据,便于对环境进行监控和控制。
七、通信模块通信模块用于将温湿度数据传输到其他设备或系统。
该模块可以是有线通信模块,如RS485、USB等;也可以是无线通信模块,如WiFi、蓝牙等。
通过通信模块,用户可以将温湿度数据传输到其他设备或系统进行分析和处理。
基于STM32的温度分布与可视检测系统设计作者:周小超刘建树李占妮林华来源:《赤峰学院学报·自然科学版》2021年第11期摘要:某生產设备控制器需对其表面温度进行测量,以实时掌握控制器工作温度。
为了进行表面温度多点测量,并进行可视化实时检测,研制了一种基于STM32的温度分布与可视检测系统。
STM32控制器作为系统的终端机使用,通过RS232协议与PC机进行数据传递,在PC机上基于MATLAB GUI设计系统的上位机软件,并在上位机上实现实时绘图可视化检测。
系统设计了16个温度测点,在控制器表明以4×4阵列分布,通过设计转接卡将16个传感器测点与开发板连接。
实验表明,系统运行稳定可靠,可应用于需温度采集的生产现场。
关键词:STM32;温度;RS232;MATLAB GUI;可视化中图分类号:TP216 文献标识码:A 文章编号:1673-260X(2021)11-0026-040 引言生产设备的某些组件需在合适的温度下工作,高温度会影响组件某些电子元器件不能正常工作[1-3],因此对设备中重要的组件需对其工作温度进行实时检测,并做好冷却措施。
目前市场上存在多种多样的温度采集设备[4,5],有些设备可连接多个传感器,但可将温度数据保存到存储器的设备较少,即便部分设备可将温度数据保存,但仅保存温度的数值,无法实现实时可视化采集与检测。
王子权[6]等基于STM32单片机设计实现了20路的热电偶测温,通过在STM32中移植剥夺式内核UCOSIII操作系统实现了多任务同优先级的时间片轮转调度,基于STemWin界面设计系统进行了操作界面设计,但该系统仅可将采集的温度数据保存至SD卡中,且温度检测界面不够友好,仅使用STM32控制器导致数据处理能力不足。
范虹兴[7]等设计了一种基于STM32的开关柜母线温度无线采集系统,系统的采集节点具有唯一的地址,当母线温度高于设置的报警阈值时,采集节点与中心节点同时报警,从而有效地预防了事故发生,但该系统的测点较少,采用无线设备传输数据容易造成数据缺失,无法实现对设备的实时可视化检测。
基于STM32W108的无线程控微加热平台设计作者:鲁连钢来源:《电子世界》2013年第12期【摘要】设计了基于STM32W108的无线程控微加热平台,平台采用PWM驱动薄片陶瓷加热器,采用PT100检测和反馈温度,采用满足IEEE 802.15.4 MAC协议的RF模块进行数据和指令传输,并编程实现了对该微加热平台的远程温度控制。
测试表明,微平台程控距离可达30米,温控精度可达到±3℃。
【关键词】STM32W108;微加热平台;无线程控1.引言温度是热动力学基本参数,其测量和控制在生产生活和科学研究中具有广泛应用和重要意义[1],如冶金、采矿、制冷。
其中在化工、生命科学等领域,有时需要温控平台便携、微型,或尽量避免人员在现场的操作[2]。
与此同时,随着无线通信和半导体技术的发展,以无线传感网络为代表的无线测控技术已开始走向应用,如智能家居、环境监控等。
作为无线测控体系的一部分,无线远程温控的便携式微加热平台,可以极大方便人们的生产生活和科学研究。
本文针对该需求,基于意法半导体公司最新推出的STM32W108无线单片机设计了由PT100温度检测、PWM驱动加热、Zigbee无线通信的数字闭环无线微型加热平台,并编程实现了对该微加热平台的远程温度控制,确保了节点的移动灵活性与性能稳定性。
2.系统总体设计与关键技术2.1 总体设计与原理框图设计的无线程控微加热平台从原理可划分为三部分:基于PT100和低功耗运放的温度检测电路,基于低漏电流MOS管和高效率薄片陶瓷加热器的PWM加热驱动电路,以STM32W108为核心的控制、通信单元;三者形成完整的温控闭环,并提供对外的Zigbee无线通信接口,以及用于监控的串口。
系统原理框图如图1所示。
2.2 温度检测电路考虑到器件成本、测温范围、检测电路复杂程度、响应时间,本设计采用薄膜封装PT100元件,相比于传统铂丝PT100,成本更低,响应更快,□0.5小于10s,线性测温范围可达-200℃~800℃。
前言传感器技术在信息采集、信息传输和信息处理中,属于前沿尖端产品,尤其是温度传感器技术,在各个领域广泛应用,比如在工农业生产中需要实时测量温度等等。
因此研究温度的测量方法和装置具有重要的意义。
为了提高对传感器的认识和了解,尤其是对温度传感器的深入研究以及其用法与用途,基于实用、广泛和典型的原则而设计了本系统。
本文利用单片机结合温度传感器技术而开发设计了这一温度测量系统。
文中将传感器理论与单片机实际应用有机结合,详细地讲述了利用热电阻作为温度传感器来测量实时的温度,以及实现热电转换的原理过程。
本设计应用性比较强,设计系统可以作为温度测量显示系统,如果稍微改装可以做热水器温度调节系统、生产温度监控系统等等。
本课题主要任务是完成环境性强等优点。
课程设计任务本设计系统包括温度传感器,信号放大电路,A/D转换模块,时钟模块,数据处理与控制模块,温度、时间显示模块六个部分。
文中对每个部分功能、实现过程作了详细介绍。
整个系统的核心是进行温度测量与显示,完成了课题所有要求。
摘要:本文采用AT89S51单片机,TLC2543 A/D转换器,DS1302时钟芯片,AD620放大器,铂电阻PT100及8位数码管组成系统,编写了相应的软件程序,使其实现温度的实时显示。
该系统的特点是:使用简便;测量精确、稳定、可靠;测量围大;使用对象广。
关键词:PT100 单片机温度测量 DS1302Abstract:The system contains SCM(AT89S51), analog to digital convert department (TLC2543), DS1302 chip, AD620 amplifier, PT100 platinum, LED Digital tube with six, write the corresponding software program to achieve real-time temperature display. The system is simple , accurate , stable and wide range.Keywords: PT100 SCM Temperature Measures DS1302一方案设计与论证1.1 传感器的选择由于本设计的任务是要求测量的围为0℃~100℃,测量的分辨率为±0.1℃,综合价格以及后续的电路,决定采用线性度相对较好的PT100作为本课题的温度传感器,具体的型号为WZP型铂电阻,该传感器的测温围从-200℃~+650℃。
一、概述基于STM32的温湿度检测仪是一种用于监测环境温度和湿度的仪器,其原理基于STM32微控制器和温湿度传感器的相互作用。
本文将介绍基于STM32的温湿度检测仪的原理及其实现方式。
二、STM32微控制器1. STM32微控制器是一款由意法半导体公司生产的高性能、低功耗的32位微控制器,具有丰富的外设和强大的性能。
其采用ARM Cortex-M内核,集成了丰富的外设接口,包括通用输入输出引脚、定时器、串行接口、模拟数字转换器等。
2. 基于STM32的温湿度检测仪利用STM32微控制器的强大性能和丰富的外设接口来实现对环境温湿度的监测和控制。
三、温湿度传感器1. 温湿度传感器是一种用于测量环境温度和湿度的模块,通常采用数字化输出,具有快速响应、高精度和低功耗的特点。
2. 常用的温湿度传感器包括DHT11、DHT22、SHT21等,这些传感器采用数字信号输出,能够直接与STM32微控制器进行通信。
四、基于STM32的温湿度检测仪的原理1. 硬件连接基于STM32的温湿度检测仪的硬件连接主要包括STM32微控制器、温湿度传感器和显示屏等。
其中,温湿度传感器通过数字接口连接到STM32微控制器,在收集到环境温湿度数据后,通过显示屏等外设对数据进行显示和处理。
2. 软件设计基于STM32的温湿度检测仪的软件设计主要包括采集温湿度数据、数据处理和显示等功能。
通过STM32微控制器的编程,可以实现对温湿度传感器的数据采集和处理,并将处理后的数据通过显示屏等外设进行显示。
五、实现步骤1. 初始化a. 对STM32微控制器进行初始化配置,包括外设接口、时钟、定时器等的设置。
b. 对温湿度传感器进行初始化配置,包括通信接口、校准参数等的设置。
2. 数据采集对温湿度传感器进行数据采集,获取环境温湿度的实时数据。
3. 数据处理对采集到的温湿度数据进行处理,包括数据滤波、校准、转换等。
4. 数据显示将处理后的温湿度数据通过显示屏等外设进行显示,以便用户实时了解环境温湿度情况。
基于STM32的PT100温度测量目录一、前言1二、系统描述12.1 综述12.2系统框图12.3 功能实现1三、硬件设计23.1 STM32 微控制器23.2 PT100温度传感器电路33.31602液晶屏4四、软件设计44.1ADC程序44.21602LCD显示程序54.3主程序5五、性能测试5六、课程设计心得6参考文献6附录1:系统实物图7附录2:系统主要程序7一、前言Cortex-M3 是 ARM 公司为要求高性(1.25DhrystoneMIPS/MHz)、低本钱、低功耗的嵌入式应用专门设计的内核。
STM32 系列产品得益于 Cortex-M3 在架构上进展的多项改良,包括提升性能的同时又提高了代码密度的 Thumb-2 指令集和大幅度提高中断响应的紧耦合嵌套向量中断控制器,所有新功能都同时具有业界最优的功耗水平。
本系统是基于 Cortex-M3 内核的 STM32 微控制器与PT100温度传感器的温度测量,在硬件方面主要有最小系统板、1602LCD 液晶屏以与PT100温度传感电路,在软件方面主要有 1602LCD液晶屏的驱动,ADC功能的驱动,与滤波算法设计。
整个设计过程包括电子系统的设计技术与调试技术,包括需求分析,原理图的绘制,器件采购,安装,焊接,硬件调试,软件模块编写,软件模块测试,系统整体测试等整个开发调试过程。
二、系统描述本系统是基于 STM32微控制器所设计的多功能画板,该画板具有根本的绘画功能与画布颜色的选择,触摸屏校正等功能。
整个系统模块分为三个模块:ALIENTEK MiniSTM32开发板、液晶显示。
MiniSTM32开发板是ALIENTEK开发的是一款迷你型的开发板,小巧而不小气,简约而不简单。
上面有芯片工作需要的资源,时钟控制电路、复位电路、JTAG 控制口以与与外围电路相连的接口。
液晶屏采用的是1602LCD液晶屏。
2.2 系统框图本设计采用 STM32F103RBT6 作为微控制器,其外围硬件模块主要包括电源模块﹑微处理器模块﹑按键与JAIG等。
电源采用 USB 供电,在设计过程中用 PC 供电。
其系统框图如图2-1所示。
2.3 功能实现PI100温度传感器是利用其电阻和温度成一定函数关系而制成的温度传感器,温度变化导致它的电阻变化,在电路中它的电阻变化会导致电压变化,STM32 微控制器的ADC将电压换成数字信号,通过处理运算以与PT100温度与电阻的函数关系,得到一个温度值,并将温度值输入1602液晶屏显示。
三、硬件设计3.1 STM32 微控制器STM32 微控制器最小系统包括晶振电路,电源模块,JTAG接口模块,串口ISP下载模块,系统复位模块。
本次课程设计采用的是ALIENTEK MiniSTM32开发板。
STM32F103RBT6 管脚图STM32 微控制器的局部工作电路图3.2 PT100温度传感器电路铂电阻温度传感器是利用其电阻和温度成一定函数关系而制成的温度传感器,由于其测量准确度高、测量X围大、复现性和稳定性好等,被广泛用于中温X围的温度测量中。
PT100 是一种广泛应用的测温元件,在-50 ~600 ℃X围内具有其他任何温度传感器无可比拟的优势,包括高精度、稳定性好、抗干扰能力强等。
由于铂电阻的电阻值与温度成非线性关系,所以需要进展非线性校正。
校正分为模拟电路校正和微处理器数字化校正,模拟校正有很多现成的电路,其精度不高且易受温漂等干扰因素影响,数字化校正如此需要在微处理系统中使用,将PT电阻的电阻值和温度对应起来后存入 EEPROM中,根据电路中实测的AD值以查表方式计算相应温度值。
常用的PT电阻接法有三线制和两线制,其中三线制接法的优点是将PT100 的两侧相等的的导线长度分别加在两侧的桥臂上,使得导线电阻得以消除。
常用的采样电路有两种:一为桥式测温电路,一为恒流源式测温电路。
本设计采用的是三线制桥式测温电路,电路如下列图测温原理:电路采用TL31和电位器VR1调节产生4.096V的参考电源;采用R1、R2、VR2、RPT构成测量电桥〔其中R1=R2,VR2为100Ω精细电阻〕,当RPT的电阻值和VR2的电阻值不相等时,电桥输出一个mV级的压差信号,这个压差信号经过运放 LM3放大后输出期望大小的电压信号,该信号可直接连AD转换芯片。
差动放大电路中 R3=R4、 R5=R6、放大倍数=R5/R3,运放采用单一 5V 供电。
设计与调试注意点:1. 同幅度调整R1和R2的电阻值可以改变电桥输出的压差大小;2. 改变R5/R3的比值即可改变电压信号的放大倍数,以便满足设计者对温度X 围的要求4. VR2为电位器,调节电位器阻值大小可以改变温度的零点设定,测量电位器的阻值时须在没有接入电路时调节,这是因为接入电路后测量的电阻值发生了改变。
5. 理论上,运放输出的电压为输入压差信号×放大倍数,但实际在电路工作时测量输出电压与输入压差信号并非这样的关系,压差信号比理论值小很多,实际输出信号为V O =4.096*(RPT /(R1+RPT)- VR2 /(R1+VR2 ))式中电阻值以电路工作时量取的为准。
4.096为基于源电压。
6. 电桥的正电源必须接稳定的参考基准,因为如果直接VCC的话,当网压波动造成VCC发生波动时,运放输出的信号也会发生改变,此时再到以VCC未发生波动时建立的温度-电阻表中去查表求值时就不正确了,这可以根据式进展计算得知。
3.3 1602LCD液晶屏1602字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD。
引脚功能说明1602LCD采用标准的14脚〔无背光〕或16脚〔带背光〕接口,各引脚接口说明1602与STM32连接说明:四、软件设计4.1 ADC程序STM32F103RBT6内部有3个ADC,实际上我们只需要软件设置就可以正常工作,不过我们需要在外部连接其端口到被测电压上面。
本系统通过 ADC1的通道0〔PA0〕来读取外部电压值。
测量电压不能超过3.3V。
程序步骤1〕启开启PA口和ADC1时钟,设置PA0为模拟输入。
2〕复位 ADC1,同时设置ADC1分频因子。
开启 ADC1 时钟之后,我们要复位ADC1,将ADC1的全部存放器重设为缺省值之后我们就可以通过 RCC_CFGR 设置ADC1的分频因子。
分频因子要确保ADC1 的时钟〔ADCCLK〕不要超过14Mhz。
这个我们设置分频因子位6,时钟为72/6=12MHz。
3〕初始化ADC1参数,设置ADC1的工作模式以与规如此序列的相关信息。
设置单次转换模式、触发方式选择、数据对齐方式等都在这一步实现。
同时,我们还要设置 ADC1 规如此序列的相关信息,我们这里只有一个通道,并且是单次转换的,所以设置规如此序列中通道数为 1。
5〕使能ADC并校准。
在设置完了以上信息后,我们就使能AD转换器,执行复位校准和AD校准,注意这两步是必须的!不校准将导致结果很不准确。
每次进展校准之后要等待校准完毕。
这里是通过获取校准状态来判断是否校准是否完毕。
6〕读取 ADC在上面的校准完成之后,ADC 就算准备好了。
接下来我们要做的就是设置规如此序列 1 里面的通道,采样顺序,以与通道的采样周期,然后启动ADC转换。
在转换完毕后,读取ADC转换结果值就是了。
7〕屡次读取ADC值,求平均求平均使获得的ADC值稳定。
4.2 1602LCD显示程序程序步骤必要的声明定义等;写入指令数据到LCD;写入字符显示数据到LCD;写字符串函数;写数字函数;GPIO配置;LCD初始化设定;4.3 主程序各子函数初始化(SystemInit();delay_init(72);NVIC_Configuration();uart_init(9600) ;LED_Init();LCD_Init();Adc_Init();)while循环〔获取ADC值,转换成电压值,写字符串,写数据值,LED闪烁〕。
五、性能测试硬件调试比拟简单,主要是调试PT100温度传感器电路,首先检查电路的焊接是否正确,然后用万用表测试,首先检测PT100传感器的电阻值是否随温度变化,并测量其在0°C和100°C的电阻值;然后在测量基准电压,将其调试到适宜值〔4.960V〕;然后测量电桥输出的最大电压差Umax,并确定运算放大器的放大倍数〔放大器的输出电压不能大于3.3V,倍数A=R5/R3=3.3/Umax,调试过程中可改变R5电阻值〕;最后测量运算放大器实际的输出电压,与电桥输出电压,计算实际放大倍数与理论放大倍数比拟;调试完后可连接STM32进展软件编写。
软件调试可以先编写1602显示程序并进展硬件的正确性检验,然后分别进展ADC程序和主程序的编写和调试。
最后进展整体系统测试六、课程设计心得经过将近一段时间的设计、焊接、编程、调试,我们终于完成了温度测量的设计,根本能够达到设计要求,此次的设计使我从中学到了一些很重要的东西,那就是如何从理论到实践的转化,怎样将我们所学到的知识运用到实践中去。
在大学课堂的学习只是给我们灌输专业知识,而我们应把所学的知识应用到我们现实的生活中去。
这次的设计不仅使我们将课堂上学到的理论知识与实际应用结合了起来,而且使我们对电子电路、电子元器件等方面的知识有了更进一步的认识,同时在软件编程、焊板调试、相关调试仪器的使用等方面得到较全面的锻炼和提高,为今后能够独立进展某些单片机应用系统的开发设计工作打下一定的根底。
此次单片机设计也为我们以后进展更复杂的单片机系统设计提供了宝贵的经验。
通过此次的综合设计,我们初步掌握了单片机系统设计的根本原理。
充分认识到理论学习与实践相结合的重要性,对于书本上的很多知识,不但要学会,更重要的是会运用到实践中去。
在以后的学习中,我们会更加注重实践方面的锻炼,多提高自己的动手实践能力。
参考文献1、STM32F103RBT6 数据开发手册;2、ALIENTEK miniSTM32 开发板资料3、1602中文资料附录1:系统实物图附录2:系统主要程序一、ADC程序,文件名〔adc.c〕#include "adc.h"#include "delay.h"void Adc_Init(void){ADC_InitTypeDef ADC_InitStructure;GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_ADC1, ENABLE ); //使能ADC1通道时钟RCC_ADCCLKConfig(RCC_PCLK2_Div6); //72M/6=12,ADC最大时间不能超过14M GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;//PA0GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;//模拟输入引脚GPIO_Init(GPIOA, &GPIO_InitStructure);ADC_DeInit(ADC1); //将外设 ADC1 的全部存放器重设为缺省值ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;//ADC工作模式:ADC1和ADC2工作在独立模式ADC_InitStructure.ADC_ScanConvMode = DISABLE;//模数转换工作在单通道模式ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;//模数转换工作在单次转换模式ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//转换由软件而不是外部触发启动ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//ADC数据右对齐ADC_InitStructure.ADC_NbrOfChannel = 1;//顺序进展规如此转换的ADC通道的数目ADC_Init(ADC1, &ADC_InitStructure);//根据ADC_InitStruct中指定的参数初始化外设ADCx的存放器ADC_Cmd(ADC1, ENABLE);//使能指定的ADC1ADC_ResetCalibration(ADC1);//重置指定的ADC1的校准存放器while(ADC_GetResetCalibrationStatus(ADC1));//获取ADC1重置校准存放器的状态,设置状态如此等待ADC_StartCalibration(ADC1);//开始指定ADC1的校准状态while(ADC_GetCalibrationStatus(ADC1));//获取指定ADC1的校准程序,设置状态如此等待ADC_SoftwareStartConvCmd(ADC1, ENABLE);//使能指定的ADC1的软件转换启动功能}//获得ADC值//ch:通道值 0-3u16 Get_Adc(u8 ch){//设置指定ADC的规如此组通道,设置它们的转化顺序和采样时间ADC_SoftwareStartConvCmd(ADC1, ENABLE);//使能ADC的软件转换启动功能ADC_SoftwareStartConvCmd(ADC1, ENABLE);//使能指定的ADC1的软件转换启动功能while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//等待转换完毕return ADC_GetConversionValue(ADC1);//返回最近一次ADC1规如此组的转换结果}//获取通道ch的转换值,取times次,然后平均//ch:通道编号//times:获取次数//返回值:通道ch的times次转换结果平均值u16 Get_Adc_Average(u8 ch,u8 times){u32 temp_val=0;u8 t;for(t=0;t<times;t++){ temp_val+=Get_Adc(ch);delay_ms(5);}return temp_val/times;}二、LCD程序,文件名〔lcd.c〕#include "lcd.h"#include "stdlib.h"#include "delay.h"unsigned char digit[ ]={"0123456789 "};void LCD_Writecmd(uchar cmd){LCD_RS=0; delay_us(1);LCD_RW=0;delay_us(1);DATAOUT(cmd);delay_us(300);LCD_EN=1;delay_us(300);//必要的延时LCD_EN=0; //下降沿,LCD1602开始工作}void LCD_Writedata(uchar dat){LCD_RS=1;delay_us(1);LCD_RW=0;delay_us(1);DATAOUT(dat);delay_us(300);LCD_EN=1; delay_us(300); //很重要的延时,经调试,延时300us以上才可以LCD_EN=0; //下降沿,开始写入有效数据}void LCD_DispString(char str[]){uchar i=0;for(i=0;str[i] != '\0';i++){LCD_Writedata(str[i]);}}void LCD_Dispnum(uint32_t num){u16 R1=5000;u16 R2=5000;u16 R3=300;u16 Vin=40960;float x,y,z,rx;float t,VB; u16 T,RX,i;unsigned char B1,B2,B3,B4,B5;unsigned char C1,C2,C3,C4,C5;unsigned char D1,D2,D3,D4,D5;VB=(float)num/30;x=(float)VB/(float)Vin; //Rx = (R3*R2 + R2* (R1+R3)VB/Vin )/ (R1- (R1+R3)*VB/ Vin) y=R3*R2+(float)R2*(R1+R3)*x;z=R1- (R1+R3)*x;rx=y/z;RX=rx*1000/10;t=1.000/0.77*rx-300.000/0.77; //〔0C,300〕(100,377)T=t*1000/10;B5=num/10000;B4=num%10000/1000;B3=num%1000/100; B2=num%100/10;B1=num%10;C5=RX/10000;C4=RX%10000/1000;C3=RX%1000/100;C2=RX%100/10;C1=RX%10;if(C5==0){C5=11;if(C4==0){C4=11; }}D5=T/10000;D4=T%10000/1000;D3=T%1000/100;D2=T%100/10; D1=T%10;if(D5==0){ D5=12;if(D4==0){D4=12; }}LCD_Writecmd(0x80+0x06);LCD_Writedata(digit[B5]);LCD_Writedata('.');LCD_Writedata(digit[B4]);LCD_Writedata(digit[B3]);LCD_Writedata(digit[B2]);LCD_Writedata(digit[B1]);LCD_Writecmd(0x80+0x41);LCD_Writedata(digit[C5]);LCD_Writedata(digit[C4]);LCD_Writedata(digit[C3]);LCD_Writedata('.');LCD_Writedata(digit[C2]);LCD_Writedata(digit[C1]);LCD_Writecmd(0x80+0x48);LCD_Writedata(digit[D5]);LCD_Writedata(digit[D4]);LCD_Writedata(digit[D3]);LCD_Writedata('.');LCD_Writedata(digit[D2]);LCD_Writedata(digit[D1]);for(i=0;i<4;i++) //每1s采集一次数据〕delay_ms(25);}void GPIO_Configuration(void){GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC, ENABLE ); GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE);//JTAG-DP 失能 + SW-DP 使能GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pi n_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);GPIO_Write(GPIOB,0XFFFF); //PB口OD输出GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_2|GPIO_Pin_3;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOC, &GPIO_InitStructure);GPIO_SetBits(GPIOC, GPIO_Pin_0|GPIO_Pin_2|GPIO_Pin_8|GPIO_Pin_3);//如果每一位决定一个GPIO_Pin,如此可以通过或的形式来初始化多个IO}void LCD_Init(void){ GPIO_Configuration();delay_ms(200); //延时200ms LCD_EN=0;LCD_Writecmd(0x38); delay_ms(5); LCD_Writecmd(0x38); delay_ms(5); LCD_Writecmd(0x38); delay_ms(5); LCD_Writecmd(0x08); delay_ms(5); LCD_Writecmd(0x06); delay_ms(5); LCD_Writecmd(0x01); delay_ms(5); LCD_Writecmd(0x0c); delay_ms(5); }三、主程序,文件名〔main.c〕#include "led.h"#include "delay.h"#include "sys.h"#include "usart.h"#include "lcd.h"#include "adc.h"int main(void){ u16 adcx;float V;u16 voltage;SystemInit();delay_init(72); //延时初始化NVIC_Configuration();uart_init(9600);LED_Init();LCD_Init();Adc_Init();while(1){adcx=Get_Adc_Average(ADC_CH1 ,200); V=(float)adcx*(3.3/4096);LCD_Writecmd(0x80);LCD_DispString("PA0 V: v"); LCD_Writecmd(0x80+0x40);LCD_DispString("R T C"); voltage=V*100000/10;LCD_Dispnum(voltage);LED0=!LED0;delay_ms(250);}}。