基于单片机的流量控制系统设计讲解.docx

上传人:b****6 文档编号:8648431 上传时间:2023-02-01 格式:DOCX 页数:17 大小:115.55KB
下载 相关 举报
基于单片机的流量控制系统设计讲解.docx_第1页
第1页 / 共17页
基于单片机的流量控制系统设计讲解.docx_第2页
第2页 / 共17页
基于单片机的流量控制系统设计讲解.docx_第3页
第3页 / 共17页
基于单片机的流量控制系统设计讲解.docx_第4页
第4页 / 共17页
基于单片机的流量控制系统设计讲解.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

基于单片机的流量控制系统设计讲解.docx

《基于单片机的流量控制系统设计讲解.docx》由会员分享,可在线阅读,更多相关《基于单片机的流量控制系统设计讲解.docx(17页珍藏版)》请在冰豆网上搜索。

基于单片机的流量控制系统设计讲解.docx

基于单片机的流量控制系统设计讲解

 

过程控制系统

课程设计

设计题目:

基于单片机的流量控制系统设计

 

学生姓名:

专业:

测控技术与仪器

班级学号:

指导教师

设计时间:

2010.6.28-2008.7.11

《过程控制系统》课程设计任务书

专业测控技术与仪器班级姓名

设计题目:

基于单片机的流量控制系统设计

一、设计实验条件

过程控制系统实验室实验系统

二、设计任务

1、设计电磁流量计为流量传感器,单片机为核心流量控制系统。

系统主要由水泵、水泵电机、流量传感器、电动阀门、阀门电机、单片机控制系统等组成。

2、写出流量控制过程,绘制控制系统组成框图

3、利用单片机对流量进行控制

(1)系统硬件电路设计

单片机采用89S52;设计键盘及显示电路,电机控制电路(可控硅,光电耦合器)。

(2)编制流量控制程序

三、设计说明书的内容

1、设计题目与设计任务(设计任务书)

2、前言(绪论)(设计的目的、意义等)

3、主体设计部分

4、参考文献

5、结束语

四、设计时间与设计时间安排

1、设计时间:

2周

2、设计时间安排:

熟悉实验设备、实验、收集资料:

4天

设计计算、绘制技术图纸:

4天

编写课程设计说明书:

5天

答辩:

1天

 

一,流量控制系统设计意义

工业生产中过程控制是流量测量与仪表应用的一大领域,流量与温度、压力和物位一起统称为过程控制中的四大参数,人们通过这些参数对生产过程进行监视与控制。

对流体流量进行正确测量和调节是保证生产过程安全经济运行、提高产品质量、降低物质消耗、提高经济效益、实现科学管理的基础。

流量的检测和控制在化工、能源电力、冶金、石油等领域应用广泛。

【1】

在天然气工业蓬勃发展的现在,天然气的计量引起了人们的特别关注,因为在天然气的采集、处理、储存、运输和分配过程中,需要数以百万计的流量计,其中有些流量计涉及到的结算金额数字巨大,对测量和控制准确度和可靠性要求特别高。

此外,在环境保护领域,流量测量仪表也扮演着重要角色。

人们为了控制大气污染,必须对污染大气的烟气以及其他温室气体排放量进行监测;废液和污水的排放,使地表水源和地下水源受到污染,人们必须对废液和污水进行处理,对排放量进行控制。

于是数以百万计的烟气排放点和污水排放口都成了流量测量对象。

同时在科学试验领域,需要大量的流量控制系统进行仿真与试验。

流量计在现代农业、水利建设、生物工程、管道输送、航天航空、军事领域等也都有广泛的应用。

二,系统方案

1、方案整体思路

液体流量控制通常采用电动调节阀实现,近年来,电动调节阀的结构和控制方式发生了很大的变化,随着计算机进入控制领域,以及新型的电力电子功率元器件的不断出现,使采用全控制的开关功率元件进行脉宽调制(pulsewidthmodulation,简称PWM)控制方式得到了广泛的应用。

这种控制方式很容易在单片机中实现,从而为电动调节阀的控制数字化提供了基础。

将偏差的比例(proportion)、积分(integral)、微分(differential)通过线性组合构成数字控制量,构成数字PID控制器,它具有非常强的灵活性,可以根据试验和经验在线调整参数,因此可以得到更好的控制性能。

