微型计算机控制技术课程设计-造纸原料蒸煮过程压力微机控制系统--精品推荐.doc
《微型计算机控制技术课程设计-造纸原料蒸煮过程压力微机控制系统--精品推荐.doc》由会员分享,可在线阅读,更多相关《微型计算机控制技术课程设计-造纸原料蒸煮过程压力微机控制系统--精品推荐.doc(32页珍藏版)》请在冰点文库上搜索。
目录
一、设计题目---------------------------------------------------------------------------------------3
二、工艺要求---------------------------------------------------------------------------------------3
三、系统的组成和工作原理----------------------------------------------------------------------3
四、硬件电路----------------------------------------------------------------------------------------4
1、压力变送及A/D转换电路--------------------------------------------------------------4
2、D/A转换及隔离输出电路--------------------------------------------------------------6
3、显示电路------------------------------------------------------------------------------------7
4.上下限报警电路---------------------------------------------------------------------------8
5.控制系统的总电路图-------------------------------------------------------------------8
五、数字控制器的设计--------------------------------------------------------------------------9
六、软件设计---------------------------------------------------------------------------------------10
1、内存地址分配----------------------------------------------------------------------------10
2、主程序流程图---------------------------------------------------------------------------11
3、定时中断处理程序流程图----------------------------------------------------------12
4、AD转换自检程序流程图-----------------------------------------------------------12
5.DA转换自检程序流程图----------------------------------------------------------13
6.RAM自检程序流程图--------------------------------------------------------------13
7.按键处理程序流程图---------------------------------------------------------------14
七、程序清单---------------------------------------------------------------------------------------15
1.主程序-------------------------------------------------------------------------------------15
2.AD转换程序-------------------------------------------------------------------------------19
3.标度变换程序------------------------------------------------------------------------------20
4.滤波程序-----------------------------------------------------------------------------------20
5.RAM自检程序-----------------------------------------------------------------------------22
6.数字控制器程序---------------------------------------------------------------------------23
7.显示及按键处理程序--------------------------------------------------------------------23
8.DA转换程序-------------------------------------------------------------------------------30
八、系统调试-------------------------------------------------------------------------------------30
九、设计总结------------------------------------------------------------------------------------31
十、参考文献-------------------------------------------------------------------------------------31
一、设计题目
造纸原料蒸煮过程压力微机控制系统
二、工艺要求
造纸原料蒸煮过程压力微机控制系统
蒸煮过程是制浆造纸生产中的关键工序之一,对于整个造纸生产过程中纸浆得率和纸的质量有很大影响,它要求根据原料的特点、纸浆的质量和生产设备的实际情况制定出合理的蒸煮工艺,确定装球量、用碱量、蒸煮温度和压力。
造纸厂蒸煮车间有五个蒸球,依靠调节其进气量以达到控制蒸球工作压力和温度,调节喷料阀控制装料量。
用微机控制技术实现该过程的自动控制,要求蒸球的实际工作压力准确跟踪给定压力曲线。
P1:
低压保压值,P2:
高压保压值,T1:
空转时间,T2:
升低压时间,T3:
低压保持时间,T4:
升高压时间,T5:
高压保持时间
装料控制系统示意图
三、系统的组成和工作原理
本压力控制系统的原理框图如下图所示
它采用Atmel公司的AT89S51单片机作为控制核心,AT89S51是低功耗的8位CMOS单片机,具有8K字节在线可编程Flash存储器,内部有带看门狗。
通过其ISP接口线可以方便地在线调试程序。
A/D转换器采用具有8通道输入的ADC0809。
DBY-131型压力变送器将0-1.28Mpa的压力信号转换为0-10mA的电流输出,通过500Ω电阻转化为0-5V的电压信号供给A/D转换器采样。
单片机定时(预定值为5s,用户可根据实际在调试时进行修改)依次对5个蒸球的压力进行采样。
采样值经过内部程序数字滤波后与给定值进行比较(给定值通过程序计算按照用户给定的压力曲线变化),得到的偏差信号经PID算法程序后输出8位的阀门控制数字量。
该数字量经D/A转换器AD558转换成0-10V的电压信号,0-10V的电压信号再经隔离放大器ICISO1002与工业现场隔离,输出4-20mA的标准电流信号控制蒸汽调节阀的开度。
当蒸球的压力大于给定值时,偏差信号E=R-C小于零,经PID运算后输出量减小,蒸汽调节阀的开度随之减小,从而使蒸球内的压力降低,重新回到平衡状态。
通过对PID参数的整定可以使蒸球的实际工作压力准确跟踪给定压力曲线。
四、硬件电路
1、压力变送及A/D转换电路
电路如图所示:
压力变送器为DBY-131型,其量程可调范围为0~1Mpa至0~3Mpa。
本系统中调整为0~1.28Mpa。
ADC0809的每个输入通道前对地接有一500Ω的电阻,用于将压力变送器送来的0~10mA电流信号转换为0~5V的电压信号,ADC0809八个输入通道的地址为FE00H~FE07H。
单片机执行写总线指令后启动A/D转换,通过查询EOC的状态判断转换是否结束。
执行读总线指令后将转换后的数据读入单片机内部。
被测压力与输出量关系:
压力(Mpa)
输出数字量
0
0.635
1.275
00000000
10000000
11111111
DBY-131压力变送器性能指标:
输出电流
0~10mADC
振幅
≤0.1mm(双向)
灵敏限
0.1%
供电电源
220V 50Hz
负载电阻
0~1.5kΩ
消耗功率
≤6W
来回变差
不大于基本误差的绝对值
结构形式
现场安装式
工作条件
环境温度:
-10~C~55~C
仪表重量
约15Kg
相对湿度
≤85%
仪表管结头螺纹
M20×1.5/M18×1.5
工作振动频率
≤25Hz
ADC0809技术指标
供电电源
单一+5V
模拟量输入范围
0-5V
分辨率
8位
最大不可调误差
<±1LSB
功耗
15mW
转换速度
取决于芯片的时钟频率
2、D/A转换及隔离输出电路
D/A转换器采用8位电压输出型D/A转换器DAC0832
DAC0832数/模转换器的内部,具有两极输入数据缓冲器和一个R-2RT型电阻网络。
即包括一个数据寄存器、DAC寄存器和D/A转换器三大部分。
数据寄存器和DAC寄存器实现两次缓冲,故在输出的同时,还可以接收一个数据,提高了转换速度。
当多芯片工作时,可用同步信号实现各模拟量的同时输出。
该器件采用先进的CMOS工艺,功耗低,输出漏电流误差小,主要特性有:
输出电流线性度可在满量程下调节;
转换时间为1μs;数据输入可采用双缓冲、单缓冲或直通方式;增益温度补偿为0.02%FS/℃;每次输入数字为8为二进数;功耗为20mW;
逻辑电平与TTL兼容;单一电源供电,可在5~15V内。
DAC0832可工作在单,双缓冲器方式。
单缓冲器方式即输入寄存器的信号和DAC寄存器的信号同时控制,使一个数据直接写入DAC寄存器。
这种方式适用于只有一路模拟量输出或几路模拟量不需要同步输出的系统;双缓冲器方式即输入寄存器的信号和DAC寄存器的信号分开控制,这种方式适用于几路模拟量需要同步输出的系统。
为了提高转换精度,可增加D/A转换器的位数。
隔离放大器采用ISO1002,ISO系列隔离放大器在同一芯片上提供了电源及信号的隔离,该混合集成芯片在同一芯片上集成了一个磁电耦合DC/DC变换电源及一个电流/电压输出的光电耦合隔离放大器。
该芯片除为内部放大电路供电外,还可向外部输出一路隔离电压,供外部电路扩展使用。
这一特点可方便地为外部电路基准电源及外部放大电路或其他用户应用电路供电。
输入及输出侧宽爬电距离及内部隔离措施使该芯片可提供3000VAC绝缘电压。
ISO系列产品使用非常方便,几乎无需外部元件,即可实现信号电流源长线传输(如图)。
3.显示电路
LED显示器
LED显示块是由发光二极管显示字段的显示器件,常使用七段LED。
这种显示块有共阴极与共阳极两种接法。
N位LED显示器有N根位选线和8×N根段选线。
根据显示方式不同,位选线与段选线的连接方法不同。
段选线控制字符选择,位选线控制显示器的亮暗。
LED显示方式有静态显示方式(因其占用I/O资源较多,故在位数较多时不采用)和动态显示方式,如八位LED动态显示电路只需要两个8位I/O口。
其中一个控制段选码,另一个控制位选码。
由于所有位的段选码皆由一个I/O控制,因此,在每个瞬间,八位LED只可能显示相同的字符,必须采用扫描显示方式。
即在每一瞬间只使某一位显示相应字符。
在此瞬间,段选控制I/O口输出相应字符段选码,位选控制I/O口在该显示位送入选通电平以保证该位显示相应字符。
如此轮流,使每位显示该位应显示字符,并保持延时一段时间,以造成视觉暂留效果。
段选、位选码每送一次后延时1~5ms。
本控制系统的采用8255A进行I/O扩展,而后接LED数码管电路加以显示,各数码管含义及电路如图所示:
4.上下限报警电路
本控制系统的采用8255A进行I/O扩展,报警输入信号由PA口输入,由PB口输出以提示报警及正常工作状态,电路如图所示:
5.控制系统的总电路图
五、数字控制器的设计
本设计采用最小拍随动系统数字控制器
因为
所以(T=0.5s)
所以
(式1-1)
由式1-1知,该数字控制器为最少拍无波纹随动系统控制。
假设输入为单位阶跃,取,所以
又取采样周期T=0.5s,
得(式1-2)
从而有
由差分方程得控制器输出为:
(式1-3)
最少拍随动系统的误差为:
其中分为:
1)碱液设定值与实际输出碱液之差
2)水设定值与实际输出水之差
因为=1.5
所以
为第k次采样时实际输出碱液或实际输出水
六:
软件设计
1.内存地址分配
2.主程序流程图
3.定时中断处理程序流程图
4.AD转换自检程序流程图
5.DA转换自检程序流程图
6.按键处理程序流程图
7.数字控制器流程图
七.程序清单
1.主程序
#include
#include
#defineuncharunsignedchar
#defineunintunsignedint
#definePORT_4A8255XBYTE[0X4000]
#definePORT_4B8255XBYTE[0X4001]
#definePORT_4C8255XBYTE[0X4002]
#definePORT_4COM8255XBYTE[0X4003]//定义4口8255的地址端
#definePORT_0A8255XBYTE[0X0000]
#definePORT_0B8255XBYTE[0X0001]
#definePORT_0C8255XBYTE[0X0002]
#definePORT_0COM8255XBYTE[0X0003]//定义0口8255的地址端
#defineADC0809IN_0XBYTE[0x1000]
#defineADC0809IN_1XBYTE[0x1001]
#defineADC0809IN_2XBYTE[0x1002]
#defineCHANNELS3//3个通道,IN0接液位检测,INT1接水流量变送器信号,IN2接碱液流量变送器信号
#defineDAC0832BUFFXBYTE[0X2000]//DAC转换地址
#defineCD4051IN_1XBYTE[0X3001]//输出通道1
#defineCD4051IN_2XBYTE[0X3002]//输出通道2
#defineP1XBYTE[0x5000]//碱液控制手动操作地址
#defineP2XBYTE[0x6000]//水控制手动操作地址
#defineSet_waterDBYTE[0X60]//定义水设定值地址
#defineSet_lyeDBYTE[0X61]//定义碱液设定值地址
#defineSet_up_alarmDBYTE[0X62]//定义上限报警设定值地址
#defineSet_down_alarmDBYTE[0X63]//定义下限报警设定值地址
#defineReal_waterDBYTE[0x64]//定义水实际输出值地址
#defineReal_lyeDBYTE[0x65]//定义碱液实际输出值设定值地址
#defineHighDBYTE[0X66]//定义液位高度值地址
#defineWater_SampleDBYTE[0x67]//定义水采样值起始地址,采样6个值,67H~6CH为存放采样值地址,
#defineLye_SampleDBYTE[0x6D]//定义碱液采样值起始地址,采样6个值,6DH~72H为存放采样值地址
#defineHigh_SampleDBYTE[0x73]//定义液位采样值起始地址,采样6个值,73H~78H为存放采样值地址
uncharcodetable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F
0x6F};//共阴极LED显示数字0~9
unintT_count=0;//定义一个定时器定时0.5s计数单元
uncharsam_count=0; //定义一个采样数的单元
unchardata*Water_sam,*Lye_sam,*HIGH_sam;//定义分别指向水、碱液、液位采样值的指针
floatWater_control,Lye_control;//定义水和碱液控制器输出单元
bitADCheck(void);
bitDACheck(void); //定义A/D和D/A自检程序
voidset_init(void)//设定值初值子程序
{unchar*add_set//定义设定值指针
addr_set=&Set_water;//指向水设定值地址
*add_set=40; //水设定初值为40
addr_set++ ; //指向碱液设定值地址
*add_set=60; //碱液设定初值为60
addr_set++; //指向上限报警设定值地址
*add_set=90; //上限报警设定初值为90
addr_set++; //指向下限报警设定值地址
*add_set=10; //下限报警设定初值为90
}
uncharalarm(uncharheight)//越限报警子程序
{
if(height>Set_up_alarm) //如果液位高于上限报警值,则报警并显示,返回1
{
PORT_4B8255=0x84;//上限报警灯亮,电笛响
return1;
}
elseif(height>Set_down_alarm) //如果液位低于下限报警值,则报警并显示,返回1
{
PORT_4B8255=0x82;//下限报警灯亮,电笛响
return1;
}
else //液位高度正常,则正常工作指示灯亮,返回0
{
PORT_4B8255=0x88;
return0;
}
}
main()
{
bitADCheck(void);
bitDACheck(void);
bitROMCheck(void);
unchar multi_filter(void);
voidDAC0832(uncharx,unchary);
voidkey(void);
floatDignal_Contoller(uncharRk,uncharCk);
//函数声明
//初始化8255定时器等
TMOD=0x02; //初始化定时器0,自动重装入初值工作方式2
TH0=0x38;//初值为56,单片机主频为12MHz。
定时0.5s需要2500个200us
TL0=0x38;
PT0=1;//置定时器0高优先级
ET0=1;//允许定时器0中断
IT0=1;//IT0=1:
置外部中断0为边沿触发方式
EX0=1;//开放外部中断0
IT1=1//IT1=1:
置外部中断1为边沿触发方式
EX1=1;//开放外部中断1,且EA=1(允许单片机响应中断)
EA=1;//EA=1,允许单片机响应中断PORT_0COM8255=0x8000;//初始化0口8255,其A口,B口
C口均作为输出(接数码管显示)
PORT_4COM8255=0x90;//4口8255初始化,其A口作输入,其B口作输出(接键盘和指示灯)
set_init();//对水、碱液、上限报警、下限报警各值初始化
Water_sam=Water_Sample;
Lye_sam=Lye_Sample;
HIGH_sam=High_Sample; //分别指向各自采样值地址
if(ROMCheck)//开机检测ROM是否正常工作
{
P1=1; //如果有故障则转到手动操作
P2=1;
PORT_4B8255; //系统故障显示灯亮且电笛响
EA=0; //不允许中断
while
(1); //死循环等待处理
}
set_init();//设定默认值
while
(1) //死循环
{if(ADCcheck|DACheck) //调用A/D和D/A自检程序
{
P1=1; //如果有故障则转到手动操作
P2=1;
PORT_4B8255; //系统故障显示灯亮且电笛响