0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何使用FPGA和CMOS制作一个低成本成像系统

科技观察员 来源:hackster.io 作者:hackster.io 2022-05-12 17:54 次阅读

并非所有成像系统都需要昂贵。可以直接使用成本优化的 FPGA 和 CMOS 图像传感器来创建解决方案。

介绍

开发嵌入式视觉系统不需要使用昂贵的 FPGA 或 SoC、大型帧缓冲存储器和外部摄像头。

我们可以使用直接与 CMOS 传感器连接的成本优化的 FPGA / SoC 来开发非常强大的图像处理系统。这允许创建一种解决方案,该解决方案不仅可以实现成本目标,而且还可以实现紧凑和节能。

直接与传感器接口是带有照相机的接口,因为我们已经做了不同的先前。当我们与相机接口时,我们通过 HDMI、CameraLink 等接收视频信号,这是相当直接的。

当我们与图像传感器连接时,我们通常会以不同的格式接收图像,例如 MIPI 或并行格式,在接收视频之前,我们需要首先配置成像器以按照我们的需要进行操作。

通常,成像器需要通过 I2C 或 SPI 进行配置,并且通过接口发送的命令数量可能很大。

为了演示我们如何将传感器与成本优化的 FPGA 集成到该项目中,我们将研究集成

TDNext 1.26 兆像素 Pmod

艺术S7-50

由于 Arty S7 不直接在板上提供 HDMI 或其他视频输出,因此本示例将使用 Avnet 10 英寸触摸屏。然而,这是可选的输出最终图像的另一个选项是Digilent Pmod VGA。 该 Pmod 还可用于实施成本非常低的解决方案。

与 TDNext Pmod 的接口非常简单,可以分为视频和配置两个元素。

视频接口由 10 位像素(拆分 8 位和 2 位 LSB)帧和行有效、像素时钟和参考时钟 (24 MHz) 组成。

配置接口由连接到成像设备的 I2C 和 I2C IO 扩展器组成,用于生成对成像器的复位。

该解决方案的架构如下,将使用软核处理器通过 I2C 配置成像器。然而,虽然图像处理路径将在 FPGA 内实现,但由于这是一个低成本应用,该解决方案不会在 DDR 存储器中实现外部帧缓冲器,而是图像处理流水线将完全在 FPGA 中实现。

该设计还将使用软核处理器来控制视频时序和图像处理路径的其他相关配置任务。

背景

TDNext 是一种彩色成像器,这意味着该成像器应用了拜耳模式,可以过滤每个像素的波长。这意味着在积分期间,每个像素仅累积红色、绿色或蓝色波长的光子。

poYBAGJ82SGAHOkGAALTWpfsG80479.png

在积分时间完成时,每个像素被读出为 8 位或 10 位像素。该像素值称为 RAW8 或 RAW10 像素。为了重新创建彩色图像,使用去拜耳算法组合包含不同波长像素的周围像素的值。

Vivado 构建

我们需要做的第一件事是创建 Vivado 平台,这将接收来自 TDNext Pmod 的图像。

为了创建框图,我们将主要使用 Vivado 库中的 IP 核,但我们将使用摄像头接口块和 Avnet 库中的输出块。

第一步是安装板定义文件,这使 Vivado 能够了解 Arty S7 的配置。

下载后,这些文件应安装在以下路径下的 Vivado 目录中:

《安装路径》/Vivado/《版本》/data/boards/board_files/

这将允许您选择 Arty S7 板作为创建新 Vivado 项目的目标板。

安装好电路板后,下一步是创建新项目、框图并创建 MicroBlaze 系统。

随着 MicroBlaze 系统的启动和运行,下一步是添加视频处理管道。处理链将使用以下 IP 块

CAM 接口 - 与 TDNext 视频接口接口

Video to AXIS - 将并行视频转换为 AXI Streaming 格式

Sensor Demosaic - 将代表 R、G 或 B 的 RAW 像素值转换为 24 位 RGB 格式

Video Timing Generator - 生成输出格式的视频时序信号

AXI Stream to Video Out - 将 AXI Stream 转换为并行视频

ZED ALI3 控制器 - 驱动 10 英寸触摸屏的 IP 模块

AXI IIC - 连接到 MicroBlaze 这将用于配置成像器

AXI UART - 连接到 MicroBlaze,用于向用户报告系统状态

如果我们使用 Pmod VGA,我们不需要使用 ZED ALI3 控制器 IP 块。

在我们添加 Zed ALI3 和 CAM 接口之前,我们需要重新配置 IP 核,以便能够包含在 Spartan 7 设计中。我们从 IP 目录视图执行此操作,选择所需的 IP 核并单击 packager 中的编辑 IP。