本系统采用C51系列的89S52单片机为核心,通过设置89S52单片机的定时器产生脉宽可调的PWM波【2】,对阀门电机的输入电压进行调制,实现阀门开度的变化,进而实现了对液体流量的控制。

单片机通过电磁流量计采集实际流量信号,根据该信号对其内部采用数字PID算法对PWM变量的值进行修改,从而达到对流量的闭环精确控制。

2、实现流程

流量控制系统是一个过程控制系统,在设计的过程中,必须明确它的组成部分。

过程控制系统的组成部分有:

控制器、执行器、被控对象和测量变送单元,其框图如图1所示。

流量输出

图1流量过程控制组成框图

电磁流量计:

对输出流量进行检测,并与设定值比较,差值作为控制器的输入。

PID控制器:

对差值进行P、I、D运算,输出对应得模拟量控制电机正反转和转速。

直流电机:

根据控制器输出正反转,控制阀门开度增大或减小。

阀门:

直接控制流量的执行机构。

所以,在这个系统的设计中,主要设计以上几个部分。

除此之外,根据题目要求,还要选取合适的控制算法来达到满足系统参数的要求。

具体就是确定控制器的算法和如何控制阀门开度,因为这两部分是实现本系统控制目的的关键。

它们选取的好坏将直接影响着整个系统实现效果的优劣。

3、控制器算法与PWM波形输出

流量是一个普通而又重要的物理量,在许多领域里人们需对它进行测量和控制。

本系对流量控制采用PID算法,它具有结构简单、易于理解和实现,且一些高级控制都是以PID为基础改进的。

在工业过程控制中90%以上的控制系统回路具有PID结构,

图2PID控制原理框图

PID调节器的离散化表达式为

比例调节的作用是使调节过程趋于稳定,但会产生稳态误差;

积分作用可消除被调量的稳态误差,但可能会使系统振荡甚至使系统不稳定;

微分作用能有效的减小动态偏差。

PWM波形输出:

用89S52单片机的定时器0和定时器1交替工作,产生连续的与偏差大小有关的占空比可调的PWM波形。

首先,定时器0定时时间到,产生中断,置位PWM输出口并开启定时器1,定时器1定时期间PWM输出高电平,且定时器1的定时时间可调,与偏差的PID运算结果有关,所以能输出占空比变化的PWM波,控制电机转动,进而控制阀门开度和流量。

三、系统硬件设计

1、总体设计框图及说明

本系统是一个简单的单回路控制系统。

为了实现流量的自动测量和控制,采用了89S52单片机作为系统的控制中心,由数据采集模块检测到的流量信号传入单片机,并根据接收到的数据进行处理和控制运算,同时将数据保存,以便与下一次采样值进行比较,根据系统程序控制,进行PID运算以及PWM输出控制电机转速,最终由CPU控制电机正反转,达到调节流量的目的。

系统还具有键盘设定模块,便于用户与系统之间的对话。

系统的硬件结构较简单,由若干个功能模块组成。

具体结构图图3及说明如下,

数据显示

图3功能模块结构图

键盘设定:

设定控制系统要求的流量大小。

数据采集:

用滑动变阻器分压模拟流量大小。

直流电机:

接收单片机的控制信号进行正反转和转速调节,带动阀门转动。

2、部分外部电路设计

2.1数码管显示电路

采用四联排共阴极数码管进行显示,具有四位数码管,这四个数码管的段选a、b、c、d、e、f、g分别接在一起,每一个都拥有一个共阴的位选端。

P3口控制数码管的点亮情况。

因为单片机的IO口输出功率有限,需要使用74LS374芯片进行锁存。

此外还用一个电阻R-PACK8来保护LED。

2.2、直流电机控制电路

直流电机以其良好的线性特性、优异的控制性能等特点成为大多数变速运动控制和闭环位置伺服控制系统的最佳选择。

特别随着计算机在控制领域,高开关频率、全控型第二代电力半导体器件(GTR、GTO、MOSFET、IGBT等)的发展,以及脉宽调制(PWM)直流调速技术的应用,直流电机得到广泛应用。

