基于单片机变频恒压供水课程设计报告汇总.docx

上传人:b****6 文档编号:7918145 上传时间:2023-01-27 格式:DOCX 页数:13 大小:83.40KB
下载 相关 举报
基于单片机变频恒压供水课程设计报告汇总.docx_第1页
第1页 / 共13页
基于单片机变频恒压供水课程设计报告汇总.docx_第2页
第2页 / 共13页
基于单片机变频恒压供水课程设计报告汇总.docx_第3页
第3页 / 共13页
基于单片机变频恒压供水课程设计报告汇总.docx_第4页
第4页 / 共13页
基于单片机变频恒压供水课程设计报告汇总.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

基于单片机变频恒压供水课程设计报告汇总.docx

《基于单片机变频恒压供水课程设计报告汇总.docx》由会员分享,可在线阅读,更多相关《基于单片机变频恒压供水课程设计报告汇总.docx(13页珍藏版)》请在冰豆网上搜索。

基于单片机变频恒压供水课程设计报告汇总.docx

基于单片机变频恒压供水课程设计报告汇总

 

目录

课题简介3

关键词3

课题描述3

实验任务3

实验设备3

设备工作原理简介4

西门子MM440变频器工作原理4

变频器参数复位5

压力变送器工作原理5

PID工作原理6

课题实施方案7

硬件设计7

电路原理图7

软件设计8

结果分析13

个人总结14

参考文献15

课题简介

传统控制水位的方法是人为频繁的进行观察并以此为依据进行补水或放水的,而这些工作相当费时费力。

如果运用自动控制的思想来处理这个问题则会方便很多。

本实验课题便是针对这个问题进行设计。

实验拟设计一套PID水塔液位控制系统,采用51单片机为主控制器,对其进行编程后,通过控制变频器,使得变频器支配的电机能够根据频率而得到相应的运转,从而使水位达到并保持预期的要求;变频器为执行器。

水塔水位信号的来源是由位于水塔下方的压力传感器感知水面高度,并将水面高度转换为相应的电流信号反馈回控制回路,而后根据测定人为的建立它们之间的函数关系,进行信号的校对从而实现水塔水位信号的输入。

整个系统能够很好的跟踪给定液位,有较好的快速性和稳定性,能够满足一般化生产过程中对液位控制的要求。

关键词:

液位控制系统单片机PID

课题描述

一、实验任务

●会使用单片机C语言,能用它进行编程;

●在单片机中完成PID算法的编程实现;

●构建一个闭环系统完成对PID实验装置的水位高度的稳定调节;

●完成系统框图的设计及各组成的功能描述;

●完成西门子MM440变频器的参数化设置;

●完成在增加输出扰动后控制系统快速调节;

二、实验设备

IA7000实验台一台

51单片机试验箱

西门子MM440变频器

三相水泵:

AB-12,380V,40W,流量12升/分,扬程3米

压力变送器:

DC24,4~20mA

装有实验软件的计算机一台

PC-PPI通讯电缆一根

导线若干

三、设备工作原理简介

1、西门子MM440变频器工作原理

MM440变频器具有多个继电器输出、多个模拟量输出。

原理图如下

MM440的接线原理图

MM440的每个端子都有一个对应的参数用来设定该端子的功能(如下表)

表1MM440六个数字开关量输入端子功能

数字输入端子

编号

参数编号

出厂设置

DIN1

5

P0701

1

DIN2

6

P0702

12

DIN3

7

P0703

9

DIN4

8

P0704

15

DIN5

16

P0705

15

DIN6

17

P0706

15

功能说明

=1接通正转/断开停车

=2接通反转/断开停车

=3断开按惯性自由停车

=9故障复位

=10正向点动

=11反向点动

=12反转(与正转命令配合使用)

=13电动电位计升速

=14电动电位计降速

=15固定频率直接选择

=16固定频率选择+ON命令

=17固定频率编码选择+ON命令

2、变频器参数复位:

参数复位是将变频器的参数恢复到出厂时的参数默认值。

