张华伟-基于STM32F4ARM单片机精确温控的设计与实现

更新时间:2024-01-27 07:13:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

编号:

课程设计

基于LMTARM-V试验平台的电子密码器的设计与实现

院系:信息工程学院 姓名:张华伟 学号:1234130130 专业:电子信息工程 年级:2012级 指导教师:巫廷耀 职称:工程师 完成日期:2016年5月

摘 要

温控系统在人们生活中随处可见,在生物制药、冶金、医疗等领域扮演着非常重要的角色,已经成为人们生活不可或缺的一部分。它是一个集环境监测、反馈调节和人机交互的等功能的综合系统。它是能实现实时环境温度数据采集,经过相应的判断处理、计算来控制设备的运行以达到理想温度的系统,其应用范围非常广泛。如今,由于ARM构架设计的温控系统拥有稳定性和抗干扰性以及高运算速率等优点,一直受广大电子设备控制系统开发人员的青睐。本设计采用ARM单片机技术、PT100铂电阻温度传感器技术、单片机技术等来实现自动控制温度、手动设置温度和显示的功能。

通过了解市场对温控系统的需求和简化实现方式的前提下,本设计制定了易于实现的模块化设计方案,在硬件电路方面主要设计了最小系统电路、电源电路、电压参考电路、制热模块电路、温度传感器电路和温度采集电路等,并完成了智能温控的各项功能测试。本设计实现了温度显示、设置温度和温度采集的功能,以及保持设置温度的功能。

关键词:单片机;PID;温度传感器;AD采集;铂电阻

I

Abstract

Temperature control system can be found everywhere in life.It has become an indispensable part of people's life,played a very important role in the field of biological pharmacy, metallurgy, medical treatment and so on. It is an integrated system collecting the environmental monitoring, the feedback to adjustments, human-computer interaction, and other functions. It is a system that can be realized real-time temperature data by the corresponding judgment processing, calculation to control the operation of the equipment in order to achieve the ideal temperature, and it has a wide range. Nowadays, due to the advantages of high stability, anti-jamming and operation rate,the ARM temperature control system has been popular with the general electronic equipment control system developers. This design uses the ARM micro-controller technology, PT100 platinum resistance temperature sensor technology and single-chip microcomputer technology to realize the functions of automatic control, manual setting temperature and temperature display.

The modular arrangement of this design is easy and convenient by understanding the market demand for temperature control system and simplifying the premise of implementation. In terms of hardware circuit, it design the minimum system circuit, power circuit, voltage reference circuit, heating circuit and temperature acquisition module circuit and temperature sensor circuit, etc., and complete the functional tests of intelligent temperature control. This design has realized the functions of displaying the temperature, setting up the temperature, collecting the temperature, and maintaining the set temperature.

Key words :MCU;PID;TemperatureSensor;A/D conversion;PT100

II

目录

1 绪论...................................................................................................................................... 1 1.1 课题的研究背景与意义............................................................................................... 1 1.2课题的国内研究现状.................................................................................................... 1 1.3 课题的国外研究现状................................................................................................... 2 1.4 课题的研究目的和内容............................................................................................... 2 2 系统总体方案设计与论证.................................................................................................. 3 2.1 主控系统方案论证....................................................................................................... 3 2.2 电源系统方案论证....................................................................................................... 4 2.3 温度传感器方案论证................................................................................................... 4 2.4显示模块方案论证........................................................................................................ 5 2.5 A/D转换器模块方案论证 ............................................................................................ 6 2.6 系统整体设计方案论证............................................................................................... 7 3 系统硬件设计...................................................................................................................... 8 3.1 主控制系统设计........................................................................................................... 8 3.1.1 STM32F407单片机 ............................................................................................... 8 3.1.2 通用定时器............................................................................................................ 8 3.1.3模数转换器............................................................................................................. 9 3.2 温度采集电路设计....................................................................................................... 9 3.3 显示电路的设计......................................................................................................... 10 3.4 制热模块驱动电路设计............................................................................................. 10 3.5 电源系统设计............................................................................................................. 11 4 系统软件设计.................................................................................................................... 13 4.1 主程序设计................................................................................................................. 13 4.2温度采集程序设计...................................................................................................... 14 4.3 驱动加热模块程序设计............................................................................................. 14 4.4 显示模块程序设计..................................................................................................... 15

III

5 制作与调试........................................................................................................................ 16 5.1 软件调试..................................................................................................................... 16 5.2 实物制作..................................................................................................................... 17 5.3 测试与总结................................................................................................................. 18 参考文献................................................................................................................................ 20 致谢........................................................................................................................................ 21 附录I ..................................................................................................................................... 22 附录II .................................................................................................................................... 23 附录III................................................................................................................................... 24

IV

绪论

1 绪论

1.1 课题的研究背景与意义

随着科技的发展,现代工业设计、工程建设及日常生活中温度控制都起着重要的作用,对温度控制的精度要求也越来越高。早期的温度控制主要用于在一些对温度要求控制的产品生产中,这样可以通过实时采集到的温度数据进行监测产品生产,以大幅提高产品生产质量和生产效率。随着人类社会的快速发展,现代社会中的温度控制系统早已应用在生活中的各个领域,像在一些酒店,厂房以及家庭生活中,甚至在一些应用中,对温度控制系统的要求变得极其严格。因此,这就需要一种能够及时反应监测温度变化的设备,提供温度数据值,使人们能够及时对温度的变化做出相应的调整,更好的方便于人类社会生活。

