直流伺服电机控制系统设计_第1页
直流伺服电机控制系统设计_第2页
直流伺服电机控制系统设计_第3页
直流伺服电机控制系统设计_第4页
直流伺服电机控制系统设计_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

电3倍息与电气工程系课程设计报告设计题目:直流伺服电机控制系统设计系别:电壬信息与电气工®系年级专业:学号: 学生姓名: 2006级自动化专业《计算机控制技术》课程设计任务书Kp=KKi=EKd二时仿真图和PI控制闭环响应曲线相比较可知:系统响应时间变短,超调变小,但仍不符合要求;Kp=5、Ki=EKd二时仿真图与KP=1、KI=1、KD=时的仿真图相比,系统超调和调节时间都变小,仍然不符合要求,继续校正。需加大Kp及Ki。

Kp二12、Ki=KKd二时仿真图由上曲线知此时系统有微量的超调,进一步加大Ki时超调为零。Kp二12、Ki=l.Kd=时仿真图经过多次校正参数,此时当Kp=12、Ki=l、Kd=时系统超调量为0,稳态误差为0,性能满足设计要求,稳定、准确、快速得到了完满的统一。6.小结控制系统特点是以单片机为控制器,通过键盘设置输入转速值,使得电机的转速设置方便快捷,另外又通过软件实现系统转速设置范围的保护。但在proteus中没能实现闭环系统的PID控制。此缺点通过软件弥补,在MATLAB软件中的SIMULINK中进行了直流伺服电机的开环控制系统仿真,单位闭环控制系统仿真,,闭环PI控制系统仿真,闭环PD控制仿真,,闭环PID控制仿真能够更好的测试和控制系统的性能,从而为设计事物提供了更准确的性能指标。参考文献[1]于海生.计算机控制技术[加.北京:机械工业出版社,[2]周荷琴等.微型计算机原理及接口技术[M].合肥:中国科技大学出版社,[3]张毅刚等.单片机原理与应用设计[M].北京:电子工业出版社[4]楼然苗.51系列单片机设计实例[M].北京:北京航空航天大学出版,⑸陈小忠等.单片机接口技术实用子程序.北京:人民邮电出版社,[6]计算机控制技术实验指导书附录单片机控制程序清单:^include”〃//#include””//#include””//#include””//^include””#defineuncharunsignedchar"defineunintunsignedintvoidwdata(unchardat);//writedatafunctionvoidwcom(uncharcom);//writecommandfunctionvoiddelay(unchart);//delayfunctionsbitrw=P3l;//rwsbitrs=P3^0;//rssbiten=P3*2;//en^defineMAX.LEN16 //数据最大长度#definecount_Ml50000#defineH_0(65536-counOIl)/256#defineL_0(65536-counOIl)%256uncharcodetab2[]={0x31,0x32,0x33,0x41,0x34,0x35,0x36,0x42,0x37,0x38,0x39,〃键盘求值表0x43,OxOe,0x30,OxOf,0x44};〃键盘求值表uncharcodetab3[]={,,TargetValue:”};uncharcodetab4口二{""};uncharcodetab6口={“inputERR"};uncharserial-data[MAX_LEN],serial_len=0,sure_flag=0;voidwdata(unchardat);//writedatafunctionvoidwcom(uncharcom);//writecommandfunctionvoiddelair(unchart);//delayfunctionvoidkeyscan(void);〃键盘操作程序uncharscankey(void);//键盘求值程序voidchushi(void);〃初始化程序//voidinit_serial(void);〃串口初始化//voiduart_serial(void);〃串口主程序voidlcd_wTite(void);〃液晶显示待发送指令uncharjisuan(void);〃计算结果为十进制unintfreq=0;〃频率变量sfrl6DPTR=0x82;〃申明DPTRchartimes=0;〃计算TO中断次数//delayfunction//P0=0x00;〃中断初始化voidinit_interrup(void)IE=0x8a;〃启用TO,T1中断TM0D=0x51;〃Tl为计数器,T2为定时器,都采用modelTH0=H_0;TL0=L_0;TH1=O;TL1=O;TRO=1;TR1=1;)voiddelay(unchart)(unchara,b;for(a=0;a<t;a++)for(b=0;b<128;b++);)//ThefunctionforwritedatatoLCDscreenvoidwdata(unchardat)(Pl二dat;rs=l;rw=0;en=0;delay(6);en=l;)//ThefunctionforwritecommandtoLCDscreenvoidwcom(uncharcom)(Pl=com;rs=0;rw=0;en=0;delay(6);en=l;)〃初始程序voidchushi(void)(unchari;wcom(0x01);wcom(0x38);wcom(OxOc);wcom(0x06);delay(4);wcom(0x80);delay(4);for(i=0;i<17;i++)(wdata(tab3[i]);)wcom(OxcO);delay(2);)〃键盘求值程序uncharscankey(void)(unchartemp,c,d;P2=0x0f;temp=P2;temp二temp&OxOf;〃屏蔽高四位,取列值temp=~(tempOxfO);〃将temp中的内容与OxfO进行相加,最后求反可得到是那列按下if(temp==l)c=0;〃位低电平elseif(temp==2)c=l;〃位低电平elseif(temp==4)c=2;〃位低电平elseif(temp==8)c=3;〃位低电平elsec=0;〃否则给返回值C=0P2=0xf0;〃给P2的行为高电平,以来判断是高四为的那位为低电平delay(1);temp=P2;temp=temp&OxfO;〃屏蔽低四位temp="((temp»4)OxfO);〃将temp中的高四位向右移动4位,与OxfO相加,最后求反可以得到是那行按下if(temp==l)C=c+0;〃将行的值加上列的值elseif(temp==2)C=c+4;〃将行的值加上列的值elseif(temp==4)C=c+8;〃将行的值加上列的值elseif(temp==8)c=c+12;〃将行的值加上列的值elsec=0;d=tab2[c];return(d);〃最后返回行加列的值}//lcd_writefunctionvoidlcd_write(void){uncharwrite_0,write」,jian_zhi[MAX_LEN];for(write_0=0;write_0<MAX_LEN;write_0H)(serial_data[write_0]=0;} 〃清空发送缓冲数组wcom(OxOf); //将光标置在oxcO处serial_len=0;delay(2);while(1){write_l=0xc0; 〃光标地址wcom(write」);for(write.0=0;write_0<MAX_LEN;) 〃输入指令最大为MAX.LEN(wcom(write_l);P2=0x0f; //等待键盘值while((P2&0x0f)==0x0f);jian_zhi[write_O]=scankey0;delay(l);P2=0x0f;while((P2&0x0f)!=0x0f); 〃等待按键放松if(jian_zhi[write_0]^0x0e) 〃当按一下取消键时清空所有发送缓冲数组,( 〃当连续按下两次时则取消本次通讯,退出if(write_0==0)gotowrite_out;elseif(write_0>=l){write_l-=l;wcom(write」);write_0-=l;wdata(tab4[0]);serial_data[write_0]=0;serial_len—;)elseif(jian_zhiEwrite_O]=OxOf) 〃确定发送的指令(if(serial_len==3){if(serial.data[0]<2)sure_flag-H-;elseif(serial_data[0]>2);else{if(serial_dataEl]<5)sure_flag++;elseif(serial_datall]>5);else(if(serial_data[2]<6)sure_flag++;else;)))elsesure_flag++; 〃确定的标志位gotowrite_out; 〃退出本次输入指令}else(wdata(jian_zhi[write_0]);if(jian_zhi[write_0]<=0x39)serial_data[write_0]=jian__zhi[write_0]-0x30;elseserial_dataEuTite_O]=jian_zhi[write_0]-0x37;write_l++;write_0++;serial_len++;}))write_out:delay(1);)〃合并数组voidserial_and(void)uncharandO,andl,and2=0;andl=serial」en/2;for(and0=0;andO<andl;andO++)(serial_dataLandO]=(serial_dataEand0+and2++]«4)serial_data[and0+and2];))〃键盘操作voidkeyscan(void)(uncharks_0,ks_l;delay(2);〃延时去抖动P2=0x0f;if((P2&0x0f)!=0x0f)〃延时后在判断一次,去除抖动影响(ks_O=scankey0;〃求键盘值P2=0x0f;while((P2&0x0f)!=0x0f);〃等待放松while(ks_0二二0x41)(switch(ks_0)(case0x41:(chushi();lcd_write();〃调用写指令程序if((sure_flag-l)&&(serial_len<=3)&&(jisuan0<256))〃发送指令的条为确认发送标志sure_flag=l&&本次发送指令的个数erial_len=6(sure_flag=0;//清除确定标志〃serial_and();〃合并数组//serial_len/=2;//uart_serial();〃调用发送指令程序//P0=serial_data[0];P0=jisuan0;//P0=255;)else{wcom(OxcO);for(ks_O=O;ks_0<10;ks_0++)(wdata(tab6[ks_O]);}for(ks_O=O;ks_0<10;ks_O++)delay(250);)delay(1);}break;default:break;)ks_0=0;)sure_flag=0;serial_len=0;chushi0; 〃初始化,等待下一次发送指令wcom(OxcO);for(ks_l=O;ks_l<MAX_LEN;ks_l++)〃清空发送缓冲数组serial_data[ks_l]=0;)}//求取输入值转换为十进制uncharjisuan(void)(uncharjieguo;if(serial_len==3)jieguo=serial_data[0]*100+serial_data[l]*10+serial_data[2];elseif(serial_len==2)jieguo=serial_dataL0j*10+serial_data.l];elseif(serial_len==l)jieguo=serial_data[0^;else;//jieguo«2;return(jieguo);)〃的中断,计算频率voidT0_lS(void)i

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论