虚拟仪器课程设计实验_new概要.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《微机化仪器综合设计与实践》 实验指导书 李扬 周琦 广东工业大学机电工程学院 2015 6月印刷 目录 实验六 基于PID算法的可控硅水温自动调节系统设计 一、实验目的和要求 1.掌握虚拟仪器高级语言Lab VIEW 或Lab Windows/CVI 的流程图和软仪器 面板的编程设计方法,熟悉数据处理模块、信号分析模块、仪器控制模 块等各种软件模块的应用。 2.掌握数据采集硬件的低层驱动程序(C 语言/汇编语言)设计、调试及 嵌入Lab VIEW 的技术。 3.学习基于PID的比例积分微分程序编写方法。 4.了解可控硅的的温度控制特点和原理。 5.熟悉CB-68LP接线端子板各接口,利用CB-68LP端子板和PCI-6023E数据采集卡进行模拟量和数字量的转换及相关数据采集。 二、实验主要仪器设备和材料 (1)装有lab windows/CVI 软件PC 一台 (2)PC-DAQ/PCI 卡 (3)CB-68LP端子板 (4)变送器(型号 SBWZ-2460) (5)可控硅 (6)热电偶 三、实验内容和要求 1、实验内容 1)、对水温进行数据采样:先把水温加热至某个温度值(100℃左右,利用万能表测试相应引脚的输出电压,温度每下降1 摄氏度,就马上记录输出电压值。 2)、对采样数据进行处理:通过观察可知,电压与温度不成线性关系, 是一条曲线,因此,本设计采用分段直线拟合。得出电压与温度的对应 关系。 3)、用户界面设计:用Lab windows/CVI 软件进行用户界面开发,并进行 编程。具体程序见后面。 4)、进行调试:把PC 和其他设备连接好,测试程序,设置PID 参数,观 察控制效果,确立PID 参数。 5)、重新对数据采样:开始采样时,因为温度和电压值都不断发生变化, 而温度计显示变化相对于电压变化有一定的滞后,造成微机上温度显示 数值比温度计发生一定量的偏移,造成较大误差。因此,此次采样利用 刚开发的程序控制炉温恒定,观察电压变化范围,记录多个电压值,求 其平均值。但只需要对部分温度采样就可以了,因为这里采用线段拟合 成曲线,只需要线段的端点数据就可。 6)、重新调试程序,并完善用户界面。 2、程序如下: #include ansi_c.h #include easyio.h #include analysis.h #include cvirte.h #include userint.h #include PID.h Static int panelHandle; Static double Wave [1024]; Static double Temp [1024]; Static double A; Static double F; Static double Ph, VOL, GG; Static double AM; Static double PGAIN; Static double IGAIN; Static double DGAIN; Static double LASTERR; Static double TEMP; Static double integral, TEMPUP, PIDPWM; Static double TE=0; Static unsigned long AOtaskID; Static double ERR, FERROR, PT; PID_PWM() // PID 算法定义 {Double ERR; Double PT, DT, RESULT, FERROR; ERR=TEMP-AM; If (abs (ERR)0.01) {FERROR=ERR; PT=PGAIN * FERROR; If (PT100||PT-100) {Integral=0.0; } Else {Integral+=IGAIN*FERROR; If (integral100.00) {Integral=100.0; } Else if (integral0.0) {Integral=0.0 ;} } DT= (ERR-LASTERR)*DGAIN; RESULT=PT+integral+DT; } Else RESULT=integral=PGAIN+IGAIN; LASTERR=ERR; Return (RESULT); } int main (int argc, char *argv[]) { if (InitCVIRTE (0, argv, 0) == 0) return -1; /* out of memory */ if ((panelHandle = LoadPanel (0, PID.uir, PANEL)) 0) return -1; DisplayPanel (

文档评论(0)

美洲行 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档