科技的快速发展,改变了人类社会生活,特别是在电子技术方面,在大规模集成电路诞生下而产生的微型计算机,更是将人类社会带入了一个新的时代。利用微型计算机的强大功能,人们可以实现更多复杂的控制,实现原来不能实现的控制。然而,由于大多数的工业控制并不需要微型计算机那样强大的功能,于是就诞生了单片机。单片机其实就是一个简化的微型计算机,它的用途主要是实现不同的控制功能。相对于微型计算机来说,单片机使用简单,价格低廉,对一些简单控制要求的场合非常适合。另外,单片机同样是按照工业控制要求设计的,其性能可靠性高,可以在很复杂的环境下正常运行。单片机因其较高的可靠性和性价比,在工业生产控制、家用电器等方面得到极为广泛的应用。 1.2课题的国内研究现状

我国对温度控制技术的研究相对晚于西方国家,在20世纪80年代我国技术人员开始对温度测控系统有了进一步研究。目前国内对温控系统的研究越来越深入,温控系统也发展到嵌入式单片机自动控制系统,温度检测也发展为现今的可编程的温度控制传感器,另外制冷加热模块也有所改善,这促使温度控制系统可调温度范围大大扩展,精度控制也越来越高,但与发达国家相比仍存在较大差距。我国温度控制现状距离达到工厂化程度仍有很远一段距离,实际生产中仍存在诸多问题。如今国内温控系统多采用在家用电器,主要为空调、冰箱等;另外目前在国内具有生产温度控制器能力的厂商较少,仅一些相对发达的省市才有具有生产能力的生产厂家,而且他们的目

1

绪论

前的生产力远不能满足市场的庞大需求;另外根据汽车行业当前市场的发展,一些公司企业地区产业的扩大,汽车产业规模日益壮大,在汽车、空调方面对温度控制器需求量也必将增[1]。 1.3 课题的国外研究现状

近年来国外温控系统的发展速度急剧上升,而中国对这一变化有着决定性因素,中国作为一个主要的制造中心和工业电子温度控制器市场的快速发展影响着国内外温控系统的发展速度[2]。另外国外的很多终端厂商转移到国内生产,得以获得低成本的劳动力和原料优势。

虽然温度控制系统在国内各方面发展应用已经十分广泛普遍了,但根据调查研究国内的温度控制器来看,国内整个发展趋势和发展水平并不高,相对国外而言在性能方面仍存在一定的不足。一些稳定成熟的温控系统产品控制算法以常规的PID控制算法为主,它仅能满足一般要求的控制系统,对一些要求较高场合的智能化、自动控制仪器,国内技术明显无法满足,在自动控制技术方面显得还不十分成熟,能够形成商品化的自动控制仪器仪表并不多。目前,温度控制器产品已从最初的模拟、集成温度控制器发展到如今的智能数码温度控制器。智能温控系统是计算机技术和自动控制技术的整合,特点是能输出温度数据和适配各种控制器,另外它是通过软件的控制功能读取温度数据的,在硬件平台的基础上实现,因此其智能化程度和软件的开发水平有莫大的关系。

1.4 课题的研究目的和内容

智能温控系统是一种新颖的自动化温控系统,是一个完整的多功能温控系统。本次设计的目的是深入研究温控系统的各个部分,研究并实现铂电阻温度测量,实现PID控制算法,实现对温度的精确控制,实现各个模块的正常工作。

本设计主要内容是是对该系统的总体方案及硬件、软件进行分析概要设计。在总体方案上,我们首先画出一般温控系统的原理框图,随后分析相关资料对温度传感器模块、显示模块、A/D采集模块等各部分一一进行了方案论证与分析,确定了各模块设计的具体方案,得出系统的详细原理框图。在硬件上详细地介绍了温度采集电路的基本原理及相关参数计算,数码管电路与按键接口电路的设计,半桥驱动电路及运算放大电路的基本原理与具体设计。在软件上主要研究了PID算法的基本理论及增量式PID算法的实际应用,另外着重对温度采集、A/D转换程序进行相关分析和介绍。

2

系统总体方案的设计与论证

2 系统总体方案设计与论证

本设计的总体框图如图2-1所示。其中,包括温度检测模块、MCU主控模块、加 热器模块、显示器模块等器件,且各主要模块之间形成闭环,能够实现实时温度采集与控制。由于温控技术已相对比较成熟,温度控制系统的各个模块都有多种方案可供选择,因此要结合现实情况,对不同模块的相关方案进行论证和分析,以得到适用于本课题的最佳方案。

温度传感器 A/D采样 加热模块 MCU显示模块 控制对象 主控系统按键模块 图2-1 系统总体框图

2.1 主控系统方案论证

根据本设计功能要求,分析完成功能所需要的信号处理能力和输出信号量做出了两种方案。在此对其方案可行性和可靠性等做了如下分析。

方案一:选用STM32F407ZG单片机作为系统的主控部件,实现实时对系统进行控制与处理。ARM单片机具有速度快、资源丰富、开发周期短等优点。另外ARM单片机本身集成有AD转换模块,十位转换精度多通道AD转换满足开发需求,另外选用的STM32F407ZG带有FPU单元,它ST公司是为多浮点型数据运算而准备的。

方案二:选用51单片机作为系统的主控部件,实现实时对系统进行控制和处理。单片机有控制简单、使用方便快捷、价格低廉等优点。针对本设计特点,多模拟量输入和多浮点型数据的复杂程序控制系统,需要擅长处理多模拟量输入和多浮点型数据的标准单片机,同时需要选用A/D功能可增加adc0809模块。根据这些分析,常用的STC89C52单片机具有功能强大的位操作指令,I/O口均可按位寻址,程序空间高达8K,而且51单片机价格非常低廉,可满足需求但对浮点操作能力弱。

综合考虑了处理能力和数据量等因素后,最终决定采用方案一。STM32F407单片机实物图,如图2-2所示。

3

