简易旋转倒立摆及控制装置.docx

上传人:b****5 文档编号:6920819 上传时间:2023-01-12 格式:DOCX 页数:25 大小:62.49KB
下载 相关 举报
简易旋转倒立摆及控制装置.docx_第1页
第1页 / 共25页
简易旋转倒立摆及控制装置.docx_第2页
第2页 / 共25页
简易旋转倒立摆及控制装置.docx_第3页
第3页 / 共25页
简易旋转倒立摆及控制装置.docx_第4页
第4页 / 共25页
简易旋转倒立摆及控制装置.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

简易旋转倒立摆及控制装置.docx

《简易旋转倒立摆及控制装置.docx》由会员分享,可在线阅读,更多相关《简易旋转倒立摆及控制装置.docx(25页珍藏版)》请在冰豆网上搜索。

简易旋转倒立摆及控制装置.docx

简易旋转倒立摆及控制装置

ThismanuscriptwasrevisedbytheofficeonDecember22,2012

 

简易旋转倒立摆及控制装置

2013年全国大学生电子设计竞赛

简易旋转倒立摆及控制装置(C题)

【本科组】

2013年9月7日

摘要

本题要求设计一个简易旋转倒立摆及控制系统,其中角度传感器、步进电机和单片机890C521是系统核心部件。

系统接收角度传感器反馈的信号,通过PCF8591将接收的信号转换成数字信号,将数值送入单片机中进行计算,可得出摆杆的位置,进而单片机控制步进电机,对摆杆进行控制,达到所要的旋转或者倒立的控制目标。

关键词:

简易旋转倒立摆步进电机单片机角度传感器

 

简易旋转倒立摆及控制装置(C题)

【本科组】

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的选择

方案一:

采用ADC0832

ADC0832为8位分辨率A/D转换芯片,其最高分辨可达256级,可以适应一般的模拟量转换要求。

其内部电源输入与参考电压的复用,使得芯片的模拟电压输入在0~5V之间。

芯片转换时间仅为32μS,据有双数据输出可作为数据校验,以减少数据误差,转换速度慢且稳定性能较差,而且占用I/O口多。

方案二:

采用PCF8591

PCF8591具有I2C总线结构的多通道8bits的逐次逼近型ADC和一个内置8bits单通道ADC,功能多,速度超快,功耗低,单电源供电,串行输入输出,节约I/O口资源,并能在一个处理系统中外接多个PCF8591,能进行更多更强的处理。

综上,从各方面考虑,我们选择方案二。

3系统的硬件设计

3.1总体电路框图

为了使系统能够实现各种复杂的控制功能,本设计采用一种功能强大的、高速低功耗性价比高的单片机STC89C52完成对其他部分控制。

本设计采用SV01A103AEA01R00旋转角度传感器(旋转电位器)对摆杆的倾斜角度进行数据采集,通过PCF8591D/A转换芯片将数据送入单片机,单片机通过数据分析控制TB6560AHQ驱动电路,进而控制步进电机使步进机旋转达到设定的位置,用数码管显示A/D的数据。

总体框图如图3-1所示。

按键电路模式选择择

图3-1系统框图

3.2系统电路与程序设计

3.2.1STC89C52单片机最小系统

最小系统包括复位、按键、显示和电源部分,而下载模块用单片机最小系统直接下载,减少了系统的浪费,而且防止连续的拔插单片机。

STC89C52单片机最小系统如图3-4所示。

图3-4最小系统

3.2.2PCF8591模块图如图3-2。

图3-2PCF8591模块图

3.3.3模块芯片TB6560AHQ原理图如图3-3。

图3-3模块芯片TB6560AHQ原理图

3.3.4供电电源

由于需要驱动57步进电机,防止失步,其需要的功率较大,我们采用现有的直流稳压电源直接供电,电源模块的示意图如图3-5。

为了达到较好的工作效果,我们选用兆信RXD-302-Ⅱ双路电源供电,具有很好的可靠性和灵活性,电压电流均可调,而且还在带一个5V电压输出端。

图3-5电源电路

4系统软件总体设计框图

如图4-1所示。

初始化

图4-1总体程序框图

5测试方案与测试结果

测试结果(S)

模式

模式一

模式二

第一次

49

25

第二次

34

35

这次设计的要求,所设计的系统要有较高的灵敏度和相应的转矩,这两样是最为重要的,我们所设计的系统,不能很好地满足要求,有待进一步改进

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

;------------------------------------------------------------------------------

;ThisfileispartoftheC51Compilerpackage

;Copyright(c)1988-2002KeilElektronikGmbHandKeilSoftware,Inc.

;------------------------------------------------------------------------------

;STARTUP.A51:

Thiscodeisexecutedafterprocessorreset.

;

;TotranslatethisfileuseA51withthefollowinginvocation:

;

;A51STARTUP.A51

;

;TolinkthemodifiedSTARTUP.OBJfiletoyourapplicationusethefollowing

;BL51invocation:

;

;BL51,STARTUP.OBJ

;

;------------------------------------------------------------------------------

;

;User-definedPower-OnInitializationofMemory

;

;WiththefollowingEQUstatementstheinitializationofmemory

;atprocessorresetcanbedefined:

;

;;theabsolutestart-addressofIDATAmemoryisalways0

IDATALENEQU80H;thelengthofIDATAmemoryinbytes.

;

XDATASTARTEQU0H;theabsolutestart-addressofXDATAmemory

