过程控制 液压检测课设.docx

上传人:b****0 文档编号:9931299 上传时间:2023-05-22 格式:DOCX 页数:21 大小:174.79KB
下载 相关 举报
过程控制 液压检测课设.docx_第1页
第1页 / 共21页
过程控制 液压检测课设.docx_第2页
第2页 / 共21页
过程控制 液压检测课设.docx_第3页
第3页 / 共21页
过程控制 液压检测课设.docx_第4页
第4页 / 共21页
过程控制 液压检测课设.docx_第5页
第5页 / 共21页
过程控制 液压检测课设.docx_第6页
第6页 / 共21页
过程控制 液压检测课设.docx_第7页
第7页 / 共21页
过程控制 液压检测课设.docx_第8页
第8页 / 共21页
过程控制 液压检测课设.docx_第9页
第9页 / 共21页
过程控制 液压检测课设.docx_第10页
第10页 / 共21页
过程控制 液压检测课设.docx_第11页
第11页 / 共21页
过程控制 液压检测课设.docx_第12页
第12页 / 共21页
过程控制 液压检测课设.docx_第13页
第13页 / 共21页
过程控制 液压检测课设.docx_第14页
第14页 / 共21页
过程控制 液压检测课设.docx_第15页
第15页 / 共21页
过程控制 液压检测课设.docx_第16页
第16页 / 共21页
过程控制 液压检测课设.docx_第17页
第17页 / 共21页
过程控制 液压检测课设.docx_第18页
第18页 / 共21页
过程控制 液压检测课设.docx_第19页
第19页 / 共21页
过程控制 液压检测课设.docx_第20页
第20页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

过程控制 液压检测课设.docx

《过程控制 液压检测课设.docx》由会员分享,可在线阅读,更多相关《过程控制 液压检测课设.docx(21页珍藏版)》请在冰点文库上搜索。

过程控制 液压检测课设.docx

过程控制液压检测课设

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

for(m=0;m<2;m++){}

}

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

复位子程序

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

unsignedcharreset()

{

unsignedcharpresence;

EA=0;

DQ=0;/*拉低DQ总线开始复位*/

delay(30);/*保持低电平480us*/

DQ=1;/*释放总线*/

delay(3);

presence=DQ;/*获取应答信号*/

delay(28);/*延时以完成整个时序*/

EA=1;

return(presence);/*返回应答信号,有芯片应答返回0,无芯片则返回1*/

}

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

AD0804驱动程序

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

#ifndef__ADC0804_H__

#define__ADC0804_H__

#defineuintunsignedint

#defineucharunsignedchar

#definead1_7P1//AD数据口

sbitadcs=P2^0;//芯片选择信号,控制芯片的启动和结果读取,低电平有效

sbitadrd=P2^1;//读数据控制,低电平有效

sbitadwr=P2^4;//AD转换起动控制,上升沿有效

//50us延时子程序/////////////////

voiddelay_50us(uintt)

{ucharj;

for(;t>0;t--)

for(j=19;j>0;j--);

}

//启动AD转换子程序//////////////////////////////////////////////////////////

voidstart_adc0804(void)

{//adcs=0;//允许进行A/D转换

adwr=0;delay_50us

(2);adwr=1;//WR由低变高时,AD开始转换

//adcs=1;//停止AD转换

delay_50us(10);

}

//读A/D数据子程序///////////////////////////////////////

read_ad()

{uintad_data;

ad1_7=0xff;

//adcs=0;//允许读

//adrd=0;//读取转换数据结果数据结果

delay_50us(5);

ad_data=ad1_7;//把数据存到ad_data中

//adrd=1;adcs=1;//停止A/D读取

return(ad_data);

}

//说明:

当输入电压为5V时,A/D输出为FFH,即输入电压=AD数据*(5/255)=AD数据/(255/5)=AD数据/51

#endif/*====================================================================================================

PID计算部分

=====================================================================================================*/

unsignedintPIDCalc(structPID*pp,unsignedintNextPoint)

{

unsignedintdError,Error;

Error=pp->SetPoint-NextPoint;//偏差

pp->SumError+=Error;//积分

dError=pp->LastError-pp->PrevError;//当前微分

pp->PrevError=pp->LastError;

pp->LastError=Error;

return(pp->Proportion*Error//比例项

+pp->Integral*pp->SumEror//积分项

+pp->Derivative*dError);//微分项

}

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

DA0832驱动程序

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

#include

#include

#defineulongunsignedlong

#defineuintunsignedint

#defineucharunsignedchar

sbitADCS=P1^3;//ADC0832chipseclect

sbitADDI=P1^1;//ADC0832datain

sbitADDO=P1^1;//ADC0832dataout

sbitADCLK=P1^0;//ADC0832clocksignal

unsignedintAdc0832(unsignedcharchannel);

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

读ADC0832函数

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