系统总体方案的设计与论证

图2-2 STM32F407单片机实物图

2.2 电源系统方案论证

方案一:通过的市面上电源适配器模块能够提供温控系统需要的稳定电压,使用家庭电压220V转换后输出12V-1.2A的电源提供整个系统使用,提供3.3伏特的电压供单片机运行,稳定而且方便。

方案二:采用12V锂电池单电源供电,但锂电池单电压供电电量损耗快,由于加热模块功率高用电量大,所以,需要选用容量较大的电池供电才行。

综合考虑选择方案一,其采用的电源如图2-3所示。

图2-3电源

2.3 温度传感器方案论证

方案一:数字式温度传感器是能把温度物理量和湿度物理量,通过温、湿度敏感元件和相应电路转换成方便计算机、PLC、智能仪表等数据采集设备直接读取得数字量的传感器。Dallas公司的DS18B20属于典型的数字温度传感器[3],其主要特性如下:

(1) 独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯;

(2) 测温范围-55℃~125℃,固有测温误差1℃;

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

(4) 工作电源: 12V/DC (可以数据线寄生电源)。

方案二:采用铂电阻温度传感器,由于金属铂的电阻值随温度的变化而变化,而且有很好的稳定性,因此利用铂金属的这种物理特性制成铂电阻温度传感器。它具有

4

系统总体方案的设计与论证

较高的测量精度和很好的稳定性以及温度测量范围广等特点,是一种常用的温度传感器,不仅广泛应用于工业测温,而且被作为一种标准的温度计供校准使用。

铂电阻PT1000其阻值随温度线性变化,温度系数TCR=0.003851,具有正温度系数,即温度每变化1℃,其阻值按同样趋势变化3.851Ω。B级测温范围为-50℃~500℃。并且有热响应时间快;机械强度高,耐压性能好;测量精度高精度高;使用寿命长等优点。

图2-4 PT1000铂电阻

本系统要求的温控范围为25℃~99℃,数字式温度传感器操作复杂不是最佳选择,其他的数字式温度传感器由于成本太高,铂电阻PT1000从测温范围,精度等方面均能满足要求,故综合考虑本设计选用铂电阻PT1000作为温度传感器。 2.4显示模块方案论证

方案一:led数码管(LED Segment Displays)由多个发光二极管封装在一起组成的器件,并把他们共用的一端称为共阴(阳)极。数码管实际上是由八个发光管组成的,并把这些段分别由字母a,b,c,d,e,f,g,dp来表示,如图2-5所示。

图2-5引脚图

点亮一个数码管,使特定的段点亮即可组成显示我们需要的数字。单个数码管的压降一般在1.8V左右,电压不超过30mA。将各个数码管段的阴极连在一起称为共阴极数码管,将各个数码管段的阳极连在一起称为共阳极数码管。

当有多个数码管显示时,为充分利用单片机的IO口,需要将所有的段选并联在一起,并由其他的IO口来控制数码管的公共阴极或者公共阳极。为了使多个数码管同时显示,需要循环扫描各个数码管显示成为动态显示,为了稳定显示需要有较高的刷新

5

系统总体方案的设计与论证

频率,避免数码管出现显示闪烁的情况。

方案二:LCD1602串口方式显示,当PSB脚接低电位时,模块将进入串行模式。从一个完整的串行传输流程来看,一开始先传输启始字节,它需先接收到五个连续的‘1’(同步位字符串),在启始字节,此时传输计数将被重置并且串行传输将被同步,再跟随的两位字符串分别指定传输方向位(RW)及寄存器选择位(RS),最后第八的位则为‘0’[4]。在接收到同步位及RW和RS资料的启始字节后,每一个八位的指令将被分为两个字节接收到:高4位(DB7~DB4)的指令资料将会被放在第一个字节的LSB(最低有效未)部分,而低4位(DB3~DB0)的指令资料则会被放在第二个字节的LSB部分,至于相关的另四位则都为‘0’[5]。

串口传输信号时如图2-6所示。

图2-6 LCD串口传输信号图

鉴于硬件简单成本低廉的原则,本系统采用数码管显示方式。 2.5 A/D转换器模块方案论证

方案一:单片机STM32F407内置AD转换器。12位ADC是逐次趋近型模数转换器。它具有多达19个复用通道,可测量来自16个外部源、两个内部源和VBAT通道的信号[1]。这些通道的A/D转换可在单次、连续、扫描或不连续采样模式下进行。ADC的结果存储在一个左对齐或右对齐的16位数据寄存器中。ADC具有模拟看门狗特性,允许应用检测输入电压是否超过了用户自定义的阈值上限或下限。同时内置A/D有如下特性:可配置12 位、10 位、8位或6位分辨率、数据对齐以保持内置数据一致性、可独立设置各通道采样时间、外部触发器选项,可为规则转换和注入转换配置极性、不连续采样模式、双重/三重模式(具有2个或更多ADC的器件提供)、双重/三重ADC模式下可配置的DMA数据存储、双重/三重交替模式下可配置的转换间延迟、规则通道转换期间可产生DMA等。

方案二:采用AD转换芯片ADC0809。它是采用了CMOS工艺,8位逐次逼近方

6

系统总体方案的设计与论证

式进行AD转换。其内部有一个8通道多路开关,根据地址码译码后的信号选择导通8路通道中的一个进行A/D转换。它由8路模拟开关、地址锁存与译码器、比较器、8位开关树型A/D转换器、逐次逼近寄存器、逻辑控制和定时电路组成。

