设计选用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路径。这样就新建一个工程,我们可以根据需要自己所要实现的功能编辑程序。
三、软件系统总体设计
1、软件程序结构
在深入学习STM32编程、PID控制算法、组态王软件的基础上进行温度控制系统的软件设计。软件设计主要包括温度数据的采集变换、PID算法的设计、PWM输出信号控制以及触摸屏显示设计、上位机监控画面的设计。上位机监控画面的设计主要包括设计监控主画面、设计报警画面等。整个程序系统主要有主控程序、初始化程序、温度设定程序、PID设置程序、温度采集程序、温度显示程序、PID控制算法程序、PWM控制信号输出程序和串口通信程序组成,其结构如图14所示。 3.2.2 主程序设计
主程序是整个软件系统的主干,处在程序的最顶一层,引导系统进入正常的工作状态,并且协调着各个程序块之间的调用关系,使硬件系统能正常的工作以完成温度控制系统任务,其流程如图15所示。 3.2.3 初始化程序设计
系统初始化程序在系统上电启动或者复位时,对温度控制器的硬件和软件进行初始化,完成系统的配置工作,初始化程序主要包括:显示屏初始化、系统时钟初始化、I/O 端口的配置、定时器初始化。
2、温度采集程序设计
温度检测电路是由PT100温度传感器和模拟量前向通道组成的,温度的检测由二者直接完成。利用温度检测电路得到温度变化对应的模拟电压信号,该信号直接由STM32进行A/D转换,由于转化的数值与实际的温度值之间不是线性关系,要用DS18B20采集对应温度值,该温度值用来校验当前温度是否正确,并用此温度值对应前向通道输出的模拟电压值以拟合数值与温度值的曲线,得到他们之间的函数关系,本次拟合曲线如图16所示。
曲线直线化是曲线拟合的重要手段之一。对于某些非线性的资料可以通过简单的变量变换使之直线化,这样就可以按最小二乘法原理求出变换后变量的直线方程,在实际工作中常利用此直线方程绘制资料的标准工作曲线,同时根据需要可将此直线方程还原为曲线方程,实现对资料的曲线拟合。最终经MATLAB得到曲线公式如公式(3)所示。
温度采集相关的程序核心代码如下所示:
void filter(void) //模拟量前向通道温度采集
{
int sum = 0;
u8 count,i;
for(i=0;i《12;i++)
{
for(count=0;count《Sampling_Number;count++)
{
sum += Conv_AD_Value[count][i];
}
After_filter[i]=sum/Sampling_Number;
sum=0;
}
}
此程序用来获取当前温度对应的模拟量信号,并将其转化为数字量信号,经由拟合公式计算出对应的温度值。
3、位置式PID控制算法设计
工业生产过程中,对于生产装置的温度、压力、流量、液位等工艺变量常常要求维持在一定的数值上,或按一定的规律变化,以满足生产工艺的要求。PID控制算法的原理是对整个控制系统进行按偏差进行调节,从而使被控量的实际值与工艺要求的预定值一致。因为PID控制算法具有:技术成熟、容易被人们熟悉和掌握、不需要建立数学模型、控制效果好、鲁棒性等优点,所以PID控制算法成为应用最广泛的控制算法。
单片机控制是一种采样控制,它只能根据采样时刻的偏差值计算控制量。因此连续PID控制算法不能直接使用,需要采用离散化方法。由于工业生产过程大多数是缓慢变化的过程,因此只要控制机的采样周期T取得足够短,断续控制形式就趋于连续控制形式。数字PID控制算法又分增量式PID控制算法和位置式PID控制算法,由于位置式PID控制算法控制精度比较高,而增量式PID控制算法有:积分截断效应大、有静态误差、溢出的影响大等缺点,所以本设计选用的控制算法是位置式PID控制算法。
位置式PID控制算式如公式(4)所示。
PID控制算法的参数整定与采样周期的选取
PID控制算法参数整定的方法很多,概括起来有如下两大类:
(1)理论计算整定法。它主要依据系统的数学模型,经过理论计算确定控制器参数。这种方法所得到的计算数据未必可以直接使用,还必须通过工程实际进行调整和修改。
(2)工程整定法。它主要依赖于工程经验,直接在控制系统的试验中进行,且方法简单、易于掌握,在工程实际中被广泛采用。PID控制算法参数的工程整定方法,主要有临界比例法、反应曲线法和衰减法。这三种方法各有其特点,其共同点都是通过试验,然后按照工程经验公式对控制器参数进行整定。但无论采用哪一种方法所得到的控制器参数,都需要在实际运行中进行最后的调整与完善。
本文采用经验法整定PID控制算法参数,下面具体说明经验法的整定步骤:
(1)让调节器参数的积分系数I=0,微分系数D=0,控制系统投入闭环运行,由小到大改变比例系数P,让扰动信号作阶跃变化,观察控制过程,直到获得满意的控制过程为止。
(2)取比例系数P为当前的值乘以0.83,由小到大增加积分系数I,同样让扰动信号作阶跃变化,直至得到满意的控制过程。
(3)积分系数I保持不变,改变比例系数P,观察控制过程有无改善,如有改善则继续调整,直到满意为止。否则,将原比例系数P增大一些,再调整积分系数I,力求改善控制过程。如此反复试凑,直到找到满意的比例系数P和积分系数I为止。
(4)引入适当的微分系数D,此时可适当增大比例系数P和积分系数I。和前述步骤相同,微分系数的整定也需反复调整,直到控制过程满意为止。
经验法简单可靠,但需要有一定的现场运行经验,整定时易带有主观片面性。当采用PID控制算法时,由于有多个整定参数,反复试凑的次数增多,因此增加了得到最佳整定参数的难度。
需要注意的是:本设计所用到PID控制算法的参数与的工业上PID控制算法的参数有所不同,工业中由于对象的体积大、容量大、控制室距离现场较远等因素,所以其PID控制算法的参数普遍比本设计的大。书上、参考资料上的的PID控制算法的参数多数都是从工业生产过程中得来的,因此此经验数据不适应作本设计PID控制算法的参数。
采样周期的选取,按一定的时间间隔T,把时间上连续和幅值上也连续的信号,转变成在时刻0、T2、…、kT的一连串脉冲输出信号的过程称为采样过程。执行采样动作的开关S称为采样开关或采样器采样后的脉冲序列ty*称为采样信号,采样器的输入信号ty称为原始信号,采样开关每次通断的时间间隔T称为采样周期。采样信号ty在时间上是离散的,但在幅值上仍是连续的,所以采样信号是一个离散的模拟信号。信号采样过程如图18所示。
从信号的采样过程可知,经过采样不是取全部时间上的信号值,而是取某些时间上的值。这样处理会不会造成信号丢失呢?香农采样定理指出:如果模拟信号(包括干扰在内)频谱最高频率为maxf,只要按照采样频率max2ff进行采样,那么采样信号ty*就能惟一的复观ty。采样定理给出了ty*能惟一的复观ty所必需的最低采样频率。实际应用中,常取max105ff,甚至更高。
4、采样周期的确定需要注意以下事项:
(1)从执行机构的特性要求来看,有时需要输出信号保持一定的宽度。采样周期必须大于这一时间。
(2)从控制系统的随动和抗干扰的性能来看,要求采样周期短些。
(3)从单片机的工作量和每个调节回路的计算来看,一般要求采样周期大些。
(4)从单片机的精度看,过短的采样周期是不合适的。
经过多次调试设置,采样周期T选为1s采样效果最好,且信号采样不失真。
5、 PWM输出程序设计
脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中[14]。PWM控制技术以其控制简单,灵活和动态响应好的优点而成为电力电子技术最广泛应用的控制方式。
通过单片机输出的PWM信号控制固态继电器的通断,通过改变一定时间内通过的交流波头数实现对电加热水器内水温的控制,我国公共电力网的频率均为50HZ,周期也就是0.02秒,设置 PWM 信号的输出周期为4秒,即STM32单片机以0.25Hz的频率输出PWM,改变PWM的占空比,在4秒的周期内,当PID算法的控制量大于100时,通过交流电源的最大周期波数是100,当 PID 算法的控制量小于0时,最小周期波数是0,当控制量在0~100之间时,就按比例换算进行确定PWM输出信号的占空比。STM32单片机具有多个定时器/计数器,每个定时器/计数器都可以独立的输出PWM信号,本设计采用单片机的TIM3定时器/计数器在PB5 引脚输出PWM,PWM输出流程如图19所示。
四、上位机监控界面设计
1、上位机监控软件的选取
组态王(Kingview)由北京亚控自动化软件有限公司开发的,该软件由中国科技大学学士、清华大学硕士林伟总设计,经数十位工程师历时五年开发成功,是最优秀的国产组态软件,居全国同类软件产销量第一。组态王是一个具有易用性、开放性和集成能力的通用组态软件。应用组态王可以使工程师把精力放在控制对象上,而不是形形色色的通信协议、复杂的图形处理、枯燥的数字统计。只需要进行填表操作,即可生成适合于用户的监控和数据采集系统。可以在整个生产企业内部将各种系统和应用集成在一起,实现“厂际自动化”的最终目标。组态王开发监控系统软件是新型的工业自动控制系统正以标准的工业计算机软、硬件平台构成的集成系统取代传统的封闭式系统,具有适应性强、开放性好、易于扩展、经济、开发周期短等优点。组态软件以其可靠性高、抗干扰能力强、界面简单、功能强大、性价比高等显著特点广泛应用于现代工业的自动控制之中。
2、 组态王软件组态监控界面设计
使用组态王实现控制系统实验仿真的基本方法:
(1)图形界面的设计;
(2)构造数据库;
(3)建立动画连接;
(4)运行和调试。
根据以上控制方案的确定,本次设计组态王监控界面如图20所示
定义数据变量见表2。
选择设备的相关配置如下:
设备名称:通用单片机ASCII;
通信描述:串口;
逻辑名称:STM32;
选择串口号:COM4;
设备地址:1.0。
动态连接,参数动态连接设置见表3。