这将打开一个新项目并使您能够选择可比性选项卡并添加对 Spartan 7 设备的支持。重新打包设计并更新 Vivado 项目中的 IP 库。

poYBAGJ82RuAZ3jQAAGrIe9RY-8288.png

一旦 IP 升级为支持 Spartan 7,我们就可以完成设计。完整的方框图应如下所示。

pYYBAGJ82ReAWKW_AAHelCBCR9g634.png

与之前基于异构 SoC 的示例不同,该示例使用外部帧缓冲区。此示例不会使用 VDMA 从外部帧缓冲区读取和写入,这种方法需要 AXIS 到 Video 和 VTC 的不同配置。

通常情况下,AXIS to video 配置为主控,VTC 不受控制。然而,在这种方法中,AXIS to video 被配置为从设备,并且 VTC 发生器时钟使能受到控制。

poYBAGJ82RSAIia9AADYv24IV20010.png

这种方法允许 AXIS 到视频 IP 模块通过启用和禁用 VTC 来控制同步的时序,因此它们与处理管道中的同步时序相匹配。

在 AXI Stream 中,帧的开始由 TUser 指示,行尾由 TLast 指示。

IP 块的关键定制是:-

视频输入到 AXI 4 流

poYBAGJ82Q-ACWyzAAIkWveXlPI578.png

传感器去马赛克设置

poYBAGJ82QuAdWeZAAHUD7uJlbk314.png

AXI IIC 设置

poYBAGJ82QiAemyrAAGOPwnhJKc834.png

在设计中我还加入了几个集成逻辑分析仪(ILA),以实现系统状态的内部监控和调试。

项目完成后Arty S7-50的总利用率如下图所示。

poYBAGJ82QOALby9AAIba2WXf7A697.png

我们可以使用额外的资源来实现使用 HLS 的图像处理算法是必要的。如果我们想节省资源,我们可以使用 MicroBlaze 的最小占用空间并移除 ILA。

SDK 中编写软件

生成 Vivado 硬件后,下一步是编写应用软件,该软件将在视频处理内核上配置成像器和 IP 内核。

因此,该软件将执行以下操作

初始化 AXI IIC、VTC 和中断控制器

设置中断控制器以生成 AXI 相关中断 - 这包括三个中断服务例程。IIC 发送、接收和状态各一个。

为 10 英寸显示器配置 VTC 上的计时

通过 I2C 重置相机并点亮 PMOD 上的 LED

通过 I2C 检测摄像头,我们正在寻找检测 MT9M114

通过 I2C 链接初始化相机 - 这将需要几秒钟来编写所有命令

为了初始化成像器,我已将 TDM114 示例设计提供的基于 Zynq 的库转换为可用于 AXI IIC 的格式。

相机初始化后,我们将能够在连接到 AXI 流组件的视频流的 ILA 上看到视频。

pYYBAGJ82KyANCgeAAG-Ro3cUI0884.png

监控TDNext Pmod 背面的I2C 通信显示Arty S7 和TDNext 之间的通信。

检测到摄像头后,应用程序将下载多个 I2C 摄像头配置设置。

将使用 AXI UART 报告进度

pYYBAGJ82PeAMHk_AACxNDkx_qc378.png

一旦相机被初始化,我们就可以使用 ILA 来验证成像器正在生成视频,并且它是我们配置的分辨率。

我们通过使用 ILA 并直接检查在 FPGA 中接收到的视频来做到这一点。

pYYBAGJ82KOAaStaAAEP3SuNPys158.png

上图显示了 1280 像素的线宽,这正是我们所期望的。

接收到的像素从并行格式转换为 AXI 流。

AXI Stream 是一种单向总线,用于将数据从主机传输到从机,作为数据流,它不包含地址通道。为了控制流和通过 AXI 流传输视频时序信息,使用以下信号

TReady - 准备好接收数据时由下游外设置位

TValid - 当输出数据有效时由发送外设断言

TUser - 为帧开始发出

TLast - 为行尾发布

第二个 ILA 可用于确保正确生成 AXI 流。

由于我们没有 VDMA,重要的是 AXIS 流上的视频输出是一个连续块,并且 TValid 在活动像素期间不会断言和取消断言。

pYYBAGJ82KOAaStaAAEP3SuNPys158.png

我们可以通过将像素时钟用于图像处理链来确保 Tvalid 是连续的。

poYBAGJ82J-AWoFXAAFx8SggFec340.png

该项目中使用的库 API 如下,但包含 IIC 配置数据的 camera_initial.h 除外。Xilinx 根据硬件配置提供所有其他头文件。