在变频器初次调试,或者参数设置混乱时,需要执行该操作,以便于将变频器的参数值恢复到一个确定的默认状态。

MM440包含六个数字开关量输入端子,每个端子都有一个对应的参数用来设定该端子的功能。

恢复变频器缺省值,按下“P”健,变频器开始复位到工厂缺省值。

表2.由BOP操作时的工厂缺省设置值

参数号

出厂值

设置值

说明

P0010

0

30

工厂的设定值

P0970

0

1

参数复位

3、压力变送器工作原理

压力变送器的主要作用把压力信号传到电子设备,进而在计算机显示压力。

其原理大致是:

将水压这种压力的力学信号转变成电流(4-20mA)这样的电子信号。

压力和电压或电流大小成线性关系,一般是正比关系。

所以,变送器输出的电压或电流随压力增大而增大,由此得出一个压力和电压或电流的关系式。

压力变送器的被测介质的两种压力通入高、低两压力室,低压室压力采用大气压或真空,作用在δ元(即敏感元件)的两侧隔离膜片上,通过隔离片和元件内的填充液传送到测量膜片两侧。

压力变送器是由测量膜片与两侧绝缘片上的电极各组成一个电容器。

当两侧压力不一致时,致使测量膜片产生位移,其位移量和压力差成正比,故两侧电容量就不等。

主要优点

(1)压力变送器具有工作可靠、性能稳定等特点;

(2)高准确度,高稳定性;

(3)4-20mADC二线制信号传送,抗干扰能力强,传输距离远;

(4)铝合金压铸外壳,三端隔离,静电喷塑保护层,坚固耐用;

(5)专用V/I集成电路,外围器件少,可靠性高,维护简单/体积小、重量轻,安装方便。

4、PID工作原理

PID是比例(P)、积分(I)、微分(D)控制算法。

但并不是必须同时具备这三种算法,也可以是PD,PI,甚至只有P算法控制。

我以前对于闭环控制的一个最朴素的想法就只有P控制,将当前结果反馈回来,再与目标相减,为正的话,就减速,为负的话就加速。

现在知道这只是最简单的闭环控制算法。

 

比例(P)、积分(I)、微分(D)控制算法各有作用:

     

 比例:

反应系统的基本(当前)偏差e(t),系数大,可以加快调节,减小误差,但过大的比例使系统稳定性下降,甚至造成系统不稳定;      

积分:

反应系统的累计偏差,使系统消除稳态误差,提高无差度,因为有误差,积分调节就进行,直至无误差;     

 微分:

反映系统偏差信号的变化率e(t)-e(t-1),具有预见性,能预见偏差变化的趋势,产生超前的控制作用,在偏差还没有形成之前,已被微分调节作用消除,因此可以改善系统的动态性能。

但是微分对噪声干扰有放大作用,加强微分对系统抗干扰不利。

 积分和微分都不能单独起作用,必须与比例控制配合。

增量式PID:

是指数字控制器的输出只是控制量的增量Δu(k)。

采用增量式算法时,计算机输出的控制量Δu(k)对应的是本次执行机构位置的增量,而不是对应执行机构的实际位置。

增量型PID算式:

PID=Uk+KP*[E(k)-E(k-1)]+KI*E(k)+KD*[E(k)-2E(k-1)+E(k-2)];

增量式算法优点:

(1)算式中不需要累加。

控制增量Δu(k)的确定仅与最近3次的采样值有关,容易通过加权处理获得比较好的控制效果;

(2)计算机每次只输出控制增量,即对应执行机构位置的变化量,故机器发生故障时影响范围小、不会严重影响生产过程;

(3)手动—自动切换时冲击小。

当控制从手动向自动切换时,可以作到无扰动切换。

课题实施方案

1、硬件设计

在本方案中,由51单片机试验箱、变频器MM440、压力变送器组成。

1)、51单片机试验箱

完成对模拟量输入输出EM235模块数字输入信号的读取,并且负责PID输入输出的计算,并将结果化为数字量放入模拟量输入输出EM235模块。

2)、变频器MM440

