过程控制 液压检测课设.docx
《过程控制 液压检测课设.docx》由会员分享,可在线阅读,更多相关《过程控制 液压检测课设.docx(21页珍藏版)》请在冰豆网上搜索。
过程控制液压检测课设
1.课程设计目的
通过本课程设计,主要训练和培养学生的以下能力:
(1).查阅资料:
搜集与本设计有关部门的资料(包括从已发表的文献中和从生产现场中搜集)的能力;
(2).方案的选择:
树立既考虑技术上的先进性与可行性,又考虑经济上的合理性,并注意提高分析和解决实际问题的能力;
(3).迅速准确的进行工程计算的能力,计算机应用能力;
(4).用简洁的文字,清晰的图表来表达自己设计思想的能力。
2.课程设计题目和要求
1.设计水压系统,要求压力恒定,采用抑制积分饱和的PID,要求无余差,超调小。
2.硬件采用51系列单片机。
3采用keilc作为编程语言,采用结构化的设计方法
3.1设计方案的选定与说明:
因为要设计水压控制系统,所以首先要选好压力的检测装置,根据压力检测仪表的选择:
1.仪表类型的选择。
2.仪表量程的选择。
3.仪表精度的选择。
综上所述,再加上经济因数,所以选择电气式压力表,也就是由应变片组成的差动半桥。
由于差动半桥反馈的是模拟量,所以必须采用A/D采样芯片,经过查阅资料后,用了AD0804这个芯片。
并加上放大电路,先对反馈量进行放大。
接着就是控制的核心,也就是微处理器,考虑到成本和性能要求,决定使用,常用的80c51系列单片机,简单、实用。
要控制水压,必须从液体的进出来控制,为了怕液体溢出,决定选择进水口的调节阀作为被控量。
因为控制调节阀必须用到模拟量,所以用了的D/A采样DA0834,并通过放大电路进行放大。
由于要控制水压恒定,所以用了个滑动电阻,和AD0804来组成了个给定装置。
方案经过这些初步设想,也就有了个雏形,后面就是具体的实施了。
3.2设计方案的图表:
3.3论述方案的各部分工作原理:
微处理器及复位电路:
80c51的特点:
•8位CPU•4kbytes程序存储器(ROM)(52为8K)
•256bytes的数据存储器(RAM)(52有384bytes的RAM)
•32条I/O口线•111条指令,大部分为单字节指令 •21个专用寄存器
•2个可编程定时/计数器•5个中断源,2个优先级(52有6个)
•一个全双工串行通信口 •外部数据存储器寻址空间为64kB
•外部程序存储器寻址空间为64kB
•逻辑操作位寻址功能•双列直插40PinDIP封装
•单一+5V电源供电
CPU:
由运算和控制逻辑组成,同时还包括中断系统和部分外部特殊功能寄存器;
RAM:
用以存放可以读写的数据,如运算的中间结果、最终结果以及欲显示的数据;
ROM:
用以存放程序、一些原始数据和表格;
I/O口:
四个8位并行I/O口,既可用作输入,也可用作输出;
T/C:
两个定时/记数器,既可以工作在定时模式,也可以工作在记数模式;
五个中断源的中断控制系统;
一个全双工UART(通用异步接收发送器)的串行I/O口,用于实现单片机之间或单片机与微机之间的串行通信; 片内振荡器和时钟产生电路,石英晶体和微调电容需要外接。
最高振荡频率为12M
再加上复位系统,只需按下按钮,即可复位。
AD0804:
根据手册我们可以得到各个引脚的大致功能如下:
/CS:
芯片片选信号,低电平有效,即/CS=0,该芯片才能正常工作,在外接多个ADC0804芯片时,该信号可以作为选择地址使用,通过不同的地址信号使能不同的ADC0804芯片,从而可以实现多个ADC通道的分时复用。
/WR:
启动ADC0804进行ADC采样,该信号低电平有效,即/WR信号由高电平变成低电平时,触发一次ADC转换。
/RD:
低电平有效,即/RD=0时,可以通过数据端口DB0~DB7读出本次的采样结果。
UIN(+)和UIN(-):
模拟电压输入端,模拟电压输入接UIN(+)端,UIN(-)端接地。
双边输入时UIN(+)、UIN(-)分别接模拟电压信号的正端和负端。
当输入的模拟电压信号存在“零点漂移电压”时,可在UIN(-)接一等值的零点补偿电压,变换时将自动从UIN(+)中减去这一电压。
VREF/2:
参考电压接入引脚,该引脚可外接电压也可悬空,若外界电压,则ADC的参考电压为该外界电压的两倍,如不外接,则Vref与Vcc共用电源电压,此时ADC的参考电压即为电源电压Vcc的值。
CLKR和CLKIN:
外接RC电路产生模数转换器所需的时钟信号,时钟频率CLK=1/1.1RC,一般要求频率范围100KHz~1.28MHz。
AGND和DGND:
分别接模拟地和数字地。
/INT:
中断请求信号输出引脚,该引脚低电平有效,当一次A/D转换完成后,
将引起/INT=0,实际应用时,该引脚应与微处理器的外部中断输入引脚相连(如51单片机的INT0,INT1脚),当产生/INT信号有效时,还需等待/RD=0才能正确读出A/D转换结果,若ADC0804单独使用,则可以将/INT引脚悬空。
DB0~DB7:
输出A/D转换后的8位二进制结果。
通过这个芯片,我们能将给定的模拟量转化为数字量,以及差动电桥的放大量转化为数字量。
进而让51单片机可以接受并处理数据。
DA0832:
D0~D7:
8位数据输入线,TTL电平,有效时间应大于90ns(否则锁存器的数据会出错);
ILE:
数据锁存允许控制信号输入线,高电平有效;
CS:
片选信号输入线(选通数据锁存器),低电平有效;
WR1:
数据锁存器写选通输入线,负脉冲(脉宽应大于500ns)有效。
由ILE、CS、WR1的逻辑组合产生LE1,当LE1为高电平时,数据锁存器状态随输入数据线变换,LE1的负跳变时将输入数据锁存;
XFER:
数据传输控制信号输入线,低电平有效,负脉冲(脉宽应大于500ns)有效;
WR2:
DAC寄存器选通输入线,负脉冲(脉宽应大于500ns)有效。
由WR2、XFER的逻辑组合产生LE2,当LE2为高电平时,DAC寄存器的输出随寄存器的输入而变化,LE2的负跳变时将数据锁存器的内容打入DAC寄存器并开始D/A转换。
IOUT1:
电流输出端1,其值随DAC寄存器的内容线性变化;
IOUT2:
电流输出端2,其值与IOUT1值之和为一常数;
Rfb:
反馈信号输入线,改变Rfb端外接电阻值可调整转换满量程精度; Vcc:
电源输入端,Vcc的范围为+5V~+15V;
VREF:
基准电压输入线,VREF的范围为-10V~+10V;
AGND:
模拟信号地
DGND:
数字信号地。
DA0832是采样频率为八位的D/A转换芯片,集成电路内有两级输入寄存器,使DA0832芯片具备双缓冲、单缓冲和直通三种输入方式,以便适于各种电路的需要(如要求多路D/A异步输入、同步转换等)。
所以这个芯片的应用很广泛,关于DA0832应用的一些重要资料:
D/A转换结果采用电流形式输出。
若需要相应的模拟电压信号,可通过一个高输入阻抗的线性运算放大器实现。
运放的反馈电阻可通过RFB端引用片内固有电阻,也可外接。
DA0832逻辑输入满足TTL电平,可直接与TTL电路或微机电路连接。
由于控制的调节阀差用模拟量控制,所以,通过一个D/A模块来实现控制的目的。
给定环节:
通过滑动变阻器来控制给定电压,然后通过AD0804转换成数字量,就可以向单片机输入设定值,通过与给定值的比较,由程序计算你呢就能对调节阀进行调节了。
检测转换电路:
通过电阻R1、R2为应变片,R3、R4为固定电阻。
当应变片承受应变时,R1增大为R1+ΔR,同时R2减小为R2-ΔR,此时的输出电压为单臂工作时的两倍。
而且可以消除温差影响,提高灵敏度。
但是一般差动半桥输出的电压只有几毫伏,所以必须加上一个运算放大电路。
经过这些处理后,就能将液压的信号,转化为电信号,再通过AD0804就能将这模拟量转化为数字量,通过程序来判断如何控制。
调节阀控制系统:
将单片机发出的控制信号经由DA0832转化为模拟量后,再加上个运算放大电路,然后连接调节阀,这样就能控制进水量,从而控制水压。
这大概就是这个系统的组成,附上总图:
4.程序
#include
#include
#include
structPID{
unsignedintSetPoint;//设定目标DesiredValue
unsignedintProportion;//比例常数ProportionalConst
unsignedintIntegral;//积分常数IntegralConst
unsignedintDerivative;//微分常数DerivativeConst
unsignedintLastError;//Error[-1]
unsignedintPrevError;//Error[-2]
unsignedintSumError;//SumsofErrors
};
structPIDspid;//PIDControlStructure
unsignedintrout;//PIDResponse(Output)
unsignedintrin;//PIDFeedback(Input)
unsignedcharflag,flag_1=0;
unsignedcharhigh_time,low_time,count=0;//占空比调节参数
unsignedcharset_temper=35;
unsignedchartemper;
unsignedchari;
unsignedcharj=0;
unsignedints;
/***********************************************************
延时子程序,延时时间以12M晶振为准,延时时间为30us×time
***********************************************************/
voiddelay(unsignedchartime)
{
unsignedcharm,n;
for(n=0;n