其工作过程如下:首先需要输入一个三位的地址,并使ALE=1,将地址存入地址锁存器中。经地址经译码选择要导通8路模拟输入中的其中一个通道。START下降沿启动 A/D转换,紧接着之后EOC会输出一个低点评信号,表示转换正在进行。直到A/D转换完成,EOC变为高电平,A/D转换结束,并将转换结果存入锁存器,并且这个信号可用作中断申请。当OE输入高电平时,输出三态门打开,转换结果的数字量输出到数据总线上。

经对比分析后可知,STM32F407单片机内置12位A/D转换器,且不用连接其他电路,只需在程序中配置相应寄存器即可完成A/D转换;ADC0809的分辨率则是8位,还需接入74LS373等芯片,使得电路较为复杂。因此无论从进度上还是易用性上都应该选择单片机内置A/D转换器。因此,使用单片机内置的10位A/D转换器是本课题的最佳选择。 2.6 系统整体设计方案论证

经过以上详细的论证与分析,得到详细的系统框图如图2-7所示。 被控模块 PT100传感器 差分放大电路 制热模块 半桥驱动电路 STM32f407 PWM输出、 PID运算、 AD采集通道温度换算。 温度设定 通讯模块 数码管显示模块 图2-7 系统框图

PT1000温度传感器与加热设备保持接触,其阻值变化通过电阻桥及放大电路转换为电压信号,STM32F407通过内置12位A/D转换器采集到电压值,经过相关计算得到当前温度值送给数码管显示,同时将此温度值与按键输入的目标温度值进行比较,进行根据PID计算结果输出PWM波,经V/I变换电路后转换为4~20mA标准电流信号。

7

系统硬件设计

3 系统硬件设计

3.1 主控制系统设计

采用单片机作为主控制系统对温控系统的状态进行实时控制,具有控制灵活、可靠,精度高的特点。单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器、脉宽调制电路、模拟多路转换器、A/D转换器等电路集成到一块硅片上构成的一个小而完善的嵌入式系统。 3.1.1 STM32F407单片机

本设计采用ARM系列的STM32F407ZG单片机。STM32F407ZG系列是基于高性能的ARM?Cortex?-M4F的32位RISC内核,工作频率高达168 MHz。Cortex-M4F核心功能支持所有ARM单精度数据处理指令和数据类型的单精度浮点单元(FPU)。它还实现了一套完整的DSP指令和内存保护单元(MPU),从而提高应用程序的安全性。该STM32F407ZG系列采用高速嵌入式存储器(多达1 MB闪存,高达192 KB的SRAM),最多4字节的备份SRAM,以及广泛的增强I / O的连接到两条APB总线和外设,两个AHB总线和一个32位的多AHB总线矩阵。STM32F407ZG设备提供3个12位ADC,两个DAC,1个低功耗RTC,12个通用16位定时器,其中包括两个用于电机控制的PWM定时器,两个通用32位定时器。一个真正的随机数发生器(RNG)。他们还配备了标准和先进的通信接口。 3.1.2 通用定时器

通用定时器包含一个 16 位或32 位自动重载计数器,该计数器由可编程预分频器驱动。它们可用于多种用途,包括测量输入信号的脉冲宽度(输入捕获)或生成输出波形(输出比较和PWM)。使用定时器预分频器和RCC 时钟控制器预分频器,可将脉冲宽度和波形周期从几微秒调制到几毫秒。这些定时器彼此完全独立,不共享任何资源,它们可以同步操作。

通用定时器工作模式有输出比较工作模式、计数器模式、PWM 模式、强制输出模式等。有多达4 个独立通道,可用于输入捕获、输出比较、PWM 生成、单脉冲模式输出。

在本设计中定时器配置工作模式为PWM模式,采用定时器2通道2在PA1口输

8

系统硬件设计

出,配置定时器为定时器分频采用83分频,初始装载值为999,向上计数的方式,时钟分频为1分频,所以可以产生频率为2kHz的PWM波。 3.1.3模数转换器

12 位ADC 是逐次趋近型模数转换器。它具有多达19 个复用通道,可测量来自16 个外部源、两个内部源和VBAT 通道的信号。这些通道的A/D 转换可在单次、连续、扫描或不连续采样模式下进行。ADC 的结果存储在一个左对齐或右对齐的16 位数据寄存器中。

ADC 开关控制:可通过将ADC_CR2 寄存器中的ADON 位置1来为ADC 供电。首次将ADON 位置1时,会将ADC 从掉电模式中唤醒。SWSTART 或JSWSTART 位置1 时,启动AD 转换。可通过将ADON 位清零来停止转换并使ADC 进入掉电模式。在此模式下,ADC几乎不耗电(只有几μA)。

通道选择有 16 条复用通道,可以将转换分为两组:规则转换和注入转换。每个组包含一个转换序列,该序列可按任意顺序在任意通道上完成。

数据管理使用DMA由于规则通道组只有一个数据寄存器,因此,对于多个规则通道的转换,使用DMA 非常有帮助。这样可以避免丢失在下一次写入之前还未被读出的ADC_DR 寄存器中的数据。在使能DMA 模式的情况下(ADC_CR2 寄存器中的DMA 位置1),每完成规则通道组中的一个通道转换后,都会生成一个DMA 请求。这样便可将转换的数据从ADC_DR 寄存器传输到用软件选择的目标位置。

本设计中AD转换目的是将采集的电压量转换为数字量求得温度值,采用的是ADC1通道0,配置ADC需要使能ADC1的时钟,配置端口为模拟输入。由于其映射在DMA2的数据流0 上,所以数据管理配置使用DMA2的数据流0,配置DMA传输方向是从外部设备到寄存器,将AD采集的值存放到一个地址中。做到AD转换数据采集的实时性。 3.2 温度采集电路设计

如图3-1是使用PT100做检测元件的差分放大电路。图中MCP601是差分放大器,根据实验测试电阻R17=634k,根据虚短和虚断的概念可得