//采集并返回

unsignedintAdc0832(unsignedcharchannel)

{

uchari=0;

ucharj;

uintdat=0;

ucharndat=0;

if(channel==0)channel=2;

if(channel==1)channel=3;

ADDI=1;

_nop_();

_nop_();

ADCS=0;//拉低CS端

_nop_();

_nop_();

ADCLK=1;//拉高CLK端

_nop_();

_nop_();

ADCLK=0;//拉低CLK端,形成下降沿1

_nop_();

_nop_();

ADCLK=1;//拉高CLK端

ADDI=channel&0x1;

_nop_();

_nop_();

ADCLK=0;//拉低CLK端,形成下降沿2

_nop_();

_nop_();

ADCLK=1;//拉高CLK端

ADDI=(channel>>1)&0x1;

_nop_();

_nop_();

ADCLK=0;//拉低CLK端,形成下降沿3

ADDI=1;//控制命令结束

_nop_();

_nop_();

dat=0;

for(i=0;i<8;i++)

{

dat|=ADDO;//收数据

ADCLK=1;

_nop_();

_nop_();

ADCLK=0;//形成一次时钟脉冲

_nop_();

_nop_();

dat<<=1;

if(i==7)dat|=ADDO;

}

for(i=0;i<8;i++)

{

j=0;

j=j|ADDO;//收数据

ADCLK=1;

_nop_();

_nop_();

ADCLK=0;//形成一次时钟脉冲

_nop_();

_nop_();

j=j<<7;

ndat=ndat|j;

if(i<7)ndat>>=1;

}

ADCS=1;//拉低CS端

ADCLK=0;//拉低CLK端

ADDO=1;//拉高数据端,回到初始状态

dat<<=8;

dat|=ndat;

return(dat);//returnaddata

}intmain(void)

{

while

(1)

P3=Adc0832(0);

}/*****************************************************

T0中断服务子程序,用于控制电平的翻转,40us*100=4ms周期

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

voidserve_T0()interrupt1using1

{

if(++count<=(high_time))

output=1;

elseif(count<=100)

{

output=0;

}

else

count=0;

TH0=0x2f;

TL0=0xe0;

}

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

主程序

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

main()

{

unsignedcharz;

unsignedchara,b,flag_2=1,count1=0;

unsignedcharphil[]={2,0xce,0x6e,0x60,0x1c,2};;

TMOD=0x21;

TH0=0x2f;

TL0=0x40;

SCON=0x50;

PCON=0x00;

TH1=0xfd;

TL1=0xfd;

PS=1;

EA=1;

EX1=0;

ET0=1;

ES=1;

TR0=1;

TR1=1;

high_time=50;

low_time=50;

PIDInit(&spid);//InitializeStructure

spid.Proportion=10;//SetPIDCoefficients

spid.Integral=8;

spid.Derivative=6;

spid.SetPoint=100;//SetPIDSetpoint

while

(1)

{

if(plus==0)

{

EA=0;

for(a=0;a<5;a++)

for(b=0;b<102;b++){}

if(plus==0)

{

set_angler++;

flag=0;

}

}

elseif(subs==0)

{

for(a=0;a<5;a++)

for(b=0;a<102;b++){}

if(subs==0)

{

Setangler--;

flag=0;

}

}

EA=1;

}

get_angle();

b=angle;

if(flag_2==1)

a=b;

if((abs(a-b))>5)

angle=a;

else

angle=b;

a=angle;

flag_2=0;

if(++count1>30)

{

display();

count1=0;

}

compare_angle();

}

TR0=0;

z=1;

while

(1)

{

EA=0;

if(stop==0)

{

for(a=0;a<5;a++)

for(b=0;b<102;b++){}

if(stop==0)

disp_1(phil);

//break;

}

EA=1;

}

}

5.总结

由于这次的作图工具为Protelse99,所以首先的学到的就是将以前的cda课程又复习了一遍,其中各种问题,各种错误,有的请教别人,有的上网查找,终于是完成了。

关于系统及元器件的选定,则通过检测与转换的所学而来,控制的要求及选择原则是参考运控书中的原理所得。

而对于各个芯片的查找和使用手册的观看,也对于其中的发生原理也看了一下,虽然还是不是很懂,但有了个印象。

再通过查阅相关例子及别人的设计原理和系统选择,对这次的课设有了比较全面的了解,虽然还不是很懂,但是将课本所学又好好的复习了一遍,运用了一边。

6.参考书目

[1]张昆,冯立群,余昌钰,等.机器人柔性手腕的球面齿轮设计研究.沈阳工业大学学报,1994,34

(2):

1-7.

[2]何立民.单片机应用系统设计[M].北京:

清华大学出版社,2005

[3]吴金戎.8051单片机实践与应用[M].北京:

清华大学出版社,2005

[4]胡斌.图表细说电子元器件[

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

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2