设计选用STM32单片机作控制器,设计温度单反馈的控制系统,对电加热水器内水的温度进行控制。通过PT100温度传感器实现对水温信号的采集,并利用模拟量前向通道来对水温信号进行处理。利用STM32单片机进行控制输出PWM信号,用此信号控制接触器进而控制电加热水器的电源通断,最终实现对水温的控制。同时用组态软件设计监控界面来实现对水温的控制显示。通过对此课题的设计,能够使自动化的学生对工业过程控制对象具有更进一步的了解,同时熟练掌握自动化控制系统的设计流程,为以后的工作学习打下坚实基础。
一、控制系统硬件设计
1、控制系统硬件总体设计
温度是一个很重要的变量,需要对其进行准确地控制。温度控制系统常用来保持温度恒定或者使温度按照某种规定的规律变化。闭环控制是温度控制系统中最为常见类型,本设计即为闭环温度控制系统,闭环温度控制方框图如图1所示。
温度控制系统由被控对象、测量装置、调节器和执行机构组成。测量装置对被控电加热水器中水温进行测量,控制器将测量值与给定值进行比较,若存在偏差便由控制器对偏差信号进行处理,输出控制信号给执行机构来启动或停止电加热水器工作,最终将温度调节到设定值。被控对象是电加热水器内水的温度。
基于上述理论设计出本控制系统,本系统硬件主要有:STM32单片机、PT100温度传感器、开关电源、模拟量前向通道、继电器输出模块、HH52P型固态继电器、CJ20-10型接触器、电加热水器,控制系统硬件结构图如图2所示。
2、STM32单片机介绍
STM32单片机是整个温度控制系统的核心部分。因为对温度控制器具有较高的要求,例如高执行速度,高控制精度,高稳定性以及高灵敏度等,所以选择一个具有较高性能而又经济的单片机就成为必然。本设计选用属于STM32系列的STM32F103VET6单片机作为控制电路的核心部件,该单片机属于ST意法半导体公司生产的32位高性能、低成本、低功耗的增强型系列单片机,它的内核采用的是ARM公司最新研发的Cortex-M3架构,该内核是专门设计于满足用户对高性能、低功耗和经济实用的要求。ARM Cortex-M3处理器的架构在系统结构上的增强,使得STM32增强型系列单片机受益无穷,其采用的THUMB-2指令集使得其指令效率更高和而且性能更强。
STM32F103VET6采用薄型四方扁平式封装技术(LQFP)具有100管脚,片内具有512KB的FLASH,64KB的RAM(片上集成12Bit A/D、D/A、PWM、CAN、USB、安全数字输入输出卡SDIO、可变静态存储控制器FSMC等资源)。1个串行外设接口(SPI)总线控制的M25P16(16MB容量的串行FLASH),用于存储数据、代码、字库及图相等等。1个2.8寸26万色显示屏(TFT 240X320(带触摸屏))接口,利用MCU的FSMC的16位数据接口模式,触摸屏采用ADS7843(4线电阻触摸屏转换接口芯片)芯片用硬SPI接口控制。STM32单片机采用2.0~3.6V的供电电压,可以工作在-40℃~85℃的温度范围内,其最高的工作频率是72MHz,其引脚分布如图3所示。
STM32F103VET6单片机有3个不同的时钟源可供选择用以驱动系统时钟,分别为HIS振荡器时钟、HSE振荡器时钟和PLL时钟。这些设备还具有2个二级时钟源,分别是40KHz的低速内部RC和32.768KHz的低速外部时钟源,可以用来驱动看门狗时钟和RTC。任何一个时钟源在不被使用时,都可以被独立的关闭或者开启,以实现对系统功耗的优化。
单片机由AMS1117-3.3芯片电路供电,输入+5V,提供3.3V的固定电压输出,为了降低电磁干扰,需要经C7-C10滤波后再为CPU供电,R8为DGND与AGND的连接电阻,R9和D5 LED和电源指示连接电阻,电源电路如图4所示。
RTC的备份电源采用VBAT 3.3V 锂离子片状电池,RTC的备份电源如图5所示。
单片机的外部晶体/陶瓷谐振器(HSE)(P12、P13),Y1是8MHz晶体谐振器,C22、C23 是谐振电容,大小选择22P。系统的时钟经过PLL模块将时钟提高到72MHz。单片机的低速外部时钟源(LSE)(P8、P9),Y2为32.768KHz的晶体谐振器,C20、C21 谐振电容选择22PF。要注意的是根据ST公司的推荐,Y2要采用电容负载为6PF的晶振,否则有可能会出现停振的现象,时钟电路如图6所示
目前,STM32单片机已经在很多场合得到应用,研制出了很多性能优良的产品,例如可编程逻辑控制器,打印机,扫描仪,电机控制以及一些数码产品,STM32已成为非常成熟的可应用控制器件,本次设计选用的开发板如图7所示。
3、硬件接线及其原理介绍
温度控制系统在正常工作的时候,首先由PT100温度传感器检测被控对象电加热水器内水的当前温度信号,将PT100温度传感器的电阻值变化在模拟量前向通道中作变换放大、冷端温度补偿、线性化。然后将模拟量前向通道输出的模拟电压信号送给主控模块的STM32单片机进行处理,经数字化处理后与给定的温度值的数字量进行比较。单片机根据预定的PID控制算法对数据进行处理,并通过显示屏显示当前温度和设定值,程序自动确定系统是否存在异常,如果系统运行正常,将PID运算结果作为输出控制量控制PWM波形的输出,控制执行器的动作,从而达到接通或者断开电阻炉主电路的目的,实现对电加热水器的控制。单片机控制水温的同时可选择连接上位机进行组态监控,将变量的信息传给上位机使用,并将上位机设定的参数下载到控制器STM32,从而达到上位机组态应有的效果。本次设计系统控制回路接线如图8所示
模拟量前向通道使用TI公司生产的TLC7135(也可称为ICL7135)芯片,加上前级模拟信号运算放大器的特殊处理, 以及一些其它的基本元器件成功地实现了微弱信号的测量。TLC7135具有以下特性:输入阻抗高,对被测电路几乎没有影响;能够自动校零;有精确的差分输入电路;自动判别信号极性;有超、欠压输出信号;采用位扫描(共5位)与BCD码输出。本次设计应用PT100作为温度传感器,需要接三根信号线,其中两线内部短接,信号经单8通道数字控制模拟电子开关CD4051选通后,经运算放大器后得到温度信号对应的模拟电压值,本次设计选择的处理方法是经运算放大器的6管脚引出此模拟电压信号,直接用单片机实现数字化处理,模拟量前向通道如图9所示[6]。
继电器输出模块主要用来执行STM32输出的PWM控制信号,及时的接通或者断开后边的固态继电器HH52P和交流接触器CJ20-10,进而实现对加热器主电路的控制。由于单片机输出的PWM信号3.3V左右电压较低,不能直接用来驱动24V的固态继电器HH52P,因此需要在其中间加用继电器输出模块,继电器输出模块供电电压12V,只要有输入信号便可以控制线圈的吸合与断开,继电器输出模块如图10所示。
PT100是铂热电阻器,它的阻值会随着温度的变化而改变。PT后的100即表示它在0℃时阻值为100欧姆,在100℃时它的阻值约为138.5欧姆。常见的PT100感温元件有陶瓷元件,玻璃元件,云母元件,它们是由铂丝分别绕在陶瓷骨架,玻璃骨架,云母骨架上再经过复杂的工艺加工而成[7]。PT100的工作原理:当PT100在0℃的时候他的阻值为100欧姆,它的阻值会随着温度上升而成近似匀速的增长。但他们之间的关系并不是简单的正比的关系,而更应该趋近于一条抛物线。
铂电阻的阻值随温度的变化而变化的计算公式如公式(1)和公式(2)所示。
公式中的A,B,系数为实验测定。PT100铂电阻的RT曲线图如图11所示
PT100电阻随温度变化表见表1
本次设计的系统硬件电路实物图如图12所示。
二、控制系统软件设计
1、软件开发环境及其工具
C语言编程
C语言是一种计算机程序设计语言。它既有高级语言的特点,又具有汇编语言的特点。它可以作为系统设计语言,编写工作系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序,因此,它的应用范围广泛,C程序设计语言是一种在国内外被广泛使用的计算机编程语言。C语言是一种结构化语言,它层次清晰,便于按模块化方式组织程序,易于调试和维护。C语言作为一种高级程序设计语言得到了广泛的应用,采用C语言编写的软件程序不针对特定的硬件系统,可以根据不同的单片机 做移植,基于C语言的以上诸多特点及优点,本设计的软件程序设计,采用C程序设计语言[9]。
软件开发工具介绍
编程软件使用源自德国Keil公司的 RealView MDK,这一款编程软件被全球超过十万的嵌入式工程师或者学者验证和使用,是ARM公司最新推出的针对各种嵌入式处理器的软件开发工具。它集成了业界最领先的技术,融合了中国多数软件工程师所需要的特点和功能,uVision4集成开发环境支持ARM7、ARM9和最新的Cortex-M3内核处理器,自动配置启动代码,集成Flash少些模块,强大的性能分析功能。其集成开发环境如图13所示。
uVision4集成开发环境主要的性能:
(1) 源代码编辑器的功能非常强大。
(2) 设备数据库可以根据开发工具进行配置。
(3) 工程管理器可以用于创建和维护工程。
(4) 编译工具集汇编、编译、连接过程于一体。
(5) 用于设置开发工具配置的对话框。
(6) 真正集成高速CPU及片上外设模拟器的源码级调试器。
(7) 高级GDI接口,可用于目标硬件的软件调试和ULINK2仿真器的连接。
(8) 用于下载应用程序到Flash ROM中的Flash编程器。
(9) 完善的开发工具手册、设备数据手册和用户向导。
2、STM32工程创建与配置
经过学习软件的编程,对STM32程序编写有初步的认识,下面就是创建与配置工程的全部过程。
(1)新建一个文件夹(以后编的每一个工程都放进这个文件夹里,自己命名,此处所有文件都可以自己命名,例如:STM32 file)。此处所用到的库函数版本为V3.5库函数版本。
(2)创建一个文件夹(名字可以根据你编写的程序来命名,如:Demo)。 新建子文件夹User,用于存放用户源程序。新建子文件夹Project,用户KEIL工程文件。在Project下依次创建Obj和List子文件夹,存放编译过程中产生的中间文件。将main.cstm32f10x_conf.h、stm32f10x_it.c、stm32f10x_it.h 、system_stm32f10x.c等文件复制到User文件下。
(3)复制源代码到Demo文件夹。
将stm32f10x_stdperiph_lib3.5 / Libraries文件夹整体复制到Demo文件夹下 这就是ST的标准库,是以源代码形式提供的。也可将Libraries文件夹直接复制到STM32 file文件夹下,使其与以后创建的其他工程同在一个目录下,这样可使在该目录在的工程共享Libraries。免得以后创建一个工程就得复制一次Libraries。
(4)新建一个Keil MDK工程
启动Keil MDK,点击菜单New uVision Project,然后按向导进行操作。选择CPU类型为STM32F103VE。当提示是否复制启动代码时,选择否。为了延长芯片使用寿命以及加快仿真速度,可以在ram中直接仿真(ram仿真速度快),用ram仿真 在断电之后数据就全部丢失了,修改Target名字, 添加两个,一个Flash,一个Ram。
为了便于代码管理,在这个Project下创建几个Group,User:存放用户自己写的源代码;RVMDK:存放启动文件(汇编文件);StdPeriph_Driver:存放ST标准库文件;CMSIS :存放CMSIS接口文件(这也是库的一部分);创建好Group后,我们开始依次添加文件。添加User:如main.c stm32f 10x_it.c添加RVMDK:statup_stm32f 10x_hd.x;添加StdPeriph_Driver :我们用到的STM32温度控制系统设计
一些.C文件。如:misc.c stm32f 10x_rcc.c stm32f 10x_gpio.c等;添加CMSIS :core_cm3.c system_stm32f 10x.c。
(5)配置工程, 点击“Options”按钮。
打开Flash 调整Flash设置,切换到Output,然后选择Object文件夹,在CreateHex File 前打钩,并将Name Executable修改为output。
切换到Listing,选择Listings文件夹。切换到C/C++,添加两个预编译宏STM32F10X_HD, USE_STDPERIPH_DRIVER (这是ST库用到了这两个宏),修改Includes路径。切换到Debug,选择硬件调试器,我们选择ST-Link Debugger,在Run to main前打钩。切换到Utilities,选择调试器类型,我们选择ST-Link Debugger。
打开Ram,调整Ram设置。切换到target,切换到Output。选择Object文件夹,在Create Hex File 前打钩。将Name Executable修改为output。切换到Listing,选择Listings文件夹。切换到C/C++,选中One ELF Section per Function,添加两个预编译宏STM32F10X_HD, USE_STDPERIPH_DRIVER(这是ST库用到了这两个宏),修改Includes路径。这样就新建一个工程,我们可以根据需要自己所要实现的功能编辑程序。
评论
查看更多