Uo/Ui = R17 / R18 = 63.4

所以电路放大倍数为 63.4 倍。

由于PT100所测温度和本身电阻变化有关,所以求得PT100的内阻即可根据转换关系求得当前温度。当前参考电压VREF = 3.3V。P3是滑动变阻器。

9

(3-1)

系统硬件设计

图3-1温度采集电路

PT100的压降Va

Va = VREF * R23 /( R23+ R13)

有PT100的压降可得Rpt100

Rpt100 = ( R14 * Va ) / ( VREF - Va)

再有PT100 内阻与温度的关求得 T

T = 2.59281 * R - 259.40194

3.3 显示电路的设计

显示电路采用共阳极数码管,各数据脚直接接在单片机PF0-PF7引脚,位选为PF14,PF15引脚,如图3-2所示。

(3-4)

(3-3)

(3-2)

图3-2数码管显示电路

数码管显示当前的温度值,采用扫描显示的方式,数据口PF0-PF7传输要显示的数据,引脚PF14、PF15选择被选中显示的数码管。本设计使用两位数码管循环扫描显示当前温度数据。 3.4 制热模块驱动电路设计

如图3-3是驱动加热片的半桥驱动电路,其中IR2110是一个桥类型为半桥的驱动器,采用8脚封装可以配置为同向和反向驱动。

10

系统硬件设计

图3-3半桥驱动电路

IR2104的引脚功能如表3-1所示。其中,引脚SD低电平有效,用于关断逻辑的输入控制加热片的工作状态。引脚IN用于同向输出到HO和LO引脚。通过引脚IN输入的不同占空比的PWM来控制J5和J6上的电压差的大小,从而控制加热模块工作情况,另外芯片IRF3703是一种N型MOS管,通过SD端输入1或0 可以选择导通U3或U7。

表3-1 IR2104引脚功能图

IN SD VB HO VS VCC LO COM 3.5 电源系统设计

高和低侧栅极驱动输出,同相,何逻辑输入 用于关断逻辑输入 高侧浮动电源 高侧栅极驱动输出 高侧浮动电源返回 低压侧和逻辑固定电源 低侧栅极驱动输出 低端回报 由于整个系统需要电源电压的不同,本系统采用家庭用电通过电源稳压模块转换为低压12V后使用。

电源12V转5V电路如图3-4所示。其中稳压芯片采用LM2576稳压器。LM2576系列的稳压器是单片集成电路,能提供降压开关稳压器的各种功能,能驱动3A的负载,有优异的线性和负载调整能力。

11

系统硬件设计

图3-4 电源12V转5V电路

电源5V转3.3V电路如图3-5所示。其中转换芯片采用AMS1117稳压器。它是一个正向低压降稳压器,能提供包括固定电压输出版本(固定电压包括1.8V,3.3V,5V)跟三端可调电压输出版本,最高输出电流可达1A,输出电压精度高达2%,稳定工作电压范围为高达12V,限流功能,过热切断等功能。

图3-5电源5V转3.3V电路

电压参考电路如图3-6所示。其中REF196是常用于基准电压源电路芯片,它的特点是内部精度高,温度稳定性好,电源电流低,有睡眠模式等。

图3-6 电压参考电路

12

系统软件设计

4 系统软件设计

系统的软件设计主要包括四个部分,分为主程序设计、温度采集程序设计、显示电路程序设计、PWM驱动加热模块程序设计。通过温度传感器监测被控对象的温度,主控制程序根据当前温度判断然后控制加热模块的状态并显示当前温度,使被控对象温度趋于一个设定的值。在整个系统中这四个部分相互关联,互相影响,是整个系统的核心组成部分。同时在软件设计中会加入指示灯的控制等其他程序。 4.1 主程序设计

主程序主要是完成单片机的IO口、定时器2工作在PWM模式和AD转换通道配置的初始化以及温度转换和PID运算控制输出PWM。检测当前温度与设定温度做比较做出相应的动作。主程序流程图如图4-1所示。

开始 初始化程序 AD转换 读取当前温度Real_Temp 使加热模块工作 数码管显示Real_Temp PID运算控制PWM输出 判断(Real_Temp>= Set_Temp)? 否 是 加热模块停止工作 返回 图4-1 主程序流程图

13

系统软件设计

在主程序设计中完成了温度的采集、温度的显示、PID控制运算以及驱动加热模块的工作。主程序是根据当前温度和设定温度的值进行比较运算后进行控制被控物体的温度和显示当前温度值的。同时通过PID运算修正被控物体的可控量。主程序不断的读取转换温度Real_Temp和Set_Temp进行比较来控制温度值。 4.2温度采集程序设计

由于铂电阻的特性,温度值是单片机AD采样输入端口的电压转换而来的,而电压值受铂电阻的内阻影响而改变。铂电阻内阻受温度的影响呈现一定的线性关系。所以根据需求温度采集程序流程图如图4-2所示。

输入的电压值 开启AD转换 读出输入电压值 AD采样滤波算法 求出铂电阻的值 根据阻值求出当前温度返回 图4-2 温度采集程序流程图

温度采集是在硬件放大电路的基础上设计的,为提高AD采集的正确性采用了限幅滤波法对温度转换值进行处理。 4.3 驱动加热模块程序设计

加热模块的驱动是使用的一个桥电路来实现的,它的状态受采集的温度的值控制,在程序设计中根据温度控制SD的值来选通桥电路。程序流程图如图4-3所示。

驱动加热模块的电路使用IR2104芯片,经过PID控制输入PWM波根据占空比来控制加热模块两端的电压差,使可以控制模块的工作状态。

14

系统软件设计