poYBAGJ82JuAbGLgAABUrwoj6aU436.png

设备地址和标识符

pYYBAGJ82JeAWVkKAABqQjtvqfI093.png

应用程序的主循环可以在下面看到

int main()

{
u32 Status;
XIic_Config *iic_conf;
XVtc VtcInst;
XVtc_Config *vtc_config;
XVtc_Timing vtcTiming;
XVtc_SourceSelect SourceSelect;
XV_demosaic_Config *mosaic_config;
init_platform();
printf("www.adiuvoengineering.com S7 Imager example\n\r");
mosaic_config = XV_demosaic_LookupConfig(XPAR_XV_DEMOSAIC_0_DEVICE_ID);
XV_demosaic_CfgInitialize(&mosaic,mosaic_config,mosaic_config->BaseAddress);
XIntc_Initialize(&InterruptController, int_dev);
SetUpInterruptSystem();
iic_conf = XIic_LookupConfig(IIC_dev);
Status = XIic_CfgInitialize(&iic, iic_conf, iic_conf->BaseAddress);
if (Status != XST_SUCCESS) {
printf("XIic initial is fail \n \r") ;
return XST_FAILURE;
}
XIic_SetSendHandler(&iic, &iic, (XIic_Handler) SendHandler);
XIic_SetRecvHandler(&iic, &iic, (XIic_Handler) ReceiveHandler);
XIic_SetStatusHandler(&iic, &iic,(XIic_StatusHandler) StatusHandler);
vtc_config = XVtc_LookupConfig(XPAR_VTC_0_DEVICE_ID);
XVtc_CfgInitialize(&VtcInst, vtc_config, vtc_config->BaseAddress);
vtcTiming.HActiveVideo = 1280;
vtcTiming.HFrontPorch = 65;
vtcTiming.HSyncWidth = 55;
vtcTiming.HBackPorch = 40;
vtcTiming.HSyncPolarity = 0;
vtcTiming.VActiveVideo = 800;
vtcTiming.V0FrontPorch = 7;//8;
vtcTiming.V0SyncWidth = 4;
vtcTiming.V0BackPorch = 12;
vtcTiming.V1FrontPorch = 7;
vtcTiming.V1SyncWidth = 4;
vtcTiming.V1BackPorch = 12;
vtcTiming.VSyncPolarity = 0;
vtcTiming.Interlaced = 0;
memset((void *)&SourceSelect, 0, sizeof(SourceSelect));
SourceSelect.VBlankPolSrc = 1;
SourceSelect.VSyncPolSrc = 1;
SourceSelect.HBlankPolSrc = 1;
SourceSelect.HSyncPolSrc = 1;
SourceSelect.ActiveVideoPolSrc = 1;
SourceSelect.ActiveChromaPolSrc= 1;
SourceSelect.VChromaSrc = 1;
SourceSelect.VActiveSrc = 1;
SourceSelect.VBackPorchSrc = 1;
SourceSelect.VSyncSrc = 1;
SourceSelect.VFrontPorchSrc = 1;
SourceSelect.VTotalSrc = 1;
SourceSelect.HActiveSrc = 1;
SourceSelect.HBackPorchSrc = 1;
SourceSelect.HSyncSrc = 1;
SourceSelect.HFrontPorchSrc = 1;
SourceSelect.HTotalSrc = 1;
XVtc_RegUpdateEnable(&VtcInst);
XVtc_SetGeneratorTiming(&VtcInst,&vtcTiming);
XVtc_SetSource(&VtcInst, &SourceSelect);
XVtc_EnableGenerator(&VtcInst);
XIic_Reset(&iic);
PCA9534_CTRL ();
Detect_Camera();
Soft_Reset_Camera();
Initial_Camera();

XV_demosaic_Set_HwReg_width(&mosaic,0x500);
XV_demosaic_Set_HwReg_height(&mosaic,0x31f);
XV_demosaic_Set_HwReg_bayer_phase(&mosaic,0x1);
XV_demosaic_EnableAutoRestart(&mosaic);
XV_demosaic_Start(&mosaic);
while(1){
}
cleanup_platform();
return 0;
}

运行整个软件应用程序使我捕捉到了我的会议徽章收藏的下面的图像。

poYBAGJ82I2AI9E8AALmE8DmcFE419.png

我需要调整一些设置以增加集成时间,但是,基本图像处理管道正在按我们的预期工作。

结论

很容易创建一个视觉处理系统,它直接与成像器一起工作,而不是相机。随着处理链的显着减少,这通常允许更具成本效益和潜在的响应更快的解决方案。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1592

    文章

    21207

    浏览量

    592142
  • CMOS
    +关注

    关注

    58

    文章

    5111

    浏览量

    233081
  • 图像传感器
    +关注

    关注

    68

    文章

    1707

    浏览量

    128743
