• 全国 [切换]
  • 深圳市鼎达信装备有限公司

    扫一扫关注

    当前位置: 首页 » 新闻动态 » 真空技术 » 正文

    基于STM32的数显轨距尺图像数据采集系统设计

    放大字体  缩小字体 发布日期:2022-02-14 09:51:34    浏览次数:93    评论:0
    导读

    摘要:为了实现数显轨距尺测量数据的采集、存储功能,设计了一种结构简单、性能稳定的数显轨距尺图像数据采集系统,实现了轨距尺图像数据的实时采集、显示、存储功能;系统能够获取数显轨距尺测量数据图像,并将图像显示在LCD屏上,图像信息存储于SD卡中,既完成了测量数据的实时传输,又实现了对测量数据的保存;系统以Cor

    摘要:为了实现数显轨距尺测量数据的采集、存储功能,设计了一种结构简单、性能稳定的数显轨距尺图像数据采集系统,实现了轨距尺图像数据的实时采集、显示、存储功能;系统能够获取数显轨距尺测量数据图像,并将图像显示在LCD屏上,图像信息存储于SD卡中,既完成了测量数据的实时传输,又实现了对测量数据的保存;系统以Cortex-M4为内核的STM32F407ZGT6作为控制核心,利用OV2640作为图像传感器采集彩色图像,采用TFTLCD真彩液晶显示屏显示图像,利用FATFS文件系统实现SD卡的读写,从而使系统能够存储图像数据;实验结果表明,图像的采集系统稳定可靠,采集图像清晰,满足设计要求,对轨距尺读数的自动识别以及轨道测量数据的存储具有重要意义。

    关键词:STM32F4;OV2640;图像采集;数显轨距尺

    0 引言

    目前传统的轨距调整通常是人工撬棍模式,在轨距调整中首先需要测量轨道的几何参数,一般就是轨距和水平,再与标准轨距、水平相比较从而得出调整距离和水平。现阶段检测轨距、水平所使用的是数显轨距尺,如图1所示,其读数模块如图2所示。数显轨距尺虽然稳定性好,但是检测人员读数不便,测量数据无法保存。在实际使用时,每次测量检测人员都需要屈身进行测量和读数,使用十分不便,导致劳动力度大,工作效率低,对于长距离的轨道检测极其不利,特别是在夜间作业的时候。在测量中,轨距的测量数据只作为单次调整使用,无法保存、上传分析。随着工业发展,轨距的调整也必然走向自动化。要实现轨距调整的自动化,首先需要解决的就是轨距尺读数的自动识别,获取可以识别的图像就尤为关键,为此,需要将轨距尺的图像数据采集与传输,以便达到自动控制的要求。本文基于这一需求,设计了基于STM32的嵌入式图像采集系统,实现了图像的实时采集、显示、存储。本系统的设计不仅方便了读数,也实现了检测数据的显示与保存,便于以后数据的离线分析,以及数据处理。

    图1 数显轨距尺 图2 数显轨距尺读数模块

    1 系统总体结构以及功能

    基于数显轨距尺图像数据采集系统的设计需求,建立了如图3所示的系统总体硬件结构图。主要由控制器模块、图像采集模块,图像存储模块、LCD显示模块构成。本设计的控制器模块是以基于Cortex-M4为内核的STM32F407ZGT6(以下简称STM32)处理器作为核心,是整个系统的核心单元。图像采集模块使用OV2640图像传感器,用于采集轨距尺显示的数据,STM32通过SCCB总线控制图像传感器的读写来采集图像数据。为了提取合适的图像,添加了按键控制功能,通过按键可以采集当前图像,采集图像后,将采集到的图像显示在LCD屏上。在LCD屏上可以清晰的显示轨距尺所测的轨距,水平参数。SD卡则能够将图像以文件的形式保存,保存在卡上的图像可以在PC或其它设备上查看。

    图3 系统硬件结构图

    2 硬件设计

    2.1 处理器STM32F4

    本系统的设计所使用的STM32开发板芯片为STM32F407ZGT6,该芯片拥有先进的Cortex-M4内核,集成 FPU和 DSP 指令,增强的DSP处理指令[1]。同时STM32具有SDIO接口,可以实现对SD卡数据的存储与读取;自带DCMI接口,能够接受外部CMOS摄像头发出的高速数据流。芯片的配置十分完备,符合本系统的设计要求。

    STM32F4芯片带有DCMI同步并行接口,该接口能够接收外部 8 位、10 位、12 位或 14 位 CMOS 摄像头模块发出的高速数据流,并且可支持不同的数据格式的逐行视频和压缩数据 (JPEG) [2]。DCMI 接口的数据捕获支持两种模式,一种为快照模式,另一种为连续采集模式[3]

    STM32的SDIO控制器支持SD存储卡设备,其主要包括两个部分,SDIO适配器和ABP2接口,SD卡连接至总线,即可通过主机配置数据传输。

    2.2 图像传感器OV2640模块设计

    本设计采用的OV2640图像传感器,是由OV(OmniVision)公司生产的1/4寸CMOS UXGA(1632*1232)图像传感器。该传感器具有特点如下:

    1)高灵敏度可以在低亮度条件下工作。

    2)低操作电压适合嵌入式应用。

    3)标准的 SCCB 接口。

    4)具有图像质量控制功能,包括饱和度、色相、伽马、锐度等设置。

    5)支持闪光灯和LED。

    6)支持图像缩放、平移和窗口设置,支持图像压缩,即可输出 JPEG 图像数据。

    7)自带嵌入式微控制器。

    从其特点可以看出该图像传感器具有的体积小,高灵敏度,工作电压低的优点,十分适合应用于本设计中。

    OV2640 的图像数据的输出是在 VSYNC、HREF/ HSYNC和PCLK的控制下,通过Y[9:0]进行传输的。在行输出时序,在 HREF 为高电平时,图像数据输出,当 HREF 变高电平,每一个 PCLK 时钟,输出一个 8 位/10位数据[4]。本设计采用的是8位接口,即一个PCLK 输出1个字节,帧时序的数据输出原理也是类似,STM32只要按照这个时序去读取摄像头模块数据即可得到对应的RGB图像数据。如果要输出数据是JPEG数据,输出方式也是相同的,其数据读取方法也相同,输出的数据是压缩后的 JPEG 数据,输出的 JPEG 数据以:0xFF,0xD8 开头,以 0xFF,0xD9 结尾,0xFF,将OXEF,0xD8~0xFF,0xD9 之间的数据,保存为.jpg或者.jpeg 文件,即可在PC端直接查看图片。

    OV2640的输出通过SCCB总线控制,可以输出整帧、子采样、缩放和取窗口等方式的各种分辨率8/10位影像数据[5]。用户可以实现对图像质量、传输方式以及数据格式进行控制[4]。通过SCCB接口编程可以实现图像的处理,包括白平衡、对比度、色度等。通过编程控制从而可以采集到清晰稳定的彩色图像。

    SCCB接口控制图像传感器芯片的运作,SCCB时序和I2C时序类似,SCCB也是两线式串行总线,用于连接微控制器和外围设备,是由数据线SIO_D和时钟SIO_C构成的串行总线,SIO_D是串行双向数据传输线,可以发送和接收数据。

    为了使OV2640与STM32F4进行通信,设计了OV2640图像传感器模块。该模块焊接了有源晶振,可以产生24 MHz时钟,将其作为OV2640的XVCLK输入,同时该模块也添加了RT9193-2.8以及XC6219B芯片,用于产生2.8 V以及1.3 V电压源,为OV2640供电。最终引出一个29的双排排针。与外部通信,该模块的通信信号引脚以及作用如下: VCC接口为模块供电脚,接3.3 V电源。GND为模块接地线,DCMI_SCL为SCCB总线通信时钟信号,DCMI_SDA为SCCB总线通信数据信号,DCMI_D[7:0]为8为数据输出引脚,DCMI_PCLK为像素时钟输出引脚,DCMI_PWDN引脚的作用是使能掉电,DCMI_VSYNC为帧同步信号输出引脚,DCMI_HRE为行同步信号输出引脚

    DCMI_RESET是复位信号接收引脚。

    OV2640模块与STM32的DCMI接口电路如4所示。

    图4 DCMI接口与OV2640模块接线图

    2.3 LCD显示屏模块设计

    LCD显示屏即薄膜晶体管液晶显示器,也叫真彩液晶显示器,因为体积小、厚度波特别适用于数控机床、PDA、掌上电脑、游戏机等产品[6]。本设计LCD显示屏模块选用的是一款高性价比的薄膜晶体管液晶显示屏,具有高分辨率(800480)、高可靠性、低功耗等优点,可以显示高质量图像,显示模式为16位真彩色,即RGB565格式,可以采用串行方式或并行方式进行数据传输。本设计中利用STM32的FSMC接口控制液晶显示屏。在设计中为了加大数据传输速度,采用16并口方式与外设连接。LCD模块与STM32接口电路如图5所示。

    图5 LCD模块与STM32接口电路

    2.4 SD卡模块设计

    SD卡即安全数码卡(secure digital memory card),是一种基于半导体快闪记忆器的新一代记忆设备,广泛运用在便携式装置上[7]。本系统使用的是4 GB大容量SD卡,用于存储数显轨距尺的测量数据。SDIO控制器的SDIO适配器模块可以用于数据传输,一个多媒体卡连接至总线,则SDIO_D0、SDIO_D[3:0]或SDIO_D[7:0]可以用于数据传输。要实现STM32与SD卡通信,首先需要将SD卡与SDIO总线的连接,实现SD卡初始化,然后通过控制器实现对SD卡的读写。SD卡接口与STM32的SDIO接口连接原理图如图6所示。

    图6 SD卡与SDIO接口连接电路

    3 软件设计

    基于数显轨距尺图像数据采集系统是在Keil Vision5开发环境下采用C语言编写,使用了模块化的系统设计思想,每个外设相当于一个模块,本系统的模块包括:基于OV2640的图像采集模块、SD卡的存储模块、LCD显示模块以及按键控制模块。软件设计主要是对各个模块的初始化。主要包括:对OV2640模块的初始化(包括SCCB总线初始化)、DCMI的初始化、SD卡模块,LCD显示屏的初始化。本设计详细阐述了各个模块初始化以及系统功能的实现。

    3.1 基于OV2640的图像采集模块初始化

    为了实现OV2640的图像数据采集功能,首先需要初始化OV2640,包括SCCB总线、相关I/O口,其中最主要的是完成OV2640的寄存器序列初始化。在OV2640 的寄存器数量较多,配置十分困难,本设计中使用的是 OV公司提供了参考配置,首先将用到的配置序列,存放在一个2维初始化数组里面,存储初始化序列寄存器及其对应的值,通过该数组对寄存器进行赋值,即可实现OV2640的内部寄存器的初始化。

    SCCB的初始化较为简单,首先初始化STM32控制器的I/O口。然后设置SCCB的读写函数[8]

    OV2640模块的初始化主要是设置输出格式,大小的设置,首先初始化I/O口,上电并复位,执行初始化序列,然后即可完成初始化。在OV2640的初始化中,本设计使用了几个重要函数,其功能如下:

    OV2640_Win函数,该函数用于设置图像传感器输出窗口,其大小可以设置为22到16321220中的任意值;OV2640_ImageSize函数,用于设置图像尺寸的大小;图像尺寸的大小必须要小于传感器输出窗口的大小,OV2640_ImageWin函数,用于设置图像窗口大小,即在图像尺寸大小中再次开窗,其大小要小于等于图像尺寸大小;OV2640_OutSize函数,用于设置图像输出大小,这个大小的设置就是外设能接受输出的大小,通过改大小的设置,就会对图像进行缩放。正是这些函数的设置,共同决定了图像输出的大小。完成OV2640的初始化后需要初始化STM32上的DCMI接口。DCMI接口初始化过程如图7所示。

    图7 DCMI接口初始化流程图

    在输出图像时,显示在LCD屏图像格式为RGB格式,存储在SD卡位JPEG格式,RGB格式可以直接显示在LCD屏上,JPEG格式图片需要经过处理才可以存入SD卡中,为此编写DCMI中断服务函数DCMI_IRQHandler,用于处理帧中断,实现JPEG数据处理。编写DCMI_DMA_Init函数,用于配置DCMI的DMA传输。

    3.2 SD卡存储模块

    SD储存模块就是要使用STM32的SDIO驱动SD卡,其中主要是SD卡的初始化,以及SD卡的读写功能的实现。SD卡初始化完成才能够实现STM32对SD卡的读写。SD卡读写功能是采用命令的方式来控制寄存器实现的,每发出一个命令,SD卡会发送一个响应将部分参数返还给STM32。其初始化首先需要上电,即设置SDIO_POWER[1:0]=11,上电后发送CMD0对卡进行软复位,再发送命令SMD8,根据响应判断卡的类型,如果应答信号HCS位为01H,再发送 CMD2命令和CMD3命令,获得CID寄存器内容和SD卡相对地址,通过CMD9命令获取CSD寄存器内容,从而完成了SD卡的初始化,SD卡能够实现对扇区的读写。要实现SD卡的存储管理,读写扇区还无法满足这一要求,本设计采用FATFS来管理SD卡的扇区。 FATFS是开源且免费的文件系统,具有良好的兼容性和稳定性,在嵌入式系统中被广泛运用[9]。FATFS能够很好的支持本系统中采用的SD卡读写。FATFS文件系统有三层。通常为用户提供了一些列的接口函数,比如f_open,f_read等,通过FATFS管理SD卡的读写就可以实现对采集采集图像的存储。

    3.3 LCD显示屏模块初始化

    在本系统中利用STM32F4的FSMC接口来控制LCD屏的显示。LCD使用是按照一定的流程进行的,首先将LCD硬复位,即设置LCD_RST=0,待硬复位后,设置LCD_RST=1,执行初始化序列。初始化后可以对LCD进行点操作。对点的写操作如下,先设置点坐标,然后写GRAM指令,写入颜色数据,即可在LCD上显示写入的颜色,对点的读操作也类似,首先设置坐标,然后读取GRAM指令,读取颜色,单片机处理后,就可以得到改点对应的颜色数据。

    通过上述方法可以实现使LCD模块显示字符和数字。为此LCD模块的初始化首先需要将LCD模块与STM32相连的I/O口初始化,一边驱动LCD。然后初始化LCD。本设计中LCD接口的RST同STM32的RESET接口连接,在对STM32复位的同时可以实现对LCD的初始化。初始化序列同OV2640初始化序列相同,LCD厂家会提供初始化序列,在初始化完成后,即可正常使用LCD。LCD的显示是通过设置坐标,写GRAM指令,写GRAM实现对一个点的处理。本设计显示的是数显轨距尺的图像数据,为了达到显示目的,需要设计数字、字符显示函数,多次调用,即可在LCD上显示完整图像。

    3.4 系统运行流程图

    本设计的程序运行流程图如图8所示,系统启动后,完成对LCD屏、SD卡的检测。然后检测 SD 卡的根目录是否有PHOTO 文件夹,如果不存在则创建PHOTO文件夹,如果创建失败,则报错(提示系统出错)。在SD卡根目录下存在PHOTO 文件夹后,开始初始化图像采集模块,初始化成功后,LCD显示屏会一直显示 OV2640当前采集到的图像。这时候通过按键控制图像的存储。当系统检测到按键按下的时候,可以将采集到的图像以JPEG 格式(分辨率为 UXGA,即 1 600*1 200)存储在SD卡上。并提示图片保存成功。在短暂的显示存储图片后,再回到按键按下前的状态,知道按下下一个按键。

    图8 系统运行流程图

    4 实验结果与分析

    数显轨距尺图像数据采集系统实验结果如图9所示。

    图9 SD卡存储图片

    系统效果图如图9所示,可以看出,STM32F4与OV2640的设计方案效果可以满足实验要求,完成了图像的采集以及传输,实现测量数据的实时采集。

    本设计主要应用在轨距测量领域,轨距精调目前速率是v=1500 m/4h,一般工作时间为夜晚11点到凌晨3点,t=4 h正线枕木之间的距离为d=440 mm,该数据采集系统采集图像的大小大于140 KB,低于200 KB。单次测量需要保存数据校准以及复测共需要3次。为了保证数据的精确性,预留一次数据保存容量。则SD卡总容量在一次精调中需要容量R≥267 M。同时夜间测量需要在现场中提供必备的光源,以确保采集图像的清晰度。

    5 结束语

    本文基于STM32F407和OV2640图像传感器设计的数显轨距尺图像数据采集系统采集到的图像清晰,结构简单,采集效果良好,成本较低,存储容量大,只需要将LCD屏安装在适当高度,即可实现测量数据的实时采集,方便观察轨距尺的读数,从而大大提高了轨距测量的工作效率。测量数据存储在大容量SD卡中,实现了对轨道几何参数的保存。另一方面,其数据可以对轨道运行状况做离线分析,也可以作为机器识别的图像,为后续图像识别奠定基础。在软件方面,基于C语言设计的程序,流程严谨,系统运行十分稳定可靠。


     
    (文/小编)
    打赏
    免责声明
    • 
    本文为小编原创作品,作者: 小编。欢迎转载,转载请注明原文出处:https://2024.dingdx.com/news/show.php?itemid=6892 。本文仅代表作者个人观点,本站未对其内容进行核实,请读者仅做参考,如若文中涉及有违公德、触犯法律的内容,一经发现,立即删除,作者需自行承担相应责任。涉及到版权或其他问题,请及时联系我们。
    0相关评论
     

    © Copyright 深圳市鼎达信装备有限公司 版权所有 2015-2022. All Rights Reserved.
    声明:本站内容仅供参考,具体参数请咨询我们工程师!鼎达信作为创新真空产品研发制造商,我们提供海绵吸具,海绵吸盘,真空吸盘,真空发生器,真空泵,真空鼓风机,缓冲支杆,真空配件,真空吊具等等产品

    粤ICP备17119653号