滚球控制系统设计报告Word格式.docx
《滚球控制系统设计报告Word格式.docx》由会员分享,可在线阅读,更多相关《滚球控制系统设计报告Word格式.docx(11页珍藏版)》请在冰豆网上搜索。
综合以上两个方案,本系统选择方案二。
3、滚球运动控制的论证与选择
采用推杆直线电机。
电推杆是通过将电动机的旋转运动转变为推杆往复直线运动的电力驱动装置。
利用多个电推杆可推动平板进行上下运动,但电推杆响应速度慢,而且需要很大的驱动电流,消耗功率大,还要加装继电器保护,比较繁琐。
采用S010舵机。
该舵机为伺服电机,通过舵柄转换成旋转运动来打到不同的角度,再加上装支撑杆就可以控制平板的上下运动。
舵机三条控制线,分别为:
电源、地及信号线,不需要驱动模块,只要单片机输出信号PWM就可以控制舵机打角。
综合考虑采用方案二。
4、显示器的论证与选择
采用OLED显示器。
该显示屏可显示汉字,不需用到背光板,具有轻薄短小、低耗电量,但为单色显示,界面效果受限。
选用TFTLCD显示器。
TFTLCD显示屏分辨率高,真彩显示,可显示的界面丰富。
方便绘图和编程控制,更有利于人机界面的操作控制,适用于较为功能性强的的控制系统。
综合以上两种方案,选择方案二。
二、系统理论分析与计算
1、小球的精准定位分析
通过OV7670摄像头采集图像进行二值化处理,用两个嵌套for循环可以计算得出小球在x轴和y轴上被扫描到最边上的两个值x-min、x-max和y-min、y-max,然后分别将x轴和y轴的最大最小值求和,再除以2,就可以得出小球的坐标x和y值。
2、执行机构装置的分析
采用4个舵机作为执行机构,对称分布在平板四周,通过4个舵机不同的PWM输出来控制平板的运动从而控制小球的滚动,但4个舵机控制存在很大的不确定性,算法较为复杂。
采用2个舵机和一根带万向节的支撑杆等边三角形分布,构成执行机构。
采用二维平面X,Y方向来控制平板的运动,另外一根带万向节的支撑杆起到很好的连动作用,机械上更加简单,易于PID算法控制。
综上以上方案,选择方案二。
3、控制PID的计算
在系统控制中,按偏差的比例(P)、积分(I)和微分(D)进行控制的PID控制。
以下是PID的公式:
u(t)=
控制点目前包含三种比较简单的PID控制算法,分别是:
增量式算法,位置式算法,微分先行。
鉴于本系统通过小球坐标与目标位置坐标的偏差,只调节比例P、微分D的PD的增量式算法,即利用目的坐标与偏差的PD调节,控制滚球闭环控制系统,达到稳态无静差。
三、电路与程序设计
1、电路的设计
采用STM32ZET6最小系统板,外接摄像头模块、显示模块、按键模块、电源模块及舵机执行机构。
外设接口模块电路见图2。
图2外设接口电路
(2)电源模块
单片机采用3.3V供电,显示器5V供电以及舵机6V供电。
电源电路见附录1。
2、程序的设计
(1)程序功能描述与设计思路
1、程序功能描述
根据题目要求软件部分主要实现键盘的设置和显示。
1)键盘实现功能:
采用3乘3的矩阵键盘,从左到右,从上到下依次排序,按键1至7依次控制开启和关闭任务1-7的要求,按键9为PID调节模式控制按钮。
PID调节模式中按键4和7为调节平板内部区域的KP1值大小,按键5和8为调节平板内部区域的KD1值大小,按键5和8为调节平板边缘区域的KP2值大小;
2)显示部分:
显示小球的在平板上坐标,任务需要到达的坐标,实时坐标值与目标坐标值的差值,平板上的9个区域,小球的模拟图像,两个舵机的输出值,任务序号,任务计时时间,小球在区域停留的时间。
2、程序设计思路
进入系统,先选择进入校准模式,按键调节舵机的输出值,以达到平板的平衡,并保存为平衡值;
通过OV7670摄像头采集平板的图像二值化,并把二值化图像显示在LCD屏上以找到区域1、5、9并保存重新定义区域位置来减少调节平板和摄像头因碰撞或搬运的而产生的误差。
通过二值化寻到小球坐标,与目标坐标的差值,通过PD算法,调节舵机的输出值来调节平板的上下运动,让小球达到任务所需要的目标坐标。
(2)程序流程图
1、主程序流程图
四、测试方案与测试结果
1、测试方案
(1)硬件测试
检测焊接的单片机外接设备能否正常工作,摄像头采集显示到显示屏是否稳定并判别平板和小球;
检测电源提供的电压、电流供模块使用是否达到稳压值;
平板及舵机装置静置是否平衡;
检测按键能否实现不同任务。
(3)硬件软件联调
通过按键和TFTLCD显示器达到人机交互,测试滚球运动与实际偏差可以按按键选择调节KP1、KD1系数,控制舵机PWM输出,调试滚球控制系统。
2、测试条件与仪器
测试条件:
检查多次,仿真电路和硬件电路必须与系统原理图完全相同,并且检查无误,硬件电路保证无虚焊。
测试仪器:
万用表、水平仪、秒表。
3、测试结果及分析
(1)测试结果(数据)
滚球控制系统工作,将小球置于平板区域1上,记录平板开始运动使小球达到中心区域平衡的时间,测定其最佳的PD参数。
KPKD
6
7
8
9
1.3
6s
7s
10s
1.6
4s
5s
1.9
8s
9s
任务1:
稳定小球在区域2,停留不少于5s。
任务2:
控制小球由区域1进入区域5,在区域5停留不少于2s。
测试次数
第一次测试
第二次测试
第三次测试
第四次测试
时间(s)
4
5
任务3:
控制小球由区域1进入区域4,在区域4停留不少于2s,再进入区域5停留不少于2s。
达到区域4时间
停于区域5时间
10
12
任务4:
控制小球由区域1进入区域9,在区域9停留不少于2s。
20
19
15
14
(2)测试分析与结论
根据上述测试数据,通过调节PD参数,控制平板的倾斜程度,使小球进入区域和冲过区域的不同状态具有良好的跟随性、准确性、快速性,由此可以得出以下结论:
1、单独增大KP,KD不变,平板倾斜度更大,小球滚动趋势大,当小球距离目的坐标近时,平板也会有大的倾角。
2、微分KD起到微调和超调的作用,当小球靠近区域圆时,有刹车防止小球冲过区域的作用。
结合适当的比例KP参数,微调微分KD,系统可以有较好的跟随性和稳定性。
3、通过实验证明,当小球在规定的9个圆形区域时,设置比例参数KP为1.6,微分参数KD为6,小球达到目标区域时间短;
当小球在圆形区域外时,KP取值为5,使平板有大的倾角,足够将小球拉回来。
4、采用动态P,设计小球从1到9区域的路线使其有较好的缓冲,克服因P值太大给小球的惯性冲出平板。
综上所述,本设计达到设计要求。
五、参考文献
[1]
谭浩强.C语言程序设计[M].北京:
清华大学出版社,2012.
[2]张兴.电力电子技术[M].科学出版社,2010.
[3]孙林军.基于STM32控制液晶的接口实现[J].电视技术,2013.
[4]韩国栋.AltiumDesignerWinter09电路设计入门与提高[M].化学工业出版社,2010.
附录1:
电路原理图
附录1系统电路原理图
附录2:
源程序
#include"
stm32f10x_it.h"
led.h"
delay.h"
key.h"
sys.h"
lcd.h"
usart.h"
timer.h"
dj_pwm.h"
ov7670.h"
exti.h"
#include<
stdio.h>
externu8ov_sta;
externu8ov_frame;
u8key;
//按键标志位
inttest=0;
//测试标志位
u16PWM_X=160,PWM_Y=150;
//A1,A2脚的pwm输出
u16PWM_X_init=160,PWM_Y_init=150;
//A1,A2初始值
u16PWM_X_Min=125,PWM_Y_Min=115;
//PWM输出限幅外区域
u16PWM_X_Max=195,PWM_Y_Max=185;
u16PWM_X_Min2=135,PWM_Y_Min2=125;
//PWM输出限幅内区域
u16PWM_X_Max2=185,PWM_Y_Max2=175;
u8PWM_Value=1;
//按键可改变PWM数值
u8Task_flag=0;
//任务标志
u8Task_flag2=0;
//任务标志2
u16Task_time=0;
//任务时间
u16Stop_time=0;
//区域停留时间
u8time_Task_flag=0;
u8time_Stop_flag=0;
floatKp1=1.6,Kd1=6;
//1P和D在圆内
floatKp2=3;
//2在圆外
u16GOAL_X=120,GOAL_Y=80;
//目标坐标
floatErr_X,Err_Y=0;
//坐标差值
floatErr_X_LAST,Err_Y_LAST=0;
u8ball_r=5,QY_r=6,WC_value=1;
//小球半径,允许误差*0.25cm
u16X,Y=0;
//小球的质心位置
u16X_MAX=0,X_MIN=240;
//小球的坐标
u16Y_MAX=40,Y_MIN=280;
u16X_MAX_LSAT,X_MIN_LSAT,
Y_MAX_LSAT,Y_MIN_LSAT=0;
//上一次小球的坐标位置
u16X_MIN_RANGE=0,X_MAX_RANGE=240;
//扫描判断区域
u16Y_MIN_RANGE=40,Y_MAX_RANGE=280;
u8QY_number=0;
//所在的区域
u16QY_X1=40,QY_X2=120,QY_X3=200;
//区域坐标行X40120200
u16QY_Y1=80,QY_Y2=160,QY_Y3=240;
//区域坐标列Y80160240
voidKEY_RUN(void);
voidcamera_refresh(void);
//更新摄像头
voidPWM_Control(void);
//更新PWM输出
voidLCD_Control(void);
//更新LCD显示
voidlocation(void);
//更新位置判别
voidTest(void);
//校准测试
voidTest_Blance(void);
///校准测试1平衡
voidTest_OV1(void);
//校准测试2摄像头1
voidTest_OV5(void);
//校准测试3摄像头5
voidTest_OV9(void);
//校准测试4摄像头9
voidTask(void);
//任务函数
voidDone_Task(void);
//更新任务进度
voidFand_Goal(void);
//寻小球坐标函数
intmain(void)
{
delay_init();
//延时函数
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
uart_init(115200);
LED_Init();
KEY_Init();
LCD_Init();
LCD_Clear(WHITE);
POINT_COLOR=BLACK;
//设置字体黑色
PWM_X=PWM_X_init;
//赋值PWM输出
PWM_Y=PWM_Y_init;
DJ1_PWM_INIT(499,719,PWM_X,PWM_Y);
//舵机频率200HZ50-25060-240中值160160TIM2P2->
A1TIM2P3->
A2
LCD_ShowString(50,150,150,24,24,(unsignedchar*)"
Waiting..."
);
while(OV7670_Init());
//初始化¯
OV7670
TIM6_Int_Init(5000,7199);
//10Khz计数频率,1秒中断
EXTI8_Init();
//使能定时器捕获
OV7670_Window_Set(10,170,240,320);
//设置窗口
OV7670_CS=0;
LCD_Clear(BLACK);
Test();
//校准测试
test=2;
//测试关闭,关闭摄像头显示更新
while
(1)
KEY_RUN();
//按键扫描
Fand_Goal();
//寻小球坐标函数
Task();
//任务函数(选定目标,PID调节)
location();
//更新位置判断
Done_Task();
//更新任务进度
LCD_Control();
//更新LCD显示
}
}