为适应小型直流电机的使用需求,各半导体厂商推出了直流电机控制专用集成电路,构成基于微处理器控制的直流电机伺服系统。

但是,专用集成电路构成的直流电机驱动器的输出功率有限,不适合大功率直流电机驱动需求。

因此采用三极管构建H桥【3】,实现大功率直流电机驱动控制。

该驱动电路能够满足各种类型直流电机需求,并具有快速、精确、高效、低功耗等特点,可直接与微处理器接口,可应用PWM技术实现直流电机调速控制。

单片机的P10引脚输出高低电平控制电机的正反转,P11输出PWM波形控制电机转速。

具体为:

①当P10为高电平时,三极管Q3、Q2导通,所以Q4导通,而Q2导通钳制电位为0.9V,所以不论P11是高还是低,Q1、Q7都不导通,即电机电流从左向右流,电机正转。

②当P10为低电平,Q3Q2不导通,所以Q4不导通。

当P11为高电平时电机反转,当P11为低电平是,电机停转。

四系统软件设计

1、程序结构说明

任何一个系统的软件设计都离不开硬件电路的连接,所以本课题硬件设计的高度模块化决定了软件设计的模块化。

主要包括:

主控程序模块、键盘扫描及处理子程序、采样数据处理子程序、PID算法子程序、电机驱动与控制子程序和显示等子程序几个部分。

结构图如下:

直流电机

图4程序结构图

主控程序模块在整个结构中充当管理者,管理所有子程序的调用,就相当于个人计算机的操作系统。

它主要负责初始化各个I/O口,等待键盘事件的发生,并作出相应的处理。

并在适当的时候调用数据采样程序,并将采样到的数据与键盘设定值比较。

再通过PID计算后用以控制电机转动,从而控制阀门开度,来达到流量的准确控制。

2、程序流程图及部分程序

2.1主程序说明

2.1.1主程序流程图

N

图5主程序流程图

2.1.2主程序具体程序:

/********************主函数**************************/

main()//主程序

{TMOD=0x21;//0b00100001timer0模式1(16位),timer1自动重装载

TH0=0xfc;//1ms延时常数12M

TL0=0x18;//低电平时间调节

TH1=0x7f;//定时器1赋初值

TL1=0;

EA=1;

ET0=1;

ET1=1;//开中断

while

(1)

{if(sw==1)//循环判断开关状态,并执行相应的程序

{AD_val();//调用TCL549采集处理

display(uuu);

}

else

{KB_Scan1();

display(sc);

}

PID();}//每个循环的最后执行一次PID运算,实时控制电机

}

从主程序中可以看出,在进行一系列程序调用之前对系统进行初始化,然后判断开关状态程序有所反应。

然后进行一系列子程序,进行A/D转换和PID计算,将其结果用来控制直流电机。

2.2键盘程序

2.2.1键盘扫描及键值识别的原理【4】

由于机械触点有弹性,在按下或弹起按键时会出现抖动,从最初按下到接触稳定要经过数毫秒的弹跳时间,如图所示。

为了保证探险键识别的准确性,必须消除抖动。

消抖处理有硬件和软件两种方法:

硬件消抖是利用加支抖动电路滤避免产生抖动信号;软件消抖是利用数字滤波技术来消除抖动。

我们采用软件的方法,利用主程序循环扫描,主程序每循环一次扫描到的键值相同时,则说明是某键按下。

对于键值识别,我们用一条switch语句,把按键的编码和键值对应起来。

2.2.2键盘具体程序

voidKB_Scan1(void)

{uchartmp,line,i,flag,press;//定义局部变量

if(lie1==0|lie2==0|lie3==0)return;//判断是否有键按下,如有,返回。

消除重键问题

line=0xFE;

for(i=1;i<=4;i++)

{P2=line;//依次给P2口低四位送低电平,读高四位判断是否有键按下。

tmp=P2;//读取键盘口数据寄存器

tmp&=0x70;

if(tmp!

=0x70)

{tmp=P2;flag=1;break;}

elseline=(line<<1)|0x01;

}

if(i==5){tmp=0xFF;flag=0;}

switch(tmp)//用switch语句把编码转换为对应的键值。

{case0xEE:

press=1;break;

case0xDE:

press=2;break;

case0xBE:

press=3;break;

case0xED:

press=4;break;

case0xDD:

press=5;break;

case0xBD:

press=6;break;

case0xEB:

press=7;break;

case0xDB:

press=8;break;

case0xBB:

press=9;break;

case0xD7:

press=0;break;

default:

break;

}

if(flag==1)//如果有键按下,把每次的值存放到buf[]中,方便以后调用。

{buf[2]=buf[1];

buf[1]=buf[0];

buf[0]=press;

}

}

