智能化压力控制系统设计
- 格式:doc
- 大小:634.85 KB
- 文档页数:28
《过程控制系统》课程设计
智能化压力控制系统设计
院 别
专业名称
班级学号
学生姓名
指导教师
2014.7.8-2014.7.19
第 1 页 一、前言
在科技飞速发展的今天,智能化已经成为这个时代的主旋律,大到工业生产,小到手机、家具。其中,压力是不可或缺的一个重要参数。为实现锅炉气压的准确地自动检测与控制,我们基于51单片机,设计了气压自动控制系统。它通过实时采集气压传感器电压进行PID运算,输出PWM,从而控制固态继电器对锅炉进行加热,使锅炉气压快速准确的达到设定值。
与其它同类系统相比,本系统具有经济、方便等特点,适合小型控制。
关键词:锅炉气压、51单片机、自动控制、PID
二、任务书
1、系统构成:
系统主要由压力传感器,单片机控制系统、对象、执行器(查找资料自行选择)等组成。
压力传感器、控制器、对象、执行器可查找资料自行选择,控制器选择单片机为控制器。单片机型号自选。
2、写出压力测量与控制过程,绘制压力控制系统组成框图。
3、(1)系统硬件电路设计自选。
(2)编制压力测量控制程序:软件采用模块化程序结构设计,由压力采集程序、压力校准程序、压力控制程序等部分组成。
三、选型
1、传感器:HL-DQ1气压传感器
HL-DQ1气压传感器采用进口高精度压力芯片,测量精度高、稳定性好。精密信号处理电路可根据用户的不同需求将大气压力转换为电压或电流等其它输出信号。具有体积小巧,性能可靠,精度高,负载能力强,传输距离长,抗干扰能力强等特点。可广泛用于气象、海洋、环境、机场、港口、实验室、工农业及交通等领域。
产品特点:连接简便、体积小巧 、性价比高,专业级大气压力 应用范围各类自动气象站的大气压力专业测量
测量范围:500~1060hPa
输出:频率/电压/智能
分辨率:0.1hPa
2、控制器:51单片机
外接串行AD转化芯片ADC0832将传感器电压转换成数字量,通过1602显示屏显示实时数据,
第 2 页 使用定时器模拟一路PWM控制执行器。
3、被控对象:普通锅炉
4、执行器:固态继电器
四、主体设计
1、系统框图
给定值 气压
说明:本系统根据单闭环自动控制系统的特点,以89C51单片机作为调节器,通过对传感器输出的电压信号进行AD转换,与给定值进行作差比较,单片机程序中进行相应的PID运算,在1602显示屏上显示采集到的电压值,转化后的气压值,输出相应占空比的PWM信号控制固态继电器加热,使锅炉气压快速准确到达并稳定在设定值。
2、系统操作说明
启动系统之后,显示屏显示默认的PID参数和设定值,通过按键ADD,SUB,NEXT,OK可实现参数加减修改,参数选择,参数确认操作,之后系统进行自动运行,无需人干预,当压力值高于设定值110%的时候能够自动报警。
3、硬件电路设计
proteus仿真电路图 51单片机 固态继电器 锅炉
压力传感器 ADC0832
第 3 页
说明:
按键:ADD、SUB、NEXT、OK按键依次接单片机P2.1、P2.2、P2.3、P2.4引脚,低电平触发。
ADC0832:DI、DO接单片机P3.4引脚,CS接P3.5,CLK接P3.3
显示屛1602:RS接P2.6,RW 接P2.5,LCDEN接P2.7,数据口D0~D7接P0口,为提高稳定性和引脚驱动能力,P0口接上拉电阻。
4、程序设计
①显示屏显示字符代码
init_lcd1602();//液晶1602显示初始化
write_cmd(0x81);
write_date('K');
write_date('p');
write_date(':');
write_cmd(0x89);
write_date('K');
write_date('i');
write_date(':');
write_cmd(0xc1);
第 4 页 write_date('K');
write_date('d');
write_date(':');
write_cmd(0xc9);
write_date('A');
write_date('i');
write_date('m');
write_date(':');
②参数修改代码
while(1)
{
if(add==0)
{
delay(10);
if(add==0)
{
while(add==0);
switch(choose)
{
case 1:kp+=0.1;break;
case 2:ki+=0.1;break;
case 3:kd+=0.1;break;
case 4:aim+=0.1;break;
}
}
}
if(sub==0)
{
第 5 页 delay(10);
if(sub==0)
{
while(sub==0);
switch(choose)
{
case 1:kp-=0.1;break;
case 2:ki-=0.1;break;
case 3:kd-=0.1;break;
case 4:aim-=0.1;break;
}
}
}
if(next==0)
{
delay(10);
if(next==0)
{
while(next==0);
choose++;
if(choose==5)
choose=1;
}
}
if(ok==0)
{
delay(10);
if(ok==0)
第 6 页 break;
}
pidshow();
}
pidshow子程序
void pidshow()
{
int dt,dt1,dt2,dt3;
dt=kp*10;
dt1=dt/100+0x30;
dt2=dt%100/10+0x30;
dt3=dt%10+0x30;
write_cmd(0x84);
//write_date(dt1);
write_date(dt2);
write_date('.');
write_date(dt3);
dt=ki*10;
dt1=dt/100+0x30;
dt2=dt%100/10+0x30;
dt3=dt%10+0x30;
write_cmd(0x8c);
//write_date(dt1);
write_date(dt2);
write_date('.');
write_date(dt3);
dt=kd*10;
dt1=dt/100+0x30;
dt2=dt%100/10+0x30;
第 7 页 dt3=dt%10+0x30;
write_cmd(0xc4);
//write_date(dt1);
write_date(dt2);
write_date('.');
write_date(dt3);
dt=aim*10;
dt1=dt/100+0x30;
dt2=dt%100/10+0x30;
dt3=dt%10+0x30;
write_cmd(0xcd);
//write_date(dt1);
write_date(dt2);
write_date('.');
write_date(dt3);
switch(choose)
{
case 1:
{
write_cmd(0x80);
write_date(0x7e);
write_cmd(0x88);
write_date(0x20);
write_cmd(0xc0);
write_date(0x20);
write_cmd(0xc8);
write_date(0x20);
break;
}
第 8 页 case 2:
{
write_cmd(0x80);
write_date(0x20);
write_cmd(0x88);
write_date(0x7e);
write_cmd(0xc0);
write_date(0x20);
write_cmd(0xc8);
write_date(0x20);
break;
}
case 3:
{
write_cmd(0x80);
write_date(0x20);
write_cmd(0x88);
write_date(0x20);
write_cmd(0xc0);
write_date(0x7e);
write_cmd(0xc8);
write_date(0x20);
break;
}
case 4:
{
write_cmd(0x80);
write_date(0x20);
write_cmd(0x88);
write_date(0x20);