ZYNQ的linux驱动+开发项目

1.项目介绍

        本系统由ZYNQ开发板、RGB触摸屏、ov5640摄像头模块、dht11温湿度模块、TCRT5000红外传感模块、烟雾传感器模块、蜂鸣器电路、舵机、Led灯电路组成。完成各模块驱动编写及QT界面开发

        1). 通过Vivado软件完成硬件电路搭建,并根据配置添加设备树文件内容。

        2). 通过QT开发控制界面,移植主控板,通过RGB屏幕触摸实现浴室灯、卧室灯、门锁的控制。

        3). 通过tcp协议,将开发板作为客户端,通过接收服务端的指令来控制家居将温湿度、烟雾等检测状态通过socket发送给服务端,若有异常情况,服务端将会通过蜂鸣器报警。ov5640摄像头具有监控作用。使用多线程。通过红外模块识别摄像头前方是否有人,识别到人则开启子线程即利用opencv捕获人脸数据通过tcp传输到服务端。服务端使用dlib库加opencv识别人脸,返回开锁信息

本项目涉及vivado搭建硬件环境,

2.vivado搭建硬件环境

1)LCD屏幕的软核构建和原理

      LCD屏原理

        LCD屏幕就是由一个一个的像素点构成,我们经常说屏幕分辨率为800*480等等,意思其实就是行像素点个数有800,列像素点有480个。那么屏幕是如何显示出图像的呢,就是往这些像素点中写数据,最终构成一帧图像。就比如我们常说的RGB888格式,意思其实就是一个像素点由Red的8bits,Green的8bits和Blue的8bits数据来表示出来。根据这24位数据的改变,可以显示很多种颜色。

        上述图就是一个屏幕,中间白色部分是我们要显示的图像区域,即所有像素点的区域。那很多人就好奇,那为什么有黑边,那我在这里就简单给你们解释一下。这里我不深究原理,单纯讲一下原理。

我们把像素显理解成一个电子枪打在一个地方而显示出的效果。1024个像素意味着我们一行的打1024枪。当我们打完一行时,是不是的转到下一行去打,此时就产生了以下几个表示信号

HSYNC信号:行同步信号。HFP:行同步前沿。当打完1024个像素后,我们需要等着等待行同步信号的到来,这段时间称为行同步前沿。HBP:行同步后沿。发送行同步信号后,需要等待一段时间开启电子枪,这段时间称为行同步后沿。VSYNC:帧同步信号。具体的和上面一样理解。

       软核构建

        因为ZYNQ7020系列并没有RGB的接口,所以,我们需要利用xilinx官方给的ip核构建一个软核LCD。这里给大家具体讲一下这个ip核的构思过程,不细讲了。

        VDMA为存储器提供高带宽存取,因为是视频流数据,所以对数据的实时性要求比较高。所以,VDMA就起到了为对输入输出的数据进行快速的处理。

            AXI4-Stream to VIdeo Out是将AXI4-Stream流的数据转换成能显示在LCD屏幕的数据。我们的LCD屏幕显示格式为RGB888,即会将数据转换成RGB888数据。

        Video Timing Controller:用于控制视频输出的时序参数,不同分辨率 LCD 所对应的时序
参数是不同的,此时我们就可以通过配置 Video Timing Controller IP 产生合适的时序参数驱动我们的 LCD 屏。和AXI4-Stream to VIdeo Out配合,根据时序来转换数据,因此才可以使数据现在在LCD屏上。

        其他的话就是通过RGB[23,15,7]这三位获得LCD屏幕的id,根据获得的LCD屏幕的id来给给屏幕的时钟和时序参数。

        HP属于高速接口,接口用于数据的传输,用于PS的存储器与VDMAip核的数据交换。CP属于低速接口,用于PS端控制。

根据lcd屏幕的不同,HDP,HTP,HYSNC,HORVAL都不同,所以我们在上面需要根据LCD屏幕的不同输出不同的时序。一个时钟输出一个像素,以此 Video Timing Controller来控制 AXI4-Stream to VIdeo Out的输出。

2)LCD屏的电容触摸的设计

        电容触摸屏是I2C接口的,所以我们需要将i2c连接到该触摸芯片上。我们这款LCD屏使用的触摸芯片是FT5206。对于这种i2c芯片,我们需要了解的是其寄存器配置。下面给出一些重要的寄存器描述。

          FT5206 的初始化流程非常简单,首先通过 CT_RST 引脚对 FT5206 进行一次复位,然 FT5206 进入正常工作模式。然后设置工作模式、中断状态、触摸阈值和激活周期等参数,就完成了对 FT5206 的初始化。 初始化完成便可以读取触摸坐标数据了,先读取 0X02 寄存器,判断有多少个有效触摸点,然后读取 0X03~0X1E 等寄存器,便可以获得触摸坐标数据。

        对于zynq芯片,我们打开了ps端自带的两个i2c,其中一个用于触摸屏的数据读取。