主程序调用PID运算 开启定时器 2PWM工作模式 PID运算控制PWM输出 判断SD值? SD=1 导通U7(IRF3703) SD=0 加热模块工作 返回 加热模块停止工作 导通U3(IRF3703) 图4-3驱动加热模块的程序流程图

4.4 显示模块程序设计

显示模块采用数码管进行显示,程序设计根据查询共阳极数码管的码表来显示当前温度值。程序设计流程图如图4-4所示。

初始化端口配置 将Real_Temp值进行分割 查询数码管码 表 显示Real_Temp值的十位和个位 返回 图4-4显示模块的程序流程图

15

制作与调试

5 制作与调试

在keil软件中调试执行系统各部分实现的功能,制作实物并测试完成所需要的功能。 5.1 软件调试

在keil软件中主程序调试运行如图5-1所示,读取PT100检测温度程序调试如图5-2所示,A/D转换程序调试如图5-3所示,数码管显示功能调试如图5-4所示。通过查看寄存器的值判定各部分功能调试正常。

图 5-1 主程序调试

图 5-2 PT100检测温度功能调试

图 5-3 A/D转换程序调试

16

制作与调试

图 5-4 数码管显示功能调试

5.2 实物制作

焊接完成后实物硬件电路如图5-5所示。为方便焊接在焊接时首先焊接电容电阻,然后焊接各类插件。最后将各部分连接到主板上进行调试,温度设置如图5-6所示,调试结果如图5-7所示。

图 5-5 焊接完成实物图

图 5-6 温度值设置

17

制作与调试

图 5-7 检测的当前温度值

5.3 测试与总结

在硬件制作好后,根据功能设计的要求进行模块化调试。首先调试控制输出模块的运行正常,根据半桥电路驱动的原理,将单片机通过定时器的PWM模式产生的PWM输入到半桥模块,来控制输出的电压的大小,根据示波器检测单片机PWM输出引脚可以看到PWM模式正常输出,使用万用表测量半桥两端的电压差可以检测出是否驱动或停止了加热模块工作。其次是测量PT100工作是否正常,PT100的温度值是基于硬件的设计来实现的,通过硬件的差分放大电路来获取PT100的内阻,根据内阻与温度值的转换关系求得当前温度值,通过ST-LINK连接主板,设置断点单步调试的方式查看寄存器的值来判断当前PT100 的工作是否正常。最后是显示模块的测试,通过改变PT100测试温度值来改变当前显示值测试显示模块是否正常功能。

测试过程中遇到的问题通过软件调试和检测硬件的工作状态解决。调试时加热模块的工作不正常,半桥驱动使加热模块不停得工作,不能加热到一个温度并保持当前温度,通过不断的调试和检查最后找到原因是PT100工作不稳定,使得PID根据当前温度和测量温度来控制PWM输出出现延迟,使得半桥达不到最初设计的要求,最后通过滤波算法稳定PT100的值解决了这个问题。显示模块工作正常,最后调试完成整体工作正常。

另外在设计整个硬件电路和软件程序设计中,遇到了很多问题也学习了很多,充分发挥了自主学习、分析问题、解决问题的能力,将课堂上学到的东西在实物中展现出来。在设计硬件电路的过程中,分析论证了各种方案,并查找各种相关的元器件,最终完成了硬件电路设计。在软件程序设计过程中,先画出了程序流程图,并模块话的实现了各个功能,最后进行整体设计完成了软件程序设计。

本设计完成了根据当前设定的温度使被控物体加热到设定温度并保持。本设计使

18

制作与调试

用的是PT100技术实现温度数据采集。本设计采用PID算法对加热模块的工作进行控制。本设计完成了设置温度、显示温度、加热被控物体到设定温度并保持的功能。

另外,由于时间仓促、资金等原因,本设计还存在诸多不完善的地方,如未能使系统更好的扩展留出总线接口等。因此,本设计还有待进一步研究和改善。

19

参考文献

参考文献

[1] 龚红军. 单片机温度控制系统[J].电气时代,2012,1,(10).P17-18. [2] 张鑫.单片机原理及应用[M].北京:电子工业出版社,2010.10.P35-39. [3] 胡朝.基于单片机的温度控制系统的开发应用[J].商场现代化,2010, (14):62-65. [4] 齐向东 刘立群.单片机控制技术实践 [M].北京:中国电力出版社,2009.3, P55-59. [5] 叶景.基于单片机的温度控制系统的设计[J].中国新通信,2009, (13): 1-2.P111-108. [6] 陶红艳,余成波.传感器与现代检测技术[M].北京:清华大学出版社,2009,2.P117-118. [7] 王文海.单片机应用于实践项目化教程[M].北京:化学工业出版社, 2010,3.P42-48. [8] 李新国. 单片机温度控制系统[J]. 机电工程,2012,3,(02).P39-43.

[9] 黄祯祥,邓怀雄,郭延文,周书. 基于MCS-51单片机的温度控制系统[J].现代电子技术,2013,4,(06).P127-130.

[10] 李晓妮. 单片机温度控制系统的设计[J]. 九江学院学报(自然科学版),2015,2,(02).P27-45. [11] 张青.单片机温度控制系统方案的研究[J].上海交通大学学报,2012,2, (41).P211-218. [12] 马江涛. 单片机温度控制系统的设计及实现[J].计算机测量与控制,2013,3,(12).P47-48. [13] 陶永华.新型PID控制及其应用[M].北京:机械工业出版社,2010,3.P12-13. [14] 熊静琪.计算机控制技术[M].北京:电子工业出版社,2011,4.P21-22.

[15] 廖育武,刘克非,胡家勤.基于组态软件的分布式多点温度远程监控系统[J]. 西南大学报,2009,5,(5).P27-29.

