刘志娴++江敏
摘要:本设计是基于STM32F407单片机设计的滚球控制系统,本系统主要由图像采集与处理模块、液晶显示屏驱动模块、矩阵键盘模块、电源稳压模块等构成。本系统通过OV2640摄像头采集图像数据以此判断滚球的位置,并结合PID算法来控制调节舵机进而实现小球停在目标位置。为了方便调试和复测,系统采用矩阵键盘的模式。通过对本系统的软硬件的实际测试,其能稳定地运行,到达了预期的目标。
关键词:STM32F407;OV2640;PID
中图分类号:TM33 文献标识码:A 文章编号:1007-9416(2017)12-0017-02
1 系统方案设计原理
1.1 设计原理
本设计主要由四个部分组成,分别是图像采集与处理模块、平板驱动模块、矩阵键盘模块、电源稳压模块,系统设计框图如图1所示。
图像采集与处理模块作为本系统的最核心,主要是利用图像传感器完成对小球位置的采集和对图像进行二值化处理;平板驱动模块是通过PWM对电机的驱动完成对平板的驱动,使小球运动到指定位置;矩阵键盘模块是通过对主芯片的控制来改变对小球目标位置的控制;电源稳压模块是提供给芯片,舵机等稳定电源。
1.2 电源稳压设计
在此系统中运用到的电源可能不稳定,需要性能较好的稳压模块。目前小功率的直流稳压电源模块有很多,主要有线性稳压和开关稳压电路,大多数采用线性集成稳压器,因此设计的主要任务是选择合适的集成稳压器及整流滤波参数。本设计采用的是三端固定输出集成稳压器CW7800。
CW7800集成稳压器内部电路组成框图如图2所示,它由调整电路、保护电路、比较放大、基准电压、启动电路、取样电路等部分组成。启动电路是电路有输入电压UI时,利用UI对稳压器自身快速建立一个输出电压UO,使稳压器工作。在取样电路中,利用电阻对输入电压进行分压,由于分压电阻是固定的,则输出电压UO是固定的;保护电路对稳压器起到保护作用。
1.3 算法设计
传统的位式控制算法的结构如图3所示。
基本特点是输出信号单一,只能为高电压或者低电压,用来驱动控制对象;算法输出信号的依据是设定值与当前值比较,若设定值大于当前值,则输出高电平,若设定值小于当前值,则输出低电平。这种算法没有考虑到偏差,在控制对象时不能实现对对象的变化趋势的控制。
PID控制算法的结构如图4所示。
Sv是用户设定的初始值;Pv是当前的状态。在PID控制算法中,有三个变量分别为Ek,Sk,Dk。Ek表示当前的偏差,Sk表示历史偏差,Dk表示最近两次的偏差之差。
(1)
通过公式(1)即可实现PID控制。根据公式(1)可知,PID算法有三个环节,比例环节,积分环节和微分环节。若偏差为0,则Kp为0,只有存在偏差时,比例系数才会加大或减小,当比例系数Kp加大时,会使滚球系统动作加快,但容易造成不稳定。积分环节主要是用于消除系统稳定后输出值与设定值的差值。在本系统中为了简化系统设计,可不用积分環节。微分系统反应了偏差信号的变化规律,可以进行超前调节。
2 系统程序设计
利用OV2640摄像头采集图像,并将数据发送到核心芯片,判断小球位置是否到达目标位置。若小球未到达目标位置,则根据增量式PID算法使小球快速稳定的停在指定位置,完成要求。为方便调试,系统程序分模块进行设计,将程序分成LCD液晶显示模块,舵机驱动模块,摄像头模块。软件程序流程图如图5所示。
2.1 OV2640摄像头处理程序设计
图像采集模块利用J-Link仿真编程器将编译之后的二进制文件烧写到Flash启动文件系统,图像采集系统采用OV2640摄像头模块,输出显示采用2.4英寸TFT液晶显示屏。当储存按键按下时,系统接收中断,同时将从OV2640摄像头采集到的数据显示在液晶显示屏上[1]。首先需要对摄像头进行初始化,其程序设计如下所示。
LCD_ShowString(30,130,240,16,16,"OV2640 ERR");
LCD_Fill(30,130,239,170,WHITE);
LCD_ShowString(30,130,200,16,16,"OV2640 OK");
OV2640_OutSize_Set(176,144);
OV2640_RGB565_Mode();//RGB565模式
My_DCMI_Init();//DCMI配置
DCMI_DMA_Init((u32)rgb_buf,sizeof(rgb_buf)/4,DMA_MemoryDataSize_HalfWord,DMA_MemoryInc_Enable);//DCMI DMA配置
当对摄像头配置完成后,需要对摄像头采集到的数据进行灰度值处理。其程序设计如下所示。
gray=((rgb_buf[i][j]>>11)*19595+((rgb_buf[i][j]>>5)&0x3f)*38469+(rgb_buf[i][j]&0x1f)*7472)>>16;//将RGB转化成灰度值
if(gray>=23)
{
if(i>8&&i<136&&j<160&&j>16)
{
if(i>X_MAX) X_MAX=i;
if(i if(j>Y_MAX) Y_MAX=j; if(j } LCD->LCD_RAM=WHITE
}
else
LCD->LCD_RAM=BLACK;//對灰度值进行二值化处理
2.2 算法程序设计
本系统控制平板只需要PD算法,在产生中断后进入控制函数控制舵机的平衡以及控制转动的幅度。具体程序设计如下。
void balance_a()
{
AKp=300;
AKd=500;
Aim_AX=0;
Aim_AY=0;
Err_AX=AX-Aim_AX;
Err_AY=AY-Aim_AY;
PWM_AX=(Err_AX*AKp+(Err_AX-Err_AX_LAST)*AKd);
PWM_AY=(Err_AY*AKp+(Err_AY-Err_AY_LAST)*AKd);//算法控制
Err_AX_LAST=Err_AX;
Err_AY_LAST=Err_AY;
}
void xianfu()
{
if(PWM_Y>9550)PWM_Y=9550;
if(PWM_Y<9150)PWM_Y=9150;
if(PWM_X>9390)PWM_X=9390;
if(PWM_X<8990)PWM_X=8990;
}
3 结语
本设计是基于STM32F407基础上的滚球控制系统,由图像采集与处理模块、矩阵按键模块、OV2640摄像头模块、平板驱动模块构成,完成了包括系统在内的硬件和软件测试。通过不断测试修改参数,最终实现了小球稳定的停在平板中心及四个角落等地点,达到了设计的预期目标。本设计为摄像头视觉处理以及平衡控制提供了一定的研究价值。
参考文献
[1]王建,梁振涛,郑文斌,等.STM32和OV2640的嵌入式图像采集系统设计[J].单片机与嵌入式系统应用.2014(9):46-48.
[2]Rafael C.Gonzale,Richard E.Woods.‘Digital Image Processing[M], Publishing House of Electronics Industry, BEIJING.2004.
[3]Jong H,Jangsangjin Han.Taeghwan Hyeon,SEUNG M Oh[J].Journal of Power Source, 2003,123:79.
[4]刘歌群,卢京潮,闫建国,等.用单片机产生7路舵机控制PWM波的方法[J].机械与电子,2004,(2):76-78.
[5]朱翔,潘峥嵘.基于OV7620的机器人视觉导航系统设计[J].电子测量技术,2010,3(1):64-66,73.
[6]曾迎生.图像二值化研究及其改进[J].研究与开发,1990,(1):22-27.
Abstract:This design is a rolling ball control system based on STM32F407 microcontroller .The system is mainly composed of image acquisition and processing module,LCD driver module,matrix keyboard module,power supply regulator module and so on.It's collects image data through OV2640 camera to determine the location of the ball,and combines the PID algorithm to control the steering gear and realize the ball stopping at the target position.In order to facilitate the debugging and retesting,the system adopts the matrix keyboard mode.Through the actual testings of the hardware and software of this system,it can run steadily and reach the expected target.
Key words:STM32F407;OV2640;PIDendprint