全国大学生电子设计大赛 简易倒立平衡摆 论文Word文件下载.docx
《全国大学生电子设计大赛 简易倒立平衡摆 论文Word文件下载.docx》由会员分享,可在线阅读,更多相关《全国大学生电子设计大赛 简易倒立平衡摆 论文Word文件下载.docx(27页珍藏版)》请在冰豆网上搜索。
4.2.6发挥部分要求三测试11
5结语11
参考文献:
11
附录12
1系统方案
1.1设计任务
设计并制作一套简易旋转倒立摆及其控制装置。
旋转倒立摆的结构如图1所示。
电动机A固定在支架B上,通过转轴F驱动旋转臂C旋转。
摆杆E通过转轴D固定在旋转臂C的一段,当旋转臂C在电动机A驱动下作往复旋转运动时,带动摆杆E在垂直于旋转臂C的平面作自由旋转。
图1旋转倒立摆结构示意图
1.2设计要求
1.2.1基本要求
(1)摆杆从出于自然下垂状态(摆角0°
)开始,驱动电机带动旋转臂作往复旋转使摆杆摆动,并尽快使摆角达到或超过-60°
~+60°
;
(2)摆杆从出于自然下垂状态开始,尽快增大摆杆的摆动幅度,直至完成圆周运动;
(3)摆杆从出于自然下垂状态下,外力拉起摆杆至接近165°
位置,外力撤除同时,启动控制旋臂摆使摆杆保持倒立状态时间不少于5s;
期间旋转臂的转动角度不大于90°
。
1.2.2发挥部分
(1)摆杆从出于自然下垂状态开始,控制旋转臂作往复旋转运动,尽快使摆杆倒立,保持倒立状态时间不少于10s;
(2)在摆杆保持倒立状态下,施加干扰后摆杆能继续保持倒立或2s内恢复倒立状态;
(3)在摆杆保持倒立状态的前提下,旋转臂作圆周运动,并尽快使单方向转过的角度达到或超过360度;
(4)其他。
1.3实现方法
本题要求设计并制作一个简易旋转倒立摆及控制系统,在电动机带动旋转臂转动的过程中尽快使摆杆摆动角度超过60度、摆动一周、实现倒立等要求。
我们想利用步进电机作为驱动带动旋转臂旋转,角度传感器测量摆杆摆过的角度。
该系统主要由以下三大部分组成,①摆架框架:
包括支撑底座、旋转臂、摆杆等组成;
②检测系统:
通过编码器检测出摆杆摆动一定角度所对应的脉冲数,传送给单片机进行数据处理;
③控制驱动系统:
控制器通过对传感器输出信号的分析发出控制信号,经电机驱动器控制电机的转动,带动摆杆转动,实现各功能。
1.4方案论证
1.4.1控制器模块
方案一:
采用ATMEL公司的AT89C51。
51单片机价格便宜,应用广泛,简单,实用,资料多;
但是51单片机运行速度很慢,I/0口的驱动能力弱,功耗比较高,抗干扰能力也不是很强。
方案二:
采用TI公司的ARMCortex-M3内核处理器芯片LM3S1439作为中央处理器,处理器本身带有32KB的bit-bandedSRAM和96KB的Flash存储器,对于一般的控制应用,不需外扩数据/程序存储器,对此RAM单片机的了解太少,短期内不能熟悉进行编程,给制作带来困难。
方案三:
采用freescale公司的MC9S12XS单片机,该单片机性能远远优于51单片机,广泛应用于工业和服务业,而且由于前段时间参加了飞思卡尔智能车比赛,所以对该单片机的编程比较熟悉。
所以根据本题的要求并结合实际我们最终选择了第三种方案。
1.4.2电机模块
采用直流减速电机控制旋转杆的运动,直流减速电机力矩大,转动速度快,但其制动能力差,对摆杆倒立时的微控制器能力差。
采用42BYJ250—405V驱动的2相4线制的步进电机。
它是减速步进电机,体积小,减速比为1:
8,步进角为1.8度。
它的主要特性有:
步进电机具有瞬间启动和急速停止的优越特性,能够实现精微控制。
改变脉冲的顺序,可以方便的改变转动的方向。
并且,使用一个和该减速电机配套的步进电机驱动器,型号是ZD-6209-V2。
该驱动器有细分和信号衰减选项,可以实现对步进电机的更加精确的控制。
经过比较,步进电机更适合该系统的控制,特别是摆杆倒立的精微控制,所以我们选择了方案二。
1.4.3角度检测模块
角度检测模块也是系统的重要组成部分,我们需要利用角度传感器来测量
摆杆摆过的角度,该数据要传送给MC9S12XS控制器,经计算确定步进电机的下一个状态,因此要求角度传感器精度高,频率快。
采用E6A2—CW3C编码器,该编码器的转轴可随摆杆转动,并且输出脉冲,转轴每转一圈编码器输出500个脉冲,由此可实时测得摆杆转过的角度。
采用角速度传感器ENC03,该传感器轻盈灵便,其输出由X、Y、Z输出,角度和加速度输出五个输出端口,通过多种端口都可以输出角度对应的采样值,但该采样值在一定范围内是跳动不定的,会对系统产生影响,不利于摆杆的稳定。
采用WDD35系列角位移传感器,其功能在于把角度机械位移量转换成电信号。
为了达到这一效果,通常将可变电阻基体定置在传感器的固定部位,通过电刷在电阻基体上的位移来测量不同的阻值。
传感器滑轨连接稳态直流电压,允许流过微安培的小电流,电刷和输出端之间的电压,与电刷在电阻基体上滑过的角度成线性关系。
将传感器用作分压器可最大限度降低对电阻基体总阻值精确性的要求,因为由温度变化引起的阻值变化不会影响到测量结果。
在满足设计要求的前提下,考虑到稳定性等因素,我们选择了方案三。
1.5系统设计
根据上述方案论证,我们最终确定了以MC9S12XS128单片机作为中央处理器,采用型号为42BYJ250—40的步进电机配合ZD-6209-V2步进电机驱动控制旋转杆,用WDD35高精度电位器来采集摆杆的转动角度,反馈回MCU。
每个模块均有合适电源进行供电。
2理论分析与计算
2.1简易倒立摆的数学模型
在忽略了空气阻力、各种摩擦之后,将简易倒立摆系统抽象成匀质摆杆和水平杆组成的刚体系统。
建模思路:
为求出旋臂所需偏转角度β,进而控制步进电机转动,可以将该旋转倒立摆分为两部分进行分析。
第一部分,如图3左侧图,摆杆所在平面中,可将旋臂视为质点。
可以看出,此时旋臂对摆杆的支点无法保持摆杆平衡。
于是,如图3右侧图,可以通过调整支点位置,让支点到达摆杆顶点在旋臂所在平面的投影,来使得摆杆平衡。
左下图中可以求出在对应时刻支点与摆杆顶点的水平距离X=L*sinθ。
右下图为旋臂所在平面,可求出β=-arctan(X/R)。
根据计算结果提供PID算法所需要的β和ERROR,根据经验调试出合适的P,I,D参数,并对电机进行合理的控制。
简易倒立摆的结构如图所示:
图3简易旋转倒立摆模型示意图
表1简易倒立摆的物理参数
旋臂的质量
摆杆的质量
旋臂杆的长度
72g
30g
35.0cm
水平杆绕端点的转动惯量
摆杆绕质心的转动惯量
摆杆质心到转轴的距离
0.00000735
0.000282242
16.8cm
2.2系统框图
按照题目要求,将摆杆保持倒立状态(-165°
--165°
)维持5秒以上即可完成题目要求。
图4系统结构框图
系统框图如图4,该系统工作原理为:
首先,单片机从电位器上读取摆杆的角度,之后根据具体要求和角度值计算,得到控制需求,并按需求将控制信号发送给步进电机,由步进电机带动旋臂旋转,进而控制摆杆位置。
3电路与程序设计
3.1硬件及单元电路
硬件部分主要由MCU小系统板及电机驱动组成。
脉冲
方向
脱机
AD2P1
VCCP3
MC9S12XS128
GNDp4
紫
绿
蓝
电位器电机驱动器
图5主控板与电位器、电机驱动器接口图
黄
橙
绿
灰
图6电机驱动与电机接线图
图7简易旋转倒立摆实物图
图8小芯片板及其附属模块
3.2软件设计与工作流程图
3.2.1PID算法
在该设计中,算法的设计是很关键的一步,算法精确度选取的好坏,直接影响到系统运行的准确性。
在比较自适应算法和PID算法后,采用PID算法。
PID控制相应的控制算法式为:
式中
——控制端输出;
——偏差为零时
的初值;
——调节器输入函数,即给定量与输出量的偏差;
——比例增益;
——积分时间常数;
——微分时间常数;
将上式展开,函数可以分为比例控制,积分控制和微分控制三部分。
核心控制其计算公式一般为离散分量,需要对差分方程作出近似处理后改为:
即
式中
——采样周期;
——采样序号;
和
分别为第k-1和第k次控制周期的偏差;
综合以上几个公式,可以得出差分公式为:
3.2.2软件设计
系统软件实现的功能如下:
(1)选择工作模式;
(2)读取角度传感器采集的数据;
(3)根据计算所得ERROR,使用PID算法计算出电机速度,用于控制电机;
(4)控制摆杆平衡。
整个系统为闭环系统。
3.2.3工作流程图
系统工作流程如图6所示。
单片机初始化以后,便使用定时器中断检测按键,来判断工作模式。
按键后自动进入某个工作模式,并根据模式不同要求来开启模块并实现功能。
图6软件流程图
4结果分析
4.1测试方案及基准数据
4.1.1测试仪器
稳压电源,万用表,量角器(精度1°
),秒表,直尺
4.1.2电位器测试数据
表2电位器测试数据
角度
45
90
135
180
-45
-90
-135
A/D
(10位精度)
基准
125
255
382
512
897
765
640
4.1.3摆杆平衡位置
以摆杆处于自然下垂状态为基准,测得摆杆平衡位置为161.72°
4.2基本及发挥要求测试结果
4.2.1基本要求一测试
测试方案:
从摆杆处于自然下垂状态开始,驱动电机带动旋转臂往复旋转,摆杆随旋转臂摆动,察看每次旋转臂转动与摆动之间的关系。
通过摆杆后的轻质量角器记录摆杆摆动的大概角度,填于表3中。
表3基本要求1测试结果
序号
1
2
3
4
5
摆杆角度/°
92
95
110
98
时间/S
1.5
1.6
1.7
4.2.2基本要求二测试
从摆杆处于自然下垂状态开始,驱动电机带动旋转臂往复旋转,摆杆随旋转臂摆动,记录摆杆旋转360°
所需最短时间,并填于表4中。
表4基本要求2测试结果
所需时间/S
1.8
4.2.3基本要求三测试
将摆杆打到180°
附近,用手辅助其稳定,然后将其释放,让摆杆保持自平衡,记录平衡时间,并填于表5中。
表5基本要求3测试结果
平衡时间/S
8
4.2
6.2
15
4.3
4.2.4发挥部分要求一测试
从摆杆处于自然下垂状态开始,驱动电机带动旋转臂往复旋转,摆杆随旋转臂摆动,记录从启动到摆杆自平衡所需时间和摆杆维持平衡时间,并填于表6中。
表6发挥要求1测试结果
启动到摆杆自平衡时间(秒S)
未完成
摆杆维持平衡时间(秒S)
---
4.2.5发挥部分要求二测试
在基本要求3完成的基础上,以15cm长细绳栓一只5克砝码,在摆杆上方将砝码拉起15°
~45°
,释放后用砝码沿摆杆摆动的切线方向撞击摆杆上端1-2cm处,记录拉起角度及摆杆保持平衡情况,并填于表7中。
表7发挥要求2测试结果
拉起角度/°
30
45
摆杆平衡情况
平衡
4.2.6发挥部分要求三测试
测试方法:
在基本要求3完成的基础上,旋转臂作圆周运动,并记录旋臂转过360°
的最短时间,并填于表8中。
表8发挥要求3测试结果
最短时间(S)
1.3
1.2
5结语
经过紧张的四天三夜的奋力拼搏,我们小组成员通力协作,团结互助,终于完成了实验项目。
通过测试,本系统达到了设计的所有要求。
在本次设计的过程中,我们遇到许多困难。
在调试程序的过程中,尤其是基本要求三,要求摆杆能够倒立五秒以上的程序,我们通过小组讨论及多次讨论、探索,尝试了各种方法,最终实现了要求三。
但是由于时间的不足,硬件、软件的很多方面还要加以优化。
本次电子设计大赛,让我们意识到我们所掌握的知识是那么的少,并激起了我们对新知识、新事物的学习和探索的勇气;
让我们对电路设计、软件调试方面有了更加深刻的认识,加深了对测控技术的理解,同时也深刻地体会到共同协作和团队精神的重要性,提高了我们解决问题的能力。
设计中还有欠缺的地方,今后的学习工作中会加以注意。
通过这次设计,我们明白团队合作的力量,同时要注重创新,每一个小小的想法都可能有你意想不到的结果。
[1]牛东.多功能垂直式双支点旋转型倒立摆控制研究[D].长春工业大学,2007.
[2]张伟,李升娟,于飞,刘喜梅.基于PCI9052的倒立摆控制系统的接口设计[J].青岛科技大学学报(自然科学版)2005,26(6)
[3]刘靖,陈在平,李其林.基于PC的倒立摆控制系统设计与实现[J].天津理工大学学报.2006,22
(2)
[4]姬北辰.多级直线倒立摆若干问题的研究[D].中国科学技术大学,2005.
[5]王敏,苏晓鹭,王淼.旋转式倒立摆控制策略[D].大连海事大学学报,2008.
附录
中断程序如下:
//定时中断(PeriodInterruptTimer)
#pragmaCODE_SEG__NEAR_SEGNON_BANKED
interruptVectorNumber_Vpit0voidmode(void)//20MS
{
PITTF_PTF0=1;
Command();
if(tc!
=0&
&
(tc!
=mod)&
=mod-10)){//遥控扫描&
按键扫描
state=0;
mod=tc;
}
if(mod&
state<
=151)state++;
if(state==1){
DisableAllInterrupts();
ad+=ADCapture();
PORTB=0xfe;
elseif(state==50){
PORTB=0xfd;
elseif(state==100){
PORTB=0xfb;
elseif(state==150){
adstandard=ad/4;
PORTB=0xf7;
switch(mod){
case1:
//360...结束只用PWM
PWMPER01=STEPTIME;
PWMPER23=10;
PWMDTY23=10;
PWME_PWME1=1;
//使能通道01//PWM模块下一时钟生效
PWME_PWME3=1;
PWME_PWME4=1;
PITCE_PCE1=1;
speedmark=1;
mod+=10;
break;
case4:
case2:
//追到平衡PWM1IN,3DIR,4EN;
光电编码器;
定时器
//TIE_C0I=1;
case3:
PORTB=0xff;
speedmark=4;
if(speed>
0)PWMDTY23=10;
elsePWMDTY23=0;
PWMPER01=STEPTIME;
PWMDTY01=1;
}
#pragmaCODE_SEGDEFAULT
interruptVectorNumber_Vpit1voidfunction(void){//10MS
PITTF_PTF1=1;
case11:
/*if(abs(pulsepast1)%500-250<
=abs(pulse)%500-250&
abs(pulsepast1)%500-250<
=abs(pulsepast2)%500-250){//关EN,关方向,调方向,开方向,开EN
if(speedstep>
30)speedstep-=3;
PWMPOL_PPOL4=0;
PWMPOL_PPOL3=~PWMPOL_PPOL3;
STEPTIME=600;
PWMPOL_PPOL4=1;
pulsepast2=pulsepast1;
pulsepast1=pulse;
*/
=2400)speedmark=2;
elseif(speed<
=-2400)speedmark=1;
SetSpeed();
case12:
if(state<
=950){
state++;
//计时4S
if(state==152)PORTB=0xef;
elseif(state==350)PORTB=0xdf;
elseif(state==550)PORTB=0xbf;
elseif(state==750)PORTB=0x7f;
elseif(state==950){
//angle=pulse>
0?
(pulse%500)*360/500.0:
((pulse%500)+500)*360/500.0;
ad=ADCapture();
//128
angle=ad<
adstandard?
(ad+1023-adstandard)*360.0/1023:
(ad-adstandard)*360.0/1023;
e_old=e_;
e_=atan(0.8*sin((angle-ANGLEBALANCE)*PI/180))*180/PI;
//deltaangle=atan(0.8*sin((angle-ANGLEBALANCE)*PI/180))*180/PI;
//avgspeed=deltaangle*500*100/360;
//speedmark=3;
//SetSpeed();
}else{
//if(abs(pulse%500)>
=220&
abs(pulse%500)<
=300){
if(ad>
(390+adstandard)&
ad<
(530+adstandard)){
//speedpast=speed;
(pulse%500)*360/500.0:
PID();
speed=targetspeed;
PWMDTY4=10;
//}
/*else{targetspeed=1;
if(speedmark==3)speedmark=1;
=2150){
speedmark=2;
PORTB_PB2=~PORTB_PB2;
}elseif(speed<
=-2150){
PORTB_PB3=~PORTB_PB3;
}*/
speed=0;
PWMDTY4=0;
e_I=0;
e_D=0;
case13:
/*if(state<
/