版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
z...【本科组】2013年9月7日摘要此题要求设计一个简易旋转倒立摆及控制系统,其中角度传感器、步进电机和单片机890C521是系统核心部件。系统接收角度传感器反响的信号,通过PCF8591将接收的信号转换成数字信号,将数值送入单片机中进展计算,可得出摆杆的位置,进而单片机控制步进电机,对摆杆进展控制,到达所要的旋转或者倒立的控制目标。关键词:简易旋转倒立摆步进电机单片机角度传感器目录1设计任务及要求61.1设计任务61.2根本要求62主控制器件的论证与选择72.1控制器选用72.2控制系统方案选择72.3角度的获取模块论证与选择72.4步进电机及其驱动模块的选择82.5AD/DA的选择83系统的硬件设计83.1总体电路框图8图3-1系统框图93.2系统电路与程序设计103.2.1STC89C52单片机最小系统103.2.2PCF8591模块图如图3-2。113.3.3模块芯片TB6560AHQ原理图如图3-3。113.3.4供电电源124系统软件总体设计框图145测试方案与测试结果146总结16参考文献17附录18【本科组】1设计任务及要求1.1设计任务设计并制作一套简易旋转倒立摆及其控制装置。旋转倒立摆的构造如图1-1所示。电动机A固定在支架B上,通过转轴F驱动旋转臂C旋转。摆杆E通过转轴D固定在旋转臂C的一端,当旋转臂C在电动机A驱动下作往复旋转运动时,带动摆杆E在垂直于旋转臂C的平面作自由旋转。图1-1旋转倒立摆构造示意图1.2根本要求〔1〕摆杆从处于自然下垂状态〔摆角0°〕开场,驱动电机带动旋转臂作往复旋转使摆杆摆动,并尽快使摆角到达或超过-60°~+60°;〔2〕从摆杆处于自然下垂状态开场,尽快增大摆杆的摆动幅度,直至完成圆周运动;〔3〕在摆杆处于自然下垂状态下,外力拉起摆杆至接近165°位置,外力撤除同时,启动控制旋转臂使摆杆保持倒立状态时间不少于5s;期间旋转臂的转动角度不大于90°。2主控制器件的论证与选择2.1控制器选用方案一:采用ARM,运行速度快,引脚多,部资源丰富,具有很高的运算速率,但是价格较高,对于初学者,ARM不易掌握.方案二:采用STC89C52单片机,选用STC89C52单片机作为控制核心,它具有8k字节Flash,512字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断构造,全双工串行口,片晶振及时钟电路,且容易烧录,使用方便。所以我们选用STC89V52作为主控芯片2.2控制系统方案选择方案一:采用在面包板上搭建简易单片机系统在面包板上搭建单片机系统可以方便的对硬件做随时修改,也易于搭建,但是系统连线较多,不仅相互干扰,使电路杂乱无章,而且系统可靠性低。方案二:自制单片机印刷电路板自制印刷电路实现较为困难,实现周期长,此外也会花费较多的时间,影响整体设计进程。方案三:采用单片机最小系统。单片机最小系统,能明显减少外围电路的设计,降低系统设计的难度,非常适合本系统的设计。综上所述,我们选择方案三。2.3角度的获取模块论证与选择方案一:采用加速度传感器加速度传感器采用模拟量输出,需要放大电路及A/D完成角度的测量,测量精度高,但是摆杆上不易安装重物,且不易固定。方案二:采用增量式光电旋转编码器光电旋转编码器是一种角度〔角速度〕检测装置,它将输入给轴的角度量,利用光电转换原理转换成相应的电脉冲。旋转编码器具有体积小,精度高,工作可靠,接口数字化等优点。但是旋转编码器安装较为不便,增加了系统硬件电路设计的工作量。方案三:采用电位器作为角度传感器简易旋转倒立摆系统的角度测量也可采用可变电阻器。精细的可变电阻器具易获得、重复性高、分辨率高、高频响应特性好、易使用等特点。且电位器传感器构造简单,体积小,价格低廉,受环境因素影响小,性能稳定。综合以上三种方案微调电位器可以很好地到达我们的要求,角度有效围载33.3度左右,由于本课题精度不高,考虑带经济性和灵活性,我们选择方案三。2.4步进电机及其驱动模块的选择方案一:采用直流减速电机,转速较低,反响速度慢,但是驱动模块简单。方案二:采用型号为57步进电机,为两相四线步进电机,它的步距角仅为1.8°,扭矩为0.50N/m,有较高的空载启动频率,在十六细分后能实现0.225°的步距角能够满足本系统的控制要求,驱动电路较复杂,用42/57专用驱动模块TB6560AHQ驱动,能满足要求,而驱动L298N模块功率较小,无法满足要求,易造成失步。最终选定的步进电机为57步进电机,驱动电路模块选用TB6560AHQ模块。2.5AD/DA的选择方案一:采用ADC0832ADC0832为8位分辨率A/D转换芯片,其最高分辨可达256级,可以适应一般的模拟量转换要求。其部电源输入与参考电压的复用,使得芯片的模拟电压输入在0~5V之间。芯片转换时间仅为32μS,据有双数据输出可作为数据校验,以减少数据误差,转换速度慢且稳定性能较差,而且占用I/O口多。方案二:采用PCF8591PCF8591具有I2C总线构造的多通道8bits的逐次逼近型ADC和一个置8bits单通道ADC,功能多,速度超快,功耗低,单电源供电,串行输入输出,节约I/O口资源,并能在一个处理系统中外接多个PCF8591,能进展更多更强的处理。综上,从各方面考虑,我们选择方案二。3系统的硬件设计3.1总体电路框图为了使系统能够实现各种复杂的控制功能,本设计采用一种功能强大的、高速低功耗性价比高的单片机STC89C52完成对其他局部控制。本设计采用SV01A103AEA01R00旋转角度传感器〔旋转电位器〕对摆杆的倾斜角度进展数据采集,通过PCF8591D/A转换芯片将数据送入单片机,单片机通过数据分析控制TB6560AHQ驱动电路,进而控制步进电机使步进机旋转到达设定的位置,用数码管显示A/D的数据。总体框图如图3-1所示。按键电路模式选择择电源单按键电路模式选择择电源单片机驱动模块步进机数码管显示传感器AD模块图3-1系统框图3.2系统电路与程序设计STC89C52单片机最小系统最小系统包括复位、按键、显示和电源局部,而下载模块用单片机最小系统直接下载,减少了系统的浪费,而且防止连续的拔插单片机。STC89C52单片机最小系统如图3-4所示。图3-4最小系统3.2.2PCF8591模块图如图3-2。图3-2PCF8591模块图模块芯片TB6560AHQ原理图如图3-3。图3-3模块芯片TB6560AHQ原理图供电电源由于需要驱动57步进电机,防止失步,其需要的功率较大,我们采用现有的直流稳压电源直接供电,电源模块的示意图如图3-5。为了到达较好的工作效果,我们选用兆信R*D-302-Ⅱ双路电源供电,具有很好的可靠性和灵活性,电压电流均可调,而且还在带一个5V电压输出端。图3-5电源电路4系统软件总体设计框图如图4-1所示。初始化初始化模式选择模式选择读倾角传感器电压A/D转换单片机处理读到的A/D数据控制驱动电机转动摆杆是否到达要求状态否完毕是图4-1总体程序框图5测试方案与测试结果测试结果〔S〕模式模式一模式二第一次4925第二次3435这次设计的要求,所设计的系统要有较高的灵敏度和相应的转矩,这两样是最为重要的,我们所设计的系统,不能很好地满足要求,有待进一步改良6总结经过四天三夜的辛勤努力,此次基于单片机为控制核心的简易旋转倒立摆的系统设计终于完成。通过合理的系统构建和软件编程,本系统也未能够完成题目的要求,实现摆杆的旋转及倒立,实际测试说明,所设计系统的稳定性有待改良。但由于时间紧,任务重,系统还有一些功能未能实现,比方摆杆在受到干扰后,能够及时恢复倒立状态。假设经过改良,相信性能还会有进一步的提升。本次竞赛极大的锻炼了我们各方面的能力,虽然我们遇到了很多困难和障碍,但总体上成功与挫折交替,困难与希望并存,我们将继续努力争取更大的进步。参考文献[1]宝延.步进电机及其驱动控制系统[M].:工业大学,1972.[2]周航慈.单片机应用程序设计技术[M].:航空航天大学,1991.[3]郁有文.传感器原理及工程应用[M].:电子科技大学出版,2008.[4]宋戈.51单片机应用开发例大全[M].:人民邮电,2010.[5]毅刚.单片机原理及应用[M].:高等教育,2009.[6]吴建平.传感器原理及应用[M].:机械工业,2009.[7]唐继贤.51单片机工程应用实例[M].:航空航天大学,2009.附录第一局部$NOMOD51;;ThisfileispartoftheC51pilerpackage;Copyright(c)1988-2002KeilElektronikGmbHandKeilSoftware,Inc.;;STARTUP.A51:Thiscodeise*ecutedafterprocessorreset.;;TotranslatethisfileuseA51withthefollowinginvocation:;;A51STARTUP.A51;;TolinkthemodifiedSTARTUP.OBJfiletoyourapplicationusethefollowing;BL51invocation:;;BL51<yourobjectfilelist>,STARTUP.OBJ<controls>;;;;User-definedPower-OnInitializationofMemory;;WiththefollowingEQUstatementstheinitializationofmemory;atprocessorresetcanbedefined:;;;theabsolutestart-addressofIDATAmemoryisalways0IDATALENEQU80H;thelengthofIDATAmemoryinbytes.;*DATASTARTEQU0H;theabsolutestart-addressof*DATAmemory*DATALENEQU0H;thelengthof*DATAmemoryinbytes.;PDATASTARTEQU0H;theabsolutestart-addressofPDATAmemoryPDATALENEQU0H;thelengthofPDATAmemoryinbytes.;;Notes:TheIDATAspaceoverlapsphysicallytheDATAandBITareasofthe;8051CPU.AtminimumthememoryspaceoccupiedfromtheC51;run-timeroutinesmustbesettozero.;;;ReentrantStackInitilization;;ThefollowingEQUstatementsdefinethestackpointerforreentrant;functionsandinitializedit:;;StackSpaceforreentrantfunctionsintheSMALLmodel.IBPSTACKEQU0;setto1ifsmallreentrantisused.IBPSTACKTOPEQU0FFH+1;settopofstacktohighestlocation+1.;;StackSpaceforreentrantfunctionsintheLARGEmodel.*BPSTACKEQU0;setto1iflargereentrantisused.*BPSTACKTOPEQU0FFFFH+1;settopofstacktohighestlocation+1.;;StackSpaceforreentrantfunctionsinthePACTmodel.PBPSTACKEQU0;setto1ifpactreentrantisused.PBPSTACKTOPEQU0FFFFH+1;settopofstacktohighestlocation+1.;;;;PageDefinitionforUsingthepactModelwith64KByte*dataRAM;;ThefollowingEQUstatementsdefinethe*datapageusedforpdata;variables.TheEQUPPAGEmustconformwiththePPAGEcontrolused;inthelinkerinvocation.;PPAGEENABLEEQU0;setto1ifpdataobjectareused.;PPAGEEQU0;definePPAGEnumber.;PPAGE_SFRDATA0A0H;SFRthatsuppliesuppermostaddressbyte;(most8051variantsuseP2asuppermostaddressbyte);;;StandardSFRSymbolsACCDATA0E0HBDATA0F0HSPDATA81HDPLDATA82HDPHDATA83HNAME?C_STARTUP?C_C51STARTUPSEGMENTCODE?STACKSEGMENTIDATARSEG?STACKDS1E*TRNCODE(?C_START)PUBLIC?C_STARTUPCSEGAT0?C_STARTUP:LJMPSTARTUP1RSEG?C_C51STARTUPSTARTUP1:IFIDATALEN<>0MOVR0,#IDATALEN-1CLRAIDATALOOP:MOVR0,ADJNZR0,IDATALOOPENDIFIF*DATALEN<>0MOVDPTR,#*DATASTARTMOVR7,#LOW(*DATALEN)IF(LOW(*DATALEN))<>0MOVR6,#(HIGH(*DATALEN))+1ELSEMOVR6,#HIGH(*DATALEN)ENDIFCLRA*DATALOOP:MOV*DPTR,AINCDPTRDJNZR7,*DATALOOPDJNZR6,*DATALOOPENDIFIFPPAGEENABLE<>0MOVPPAGE_SFR,#PPAGEENDIFIFPDATALEN<>0MOVR0,#LOW(PDATASTART)MOVR7,#LOW(PDATALEN)CLRAPDATALOOP:MOV*R0,AINCR0DJNZR7,PDATALOOPENDIFIFIBPSTACK<>0E*TRNDATA(?C_IBP)MOV?C_IBP,#LOWIBPSTACKTOPENDIFIF*BPSTACK<>0E*TRNDATA(?C_*BP)MOV?C_*BP,#HIGH*BPSTACKTOPMOV?C_*BP+1,#LOW*BPSTACKTOPENDIFIFPBPSTACK<>0E*TRNDATA(?C_PBP)MOV?C_PBP,#LOWPBPSTACKTOPENDIFMOVSP,#?STACK-1;ThiscodeisrequiredifyouuseL51_BANK.A51withBankingMode4;E*TRNCODE(?B_SWITCH0);CALL?B_SWITCH0;initbankmechanismtocodebank0LJMP?C_STARTEND第二局部/***********************************************************************************标题:*************DA-AD试验********************* /******************************主程序*****************************************************/#include<reg52.h>#include<I2C.H>#definePCF85910*90//PCF8591地址//elseIOsbitLS138A=P2^2;sbitLS138B=P2^3;sbitLS138Csbitfirst=P2^5;//按键1模式1选择sbitsecond=P2^6;//按键2模式2选择sbitthird=P2^7;//按键3模式3选择sbitfouth=P3^0;//按键4模式4选择sbitfith=P3^1;//按键5模式清零选择sbitshi_neng=P1^0;// 使能控制位sbitfang_*iang=P1^1;// 旋转方向控制位sbitmai_chong=P1^2;//脉冲控制位//此表为LED的字模,共阴数码管0-9-unsignedcharcodeDisp_Tab[]={0*3f,0*06,0*5b,0*4f,0*66,0*6d,0*7d,0*07,0*7f,0*6f};unsignedcharAD_CHANNEL;unsignedlong*dataLedOut[8];signedintD[32];unsignedintad=0,ad0=0;unsignedintms15=0;unsignedchari=0,a=0,b=0,c=0,e=0;unsignedchar*iang;signedcharn=0;unsignedint**();voidround();voidsystem(){ TMOD=0*01; TH0=(65535-2000)/256; TL0=(65535-2000)%256; IE=0*8a; IT0=0; TR0=1;} /*******************************************************************DAC变换,转化函数*******************************************************************/bitDACconversion(unsignedcharsla,unsignedcharc,unsignedcharVal){Start_I2c();//启动总线SendByte(sla);//发送器件地址if(ack==0)return(0);SendByte(c);//发送控制字节if(ack==0)return(0);SendByte(Val);//发送DAC的数值if(ack==0)return(0);Stop_I2c();//完毕总线return(1);}/*******************************************************************ADC发送字节[命令]数据函数*******************************************************************/bitISendByte(unsignedcharsla,unsignedcharc){Start_I2c();//启动总线SendByte(sla);//发送器件地址if(ack==0)return(0);SendByte(c);//发送数据if(ack==0)return(0);Stop_I2c();//完毕总线return(1);}/*******************************************************************ADC读字节数据函数*******************************************************************/unsignedcharIRcvByte(unsignedcharsla){unsignedcharc;Start_I2c();//启动总线SendByte(sla+1);//发送器件地址if(ack==0)return(0);c=RcvByte();//读取数据0Ack_I2c(1);//发送非就答位Stop_I2c();//完毕总线return(c);}//******************************************************************/main(){ system(); shi_neng=0; first=1; second=1; third=1; fouth=1; fith=1;while(1){/********以下AD-DA处理*************/switch(AD_CHANNEL){case0:ISendByte(PCF8591,0*41);D[0]=IRcvByte(PCF8591)*2;//ADC0模数转换1放大2倍显示 break; case1:ISendByte(PCF8591,0*42);D[1]=IRcvByte(PCF8591)*2;//ADC1模数转换2 break; case2:ISendByte(PCF8591,0*43);D[2]=IRcvByte(PCF8591)*2;//ADC2 模数转换3 break; case3:ISendByte(PCF8591,0*40);D[3]=IRcvByte(PCF8591)*2;//ADC3模数转换4 break; case4:DACconversion(PCF8591,0*40,D[4]/2);//DAC 数模转换 break;} //D[4]=400;//数字>>模拟输出 D[4]=D[0];//把模拟输入采样的信号通过数模转换输出if(++AD_CHANNEL>4)AD_CHANNEL=0;ad=D[0]*10;*iang=**();if(first==0)a=1,b=0,c=0,e=0;if(second==0)b=1,a=0,c=0,e=0;if(third==0)c=1,a=0,b=0,e=0;if(fouth==0)e=1,a=0,b=0,c=0;if(fith==0)a=0,b=0,c=0,e=0;if(a==1){ if(*iang==0) { if(ad<=510&&ad>=4250) n=1; if(ad>=0&&ad<=850) n=-1; } elsen=0;}if(b==1){ if(*iang==0) { if(ad<=ad0) n=-1; if(ad>=ad0) n=1; } else round();}if(c==1){ if(ad>=2440&&ad<=2640) n=1; if(ad>=2720&&ad<=2860) n=-1;}if(e==1){ if(ad<=2980&&2380) { if(ad>=2380&&ad<=2640) n=1; if(ad>=2720&&ad<=2980) n=-1; } elseround();}ad0=ad;/********以下将AD的值送到LED数码管显示*************/ LedOut[0]=Disp_Tab[D[0]%10000/1000];LedOut[1]=Disp_Tab[D[0]%1000/100];LedOut[2]=Disp_Tab[D[0]%100/10]|0*80;LedOut[3]=Disp_Tab[D[0]%10];}}unsignedint**()//摆杆象限检测{ unsignedcharQ; if(ad>20&&ad<1360) { Q=1; } elseif(ad>1360&&ad<2380) { Q=2; } elseif(ad>2380&&ad<2680) { Q=3; } elseif(ad>2680&&ad<2980) { Q=4; } elseif(ad>2980&&ad<4040) { Q=5; } elseif(ad>4040&&ad<5100) { Q=6; } elseQ=0; return(Q);}voidround() //状态检测及相应操作{ if(ad>ad0&&*iang==6) { n=1; } elseif(ad>ad0&&*iang==5) { n=1; } elseif(ad<ad0&&*iang==4) { n=-1; } elseif(ad>ad0&&*iang==3) { n=1; } elseif(ad<ad0&&*iang==2) { n=-1; } elseif(ad<ad0&&*iang==1) { n=-1; } elsen=0;}voidT0ZD(void)interrupt1 using2{ TH0=(65535-2000)/256;//250us TL0=(65535-2000)%256; //us50++; ms15++; mai_chong=1; P0=LedOut[i]; switch(i) //使用switch语句控制138译码器 { case0:LS138A=0;LS138B=0;LS138C=0;break; case1:LS138A=1;LS138B=0;LS138C=0;break; case2:LS138A=0;LS138B=1;LS138C=0;break; case3:LS138A=1;LS138B=1;LS138C=0;break; case4:LS138A=0;LS138B=0;LS138C=1;break; case5:LS138A=1;LS138B=0;LS138C=1;break; case6:LS138A=0;LS138B=1;LS138C=1;break; case7:LS138A=1;LS138B=1;LS138C=1;break; } if(++i>7)i=0; if(ms15>5) { ms15=0; if(n>0)//电机反转程序 { fang_*iang=1; mai_chong=0; } if(n<0)//电机正转程序 { fang_*iang=0; mai_chong=0; } if(n==0)//电机锁定程序 { mai_chong=1; } } }第三局部/*************************此局部为I2C总线的驱动程序,用来读取adda数据*************************************/#include<reg52.h>#include<intrins.h>#include<I2C.H>#defineNOP()_nop_()/*定义空指令*/#define_Nop()_nop_()/*定义空指令*/sbitSCL=P2^1;//I2C时钟sbitSDA=P2^0;//I2C数据bitack;/*应答标志位*//*******************************************************************起动总线函数函数原型:voidStart_I2c();功能:启动I2C总线,即发送I2C起始条件.********************************************************************/voidStart_I2c(){SDA=1;/*发送起始条件的数据信号*/_Nop();SCL=1;_Nop();/*起始条件建立时间大于4.7us,延时*/_Nop();_Nop();_Nop();_Nop();SDA=0;/*发送起始信号*/_Nop();/*起始条件锁定时间大于4μs*/_Nop();_Nop();_Nop();_Nop();SCL=0;/*钳住I2C总线,准备发送或接收数据*/_Nop();_Nop();}/*******************************************************************完毕总线函数函数原型:voidStop_I2c();功能:完毕I2C总线,即发送I2C完毕条件.********************************************************************/voidStop_I2c(){SDA=0;/*发送完毕条件的数据信号*/_Nop();/*发送完毕条件的时钟信号*/SCL=1;/*完毕条件建立时间大于4μs*/_Nop();_Nop();_Nop();_Nop();_Nop();SDA=1;/*发送I2C总线完毕信号*/_Nop();_Nop();_Nop();_Nop();}/*******************************************************************字节数据发送函数函数原型:voidSendByte(UCHARc);功能:将数据c发送出去,可以是地址,也可以是数据,发完后等待应答,并对此状态位进展操作.(不应答或非应答都使ack=0)发送数据正常,ack=1;ack=0表示被控器无应答或损坏。********************************************************************/voidSendByte(unsignedcharc){unsignedcharBitt;for(Bitt=0;Bitt<8;Bitt++)/*要传送的数据长度为8位*/{if((c<<Bitt)&0*80)SDA=1;/*判断发
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 漳州市云霄县2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 朔州市右玉县2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 包头市白云矿区2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 黑河市嫩江县2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 赣州市定南县2025-2026学年第二学期四年级语文期中考试卷(部编版含答案)
- 省标化工地施工方案
- 2026年天津市和平区中考一模语文试卷和答案
- 深度解析(2026)《CBT 3683-1995船用曲轴连杆径向柱塞液压马达修理技术要求》
- 深度解析(2026)《2026-2027年半导体器件在仿生机器人人工肌肉与柔性驱动中的应用探索软体机器人核心执行器获机器人公司前瞻研发部门关注》
- 社会学概论考试题及答案
- JJF 1986-2022 差压式气密检漏仪校准规范
- JJF 2034-2023微生物鉴定与药敏分析系统校准规范
- 《公共政策学-政策分析的理论方法和技术》重点解析讲述
- python课件第三章基本数据类型:数字类型及math库的应用
- 2023年毛概题库连答案
- GB/T 14056.2-2011表面污染测定第2部分:氚表面污染
- CB/T 615-1995船底吸入格栅
- 资本经营课件
- 马工程西方经济学(第二版)教学课件-8
- 广东珠海唐家古镇保护与发展战略及营销策略167166849
- (完整)普洱茶介绍ppt
评论
0/150
提交评论