3)ov5640摄像头的原理和设计

        在开始讲关于摄像头的硬件搭建时,我们先来了解一下SCCB总线(串行摄像头控制总线)传输。SCCB总线兼容I2C总线,所以可以用I2C总线代替SCCB总线。该总线传输与I2C总线的传输基本上差不多,但有一个差别,即是在读取数据时,I2C写完器件地址和数据地址后,可以重新开始后进行读取。但SCCB总线没有重新开始,SCCB总线写完后,会发送停止信号。并且,SCCB总线的ACK为不必关心位,和I2C信号的ACK为响应信号不同。

        这里我们再讲摄像头工作原理。感光阵列(image array)在 XCLK 时钟的驱动下进行图像采样,输出我们配置的阵列(例如800*480)的模拟数据;接着模拟信号处理器在时序发生器(video timing generator)的控制下对模拟数据进行算法处理 (analog processing);模拟数据处理完成后分成 G(绿色)和 R/B(红色/蓝色)两路通道经过 AD 转换器 后转换成数字信号,并且通过 DSP 进行相关图像处理,最终输出所配置格式的 10 位视频数据流。模拟信号处理以及 DSP 等都可以通过寄存器(registers)来配置,配置寄存器的接口就是 SCCB 接口。

摄像头的工作原理是通过一系列步骤将光学信息转换成数字信号。

1. 感光阵列(Image Array):这是摄像头的核心部件,由许多感光元件(像素)组成。当光线射入时,每个像素会产生电荷,其数量取决于光的强度和颜色。

2. XCLK 时钟驱动采样:XCLK 是摄像头的时钟信号,用于同步感光元件的采样过程。在 XCLK 的驱动下,感光阵列按照一定的时间间隔进行图像采样,生成模拟数据。

3. 模拟信号处理器:采集到的模拟数据经过模拟信号处理器处理。这个处理过程可能包括去噪、色彩校正、白平衡等步骤,以提高图像质量。

4. 时序发生器(Video Timing Generator):控制模拟数据的时序和顺序。它确保数据按照正确的顺序传送到后续的处理单元。

5. AD 转换器:模拟数据经过模数转换器(AD 转换器),将其转换为数字信号。这一步将模拟数据转换成计算机可以处理的数字形式。

6. DSP 图像处理:数字信号经过数字信号处理器(DSP),进行图像处理,这可能包括锐化、色彩增强、边缘检测等操作。

7. 10 位视频数据流输出:最终处理后的数字数据以所配置格式的 10 位视频数据流的形式输出。这可以是一种特定的数据格式,例如 JPEG、MJPEG 或者 YUV 等。

8. 寄存器配置接口:模拟信号处理器和 DSP 的参数可以通过寄存器进行配置。配置寄存器的接口通常是 SCCB(Serial Camera Control Bus),这个接口用于通过串行通信协议对摄像头进行配置和控制。

这些步骤共同工作,使摄像头能够将光学信息转换为数字图像数据,并对其进行处理和输出。

在此,该部分的硬件配置如图

4)dht11的原理和设计

dht11温湿度传感器可以获取空气中温度和湿度的模块。

dht11是单总线通信,根据时序图去获取温湿度数据。

输出:推挽输出

输入:浮空输入

在输入模式下,需要注意的是模块有一个上拉电阻,所以,在时序图中,dht11输出1时,我们的单片机应该判断的是输入是0。反之即一样。

如何判断输入1还是0

总共会读取40位数据

8bit湿度整数+8bit湿度小数+8bit温度整数+8bit温度小数+8bit校验位

若前32位和=校验位,则读取数据正确

4)舵机的原理和设计

        舵机是通过PWM波控制的。PWM原理就是通过控制信号的一个周期的脉冲宽度来控制信号的幅度。舵机在本实验中充当门锁装置,舵机需要输出20ms的周期,占空比为0.5ms,旋转到0°。占空比为1.5ms,旋转到90°。

在该硬件设置中,我们需要自己定义一个PWM的ip核,用来输出pwm。具体的ip核我就不阐述了,原子哥已经给过了。

        其他的硬件知识就是比较简单了。大家自己去了解,不了解的在评论区中给出,我看到会给大家解答。后面我们发第二部分,关于各部分驱动程序的编写。如有错误,希望大家指正。

 

       

        

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值