XDATALENEQU0H;thelengthofXDATAmemoryinbytes.

;

PDATASTARTEQU0H;theabsolutestart-addressofPDATAmemory

PDATALENEQU0H;thelengthofPDATAmemoryinbytes.

;

;Notes:

TheIDATAspaceoverlapsphysicallytheDATAandBITareasofthe

;8051CPU.AtminimumthememoryspaceoccupiedfromtheC51

;run-timeroutinesmustbesettozero.

;------------------------------------------------------------------------------

;

;ReentrantStackInitilization

;

;ThefollowingEQUstatementsdefinethestackpointerforreentrant

;functionsandinitializedit:

;

;StackSpaceforreentrantfunctionsintheSMALLmodel.

IBPSTACKEQU0;setto1ifsmallreentrantisused.

IBPSTACKTOPEQU0FFH+1;settopofstacktohighestlocation+1.

;

;StackSpaceforreentrantfunctionsintheLARGEmodel.

XBPSTACKEQU0;setto1iflargereentrantisused.

XBPSTACKTOPEQU0FFFFH+1;settopofstacktohighestlocation+1.

;

;StackSpaceforreentrantfunctionsintheCOMPACTmodel.

PBPSTACKEQU0;setto1ifcompactreentrantisused.

PBPSTACKTOPEQU0FFFFH+1;settopofstacktohighestlocation+1.

;

;------------------------------------------------------------------------------

;

;PageDefinitionforUsingtheCompactModelwith64KBytexdataRAM

;

;ThefollowingEQUstatementsdefinethexdatapageusedforpdata

;variables.TheEQUPPAGEmustconformwiththePPAGEcontrolused

;inthelinkerinvocation.

;

PPAGEENABLEEQU0;setto1ifpdataobjectareused.

;

PPAGEEQU0;definePPAGEnumber.

;

PPAGE_SFRDATA0A0H;SFRthatsuppliesuppermostaddressbyte

;(most8051variantsuseP2asuppermostaddressbyte)

;

;------------------------------------------------------------------------------

;StandardSFRSymbols

ACCDATA0E0H

BDATA0F0H

SPDATA81H

DPLDATA82H

DPHDATA83H

NAMEC_STARTUP

C_C51STARTUPSEGMENTCODE

STACKSEGMENTIDATA

RSEGSTACK

DS1

EXTRNCODE(C_START)

PUBLICC_STARTUP

CSEGAT0

C_STARTUP:

LJMPSTARTUP1

RSEGC_C51STARTUP

STARTUP1:

IFIDATALEN<>0

MOVR0,#IDATALEN-1

CLRA

IDATALOOP:

MOV@R0,A

DJNZR0,IDATALOOP

ENDIF

IFXDATALEN<>0

MOVDPTR,#XDATASTART

MOVR7,#LOW(XDATALEN)

IF(LOW(XDATALEN))<>0

MOVR6,#(HIGH(XDATALEN))+1

ELSE

MOVR6,#HIGH(XDATALEN)

ENDIF

CLRA

XDATALOOP:

MOVX@DPTR,A

INCDPTR

DJNZR7,XDATALOOP

DJNZR6,XDATALOOP

ENDIF

IFPPAGEENABLE<>0

MOVPPAGE_SFR,#PPAGE

ENDIF

IFPDATALEN<>0

MOVR0,#LOW(PDATASTART)

MOVR7,#LOW(PDATALEN)

CLRA

PDATALOOP:

MOVX@R0,A

INCR0

DJNZR7,PDATALOOP

ENDIF

IFIBPSTACK<>0

EXTRNDATA(C_IBP)

MOVC_IBP,#LOWIBPSTACKTOP

ENDIF

IFXBPSTACK<>0

EXTRNDATA(C_XBP)

MOVC_XBP,#HIGHXBPSTACKTOP

MOVC_XBP+1,#LOWXBPSTACKTOP

ENDIF

IFPBPSTACK<>0

EXTRNDATA(C_PBP)

MOVC_PBP,#LOWPBPSTACKTOP

ENDIF

MOVSP,#STACK-1

;ThiscodeisrequiredifyouuseL51_BANK.A51withBankingMode4

;EXTRNCODE(B_SWITCH0)

;CALLB_SWITCH0;initbankmechanismtocodebank0

LJMPC_START

END

第二部分

/**********************************************************************************

*标题:

*************DA-AD试验********************

*

/******************************主程序*****************************************************/

#include

#include

#definePCF85910x90//PCF8591地址

//elseIO

sbitLS138A=P2^2;

sbitLS138B=P2^3;

sbitLS138C=P2^4;

sbitfirst=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_xiang=P1^1;//旋转方向控制位

sbitmai_chong=P1^2;//脉冲控制位

//此表为LED的字模,共阴数码管0-9-

unsignedcharcodeDisp_Tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

unsignedcharAD_CHANNEL;

unsignedlongxdataLedOut[8];

signedintD[32];

unsignedintad=0,ad0=0;

unsignedintms15=0;

unsignedchari=0,a=0,b=0,c=0,e=0;

unsignedcharxiang;

signedcharn=0;

unsignedintxx();

voidround();

voidsystem()

{

TMOD=0x01;

TH0=(65535-2000)/256;

TL0=(65535-2000)%256;

IE=0x8a;

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();//读取数据0

Ack_I2c

(1);//发送非就答位

Stop_I2c();//结束总

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1