收藏 人收藏

    评论

    相关推荐

    美光200万像素CMOS成像传感器

    ,通过使用CMOS成像传感器数字成像技术保持低成本优势。美光公司图像部市场总监Farhad Rostamian说,这种新型传感器能够提供与传统DSC器件相媲美的图像质量。   美光公司
    发表于 10-26 16:48

    什么是Altera系列低成本Cyclone IV FPGA

    领域竞争激烈,价格大幅下降,令成本问题变得愈加敏感。因此,市场需要能即时满足用户需求,并具有低成本高性能的灵活器件,正是看准这市场趋势,Cyclone IV FPGA应运而生。那么大
    发表于 07-31 06:59

    怎么设计基于FPGA多波束成像的声纳系统

    多波束成像声纳利用了数字成像技术,在海底探测范围内形成距离方位二维声图像,具有很高的系统稳定性和很强的信号处理能力。但是由于数字成像
    发表于 10-09 06:04

    请问怎样去设计低成本CMOS图像采集系统

    基于STM8单片机的低成本CMOS图像采集系统该如何去设计?CMOS图像采集系统与其他嵌入式图像采集系统
    发表于 06-01 07:27

    如何去制作低成本、有保护圈的FPV

    前言:入FPV的坑,买的五寸太大,飞起来就是移动的血滴子,有点害怕,所以想做个低成本、有保护圈的FPV练手。空心杯材料:7.4V 2S 8520空心杯电机
    发表于 09-13 07:56

    基于FPGA低成本低延时成像系统设计方案资料分享

    1、基于FPGA低成本低延时成像系统设计  目前商用领域的成像系统还是以嵌入式ASIC为主(成
    发表于 10-08 15:36

    基于CMOS图像传感器的成像系统设计

    以OV5116CMOS 图像传感器为例,讨论了基于CMOS 图像传感器的成像系统的电路设计方法及系统设计中应注意的问题;并通过对
    发表于 06-25 11:08 92次下载

    低成本高保真倒相箱的设计与制作

    选择适用的中低音扬声器是低成本高保真音箱的核心问题,只有找到一款价格低廉但性能较好的单元才有可能制作出满意的音箱。我们希望一对音箱的总成本控制在300元之
    发表于 10-09 16:09 179次下载

    基于DSP和FPGA的多通道CMOS图像监控系统

    为了提高系统的监控能力降低成本,提出了一种基于CMOS的多通道 视频监控 方案。首先基于同步信号控制各路视频同步,保证图像质量。在此基础上由DSP和FPGA产生控制切换信号,控制多
    发表于 08-05 15:20 74次下载
    基于DSP和<b class='flag-5'>FPGA</b>的多通道<b class='flag-5'>CMOS</b>图像监控<b class='flag-5'>系统</b>

    基于FPGA与USB的CMOS图像获取与采集系统设计

    实现了基于FPGA与USB的CMOS图像获取与采集系统的设计。介绍了成像系统的结构、CMOS图像
    发表于 09-22 16:53 23次下载

    基于赛灵思FPGA低成本MIPI接口IP

    基于FPGA低成本MIPI接口,专门针对视频显示器和摄像头的。设计嵌入式系统DSI和CSI-2视频接口的用户现在即可采用低成本MIPI接口
    发表于 02-10 16:54 1.7w次阅读

    基于MLX90620的低成本红外热成像系统设计_杨风健

    基于MLX90620的低成本红外热成像系统设计_杨风健
    发表于 03-19 19:08 55次下载

    AD7533:CMOS低成本10位乘法DAC数据表

    AD7533:CMOS低成本10位乘法DAC数据表
    发表于 04-17 09:38 11次下载
    AD7533:<b class='flag-5'>CMOS</b><b class='flag-5'>低成本</b>10位乘法DAC数据表

    低成本、高精度结构光3D成像系统开源分享

    电子发烧友网站提供《低成本、高精度结构光3D成像系统开源分享.zip》资料免费下载
    发表于 10-26 11:09 2次下载
    <b class='flag-5'>低成本</b>、高精度结构光3D<b class='flag-5'>成像</b><b class='flag-5'>系统</b>开源分享

    AMD进军低成本FPGA市场,满足边缘应用需求

    虽然赛灵思主攻高端FPGA市场,但其对低成本FPGA市场的投入也不容小觑。此次发布的Spartan UltraScale+正是AMD进军低成本FPG
    的头像 发表于 03-10 10:06 515次阅读