主要是用来完成对水泵的控制,当频率为0HZ时水泵不抽水,液位维持不变;当频率为50HZ时,水泵最大功率输出,提高液位。

3)、压力变送器

主要任务是将水缸中的水的压力信号转换成4-20mA的电流信号并且输入模拟量输入输出EM235模块从而达到监视系统水位的目的。

4)、模拟量输入输出EM235模块

负责将模拟量转化为数字量以方便单片机读取,并且将PLC-200的输出数字量转化成模拟量以便控制变频器MM440。

电路原理图

2.软件设计

PID算法部分:

/*PID=Uk+KP*[E(k)-E(k-1)]+KI*E(k)+KD*[E(k)-2E(k-1)+E(k-2)];(增量型PID算式)

函数入口:

RK(设定值),CK(实际值),KP,KI,KD

函数出口:

U(K)*/

//pid.c

/*PID=PID->UK_REAL+PID->KP*[E(k)-E(k-1)]+PID->KI*E(k)+PID->KD*[E(k)-2E(k-1)+E(k-2)];(增量型PID算式)

函数入口:

PID->RK(设定值),PID->CK(实际值),PID->KP,PID->KI,PID->KD

函数出口:

U(K)*/

//#include"defines.h"

#include"pid.h"

#defineMAXOUT0xff

//#defineMAXGAP100

voidpid_exe(pid_str*PID)//指针指向PID结构体

{

PID->EK[2]=PID->EK[1];//Double上差量->上次差量

PID->EK[1]=PID->EK[0];//上次差量->当前差量

PID->EK[0]=PID->RK-PID->CK;//当前差量=水位设定值-水位实际值

if(PID->EK[0]<=10&&PID->EK[0]>=-10)

PID->EK[0]=0;

PID->UK_REAL=PID->UK_REAL+PID->KP*(PID->EK[0]-PID->EK[1])//微分一次后积分即原数

+(float)PID->KI*PID->EK[0]//直接积分

+(float)PID->KD*(PID->EK[0]-2*PID->EK[1]+PID->EK[2]);//二阶微分后积分即一阶微分

if((PID->UK_REAL>>PID->BITMOV)>=MAXOUT)//AD输出量>上限值

{

PID->UK=MAXOUT;//AD输出量=上限值

}elseif(PID->UK_REAL>>PID->BITMOV<=0)//AD输出量

{

PID->UK=0;

}else

{

PID->UK=PID->UK_REAL>>PID->BITMOV;//实际输出量

}

}

 

PID头文件:

 

主函数部分:

/*******************************************************************************

*

*普中科技

--------------------------------------------------------------------------------

*实验名:

AD显示试验

*实验说明:

使用LCD1602显示AD读取到的各个数值

*连接方式:

见连接图

*注意:

*******************************************************************************/

#include

#include"i2c.h"

#include"lcd.h"

#include"pid.h"

//--定义PCF8591的读写地址--//

#defineWRITEADDR0x90//写地址

#defineREADADDR0x91//读地址

pid_strswkz;

voidDelay(unsignedinti)

{

while(i--);

}

voidset_pid_para(void)

{

swkz.KP=3;

swkz.KI=0.5;

swkz.KD=0;

swkz.RK=450;

swkz.EK[2]=0;

swkz.EK[1]=0;

swkz.EK[0]=0;

swkz.BITMOV=1;

swkz.UK_REAL=0;

}

 

/*******************************************************************************

*函数名:

Pcf8591SendByte

*函数功能:

写入一个控制命令

*输入:

channel(转换通道)

*输出:

*******************************************************************************/

voidPcf8591SendByte(unsignedcharchannel)

{

I2C_Start();

I2C_SendByte(WRITEADDR,1);//发送写器件地址

I2C_SendByte(0x40|channel,0);//发送控制寄存器

I2C_Stop();

}

/*******************************************************************************

*函数名:

Pcf8591ReadByte

*函数功能:

读取一个转换值

*输入:

*输出:

dat

*******************************************************************************/

unsignedcharPcf8591ReadByte()

