版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 成 绩: 大学自动化学院综合实验报告题 目: 直流电机闭环调试系统 学生姓名:班 级:学 号:同组人员:指导教师:完成时间:一、实验名称:基本情况:6. 具体分工:7. 本人在项目组的作用描述: 在本次试验中我负责的是程序的设计编写和调试,在设计出的硬件为基础上选择了适当的方法来实现功能,程序主要分为三大模块:PID计算、PWM波的产生、液晶的显示,其中液晶程序是参考同学的设计,PID和PWM为自己编写。在试验中大家相互交流,共同解决了很多问题,其中程序设计前,我就开始了PID的学习,从完全不懂到逐步理解最后到实践,在上机调试阶段对PID参数的确定遇到一些困难,不过经不懈努力最终找到适合的参
2、数。二、实验内容(实验原理介绍):本次试验设计的是直流电机闭环控制系统,闭环控制的优点是控制的精度可以达到很高,而且对外界的干扰和系统的参数变化有很好的抑制作用,且可以通过输出反馈控制系统的控制过程。缺点是存在稳定性,振荡,超调等一系列问题,对系统的性能分析和设计远比开环控制麻烦。 本次试验应用PID算法控制电机的转速,利用实际转速进行反馈与给定的转速形成对比,进而通过算法输出PWM波形来控制直流电机。r(t) c(t)e(t)输出PWM直流电机PID算法测速装置图1控制模型示意图 PID控制是一种线性控制器,它根据给定值r(t)与实际输出值c(t)构成控制偏差:e(t)=r(t)c(t)(3
3、.3)将偏差的比例、积分和微分通过线性组合构成控制量,对被控对象进行控制,故称为PID控制器,其控制规律为:(3.4)其中:KP为比例系数;TI为积分时间常数;TD为微分时间常数。一般数字控制系统需要将控制信号采样,所以只能根据采样时刻的偏差值计算控制量,因此,式(3.4)中的积分和微分项不能直接使用,需要进行离散化处理。按模拟PID控制算法的算式(3.3),现以一系列的采样时刻点kT代表连续时间t,以和的形式代替积分,以增量代替微分,则可做如下近似变换:(3.5)其中:T为采样周期。本次试验使用的是PWM脉宽调制方法。脉宽调制 (PWM)是利用数字输出对模拟电路进行控制的一种有效技术,尤其是
4、在对电机的转速控制方面,可大大节省能量。PWM 具有很强的抗噪性,且有节约空间、比较经济等特点。模拟控制电路有以下缺陷:模拟电路容易随时间漂移,会产生一些不必要的热损耗,以及对噪声敏感等。而在用了PWM技术后,避免了以上的缺陷,实现了用数字方式来控制模拟信号,可以大幅度降低成本和功耗。PWM对调速系统来说,系统的响应速度和稳定精度等指标比较好;电枢电流的脉动量小,容易连续,而且可以不必外加滤波电抗也可以平稳工作;系统的调速范围宽;使用元件少、线路简单。三、实验结果分析(含程序、数据记录、控制算法及分析和实验总结等):3.1.程序 #include<reg52.h>#define u
5、char unsigned char#define uint unsigned int#define Speed_Max 70#define Pwm_Period100/*端口初始化*/sbit Rs=P25;sbit Rw=P26;sbit En=P27; sbit In2 = P14; sbit In1 = P16;sbit PWM = P15;sbit KEY1 = P20; sbit KEY2 = P21; sbit KEY3 = P22;sbit KEY4 = P23;/*变量定义*/uint Duty = 0;/占空比uint Now_Speed = 0; uint Set_Spe
6、ed=40;uchar state = 1;uint Count=0,Count_Period=0,Count_Jishu=0;uchar Flag=0,Flag_Speed=0,Flag1=0;uint Kp=4,Ki=1,Kd=1;uint Last_Error; uint L_Last_Error; /*函数初始化*/void delay();void Timer0_init();void Timer1_init();void Write();void Write_date();void Lcd1602_init();void String_display();void Numeral_
7、display();void Float_display();void key_scan();void Sudu_jia();void Sudu_jian();void display_cusor();void sys_init();int delta_Duty();void Yejin_init();int Pid_Ctrol();/*/void delay(uint Z) uint X,Y; for(X=0;X<Z;X+) for(Y=0;Y<110;Y+);void Timer0_init(void)TMOD |= 0x05;TH0 = 0;TL0 = 0;ET0 = 1;T
8、R0 = 1;void Timer1_init(void)TMOD |= 0x20;TH1 = 0x38;TL1 = 0x38;ET1 = 1;TR1 = 1;void Write( uchar Shuju)Rs=0; Rw=0; En=0; delay(5); P0=Shuju; En=1; delay(10); En=0;void Write_date( uchar date) Rs=1; Rw=0; En=0; delay(5); P0=date; En=1; delay(10); En=0;/*显示屏的设定,参考1602PDF资料*/void Lcd1602_init()Write(0
9、x38); /设置显示模式16*2显示 5*7点阵 8位数据接口 Write(0x0c);/开显示,不显示光标 Write(0x06);/当读写一个字符后地址指针加一,且整屏不移动 Write(0x01);/显示清屏void String_display(uchar Hang,uchar Lie, uchar *p) uchar _addr;if(Hang = 1)_addr = 0x80;else if(Hang = 2)_addr = 0xc0;Write(_addr + Lie);doWrite_date(*p);p+;while(*p != '0');/*液晶参数Han
10、g 行 Lie 列 Num 要显示的数据3位小数 */ void Numeral_display(uchar Hang, uchar Lie, uint Num)uchar _addr, i;uint display3;if(Hang = 1)_addr = 0x80;else if(Hang = 2)_addr = 0xc0;Write(_addr + Lie);display0 = Num/100;display1 = (Num % 100) / 10;display2 = Num % 10;for(i=0; i<3; i+) Write_date(displayi + 0x30);
11、/*液晶参数Hang 行 Lie 列 Num 要显示的数据2位小数 */void Float_display(uchar Hang, uchar Lie, uint Num)uchar _addr;if(Hang = 1)_addr = 0x80;else if(Hang = 2)_addr = 0xc0;Write(_addr + Lie);Write_date(Num/10 + 0x30);Write_date('.');Write_date(Num%10 + 0x30);void Lcd1602_cursor(uchar Hang, uchar Lie)uchar _ad
12、dr;if(Hang = 1)_addr = 0x80;else if(Hang = 2)_addr = 0xc0;Write(_addr + Lie);Write(0x0f);/*PID算法控制*/int Pid_Ctrol( int Now_Speed ) uintError, Error1, Error2;int Temp = 0; Error = Set_Speed-Now_Speed; Error1 =Kp * (Error - Last_Error);Error2 = Kd * (Error + L_Last_Error -2*Last_Error);Temp = Error1 +
13、 Error2 + Ki*Error;Temp = Temp/10; L_Last_Error = Last_Error; Last_Error = Error;return (Temp);/*1602液晶显示*/void Yejin_init(void) Duty = 20; PWM = 0;Timer0_init();Timer1_init();Lcd1602_init();In1 = 1;In2 = 0;String_display(1,0,"set");Numeral_display(1,4,Set_Speed); String_display(1,8,"
14、Now");Numeral_display(1,12,Now_Speed);String_display(2,0,"P");Float_display(2,1,Kp);String_display(2,5,"I");Float_display(2,6,Ki);String_display(2,11,"D");Float_display(2,12,Kd);EA = 1;/*按键切换控制*/void key_scan(void)if(KEY3 = 0) delay(5);if(KEY3 = 0) state+;if(state
15、>=7)state = 1;while(!KEY3);else if(KEY4 = 0) delay(5);if(KEY4 = 0) state-;if(state >=255)state = 6;while(!KEY4);else if(KEY1 = 0) delay(5);if(KEY1 = 0) Sudu_jia();while(!KEY1);else if(KEY2 = 0) delay(5);if(KEY2 = 0) Sudu_jian();while(!KEY2);/*速度设定的增加*/void Sudu_jia(void)switch(state)case 1:Set
16、_Speed += 5;if(Set_Speed >= Speed_Max) Set_Speed = Speed_Max;Numeral_display(1,4,Set_Speed); break;case 2:Set_Speed += 5;if(Set_Speed >= Speed_Max) Set_Speed = Speed_Max;Numeral_display(1,4,Set_Speed);break;case 3:Set_Speed+; if(Set_Speed >= Speed_Max) Set_Speed = Speed_Max; Numeral_display
17、(1,4,Set_Speed); break;case 4:Kp+; if(Kp >= 100) Kp = 99; Float_display(2,1,Kp);break;case 5: Ki+; if(Ki >= 100) Ki = 99;Float_display(2,6,Ki); break;case 6: Kd+; if(Kd >= 100) Kd = 99; Float_display(2,12,Kd);break;default:break;/*速度设定减*/void Sudu_jian(void)switch(state)case 1:Set_Speed -=
18、5; if(Set_Speed >= 65535) Set_Speed = 0; Numeral_display(1,4,Set_Speed); break;case 2:Set_Speed -= 5;if(Set_Speed >= 65535) Set_Speed = 0;Numeral_display(1,4,Set_Speed); break;case 3:Set_Speed-; if(Set_Speed >= 65536)Set_Speed = 0;Numeral_display(1,4,Set_Speed);break;case 4:Kp-; if(Kp >=
19、 65535 )Kp = 0; Float_display(2,1,Kp); break;case 5: Ki-; if(Ki >= 65535) Ki = 0; Float_display(2,6,Ki); break;case 6: Kd-; if(Kd >= 65535) Kd = 0;Float_display(2,12,Kd); break;default:break;/*光标闪烁*/void display_cusor(void)switch(state)case 1:case 2:case 3:Lcd1602_cursor(1,7); break;case 4:Lcd
20、1602_cursor(2,4); break;case 5:Lcd1602_cursor(2,4); break;case 6:Lcd1602_cursor(1,15); break;default: break;/*将速度的增量转化为占空比的增量*/int delta_Duty(int delta_v) return delta_v*5; /占空比比例调节/*用于产生PWM脉冲*/void Timer1(void) interrupt 3Count+;if(Count <= Duty)PWM = 1;else if (Count >= Pwm_Period) Count = 0
21、;else PWM = 0;/*定时40ms*/Count_Period+;if(Count_Period >= 200) Count_Period = 0;Now_Speed = (TH0*256 + TL0)/15;TH0 = 0;TL0 = 0;Flag_Speed = 1;Count_Jishu+;if(Count_Jishu >= 10000) Count_Jishu = 0;Flag1 = 1;int main(void) int tmp;Yejin_init();for(;) key_scan();if(Flag_Speed = 1) Flag_Speed = 0;N
22、umeral_display(1,12,Now_Speed);tmp = Duty;tmp += delta_Duty( Pid_Ctrol( Now_Speed) ); if(tmp >= 100)tmp = 99;else if(tmp <=0)tmp = 0;Duty = tmp;if(Flag1 = 1) Flag1 = 0;display_cusor();return 0;调试手段a.确定比例增益P确定比例增益P 时,首先去掉PID的积分项和微分项,一般是令Ti=0、Td=0(具体见PID的参数设定说明),使PID为纯比例调节。输入设定为系统允许的最大值的60%70%,由
23、0逐渐加大比例增益P,直至系统出现振荡;再反过来,从此时的比例增益P逐渐减小,直至系统振荡消失,记录此时的比例增益P,设定PID的比例增益P为当前值的60%70%。比例增益P调试完成。b.确定积分时间常数Ti比例增益P确定后,设定一个较大的积分时间常数Ti的初值,然后逐渐减小Ti,直至系统出现振荡,之后在反过来,逐渐加大Ti,直至系统振荡消失。记录此时的Ti,设定PID的积分时间常数Ti为当前值的150%180%。积分时间常数Ti调试完成。c.确定积分时间常数Td积分时间常数Td一般不用设定,为0即可。若要设定,与确定 P和Ti的方法相同,取不振荡时的30%。d.系统空载、带载联调,再对PID
24、参数进行微调,直至满足要求。PID算法:/*PID算法控制*/int Pid_Ctrol( int Now_Speed ) uintError, Error1, Error2;int Temp = 0; Error = Set_Speed-Now_Speed; /偏差Error1 =Kp * (Error - Last_Error); /比例项Error2 = Kd * (Error + L_Last_Error -2*Last_Error); /积分项Temp = Error1 + Error2 + Ki*Error; Temp = Temp/10; L_Last_Error = Last_
25、Error; Last_Error = Error;return (Temp);控制算法分析: PID控制器(按闭环系统误差的比例、积分和微分进行控制的调节器)自30年代末期出现以来,在工业控制领域得到了很大的发展和广泛的应用。它的结构简单,参数易于调整,在长期应用中已积累了丰富的经验。特别是在工业过程控制中,由于被控制对象的精确的数学模型难以建立,系统的参数经常发生变化,运用控制理论分析综合不仅要耗费很大代价,而且难以得到预期的控制效果。在应用计算机实现控制的系统中,PID很容易通过编制计算机语言实现。由于软件系统的灵活性,PID算法可以得到修正和完善,从而使数字PID具有很大的灵活性和适用
26、性。实现PID控制的计算机控制系统如图1所示,其中数字PID控制器是由软件编程在计算机内部实现的。 图1 模拟PID控制1、PID控制规律的离散化 PID控制器是一种线性调节器,这种调节器是将系统的给定值r与实际输出值y构成的控制偏差的比例(P)、积分(I)、微分(D),通过线性组合构成控制量,所以简称PID控制器。 连续控制系统中的模拟PID控制规律为: (式1) 式中是控制器的输出,是系统给定量与输出量的偏差,是比例系数,是积分时间常数,是微分时间常数。其相应传递函数为: (式2)比例调节器、积分调节器和微分调节器的作用:(1)比例调节器:比例调节器对偏差是即时反应的,偏差一旦出现,调节器
27、立即产生控制作用,使输出量朝着减小偏差的方向变化,控制作用的强弱取决于比例系数。比例调节器虽然简单快速,但对于系统响应为有限值的控制对象存在静差。加大比例系数可以减小静差,但是,过大时,会使系统的动态质量变坏,引起输出量振荡,甚至导致闭环系统不稳定。(2)比例积分调节器:为了消除在比例调节中的残余静差,可在比例调节的基础上加入积分调节。积分调节具有累积成分,只要偏差不为零,它将通过累积作用影响控制量,从而减小偏差,直到偏差为零。如果积分时间常数大,积分作用弱,反之为强。增大将减慢消除静差的过程,但可减小超调,提高稳定性。引入积分调节的代价是降低系统的快速性。(3)比例积分微分调节器:为了加快控制过程,有必要在偏差出现或变化的瞬间,按偏差变化的趋向进行控制,使偏差消灭在萌芽状态,这就是微分调节的原理。微分作用的加入将有助于减小超调,克服振荡,使系统趋于稳定。 由于计算机系统是一种采样控制系统,只能根据采样时刻的偏差值计算控制量,因此,利用外接矩形法进行数值积分,一阶后向差分进行数值微分,当采样周期为T时, (式3) 如果采样周
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年哈尔滨应用职业技术学院单招综合素质考试题库带答案详解(培优a卷)
- 2026年吉林交通职业技术学院单招职业适应性测试题库及完整答案详解
- 2026年四川三河职业学院单招职业技能考试题库带答案详解(新)
- 2026年吉林司法警官职业学院单招职业技能考试题库附答案详解(巩固)
- 医学护理跨文化沟通能力
- 《圆练习(第一课时)》课件
- 趣会女神 打造不一样的女神节
- 2026河南信阳市潢川县金桂酒店管理有限公司招聘2人考试备考试题及答案解析
- 2026河南商丘宁陵县育华园学校春季教师招聘笔试备考题库及答案解析
- 2026重庆泰山电缆有限公司招聘50人笔试模拟试题及答案解析
- 第4课 致敬劳动者 第1课时 课件+视频 2025-2026学年道德与法治三年级下册统编版
- 集成运算放大器原理及其应用
- 【良品铺子公司营运能力现状、问题及对策8300字(论文)】
- 建筑地基处理技术规范jgj-79
- 室内定位技术及应用
- 畜牧兽医法规精品课件
- 化工自动化控制仪表作业安全操作资格培训教材课件
- 完整版自考03709马克思主义基本原理概论历年真题及答案
- 《介入放射学总论》课件
- XX公司境外工程突发事件应急预案
- Meta分析过程的解读知识
评论
0/150
提交评论