20

致谢

致谢

本次毕业设计历时数月即将完成,在此首先我要感谢老师对我的悉心指导和帮助。 在毕业设计的制作期间,老师不管是在对我选题的确定、开题报告的撰写,还是在毕业设计调试过程中遇到的任何问题巫老师都耐心地帮助我修改和解决。同时在与老师接触的过程中,他饱满的工作热情和严谨的治学态度深深地影响着我,使我在学习和工作受益匪浅。在此,我要对老师表示最衷心的感谢!

在毕业论文完成之际,我的大学生涯也即将结束,回首这四年多的岁月,我的每一步成长都离不开老师和同学们的关心和支持,在此,我要向关心、指导过我的老师和同学们表示诚挚感谢。

本文参考了相关的文献资料,作者在此向收录本文的参考文献的国内外作者表示感谢。由于本人的水平有限,加以时间限制,难免存在疏忽和不足之处,敬请各位老师批评指正。

21

附录I

本设计应用的原理图如下:

附录

22

附录

附录II

本设计应用的PCB 图如下:

23

附录

附录III

本设计主要算法程序如下:

/*函数名:主函数 #include \#include \

/* 底层硬件驱动 */

#include \//#include \#include \#include \#include \#include \#include \#include \#include \#include \

#define Key1 GPIO_ReadInputDataBit(GPIOF, GPIO_Pin_2) //PF2 #define Key2 GPIO_ReadInputDataBit(GPIOF, GPIO_Pin_3) //PF3 unsigned intSet_Show; unsigned intSet_Temp = 35 ;

unsigned char PID_Run; // 调节开始标志; unsigned int Show_Flag1 =0; unsigned int Show_Flag2 =0; unsigned intCheck_Time = 0 ; unsigned intTtemp;

extern signed intRG_tem_real; int main(void) {

bsp_Init(); Beep_IO_init(); Led_IO_init(); USART_Config();

24

附录

Time2_PWM_Init(); //PWM温度调节;

ADC1_CH0_DMA_Config(); PID_Init(); RG_PID_Init(); init_IO_lcd(); Set_Show = 1; temperature_pt100();

while(1) {

if(Show_Flag2 == 1) //按键在设置模式 ; {

Set_Show = 2; Show_Flag1 ++ ;

if(Show_Flag1 == 100 ) }

Led1(1);Dly_ms(5); lcd_Show(); Led1(2);Dly_ms(5); Check_Time ++ ; if( Check_Time == 20) { }

temperature_pt100(); RG_Pwm_Control();

Check_Time = 0; Ttemp = RG_tem_real; { }

Show_Flag1 =0; Show_Flag2 =0; Set_Show = 1;

25

if( Key1 == 0) { Dly_ms(5); if( Key1 == 0) { Set_Temp ++ ; if( Set_Temp>= 99)

Set_Temp = 99 ;

}

while( Key1 ==0 ) { Show_Flag2 = 1; }

}

if( Key2 == 0) { Dly_ms(5); if( Key2 == 0) { Set_Temp -- ; if( Set_Temp<20)

Set_Temp = 20;

}

while( Key2 ==0 ) { Show_Flag2 = 1; }

}

}

}

附录

26

附录

//增量PID算法 #include \#include \extern unsigned intSet_Temp; extern signed intRG_tem_real; extern unsigned char Sw_Flag ;

unsigned char RG_Ki_time1,RG_Ki_time2; double RG_fErr0,RG_fErr1,RG_fErr2; double RG_tem_Err1; struct RG_PP { double Ki_ek0; double Ki_ek1; signed intSetPoint; double SumError; double Proportion; double Integral; double Derivative; double LastError; double PrevError; double Error; double dError;

double FDUk;

}RG_PID;

void RG_PID_Init(void) { RG_PID.Ki_ek0 = 0; RG_PID.Ki_ek1 = 0; RG_PID.SetPoint = Set_Temp; RG_PID.SumError = 0;

RG_PID.Proportion = 5;

27

附录

}

RG_PID.Integral = 0.005; RG_PID.Derivative = 1; RG_PID.LastError = 0; RG_PID.PrevError = 0; RG_PID.Error = 0; RG_PID.dError = 0; RG_PID.FDUk = 0;

void RG_PID_fErr1(void) { }

void RG_PID_fErr2(void)

if(((RG_PID.Error>1)||(RG_PID.Error<-1))&&(RG_fErr0==RG_PID.Error)) { } else { }

RG_Ki_time1=0; RG_PID.Ki_ek0=1;

RG_Ki_time1++; if(RG_Ki_time1==3) { } else { }

RG_PID.Ki_ek0=20;

RG_Ki_time1=0; RG_PID.Ki_ek0=40;

RG_fErr0=RG_PID.Error;

28

附录

{

if((((RG_tem_real-RG_tem_Err1)<2)&&((RG_tem_real-RG_tem_Err1)>-2))&&((RG_

PID.Error>10)||(RG_PID.Error<-10))) { RG_Ki_time2++; if(RG_Ki_time2==3) { RG_Ki_time2=0; RG_PID.Ki_ek1=20;

} else { RG_PID.Ki_ek1=10; }

}

else { RG_Ki_time2=0; RG_PID.Ki_ek1=1; }

RG_tem_Err1=RG_tem_real;

}

void RG_PID_fErr3(void) { if(RG_PID.Ki_ek0>RG_PID.Ki_ek1) { RG_PID.Ki_ek1=1; } else {

RG_PID.Ki_ek0=1; 29

附录

}

}

void RG_PID_Calc(void) { RG_PID.Error = RG_PID.SetPoint - RG_tem_real; // 当前误差 if( RG_PID.Error< 0) { RG_PID.FDUk = 1 ;

}

