摘要:针对本题目的各个要求,本系统采用软硬件结合方法设计滚球控制系统。由STM32单片机控制模块、摄像头模块、显示屛模块、人机交互系统以及板球机械结构组成的闭环控制系统。摄像头模块采集图像信息,单片机处理图像数据后通过PID精确算法调节步进电机以控制木板从而控制小球的滚动。本系统实现了小球在仅受步进电机为动力控制下平衡、静止、找点、画线、自动追踪、记录轨迹等功能,并能准确到达目标区域,具有良好的鲁棒性。另外,本系统具有人机交互界面,各参数及测试模式可由按键输入并通过显示屏显示,智能性好,反应速度快。
关键词:PID算法、STM32单片机人机交互、摄像头、步进电机
Abstract: according to the various requirements of the subject,the system adopts hardware and software combination method to design the ball control system for the requirements of this project. The closed-loop control system consists STM32 SCM control module, camera module, display control module, human-computer interaction system and cricket machinery structure. The camera module collects the image information, and the microcontroller handles the image data and then adjusts the step motor with the PID precision algorithm to control the board so as to control the rolling of the ball. This system has realized the ball under the only controlled by step motor as power balance, static, looking for points, drawing lines, automatic tracking, track record, and other functions, it could also accurately reach the target area, having a good robustness. In addition, the system has human-computer interaction interface, the parameters and testing mode can be input by buttons and displayed by the display screen, it is intelligent and fast.
Keywords: PID algorithm, STM32 microcontroller man-machine interaction, camera, stepping motor.
目 录
一、 系统方案...................................................... 1
1、单片机的论证与选择........................................... 2
2、电机的论证与选择............................................. 2
3、控制算法的论证与选择......................................... 2
二、理论分析与计算................................................. 3
1、球的位置检测................................................. 3
2、 小球运动控制分析 .......................................... 3
3、控制算法分析 ............................................... 3
三、 电路与程序设计................................................ 3
1、 电路设计.................................................... 3
(1)系统总体框图........................................... 3
(2) 摄像头的OV7725部分硬件连接图......................... 4
四、 测试方案与测试结果............................................ 4
1、测试方案 ................................................... 5
2、测试条件与仪器 ............................................. 5
3、测试结果与分析............................................... 5
1、测试结果................................................. 5
2、测试分析和结论........................................... 6
五、 结论与心得.................................................... 6
六、 参考文献...................................................... 7
附录:核心源程序................................................... 7
滚球控制系统(B题)
【本科组】
本系统主要由单片机STM32F103VET6最小系统板、摄像头模块、液晶显示屏模块、电机模块、电源模块、电机驱动模块组成,通过二值化处理摄像头实时采集的图像计算出小球坐标信息,然后通过PID算法根据坐标信息使单片机输出相应的电机控制信号,由电机驱动带动步进电机机实现步进电机转动角度和转速的控制;进而实现板沿预想方向偏转,实现小球的平衡、画直线、到定点等,在液晶显示屏上实时显示小球的位置。下面分别论证这几个模块的选择。
1、单片机的论证与选择
方案一:采用传统的51单片机
传统的51单片机为8位机,价格便宜,控制简单,但是运算速度慢,片内资源少,存储容量小,难以存储大体积的程序和实现快速精准的反应控制。并且受时钟限制,计时精度不高,外围电路也增加了系统的不可靠性。
方案二:采用以ARM Cortex-M3为内核的STM32F1系列控制芯片,STM32系列芯片时钟频率高达72MHz,具有64K字节SRAM,512K字节的FLASH容量,具有较强的处理计算能力,虽然操作及编程相比51单片机复杂,但是能够很好的完成任务。
综合考虑,方案二更符合我们的需求,所以我们选择方案二。
2、电机的论证与选择
方案一:采用直流减速电机控制板的运动,直流减速电机力矩大,转动速度快,但其制动能力差,且控制起来有点复杂,无法达到板快速静止的要求。
方案二:采用57步进电机控制小球的运动,步进电动机是一种将电脉冲信号转换成相应角位移或线位移的电动机,步进电机没有转轴电压摩擦,没有机械摩擦的电磁噪声;通过给定的脉冲周期,能够使电机在一定的范围内以任意速度转动以及急停,角度定位比较精准。
经过反复的比较、论证,我们最终选用了方案二。该型号步进电机加驱动器后与单片机接口简单,控制方便。
3、控制算法的论证与选择
方案一:采用模糊控制算法,模糊控制算法有许多良好的特性,它不需要事先知道对象的数学模型,具有系统响应快、超调小、过渡时间短等优点,但编程复杂,数据处理量大。
方案二:采用PID算法,按比例、积分、微分的函数关系,进行运算,将其运算结果用以输出控制。优点是控制精度高,是控制系统非常普遍的运算方法。对于本系统的控制已足够精确。
综合比较以上两个方案,本系统选择方案二。
二、理论分析与计算
1、球的位置检测
我们采用高精度的ov7725摄像头模块不断采集球的图像信息并用显示屏实时地显示出来。通过将图像经过滤波和二值化后提取出小球的轮廓,将轮廓上点叠加后求均值计算出球心位置。
木板采用两个步进电机作为动力系统。通过当前位置信息和目标位置的差得到的差值用于闭环控制系统滚动的线路确保小球按照要求达到指定点位。
3、控制算法分析
采用PID算法来控制木板移动的角度。开始工作后,实时检测小球坐标,并与之前的位置比较使得小球的滚动状态趋向平稳。其PID结构原理如图1,PID分别表示小球的位置比例(P)、位置误差(I)、位置积分(D)。
P:对小球的当前位置偏差e(t)进行调整,系数越大调节速度越快,减小误差,但是过大的比例,会造成电机速度状态的突变,从而导致木板状态不稳定
I:加入积分调节,可以消除系统的稳态误差,提高无误差度。系统的稳定性下降,动态响应变慢。
D:微分调节反应的是小球的角速度,可以预见偏差变化的趋势具有可预见性因而可以产生超前调节,加入微分调节可以改善系统的动态性能。
PID控制器由比例单元(P)、积分单元(I)和微分单元(D)组成。其PID控制器的传递函数为:
其中,KP, KI 和KD为PID控制器的比例,积分和微分参数。
(1)系统总体框图
图1 系统总体框图
图2 摄像头的OV7725部分硬件连接图
2、程序结构与设计
本系统开始时先对相应的硬件进行初始化、开启定时器中断、同时在主函数当中调用LCD显示函数显示相关参数,同时调用摄像头函数采用二值化处理得到小球的信息,根据得到的相关数据并通过步进电机驱动控制两个步进电机的转动对应处理相关的任务;在定时器中断中设置相应的任务处理标志位,在定时器中断服务函数中,调用任务处理函数,这样可以保证系统具有较高的实时性。
1、测试方案
2、测试条件与仪器
测试条件:检查多次,机械部分必须正常工作且参数正确。仿真电路和硬件电路必须与系统原理图完全相同,并且检查无误,硬件电路保证无虚焊。
测试仪器:尺子、秒表。
3、测试结果与分析
1、测试结果
(1)基本要求的测试
1)在区域2停留不少于5s。
表B-1 基础部分1测试结果
次数 |
1 |
2 |
3 |
4 |
5 |
时间 |
6.0 |
5.2 |
6.2 |
6.5 |
5.8 |
2)15s内区域1到区域5并停留不少于5s。
次数 |
1 |
2 |
3 |
4 |
5 |
5中停留时间 |
6.2 |
6.4 |
5.8 |
5.5 |
6.5 |
总时间 |
10.5 |
10.6 |
9.8 |
9.5 |
10.2 |
表B-2 基础部分2测试结果
3)20S内从区域1到区域4停留不少于2s,再到区域5停留不少于2s。
表B-3 基础部分3测试结果
次数 |
1 |
2 |
3 |
4 |
5 |
4中停留时间 |
2.1 |
2.2 |
2.3 |
2.6 |
3.0 |
5中停留时间 |
2.0 |
2.4 |
2.5 |
2.6 |
2.7 |
总时间 |
14.1 |
12.1 |
12.5 |
12.6 |
13.0 |
4)30s内从区域1到区域9并停留不少于2s。
表B-4 基础部分4测试结果
次数 |
1 |
2 |
3 |
4 |
5 |
9中停留时间 |
2.8 |
3.5 |
3.4 |
2.5 |
2.5 |
总时间 |
12.3 |
13.4 |
12.9 |
11.4 |
11.0 |
(2)发挥部分的测试
1)40s内从区域1过区域2区域6,停止于区域9不少于2s。
表B-5 发挥部分1测试结果
次数 |
1 |
2 |
3 |
4 |
5 |
9中停留时间 |
2.2 |
2.1 |
2.3 |
2.4 |
2.4 |
总时间 |
15.4 |
15.6 |
15.4 |
15.4 |
15.8 |
2)40s内,从区域A,进入区域B,区域C,停于区域D。ABCD为随机点。
表B-6 发挥部分2的测试结果
次数 |
1 |
2 |
3 |
4 |
5 |
总时间 |
35.2 |
24.2 |
39.0 |
28.8 |
26.1 |
3)从区域4,环绕区域5至少3周,停于区域9不少于2s。
表B-7 发挥部分3的测试结果
次数 |
1 |
2 |
3 |
4 |
5 |
环绕周数 |
3 |
3 |
3 |
3 |
3 |
9中停留时间 |
2.2 |
2.5 |
2.4 |
2.5 |
2.6 |
在完成题目规定要求后,对系统做了进一步加强,实现了小球在板子上画五角星形状的自由发挥。并将小球运动轨迹实时显示在屏幕上。
2、测试分析和结论
根据上述测试数据,可以得出以下结论:
(1)小球能够很好的完成基本功能和发挥功能。
(2)滚球系统完成任务的时间较快。
综上所述,本设计基本达到设计要求。
此次电子设计大赛我们收获颇丰,在整个过程中,我们不仅在通力合作中体会到了团结的重要性。还将理论与实践结合了起来,培养了一定的科研能力,拓宽了知识面。一步一步的解决相应的任务;逐步的实现了任务需求。展望未来,智能车技术必将在更广阔的领域广泛应用,
在这比赛的最后,要感谢学校和学院老师的给力的后勤工作,使我们能够在不被烦扰的情况下,用最充足的时间完成比赛。感谢全国大学生电子设计大赛的组委会,提供这样优秀的平台和机会给我们充足的锻炼。
[1]谭浩强.C语言程序设计[M].北京:清华大学出版社,2012.
[2]黄智伟.全国大学生电子设计竞赛训练教程.北京:电子工业出版社,2005.
[3]王福瑞等.单片微机测控系统设计大全[M].北京航空航天大学出版社,1998(331-337).
[4]童诗白. 模拟电子技术基础 第三版. 北京:高等教育出版社,2001.1.
附录:核心源程序
主函数:
int main(void)
{
int input;
uint8_t retry = 0;
/* 液晶初始化 */
ILI9341_Init();
ILI9341_GramScan ( 3 );
LCD_SetFont(&Font8x16);
LCD_SetColors(RED,BLACK)
ILI9341_Clear(0,0,LCD_X_LENGTH,LCD_Y_LENGTH); /* 清屏,显示全黑
/********初始化各模块******/
USART_Config();
TIM1_2_PWM_Init();
MOTOR_IO_Init();
KEY_IO_Init();
TIM1_NVIC_Configuration();
TIM2_NVIC_Configuration();
SysTick_Init();//开启滴答定时器
/* ov7725 gpio 初始化 */
OV7725_GPIO_Config();
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1 , ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 , ENABLE);
ILI9341_GramScan( cam_mode.lcd_scan );
ILI9341_DispStringLine_EN(LINE(2),"OV7725 initialize success!");
printf("\r\nOV7725摄像头初始化完成\r\n");
Ov7725_vsync = 0;
pint_12(step);
Delay(0x0FFFFF);
input=0;
pint();
kkk=key_4;
if(key_1==0&&key_2==1&&key_3==0)//执行发挥部分2时使用此函数输入预设值
{
while(input<13)
{
if(key_5==0&&step[input]<13){step[input]++;}
if(key_6==0&&step[input]>1){step[input]--;}
Delay(0x0FFFFF);
if(key_7==0)input++;
pint();
}
}
while(key_4==kkk)//拨码开关4推上去启动程序
{
pint();
mid_line=mid[mid_choose]; if(key_5==0&&mid_choose<10){mid_choose++;mid_line=mid[mid_choose];} if(key_6==0&&mid_choose>0){mid_choose--;mid_line=mid[mid_choose];}//通过按键调节曝光强度,自适应各种光照强度。
if(key_7==0){W+=2;}
if(W>26){W=1;};
Delay(0x0FFFFF);
if( Ov7725_vsync == 2 )
{
FIFO_PREPARE; /*FIFO准备*/
ImagDisp(cam_mode.lcd_sx,
cam_mode.lcd_sy,
cam_mode.cam_width,
cam_mode.cam_height);/*采集并显示*/
Ov7725_vsync = 0;
}
}
time=0;pint();
while(1)
{
pint_time(time);
pint_nine( adr);
/*接收到新图像进行显示*/
if( Ov7725_vsync == 2 )
{
FIFO_PREPARE; /*FIFO准备*/
ImagDisp(cam_mode.lcd_sx,
cam_mode.lcd_sy,
cam_mode.cam_width,
cam_mode.cam_height);/*采集并显示*/
Ov7725_vsync = 0;
}
}
}
}