工程训练设计作业.doc

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
工程训练设计作业

这只是个大体框架,还需要完善,请结合设计题目作进一步完善。 本设计主要分为3个模块:测温模块、信号处理模块、控制模块。如图所示: 由于要对温度进行测量,故要有合适的温度传感器和信号调理电路,并且最后要以直观的方式在工控机上显示当前温度值,。当达到当压力高于时必须关断调节电动阀控制部分用于对采集来的温度信息进行处理,并计算出控制量,反馈给执行机构,对系统作出正确的调整和处理。工作原理及过程 采用。信息经传感器转化为随线性变化的电压信号。原始的电压信号变化幅度和采集卡AD输入电压范围相比很小,且可能有漂移(温度为0时电压不为0),故必须由信号处理电路处理,将信号放大至可与采集卡AD通道输入电压范围相比较同时,信号处理电路也对信号进行监控,当超过上限时强制关闭阀,以防工控机程序不正常时温度失控。 2) 计算控制量,反馈给执行机构,对系统作出正确的调整和处理。 除了计算控制量,程序还对信号进行监控。当信号超过上限时关闭电动阀。 3) 处理后的信号即可由采集卡进行AD转换,控制量的计算采用PID算法,使中的快速、稳定、精确地控制在。 设计电路 1)测温模块 直接参考电子技术的测量水温的实验,里面有详细的电路图和说明。 画出软件流程框图 注:输入输出的程序流程图请参考书本 编写控制程序 #include graphics.h #includedos.h #includestdio.h #define Base 0x220 /*模拟量输出程序*/ 可参考书本附录作改动 void DA(char channel_da,float data) { unsigned char Byte_H, Byte_L; unsigned int out=0; out=data*4095.0/10.0; Byte_H=(out8)0x0f; Byte_L=out0xff; outportb(Base+4+2*( channel_da -1),Byte_L); outportb(Base+5+2*( channel_da -1),Byte_H); } /*模拟量输入程序*/ 可参考书本附录作改动 float AD(char channel_ad) { short flag; int Byte_H, Byte_L; float temp; outportb(Base+10, channel_ad); outportb(Base+9,0); outportb(Base+11,1); flag=1; outportb(Base+12,1); while((flag!=0)(!kbhit())) { flag=inportb(Base+5)0x10; } Byte_H=inportb(Base+5)0x0f; Byte_L=inportb(Base+4)0xff; temp=((Byte_H8)+Byte_L-2047)*20.0/4095.0; return temp; } (…省略画图子程序) void main() { float ey,kp,ki,kd,u=8; /*ey为期望值,按此设计要求应为8,u为控制量*/ int i,ts; float e1,e2,e3,mm; float x[200]={0};y[200]={0}; DA(1,1); printf(Set:ey,ts,Kp,Ki,Kd \n); scanf(%f , %d, %f ,%f , %f ,ey,ts,kp,ki,kd); e1=0;e2=0;e3=ey-0.0; for(i=0;i200;i++) { DA(1,u); if(AD(10)=4) return; /*大于40结束控制*/ x[i]=i;y[i]=AD(10);e1=e2;e2=e3;e3=ey-y[i]; /*检测被控量y[i]*/ u=u+kp*(e3-e2)+ki*ts*e3+kd/ts*(e3-2*e2+e1); if(u10.0) u=10.0; if(u0.0) u=0.0; delay(ts); /*延时至下个t

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档