else if( RG_PID.Error> 10) { RG_PID.FDUk = 999 ; }

else { RG_PID_fErr1(); RG_PID_fErr2(); RG_PID_fErr3();

RG_PID.SumError += RG_PID.Ki_ek0*RG_PID.Error; RG_PID.dError = RG_PID.LastError - RG_PID.PrevError; RG_PID.PrevError = RG_PID.LastError; RG_PID.LastError = RG_PID.Error;

RG_PID.FDUk = RG_PID.Proportion * RG_PID.Error + RG_PID.Integral * RG_PID.SumError

+ RG_PID.Derivative * RG_PID.dError; }

}

void RG_Pwm_Control(void) {

30

// 积分 // 当前微分 // 比例 // 积分项 // 微分项

附录

RG_PID_Calc();

if(RG_PID.FDUk>=1) { } else {

RG_stop();

if(RG_PID.FDUk>=999) { }

RG_PID.FDUk=999;

RG_PID.FDUk=1000-RG_PID.FDUk; RG_hot(RG_PID.FDUk);

} }

//AD转换程序 #include \#include #include \#include \#include \#include \

#define PUTCHAR_PROTOTYPE intfputc(intch, FILE *f) #define PRINT_ON_LCD

#define ADC1_DR_ADDRESS ((uint32_t)0x4001204C) //ADC1 DR寄存器基地址

ADCConvertedValue的低12位有效 __IO uint16_t ADC1ConvertedValue = 0; __IO uint32_t ADC1ConvertedVoltage = 0;

31

附录

void ADC1_CH0_DMA_Config(void) //选择ADC1的通道0 映射在DMA2的数据流0 ; {

ADC_InitTypeDefADC_InitStructure;

ADC_CommonInitTypeDefADC_CommonInitStructure; DMA_InitTypeDefDMA_InitStructure; GPIO_InitTypeDefGPIO_InitStructure; /* Enable ADC1, DMA2 and GPIO clocks ****************************************/

// RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2 | RCC_AHB1Periph_GPIOC, ENABLE);

// RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2 | RCC_AHB1Periph_GPIOA, ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); /* Configure PC.03 (ADC Channel13) as analog input -------------------------*/ // GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ; GPIO_Init(GPIOA, &GPIO_InitStructure); // GPIO_Init(GPIOC, &GPIO_InitStructure);

RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1,ENABLE); //ADC1复位 RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1,DISABLE);

/* DMA2 Stream0 channel0 configuration **************************************/ DMA_InitStructure.DMA_Channel = DMA_Channel_0;

DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)ADC1_DR_ADDRESS; DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&ADC1ConvertedValue; DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;

DMA_InitStructure.DMA_BufferSize = 1; //DMA_InitStructure.DMA_BufferSize =

32

附录

CH_NUM;

DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable; //DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;

DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; DMA_InitStructure.DMA_Priority = DMA_Priority_High;

DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable; DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull; DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; DMA_Init(DMA2_Stream0, &DMA_InitStructure); DMA_Cmd(DMA2_Stream0, ENABLE); /* ADC Common Init

**********************************************************/ ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;

ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div4; // 不要超过36M ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled; //DMA失能

ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;

ADC_CommonInit(&ADC_CommonInitStructure);

/* ADC1

Init****************************************************************/ ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b; ADC_InitStructure.ADC_ScanConvMode = DISABLE;

ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; //连续转换开启; ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None; //启动转换方式

33

附录

ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //数据对齐方式 ADC_InitStructure.ADC_NbrOfConversion = 1; ADC_Init(ADC1, &ADC_InitStructure);

ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_3Cycles); /* Enable DMA request after last transfer (Single-ADC mode) */ ADC_DMARequestAfterLastTransferCmd(ADC1, ENABLE); /* Enable ADC1 DMA */ ADC_DMACmd(ADC1, ENABLE); /* Enable ADC1 */ ADC_Cmd(ADC1, ENABLE);

/* Start ADC1 Software Conversion */ ADC_SoftwareStartConv(ADC1); }

unsigned intGetADCValue(void) {

//设置指定ADC的规则组通道,一个序列,采样时间

ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_3Cycles); }

//PT100温度值转换 void temperature_pt100(void) {

unsigned int nm ;

float tem_pt100,tem_pt,turn_v,turn_v1,turn_v2 = 0; turn_v1 = GetADCValue();

for(nm=0;nm < 1000;nm++) //限幅滤波 ADC_SoftwareStartConv(ADC1);

while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//等待转换结束 return ADC_GetConversionValue(ADC1);

//使能指定的ADC1的软件转换启动功能

34

附录

{ }

ADC1ConvertedValue = turn_v2 / 1000 ; tem_pt = ADC1ConvertedValue ;

turn_v = GetADCValue(); // AD 转换PT100的电阻值 if( ((turn_v - turn_v1 ) < 2) || (turn_v1 - turn_v )< 2) //加热时 ; { } else { }

turn_v2 = turn_v2 + turn_v;

turn_v = turn_v ; turn_v = turn_v1;

// tem_pt=tem_pt/65.536; //1℃相差0.373847mV; 1mV相差2.674891℃

tem_pt = tem_pt / 4.096 ;

// tem_pt=tem_pt*5; //mV }

tem_pt=tem_pt*3.3;

tem_pt=tem_pt/63.4; //放大前电位差(mv) tem_pt=89.189189-tem_pt; //PT100的压降 tem_pt=(5600*tem_pt)/(3300-tem_pt); //PT100阻值 tem_pt100=R2T(tem_pt); tem_pt100=tem_pt100+0.7; tem_real = tem_pt100 ;

35

本文来源:https://www.bwwdw.com/article/3psw.html

Top