{

unsignedchardat;

I2C_Start();

I2C_SendByte(READADDR,1);//发送读器件地址

dat=I2C_ReadByte();//读取数据

I2C_Stop();//结束总线

returndat;

}

/*******************************************************************************

*函数名:

Pcf8591DaConversion

*函数功能:

PCF8591的输出端输出模拟量

*输入:

value(转换的数值)

*输出:

*******************************************************************************/

voidPcf8591DaConversion(unsignedcharvalue)

{

I2C_Start();

I2C_SendByte(WRITEADDR,1);//发送写器件地址

I2C_SendByte(0x40,1);//开启DA写到控制寄存器

I2C_SendByte(value,0);//发送转换数值

I2C_Stop();

}

voidDis_Play(unsignedintdata1)

{

LcdWriteData('0'+data1/1000);//发送显示数据

LcdWriteData('0'+data1%1000/100);

LcdWriteData('0'+data1%100/10);

LcdWriteData('0'+data1%10);

}

/*******************************************************************************

*函数名:

main

*函数功能:

主函数

*输入:

*输出:

*******************************************************************************/

voidmain()

{

unsignedintAD_Read=0;//AD_Read->信号输入量

LcdInit();//1602液晶初始化

set_pid_para();//给PID赋初值

while

(1)

{

AD_Read=Pcf8591ReadByte()*2;//ADC读取外部输入电压先空读一次

swkz.CK=AD_Read;//把读入的AD值付给PID.CK

write_str(1,0,"AD:

");

Dis_Play(AD_Read);//显示当前读入AD电压值0-510->水位的高度

Pcf8591SendByte(3);//发送电位器转换命令

AD_Read=Pcf8591ReadByte()*2;//再度读一次,读出当前数据AD_Read->信号输入量0-510->水位的高度

//--PIDDA输出--//

pid_exe(&swkz);//PID计算出AD输出量

write_str(0,0,"OUTPUT:

");

Dis_Play(swkz.UK);

Pcf8591DaConversion(swkz.UK);//AD输出量给控制

//Delay(100000);//延时时间改变控制周期!

}

}

 

3、结果分析

模拟量电压0-5V对应数字量0-510(设定的数字量最大值MAXOUT=0xff=255,实际值PID->UK_REAL右移一位PID->BITMOV,即除以2以后与255比较,所以实际值变化范围为510),水位变化范围为0-100cm,PID中有:

swkz.KP=3;

swkz.KI=0.8;

swkz.KD=0.7;

结果显示,设定值比实际值大致多70(如,给定值为400,实际输出值为330,对应水位是52cm),最终按要求将水位控制在60cm(给定值为450)和40cm(给定值为328)。

 

个人总结

本次课程设计任务是用单片机实现PID算法控制液位,由12人共同完成。

我和其他四位同学主要负责PID算法部分,一开始都不会做,就在网上查资料,中间也走了弯路,幸而在老师指点下及时改正,最终从三篇较好的程序中选择了一篇程序相对较精简且容易理解的作为参考,在此基础上深入理解并加以修改,从而变成一个能用而且好用的PID算法程序。

程序很早就写好了,然后就与负责其他两部分的同学交流一起做其他部分,争取尽快完成任务,在各部分都有了雏形,整个系统可以顺利运行后,我们组的同学就开始调PID算法程序。

由于暑假期间参加了西门子杯工业自动化挑战赛,对过程控制有部分了解,所以PID算法中的参数给定主要是我在负责。

经过多次实验,终于使得水位控制相对精确,但是由于水平有限,PID参数部分调地并不完美,导致水位震荡较大,任然有很大的改进空间。

通过这次12人共同完成一个课程设计,我体会到了明确分工,积极合作的重要性,也更明白了包容和谦让的力量,同时对之前所学的知识进行了一次应用,更有助于理解。

这次课程设计也让我认识到了自己的不足,对于一个系统来说任何细节都很重要,需要从各个方面考虑才行。

最后,十分感谢谭老师的指导以及其他11位同学对我的帮助。

 

参考文献

《单片机》XX百科词条

《计算机控制技术》施保华

《电子技术基础》康华光

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 工学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1