2.3数字PID及电机控制程序

由于单片机控制是一种采样控制,它只能根据采样时刻的偏差值计算控制量【5】,所以一般使用增量型控制,它控制稳定,误动作影响小。

其算式如下:

这个计算的过程可用一个简单的程序来实现。

/***************PID服务程序*************/

voidPID()

{doublee0,e1,e2;

uchardu,out1;

ucharkp=16,kd=0,ki=0;//ts=1;

e0=e1;e1=e2;e2=(sc-uuu);///10;//设定值-采集量

if(e2>=0)

{direction=1;//设定值-采集量>0,电机正转,开大阀门。

if(e2>=20)//测得偏差值与设定偏差值进行比较,若不在设定范围内则满功率正转。

{TR0=0;PWM=1;}

else

{du=10*e2;//(e2-e1)+ki*e2+kd*(e2-2*e1+e0);//PID算法

out1=du;//+out0;

TR0=1;//若到达设定范围则调用PID程序,进行有效功率转动.

}

}

elseif(e2<0)

{direction=0;//设定值-采集量<0,电机反转,关小阀门。

if(e2<-20)//测得偏差值与设定偏差值进行比较,若不在设定范围内则满功率反转。

{TR0=0;PWM=1;}

else

{du=10*e2;//(e2-e1)+ki*e2+kd*(e2-2*e1+e0);//PID算法

out1=-du;//+out0;

TR0=1;//若到达设定范围则调用PID程序,进行有效功率运转.

}

}

out0=out1;

}

五、结束语

此次课程设计是基于《过程控制系统》的综合课设,要求通过对工业过程量流量的测量方法、信号处理技术和控制系统的设计,掌握测控对象参数检测方法、变送器的功能、测控通道技术、执行器和调节阀的功能、过程控制仪表的PID控制参数整定方法。

我拿到题目和要求,明确本次的重点是一个控制“系统”的设计,要实现流量的控制,分析流量怎么测,怎么控。

就是要完成从信号采集→偏差控制→执行器→对象输出整个的设计。

所以我先分模块进行设计,粗略的构思了一个单回路控制系统:

即偏差运算用PID,输出PWM波形控制电机,电机驱动阀门开度变化。

接下来就是具体模块的具体设计实现,信号采集模块我就面临了选择,是选择并行AD转换芯片还是串行AD芯片,再后来就是数码管显示不稳定,亮度不够怎么办,每前进一步都是问题,这时就借鉴别人怎么做的,他们的效果是不是比自己的好,这样不断的比较和思考,解决了很多问题。

最大的体会就是设计过程是解决问题的过程,自己也对设计控制系统积累了一定的经验。

通过设计后面的控制器模块、电机控制模块,我使用了PID的理论、PWM控制电机转速的知识和电机的驱动电路的知识,通过大量的查阅资料,在以前纯理论的基础上有很大提高。

这次课设使我对过程控制系统有了更深的理解,同时对模块设计有了自己的思考和思路,对以后自己设计开发控制系统有很好的铺垫作用。

参考文献

【1】任彦硕等.自动控制系统[M].北京:

北京邮电大学出版社,2006,157

【2】张家生.电机原理与拖动基础[M].北京:

北京邮电大学出版社,2006,136

【3】马斌等.单片机原理及应用---C语言程序设计与实现[M].北京:

人民邮电出版社,2009,284--290

【4】王宜怀等.嵌入式系统[M].北京:

北京航空航天大学出版社,2008,132

【5】顾德英,张健,马淑华.计算机控制技术[M].北京:

北京邮电大学出版社,2006,106

 

附页1:

流量控制系统总程序

#include

#defineucharunsignedchar

#defineuintunsignedint

ucharout0=0x7f;//赋初值

ucharbuf[3]={0,0,0};//全局数组

