摘要
倒立摆控制系统是一个复杂的、不稳定的、非线性系统。本设计在研究倒立摆运动规律的基础上,构建其运动轨迹的数学模型,使用MATLAB进行仿真分析,在对倒立摆模型认识以后,使用k60微控制器结合PID算法给出信号驱动直流减速电机,进而对倒立摆系统进行控制,在倒立的过程中使用编码器采集摆杆角度,对摆杆反馈的角度进行处理,针对角度,角速度的方向,电机运行方向进行处理,运用PD算法调节摆杆倒立,PI参数调节电机速度,通过双回路PD\PI控制方案实现了对旋转臂位置和摆杆偏角的同时闭环控制。
目 录
一、系统方案 1
1.1 主控芯片的论证与选择 1
1.2 摆杆的角度测量的论证与选择 1
1.3 电机的论证与选择 1
二、系统结构 2
2.1机械结构 2
2.2测控电路结构 2
三、理论分析与计算 3
3.1倒立摆的基本模型 3
3.2模型分析与参数测量 3
3.3基于状态反馈的倒立控制 4
四、电路与程序设计 5
4.1系统的硬件设计 5
4.2系统软件设计 7
五、测试方案与测试结果 10
5.1基本要求(1) 10
5.2基本要求(2) 10
5.3基本要求(3) 10
5.4发挥要求(1) 10
5.5发挥要求(2) 11
5.6发挥要求(3) 11
六.其他的拓展部分 12
七、参考文献 12
附录 13
一、系统方案 本系统主要有五大部分组成,即控制部分、电机部分、传感器部分、电源部分和人机交互部分。传感器采用两个光电式旋转编码器,分别用于测量摆杆角度、电机转速。结合传感器反馈信息运用PID算法将控制信号传输给电机驱动使电机运行,带动旋转臂转动,进而控制摆杆,形成双闭环控制网络。
1.1 主控芯片的论证与选择方案一:采用AT89S52单片机
优点:AT89S52是CMOS8位微控制器,具有8K 在系统可编程Flash 存储器。具有低功耗,价格便宜,控制简单等一系列优点。 缺点:片内资源少,没有集成的正交解码寄存器,需要外扩才能实现,而且难以实现快速和精准的反映控制。
方案二:采用飞思卡尔KinetisK60微控制器。 优点:是一款高性能的32位微控制器,片内资源丰富,内置PIT定时器、FTM定时器,有两路编码器AB相正交解码的功能,时钟频率50MHZ,具有高速的计运算能力。
缺点:频率的提高功耗也随之增大。
总结:由以上方案分析,为了可以高精度、高速度的进行系统控制,同时由于编码器使用过程中需要正交解码功能,AT89S52不满足以上要求,故本系统选择方案二,使用飞思卡尔Kinetis K60微控制器。
1.2 摆杆的角度测量的论证与选择 方案一:采用光电编码器。
优点:无累计误差,精度高、数字信号接口。
缺点:价格偏高。
方案二:采用倾角传感器。
优点:无累计误差。
缺点:被测物体有其他加速度则无法准确计算。
方案三: 采用角速度传感器。
优点:直接测出角速度,理论上不受移动等其他运动影响。
缺点:角度由积分产生,累计误差可能导致系统不稳定。
总结:由以上方案分析,为提高测量精度,同时考虑到传感器安装的难易程度,所以我们选择方案一测量摆杆角度。
1.3 电机的论证与选择方案一:采用空心杯直流减速电机。
优点:空心杯电动机属于直流、永磁、伺服微特电机。空心杯电动机具有杰出的节能特性、灵敏方便的控制特性和稳定的运行特性。
缺点:辐射产生电磁波干扰,减速箱存在机械虚位。
方案二:采用步进电机。
优点:步进电机是纯粹的数字控制电动机,它将电脉冲信号转变为角位移,步进电机属于开环控制,累计误差小,成本相对低廉。 缺点:步进电机角度分辨率低,且转动时伴随着强烈的振动,这对旋转臂及摆杆的稳定性是不利的。
方案三:采用伺服电机。
优点:伺服电机是一种补助马达间接变速装置。其用作执行元件,把所收到的电信号转换成电动机轴上的角位移或角速度输出,可使控制速度,位置精度非常准确。
缺点:减速箱存在机械虚位。
总结:由以上方案分析,考虑到系统的稳定性,性价比等因素,我们选择方案一,采用空心杯减速电机。该电机自带精密行星减速箱和光电式编码器,同时通过对减速箱的改造可以减少机械虚位的影响,完全可以满足题目相关要求。
二、 系统结构
2.1机械结构机械结构的稳定性直接影响系统的稳定性。故该倒立摆采用钢底座,稳固性能好,支架和摆杆采用铝合金打造,具有密度小、强度高、易加工等特点。机械结构图如下:
三、理论分析与计算3.1倒立摆的基本模型 旋转臂由转轴处的直流减速电机驱动, 可绕转轴在垂直于电机转轴的铅直平面内转动. 旋臂和摆杆之间由关节相连, 当旋臂转动时, 摆杆可绕关节在垂直于关节转轴的铅直平面内转动,根据一定的控制算法, 计算出控制规律, 并转化为电压信号提供给驱动电路, 以驱动直流减速电机的运动, 通过电机带动旋转臂的于关节转轴的铅直平面内转动,进而通过电机带动旋转臂的转动来控制摆杆的运动。
图3 倒立摆的模型结构
3.2模型分析与参数测量建立比较精确的数学模型是控制系统设计的基础. 如图3所示, 在非惯性系S2 中对摆杆有:
…………此处省略内容请下载51hei附件查看…………
可知系统是不稳定的, 且是完全能控和完全能观的. 因此可以设计一个基于状态反馈的控制器对系统进行极点配置 , 使得系统在原点附近保持稳定. 由于倒立摆装置中没有直接测量角速度的器件, 我们采用角度的差分进行近似,在角度测量上, 硬件和软件部分都采用了滤波手段. 经过极点配置设计, 得到态反馈矩阵为:
由以上可知倒立摆系统是一个不稳定但能控能观系统。
四、电路与程序设计4.1系统的硬件设计系统的硬件主要由四大部分组成,即电源部分、主控部分、电机驱动部分、人机交互部分。各部分电路设计和功能介绍如下:
4.1.1电源部分
该系统电源部分有2部分组成,分别由一块7.2V蓄电池和一块11.1V锂电池供电。其中一块锂电池经稳压后为8.5V后为电机驱动模块供电;另一块电池为系统提供2组电源,即5V和3.3V,其中5V用于编码器、语音模块等部分的供电。3.3V用于单片机、液晶显示等部分的供电;其中8.5V和5V电源部分采用采用LM2596开关电压调节器,其具有可靠的工作性能、较高的工作效率和较强的输出电流驱动能力,功耗小等特点,从而为系统稳定、可靠地工作提供有力的保障,3.3V电源采用2块LM1117系列线性稳压器并联,其具有稳定性好,负载响应快。输出纹波小,价格低廉的优点。
4.1.2电机驱动部分 电机驱动采用双BTS7970大功率H桥驱动,其为高强度电流的半桥电机驱动芯片。我们利用两片BTS7970B构成一个完整的全桥驱动,电流最大可达70A,并利用光耦与单片机隔离,有效保护单片机。可以很好实现电机的正转、反转、能耗制动。
4.1.3人机交互部分人机交互模块由TFT彩屏、键盘、语音模块组成,实时显示播报参数及数据的变化,也方便我们调节控制。
4.2系统软件设计4.2.1系统流程图
4.2.2 摆杆的倒立状态检测摆杆状态的检测,即摆杆角度的检测是本设计的重要点,角度大小检测的精准度直接影响到电机带动旋转臂的旋转,进而影响到摆杆的状态。摆杆自由下摆在最下方进行编码器脉冲输出零位校准;编码器为500线,摆杆运动一周,编码器脉冲输出计数为500,即当从最低点运动至最高点时,编码器输出脉冲计数为250,再次运动到最低点时编码器输出脉冲计数为500,由此判断摆杆当前角度。为了提高精度,通过将编码器A相和B相4倍频后,正交解码,测量步距变为原来的1/4,精度提高4倍。如此根据脉冲计数值可以判定摆杆摆动方向和摆动度数,进而反馈给单片机,执行相关操作。 程序框图如下:
…………此处省略内容请下载51hei附件查看…………
五 测试方案与测试结果5.1基本要求(1) 测试方案:摆杆从处于自然下垂状态(摆角0°)开始,驱动电机带动旋转臂作往复旋转使摆杆摆动,并尽快使摆角达到或超过-60°~+60°,测量角度并记录测试结果。
测试结果:
表1 摆杆摆动的角度及时间测量 测量次数
| 1
| 2
| 3
| 4
| 5
| 6
| 7
| 偏离角度/°
| 115
| 99
| 115
| 107
| 108
| 122
| 94
| 完成时间/s
| 0.7
| 0.5
| 0.7
| 0.6
| 0.5
| 0.8
| 0.5
| 结论:达到基本要求(1),摆杆可以快速达到或超过-60°~ +60°,达到题目要求。5.2基本要求(2)测试方案:摆杆从处于自然下垂状态(摆角0°)开始,驱动电机带动旋
转臂做往复旋转使摆杆摆动,看是否可以完成圆周运动。
测试结果:
表2摆杆摆动360度时间测量 测量次数
| 1
| 2
| 3
| 4
| 5
| 6
| 7
| 完成时间/s
| 1.1
| 1.3
| 1.3
| 1.0
| 1.1
| 1.2
| 1.1
|
测试结果及结论:目测摆杆开始起摆后迅速可以做圆周运动,并持续下去,达到基本要求(2)。
5.3基本要求(3)测试方案:当摆杆处于自然下垂状态下,外力拉起摆杆至接165°位置,外力撤除时,启动控制旋转臂,测量摆杆保持倒立状态时间,并且测量旋转臂的转动角度。
测试结果:
表3 摆杆保持倒立时旋转臂的转动角度
测试次数
| 1
| 2
| 3
| 4
| 5
| 6
| 7
| 8
| 角度/°
| 12
| 12
| 10
| 8
| 11
| 9
| 11
| 13
| 倒立时间/s
| 长期
| 长期
| 长期
| 长期
| 长期
| 长期
| 长期
| 长期
| 结论:完全达到基本要求(3),摆杆倒立后在很小的角度内转动,系统稳定。5.4发挥要求(1)测试方案:从摆杆处于自然下垂状态开始,控制旋转臂作往复旋转运动,尽快使摆杆摆起倒立,保持倒立状态,并测量摆起的时间。
测试结果:
表3 摆杆摆起到立起的时间
测试次数
| 1
| 2
| 3
| 4
| 5
| 6
| 7
| 8
| 起摆时间/s
| 1.7
| 1.8
| 1.7
| 1.8
| 1.7
| 1.9
| 1.8
| 1.7
| 倒立时间/s
| 长期
| 长期
| 长期
| 长期
| 长期
| 长期
| 长期
| 长期
| 结论:摆杆迅速摆起倒立,摆杆摆起后,可长时间倒立下去,并且旋转臂的转动的角度保持在90°内,达到发挥要求(1)。
5.5发挥要求(2)测试方案:在摆杆保持倒立状态下,我们施加干扰,即以15cm长细绳栓一只5g砝码,在摆杆上方将砝码拉起15°~45°,释放后用砝码沿摆杆的切线方向撞击摆杆上端1~2cm处,观察摆杆能否继续保持倒立状态。
测试结果:
表4砝码拉起15°时的摆杆的摆动角度
测试次数
| 1
| 2
| 3
| 4
| 5
| 6
| 7
| 8
| 角度/°
| 20
| 22
| 25
| 22
| 20
| 19
| 22
| 24
|
表5 砝码拉起30°时的摆杆的摆动角度
测试次数
| 1
| 2
| 3
| 4
| 5
| 6
| 7
| 8
| 角度/°
| 28
| 31
| 30
| 28
| 30
| 32
| 31
| 32
|
表6 砝码拉起45°时的摆杆的摆动角度
测试次数
| 1
| 2
| 3
| 4
| 5
| 6
| 7
| 8
| 角度/°
| 47
| 48
| 42
| 44
| 39
| 45
| 42
| 50
| 结论:摆杆在有干扰情况下仍能保持直立,在干扰时旋转臂会有不同程度的旋转,同时随着砝码拉起角度的增大,摆杆转动的角度增大,达到发挥要求(2)。
5.6发挥要求(3)测试方案:在摆杆保持倒立状态的前提下,旋转臂做圆周运动,看是否能够单方向转过的角度达到或超过360°。
测试结果:
表7 摆杆倒立转一周的时间的测量
测试次数
| 1
| 2
| 3
| 4
| 5
| 6
| 7
| 8
| 时间/s
| 2.1
| 2.2
| 1.8
| 1.9
| 2.1
| 2.2
| 2.0
| 1.9
| 结论:达到发挥要求(3)要求。
六.其他的拓展部分1)该设计在满足题目要求的情况下,还对摆杆的稳定度实现了更高的控制和优化,使摆杆可以很快的达到直立状态,达到更好的指标。
2)我们采用自制的控制板,添加了了语音模块,液晶显示,有良好的人机界面,同时方便测试时观察。
3)为此我们增添了两个测试:一为高强度抗干扰测试,即使用50g砝码,在摆杆上方将砝码拉起15°~45°,释放后用砝码沿摆杆的切线方向撞击摆杆上端1~2cm处,观察摆杆能否继续保持倒立状态。二为快速360°旋转测试,即尽可能快使摆杆倒立旋转N周。
测试结果:高强度干扰下,摆杆仍能保持直立。力度增加后,摆杆可能会失去倒立平衡,但会迅速恢复。倒立状态下,可以快速进行旋转。
结论:倒立摆整体性能相当稳定。
七、参考文献【1】从爽,张东军,单级倒立摆三种控制方法对比研究【J】。系统工程与电子技术,2001,23(1):47-49。
【2】王辉,一类非线性系统的模糊自适应控制器设计【J】。湖南大学学报(自然科学版),2004,31(6)41-45。
【3】冯艳宾,崔红梅,李凤,模糊控制理论及其倒立摆中的应用【J】。数学通报,2003,6:1-3。
【4】黄智伟,全国大学生电子设计竞赛训练教程【M】,北京:电子工业出版社,2010。
单片机源程序如下:
- #include "include.h"//电子设计竞赛倒立摆
- s8 iii=1;
- u8 che=1,zhuan=0;
- extern KEY_e KEYX ;
- extern s16 real_L,real_R;
- extern float P=0,D=0,P2,D2,accL,accR;
- extern float I_1,I_2;
- extern u16 bai_flag,textdata1;
- extern s16 angle_bai,speed_ji,speed_bai,bai_speed,angle_ji;
- //电机控制PID
- void motor_control(s16 pwmL,s16 pwmR)
- {
- erR1 = pwmR-speed_ji;
- accR+= I_2*erR1;
- real_R=(s16)(P2*erR1+real_R+D2*(erR1-erR2)+accR);//
- }
- //倒立PID
- void daoli_PID(s16 eagle)
- {
- float P_1,D_1;
- if(eagle<1000)
- erL1=eagle-999;
- else
- erL1=eagle-1000;
- accL+= I_1*erL1;
- if(accL>5000)
- accL=5000;
- if(accL<-5000)
- accL=-5000;
- real_L =(s16)( P_1*erL1 +D_1*speed_bai +real_L+accL);
- }
- 定时器中断2
- void PIT2_IRQHandler(void)
- {
- angle_bai=FTM2_CNT%2000;//摆杆角度
- if(iii<6)if(angle_bai>850&&angle_bai<1150)bai_flag=1;
-
- if(iii==6)
- {
- if(angle_bai>0&&angle_bai<750)
- bai_flag=1;
- else
- if(angle_bai>1250&&angle_bai<1999)
- bai_flag=2;
- else
- bai_flag=0;
- }
- PIT_Flag_Clear(PIT2); //清中断标志位
- }
- 定时器中断3
- void PIT3_IRQHandler(void)
- {
- count_bai++;
- if(count_bai>=5)
- count_bai=0;
- textdata1++;
- if(textdata1>=59999)
- textdata1=0;
- speed_ji=FTM1_CNT;//电机速度
- angle_ji+=speed_ji;
- FTM1_CNT=0;
- spd2=FTM2_CNT;
- speed_bai=spd2-spd1;//摆杆速度
- spd1=spd2;
- if(angle_bai>800&&angle_bai<1300)
- {
- daoli_PID(angle_bai);
- motor_control(0,bai_speed);
- pwm_control(real_L-real_R,0);
-
- }
- PIT_Flag_Clear(PIT3); //清中断标志位
- }
- //主函数
- void main()
- {
- LCD_init();
- KEY_init();
- LCD_display_full(BLUE);
- motor_init();
- boma_INIT(6);
- iii=1;
- while(1)
- {
- key_check(); //检测按键状态
- if(KEYX==KEY_UP)iii++; //准备开始
- if(KEYX==KEY_DW)iii--; //准备开始
- if(iii==0)iii=7;
- if(iii==8)iii=1;
- for(u8 j=1;j<8;j++)
- {
- if(j==iii)
- {
- LCD_P16x16Str(2,j-1," ",BLACK,BLUE);
- LCD_P16x16Str(7,j-1,"←",BLACK,BLUE);
- }
- else
- {
- LCD_P16x16Str(7,j-1," ",BLACK,BLUE);
- LCD_P16x16Str(2,j-1," ",BLACK,BLUE);
- }
- } //GUI(iii);//界面
- if(KEYX==KEY_START) //确认进入当前选项
- {
- key_check();
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
完整论文下载(word格式 可编辑):
设计报告.doc
(551 KB, 下载次数: 197)
|