




已阅读5页,还剩21页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
二阶环节电压跟踪控制系统的设计(采用单片机教学实验装置)姓 名: 蒋坤婷 学 号: 20105095姓 名: 彭永红 学 号: 20105007姓 名: 王经造 学 号: 20105116姓 名: 汤乾锋 学 号: 20104990重庆大学自动化学院二O一三年九月目录一、序言1二、设计步骤22.1 确定基本设计目标22.2 确定基本实现方案22.2.1 搭建二阶环节22.2.2 电路输出跟踪阶跃信号22.2.3 设计人机交互接口(键盘)22.2.4 精度要求22.3 硬件设计22.4 软件设计32.5 调试完善程序4三、 心得体会5四、参考文献8五、附录95.1系统框图95.2电原理图105.3程序流程图115.4程序清单17一、序言自动控制在日常生活中的应用非常广泛,大到航天航空,小到家用电器都会涉及到自动控制。自动控制系统的任务是使被控对象的被控量跟随给定值的变化而变化。闭环控制系统是一种最基本的自动控制系统,图1是单回路闭环控制系统的框图。变送器(含测量元件)对被控量C进行测量,并将其变换为电信号,经A/D转换为数字信号后反馈给控制器。控制器将反馈信号与给定值R进行比较,并根据指定的控制规律产生相应的控制信号,经D/A转换后作用于被控对象,使被控量与给定值保持一致。图1.1 单回路闭环控制系统框图二、设计步骤2.1 确定基本设计目标仔细研读了设计任务书后,我们确认了本次课程设计需要实现的基本任务目标有:(1)搭建一个二阶环节;(2)示波器能够显示输出曲线;(3)要求设计人机交互接口,参数可随时设置;(4)精度要求。2.2 确定基本实现方案对比任务书的要求,我们讨论得出了要完成各个基本设计任务的初步实现方案:2.2.1 搭建二阶环节本次课程设计中,由实验室提供二阶环节系统装置,故不需要我们自己搭建。2.2.2 电路输出跟踪阶跃信号我们采用实验箱上的44键盘作为系统输入,实验箱读取按键后,得到一个给定值,系统通过A/D读取二阶环节的电压并与给定值比较,采取控制并将输出值通过D/A送给二阶环节。整个过程中需要用的读键程序、D/A、A/D转换程序、LED显示程序、滤波程序、控制计算程序2.2.3 设计人机交互接口(键盘)由于任务要求信号参数可通过人机交互接口设置,我们讨论后设计在LED上显示输入的信息。通过44键盘输入控制信号。按键设置为0到9十个按键加上负号、小数点和确认这三个按键。2.2.4 精度要求对于精度5%,调节时间25秒的设计要求,我们决定在软件调试时通过修改各参数来完成。2.3 硬件设计本次课程设计中最为重要的硬件设计任务是信号数据采集系统的搭建。数据采集系统是由单片机和硬件接口电路组成,硬件接口电路主要由采样保持器、A/D转换电路、输入接口电路、D/A转换电路、控制逻辑电路输出接口电路等组成。其工作过程是:由机接收电路模拟信号,将模拟信号送到采样保持电路进行采样;当单片机启动A/D转换电路转换时,采样保持电路处于保持状态,并把信号送给A/D转换电路实现模拟量到数字量的转换;A/D转换结束后,将送出一结束信号,该信号可产生已中断请求或供单片机查询,同时采样/保持电路进入采样状态,单片机由输入接口电路读取模拟信号并进行一次转换数据。当单片机向D/A转换电路输出数据时,D/A转换电路输出一个与输出数据对应的模拟电压。硬件电路就是选取合适的电子器件和芯片,设计成满足系统速度、精度和可靠性等技术要求的电路接口,使单片计算机能按要求完成上述工作过程。其次,按键键盘功能设计也是重要的,不同的键盘设计带给编程的难度是不同的,具体功能的体现也是有差别的。本次课程设计需要用到的硬件系统还有闭环控制系统。其实闭环控制系统硬件组成与数据采集系统基本相同,主要由模拟输入通道、模拟输出通道和被控对象等组成。图2.3.1就是此次设计过程中一个很重要的硬件模块,即二阶环节系统: 图2.3.1 二阶环节2.4 软件设计相同于硬件设计,软件设计也大体分为两个部分,及采集系统和闭环控制系统。因为此次课程设计的主要任务是完成闭环控制系统的软件设计,而且采集系统的软件设计可以包括在闭环控制系统的步骤里。除了必须达到采集系统的要求外,闭环控制系统的软件设计还必须有控制算法程序和更强的数据处理能力。其实一个控制系统的控制过程可归纳为以下3个步骤:1 实时数据采集:即对被控参数的瞬时值进行测量。2 实时决策:对表征被控对象状态的测量值进行分析,并按已定的控制规律进 行控制。3 实时控制:根据决策,实施对控制机构发出控制信号。控制程序的运行必须满足以上控制过程,同时控制算法是使被控参数尽快达到给定值,并能将被控参数随时间的变化情况在屏幕上显示出来。参考程序流程图如图3 所示。该程序由初始化和数据采集,数据滤波,标度变换,LED显示,D/A输出,控制程序和等子程序构成。各子程序功能为:(1)数据采集:连续采集12个数据,每采集一个数据,去掉最前面一个数据。(2)数字滤波:具体方法是对12个数据取平均值(3)标度变换:函数 void symbol()将数字滤波后的采样值按比列换成与实际输入对应的模拟电压毫伏值,然后存放在数据缓冲区。(4)LED显示:函数void display()显示给定值和跟踪电压值。(5)控制决策:函数void pid()对给定值与真实值的误差进行比例、积分和微分运算,得到本次控制值,存放在输出缓冲区。(6)D/A输出:D/A输出程序是将当前输出缓冲区数据输出到D/A转换器端口。(7)检查按键:函数void keyscan()检查是否有键按下,以确定给定值为多少。如有键按下,读取键值,是确定键键就表示输入完毕。2.5 调试完善程序相关硬件及软件设计完成后,最后的主要工作就是调试运行程序,并达到设计任务要求的精度。整个过程就是不断地修改相关参数并调试运行,已达到理想效果。调试完善程序之后,我们便开始着手撰写课程设计报告。3、 心得体会蒋坤婷的心得体会:本次的课程设计题目是二阶电压跟踪控制系统的设计,时间只有一周,非常紧迫。拿到设计题目之后,开始不太理解题目的意思,所以就在网上查找资料,然后理解到这次的题目实际上就是一个闭环回路,输出用到一个PID控制环节以及DA转换环节,反馈回路用到AD转换以及标度变换环节,另外就是一些人机接口环节,通过键盘来修改电压的设定值,并且通过单色LED来显示电压的设定值以及反馈值。由于这次的设计用的是单片机系统,所以我们决定用C语言来编写程序,虽然我们学习C语言已经很久没有用了,有点生疏了,但是C语言和汇编语言相比有它的有点,程序会相对较短,而且上一次的课程设计我就是采用的汇编语言,对于汇编语言已经非常熟练,通过这次的设计可以帮助我们更加熟悉C语言。首先我们确定了这次的方案之后,就行了明确的分工,我们将本次的设计任务分成四块,分别是主程序及中断子程序、PID控制及DA转换子程序、标度变换及AD转换子程序和键盘扫描显示子程序。组员们根据自己的长处,选择自己的任务。这个的设计中我主要负责PID控制算法以及DA转换那部分,拿到这个任务我首先翻阅以前的课本查找有关离散PID控制那部分,理解PID算法的控制原理。然后我就用MATLAB进行仿真来得到符合要求的PID参数,然后就是程序的编写,这部分的程序编写用C语言来编写很简单,程序也很短。就在我们调试的时候发现PID的控制很是不好,和仿真时的效果差别太大,原来是因为在仿真时用的是连续的PID控制,而在实际中我们这个PID是离散的,因为AD转换采集到的数据时离散的。所以我们就直接在程序了修改PID的参数,根据P、I、D它们各个环节所起到的作用来修改PID参数,经过反复的调试,最终找到了一组最合适的PID参数。在调试过程中我们发现的另外一个大的问题就是,虽然51芯片的各个端口是可以分时复用的,但是P3口最好不要复用,因为它有特殊的功能。另外在读入时,要先将端口置“1”,以免导致读入错误。在这些小问题上也是花费了我们一些的时间。通过这次的课程设计让我更加熟悉C语言,对单片机系统也有了更深的了解。让我的程序编写能力有了很大的提高,尤其重要的是学会编程的思想,对于一个复杂的系统,将各个功能模块化非常重要,这对于程序的编写有很大的帮助,可以使人思路更加清晰,另外在调试的时候更是方便我们查找错误。更重要的是提高了我与人交流沟通的能力、组织协调能力、发现问题和解决问题的能力。总之,这是一个不可多得的机会,让我获益匪浅。汤乾锋的心得体会:本次微型计算机控制我们的课程设计题目是二阶环节电压跟踪控制系统的设计(采用单片机教学实验系统的)。由于本次的时间比较紧只有一周的时间,再加上要使用单片机无疑增加了难度。为了能很好的完成任务小组成员都花了不少时间复习单片机和计算机控制的知识。在对题目有一定的了解基础后我们小组开始展开讨论,确定和设计系统框图并分配好任务,通力完成。题目要求我们设计一个控制器输出作用于电路输入IN使得电路输出能够跟踪-55V范围内的任意阶跃信号,这就需要我们的程序设计中要包含有A/D转换、标度变换、D/A转换、PID控制算法以及显示与键盘等模块。在明确好各个模块后我分配到的是标度转换模块然后协助其他组员完成其他模块。微型计算机控制系统在读入被测模拟信号后需要转换成数字量,变成操作人员所熟悉的数值并显示出来,这就是标度变换模块所要气的作用。本次课题我们要A/D转换读入电压值并转成0255中的数字量。-55V的电压转成0255相应的数字量我们采用的是线性标度转换,把它带入相应的标度变换公式,再用程序语言表示出来即可,再接下来就是把相应的数字量一位一位分离出来再在LED显示管上显示出来。在复习过单片机和计算机控制后很快就完成了这模块的编程。本次课程设计不仅使我们对硬件的知识更加加深 ,对以前不是很理解的东西又更加理解了,又温习了一遍那些指令。还有就是通过本次课程设计,让我们一个组凝聚在一起,大家一起思考一起解决问题,这种团队、与人合作的精神很重要,这对于我们在将来的工作岗位上是很重要的,当然一个组必须有一个中心力量,否则这个组就是一团散沙,缺乏一个好的组长来领导大家也是不行的,有的组队可能是想要当组长的人太多,大家各自都有自己的想法,最终造成意见不能统一,于是原本可以做得很好的东西最终也不能做好,这个就是一个团队合作的问题,有意见可以,大家想法多是好事,但是大家都应该出于是为了整个团队的利益着想,谁的想法是最好的,我们就采纳,当然中间有不同的意见也是可以提出,但是不能太固执己见,也要做出一定的让步和妥协。不管怎么说还是要感谢一直艰苦奋战的队友们,直到最后一刻也没有放弃。通过这次课程设计我发现,根据流程图编程比较简单,关键是怎样画出流程图。流程图是具体问题和编程之间的过渡,它把复杂具体的问题变成抽象的、有逻辑关系的框架,要想画出流程图,必须对课题分析透彻。通过这次编程我发现C语言的好处有很多,用了C能够自己掌握程序的细节,有高度的灵活;用这个语言不仅仅是会用来编程,而是用C语言深入了解操作系统底层和硬件接口。这短短的几天时间了让我感受到了团结合作的重要性,以及遇到困难要敢于冲击敢于挑战,只有这样你才能走得跟远,取得成功。相信在今后的学习生活中这次课程设计的经历将对我有很大的帮助。彭永红的心得体会:本次的课程设计时间为一个星期,不过我们在之前就开始准备了,在网上找了一些资料作参考,在周一的时候我们把设计思路讨论了一下然后划分了模块分配任务,我们的任务是设计一个二阶环节电压跟踪控制系统,为此我们设计了一个单回路闭环控制系统,变送器对被控量进行测量,并将其变换为电信号,经A/D转换为数字信号后与给定值比较得到一个误差信号,经过PID调节后,经D/A转换和标度变换后作用于被控对象,使被控量与给定值保持一致。这就需要我们的程序设计中要包含有A/D转换、标度变换、D/A转换、PID控制算法以及显示与键盘等模块。在明确好各个模块后,我分配到的是键盘扫描和显示,单纯的键盘扫描显示很简单,难度在于考虑到人性化设计,就有很多中情况需要考虑。不过我找到了类似的模块,看懂就花了很长时间,但是看懂后修改很快就完成了,并且通过了调试。但在之后的总调试中我们遇到了很多麻烦,借助仪器的检测我们发现我们的AD模块有问题,我们的程序中用的是AD的双极性-5V+5V,但却检测不到正确的值,后来我们发现这片AD574A不能得到负电压值,原因是电阻配的不对,王老师给我们找了一个可用的实验箱,才能正确的显示输出的电压。期间我们的电路出现过一些冲突,弄了好久都不行,后来还是在我们同学的指导下才知道错误在哪。在设计和调试的过程中我们遇到了各种各样的问题,还好我们相互帮助,相互提醒,相互鼓励,有好几次都很烦躁,但在伙伴们的打趣鼓励下坚持下去了,最终完成了这次的设计。 这次的设计不仅让我复习了原先学习的基本知识,还让我学会了理论与实际的结合,最重要的是我体会到了一个团队的力量是多么的强大,没有他们我绝对完成不了此次课程设计。四、参考文献【1】计算机硬件技术基础杨天怡等主编重庆大学出版社【2】计算机硬件技术基础实验教程黄勤等主编重庆大学出版社【3】单片微型计算机与接口技术李群芳等主编电子工业出版社【4】计算机控制技术王建华等主编高等教育出版社五、附录5.1系统框图5.2电原理图图5.2.1 系统电路图5.3程序流程图5.4程序清单/*/* 文件名: KeyScan.c */* 功能描述: 控制8255完成键盘扫描及数码显示实验 */*/#include#include#include #include #define C8255_A XBYTE0x7FFC /8255端口地址定义#define C8255_B XBYTE0x7FFD#define C8255_C XBYTE0x7FFE#define C8255_CON XBYTE0x7FFF#define ad574_0 XBYTE0x7f00#define ad574_1 XBYTE0x7f08 /数码管显示编码unsigned char a = 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,0x7f,0x6f, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xbf, 0x86, 0xdb, 0xcf, 0xe6, 0xed, 0xfd, 0x87,0xff,0xef, 0x40,0x5c,0x1c,0x78; /40为负号 /显示缓冲unsigned char b = 11, 11, 11,11, 11, 11;unsigned char c= 0x5c,0x1c,0x78; /显示out 超出范围unsigned char d=0,0,0,0,0,0; /传递真实值float set_value/unsigned int e11=0;unsigned char f3=0; /存取个十百数据unsigned char key_down;unsigned char key_value;unsigned char key_count;unsigned char key_v_mflag=0;unsigned char key_v_pflag=0; /小数点和负号标志sbit da_cs=P17;sbit da_wr=P16;sbit A0=P15;sbit w=P13;sbit r=P12;sbit cs=P14;sbit busy=P11;sbit cs2=P27;long int advalue;long int set_value=5000;long int sym_fruit;long int ad_fruit;long int ek,ek1,eki,ekd;long int out;long int adv_fruit; /求取12次转换结果int kp=2,kd=5,ki=2;void display();void delay(unsigned int time);void clear();void writebuffer();void getkey(); /得到按键值void cmp_value();void keyscan(); /按键扫描函数void confirm_value();void adcge();void adcge12();void symbol(); /标度变变换void adave();/中断服务程序void int_timer0() interrupt 1 TH0 = 0xb1; /初始化定时器0 TL0 = 0xe0; display(); clear();/ad574void symbol() /标度变变换 sym_fruit=advalue*625;sym_fruit=sym_fruit/256;sym_fruit=sym_fruit-5000;ad_fruit=sym_fruit; if(sym_fruit=0) b2=11; sym_fruit/=100;b0=(char)sym_fruit%10;sym_fruit/=10;b1=(char)sym_fruit%10; b1+=20; /将第三位加上小数点 else sym_fruit*=-1; /要将负数变为正数,否则显示会出错 sym_fruit/=100;b0=(char)sym_fruit%10; sym_fruit/=10;b1=(char)sym_fruit%10; b1+=20; /将第三位加上小数点b2=30; void adcge()unsigned char Hbyte, Lbyte;Hbyte=0; Lbyte=0;cs2=1;w = 0;r = 1; A0 = 0; cs = 0;delay(10);r = 0; while(busy=1);r = 1; A0 = 0; cs= 0;w=1;delay(10);P2= 0XFF;r = 0; Hbyte = P2; A0 = 1; cs = 0;w=1;P2 = 0XFF; Lbyte = P2;w = 1;r = 1;advalue = (unsigned int)Hbyte)4);/ 转换结果void pid() ekd=ek; ek=set_value-ad_fruit; /ek eki+=ek; ek1=ek*kp*0.8+ki*eki*0.001+kd*(ek-ekd); if(ek15000) ek1=5000; if(ek1-5000) ek1=-5000; out=(ek1+5000); out=out*255; out/=10000; da_cs=0; da_wr=0; P0=(char)(out); delay(100); da_cs=1; da_wr=1; void display() unsigned char i, j = 0xDF;for(i=0; i1)|(j7);void delay(unsigned int time)unsigned int i;for(i=0; itime; i+);void keyscan() /按键扫描函数unsigned char cc;da_cs=1;C8255_A = 0x00; /X1X4 cc=C8255_C; /得到Y1Y4的值key_down = (cc) & 0x0f;void clear() /清屏 C8255_B = 0x00;void writebuffer() keyscan();while(key_down) /键盘消抖 key_down=1;keyscan();void getkey() /得到按键值unsigned char value;unsigned char i, j = 0xFE;for(i=0; i4; i+)C8255_A = j;value = C8255_C;if(!(value & 0x01) /行1key_value = i + 0;writebuffer();return;if(!(value & 0x02) /行2key_value = i + 4;writebuffer();return;if(!(value & 0x04) /行3key_value = i + 8;writebuffer();return;if(!(value & 0x08) /行4 key_value = i + 12; writebuffer(); return; j =0&key_value=9) bkey_count=key_value; /09的数就直接赋值
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 民爆企业安全员培训课件
- 民法总则相关课件
- 初中生中考试题及答案
- 财务室职责考试题及答案
- 广州:新质生产力发展探析
- 民族风少女课件教学
- 网络热词新质生产力解析
- 新华社新质生产力要素
- 《统计学-SPSS和Excel实现》(第9版)课件 第6章 假设检验
- 新质生产力十问十答
- 中建八局《建筑工程质量管理口袋书~基础、主体结构、装饰分册》
- 智能矿山技术在硬岩铀矿山的应用实例与挑战
- 畜禽疫病防控技术课件教学
- 2025静脉输液规范
- 大学英语 专升本 课件 第十节 定语从句
- 瑜伽急救知识培训课件
- 2《中国人首次进入自己的空间站》课件【知识精研】统编版语文八年级上册
- 切口妊娠介入治疗
- 2024年高校红十字应急救护大赛理论考试题库(含答案)
- 2024年福建省公务员录用考试《行测》真题及答案解析
- c02激光治疗皮肤病
评论
0/150
提交评论