ucharpr[]={0x57,0x6E,0x5E,0x3E,0x6D,0x5D,0x3D,0x6B,0x5B,0x3B};

uchardiscode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

intAD;//转换结果,十六进制

intuuu,sc=0;

intInt_result,//标度变换后的结果

sbitDataout=P1^0;//数据线

sbitcs=P1^1;//片选

sbitsclk=P1^2;//io口时钟

sbitdx=P1^3;//断码显示控制锁存

sbitwx=P1^4;//位控控制锁存

sbitsw=P1^7;

sbitPWM=P1^5;

sbitdirection=P1^6;

voiddelay1ms(ucharT)//单位时间1ms延时

{

uchartime;

while(T--)

for(time=0;time<120;time++);

}

/***********显示程序*************/

voiddisplay(uintnum)

{ucharqian,bai,shi,ge;

qian=num/1000;//千,百,十,个处理

bai=num/100%10;

shi=num/10%10;

ge=num%10;

wx=0;

P0=0xf7;

wx=1;

dx=0;

P0=discode[ge];//显示个位

dx=1;

delay1ms

(1);

if(num>0)

{

wx=0;

P0=0xfb;

wx=1;

dx=0;

P0=discode[shi];//|0x80;//显示十位

dx=1;

delay1ms

(1);

wx=0;

P0=0xfd;

wx=1;

dx=0;

P0=discode[bai];//显示百位

dx=1;

delay1ms

(1);

}

}

/*************AD转换程序************/

AD_val()//TLC549处理

{uchari,temp=0;

cs=1;//初始化,启动

sclk=0;

cs=0;

_nop_();

for(i=0;i<8;i++)//读取采集数据,读取的是上一次采集数据

{

sclk=1;

temp=temp<<1;

if(Dataout)temp|=0x01;

sclk=0;

}

cs=1;

AD=temp;

for(i=0;i<5;i++)//延时17us以上,进行复位

_nop_();

Int_result=AD*100/256;//处理整数

uuu=Int_result;

/****************键盘扫描程序*************/

voidKB_Scan1()

{uchartmp,line,i,j,flag,press;

line=0x7E;

for(i=1;i<=4;i++)

{P3=line;

tmp=P3;

tmp&=0x70;

if(tmp!

=0x70)

{tmp=P3;flag=1;break;}

elseline=(line<<1)|0x01;

}

if(i==5){tmp=0xFF;flag=0;}

for(j=0;j<10;j++)

{if(tmp==pr[j])

press=j;}

if(flag==1)

{buf[2]=buf[1];

delay1ms(100);

buf[1]=buf[0];

delay1ms(100);

buf[0]=press;

delay1ms(100);

sc=buf[2]*100+buf[1]*10+buf[0];

}

}

/***************PID服务程序*************/

voidPID()

{doublee0,e1,e2;

uchardu,out1;

ucharkp=10,kd=0,ki=0;//ts=1;

e0=e1;e1=e2;e2=(sc-uuu);;//设定值-采集量

if(e2>=0)

{direction=1;//设定值-采集量>0,电机正转

if(e2>=20)//测得偏差值与设定偏差值进行比较,若不在设定范围内则满功率运转。

{TR0=0;PWM=1;}

else

{du=kp*e2;//(e2-e1)+ki*e2+kd*(e2-2*e1+e0);//PID算法

out1=du;//+out0;

TR0=1;//若到达设定范围则调用PID程序

}

}

elseif(e2<0)

{direction=0;//设定值-采集量<0,电机反转

if(e2<-20)//测得偏差值与设定偏差值进行比较,若不在设定范围内则满功率反转。

{TR0=0;PWM=1;}

else

{du=10*e2;//(e2-e1)+ki*e2+kd*(e2-2*e1+e0);//PID算法

out1=-du;//+out0;

TR0=1;//若到达设定范围则调用PID程序.

}

}

out0=out1;

}

/*********************PWM输出程序*********************/

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

//定时器0中断服务程序.

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

voidtimer0()interrupt1

{TR0=0;

TH0=0xff;

TL0=0xdb;

TH1=0xff-out0;//初值等于模数减去计数个数

TR1=1;

PWM=1;//启动输出

}

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

//定时器1中断服务程序

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

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

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

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

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