Zybo Z7-20 Pmod ToF演示用户指南

Digilent提供了一个针对Digilent Zybo Z7-20板的Pmod ToF演示,将与Xilinx SDK开发环境一起使用。
为了实现Pmod ToF功能,库访问Pmod ToF硬件。它有多个软件模块,对应不同的硬件模块。
它被设计在Digilent Zybo Z7-20板上运行,该板作为Pmod ToF的系统板。Pmod ToF连接到Zybo Z7-20,并通过Pmod连接器上的数字引脚访问。

概述

本用户指南的主要章节包括:

先决条件

硬件

  • Zybo Z7-20董事会
  • PMOD TOF.
  • 微型usb电缆

软件


下载

Zybo Z7-20 Pmod ToF项目库邮政编码Git存储库

下载并启动ZyboZ7-20 Pmod ToF演示

1)对于这个演示遵循步骤1),2)和5)SDK从使用Digilent Github演示项目教程。
2)确保你的Pmod ToF插入你的ZyboZ7-20的Pmod端口JB。

请阅读Pmod ToF硬件和校准细节节以获取使用此演示时的附加信息。

硬件配置

为这个演示实现的Vivado硬件配置(Vivado块设计)有以下特性:

  • 基本Zynq配置,启用UART_PS1
  • Pmod ToF层次结构块(在vivado库的层次结构分支中找到,参见先决条件),其中包含以下ip:
    • AXI IIC
    • 阿喜GPIO.
    • Pmod桥

在这个演示中,Pmod ToF必须插入Zybo-Z7-20上的Pmod连接器JB中。用户可以选择使用不同的Pmod连接器,但XDC文件中约束的引脚必须更改为新的Pmod连接器。

当使用Pmod ToF分级块时,用户必须连接Pmod ToF的上拉跳线(JP1、JP2、JP3和JP4)。

下图显示了块设计。

下图显示了PmodToF分层块设计(PmodToF_0扩展)。

演示总体结构

下图显示了演示模块以及它们之间的链接。

描述

创建这个演示是为了展示Pmod ToF的功能。请查阅Pmod ToF分层块库文档,以全面描述包含Pmod驱动程序的层次块。除了这些功能之外,该演示还提供了两个扩展Pmod ToF功能的额外模块。

UART模块提供系统板的UART接口(USB - UART接口)与上位机之间的通信。

PmodToFCMD模块用于解释UART命令。

演示模块

除了Pmod ToF库模块外,还可以在Pmod ToF分层块库文档中,还有另外两个模块扩展了Pmod ToF功能。这些模块描述如下:

PmodToFCMD模块

PmodToFCMD模块实现了一个命令解释器,它具有以下功能:

  1. 该模块通过UART监听单个Pmod ToF命令。用户必须通过连接到Zybo Z7-20单板对应的USB端口的终端提供这些命令。
  2. 命令由PmodToFCMD模块识别,并通过对必要模块的调用实现。
  3. 命令解释器通过UART发送命令的输出消息(请参阅UART模块),可以在终端中看到。

重要的是要遵守每个司令部的预期形式。函数中实现命令解释器循环PmodToFCMD_CheckForCommand函数。
以下列表列举了在PmodToFCMD模块中实现的命令:

有关校准的详细信息,请参见校准部分Pmod ToF分层块库文档。

PmodToFCMD_CheckForCommand

剧情简介:

空白PmodToFCMD_CheckForCommand ();

参数:

<无>

返回值:

<无>

描述:

这个函数检查UART是否收到了命令。

它将接收到的命令与命令数组中定义的命令进行比较。如果识别出该命令,则相应处理该命令。

例子:

# include“PmodToFCMD.h”

PmodToFCMD_CheckForCommand ();


ToFMeasure

句法:

“ToFMeasure”

描述:

该命令启动测量并显示设备通过UART测量的距离。在运行此命令之前,重要的是执行手动校准,或者将校准存储在中,然后从eepm从用户区域或工厂校准恢复eepm

参数:

<无>

回应:

发出命令后:“OK,距离测量D = x mm。”


ToFStartCalib

句法:

“ToFStartCalib, <距离值>”

参数:

<距离值> 这是实际距离值,以米为单位进行手动校准。
距离必须大于5厘米(0.05米)。

例子:

“ToFStartCalib, 1.5”

在1.5米的距离进行校正。

描述:

这个命令执行手动校准。它调用所有3校准例程描述在ISL29501固件程序(an1724.pdf)文档。

回应:

回答 意义
“好了,开始校准……” 校准距离参数大于5cm。
“错误,校准距离不正确(距离小于5厘米)。” 误差,距离值参数小于5厘米。
"错误,无法开始手动校准。" 错误,无法启动校准,eepm或ISL29501设备繁忙。


ToFSaveCalib

句法:

“ToFSaveCalib”

参数:

<无>

描述:

该命令用于将校准数据写入eepm
这个命令应该在校准数据发生更改后发出(在手动校准之后),以便将它们保存在非易失性存储器中。

回应:

回复 意义
"好的,校准存储到eepm用户空间。” 成功。
“错误,TOF读取I2C错误。” 错误,无法通过I2C通信读取ISL29501寄存器。
" ERROR, EPROM write over I2C ERROR . " 错误,写失败eepm内存通过I2C通信。


ToFRestoreFactCalib

句法:

“ToFRestoreFactCalib”

参数:

<无>

描述:

该命令用于从中恢复出厂校准数据eepm.当运行此命令时,工厂校准数据来自eepm是读取然后写入用户校准区域的eepm并进入ISL29501寄存器。

回应:

回复 意义
“好吧,工厂校准恢复。” 成功。
“错误,无效eepm神奇的数字。” 错误,读取数据时错误的CRCeepm
“错误,无效eepm校验和。” 错误,错误的魔术数字读取数据时eepm
“错误,TOF读取I2C错误。” 错误,无法通过I2C通信读取ISL29501寄存器。
”错误,eepm写I2C错误"。 错误,写失败eepm内存通过I2C通信。


ToFReadSerialNo

句法:

“ToFReadSerialNo”

描述:

该命令从中检索12位序列号信息eepm并在UART上显示Pmod的序列号。

参数:

<无>

回应:

回复 意义
“好吧,工厂校准恢复。” 成功。
“错误,无效eepm神奇的数字。” 错误,读取数据时错误的CRCeepm
“错误,无效eepm校验和。” 错误,错误的魔术数字读取数据时eepm


UART模块

UART模块使用Zybo Z7-20单板的UART_PS1硬件接口,连接USB - UART,实现与主机通信所需的功能。
例如,使用该模块,可以通过USB电缆实现Zybo Z7-20和PC之间的UART通信。将Zybo Z7-20连接到PC创建一个新的COM端口,可用于简单的终端应用程序。
该模块在不中断的情况下初始化UART。轮询方法用于接收可用字符。
这个模块没有PmodToF功能。它只是用于提供通信功能。它不必包含在不需要通信的应用程序中(例如,一个应用程序使用液晶显示器连接到Zybo Z7-20板)。我们建议将模块初始化在波特率为115200一个基本的应用程序。
此模块仅由PmodToFCMD模块
该模块提供了:
——初始化函数:

—字符串发送功能:

—字符串接收功能:

UART_Init

剧情简介:

与UART_Init (u32 dwBaudRate);

参数:

u32 dwBaudRate UART传输速率
例如115200对应115200波特率

返回值:

uint8_t -错误码:

ERRVAL_SUCCESS 0 成功
ERRVAL_DMM_UARTERROR 0 xee UART初始化错误

描述:

该函数以指定的波特率初始化UART-PS控制器。

例子:

# include“uart.h”

UART_Init (115200);

UART_PutString

剧情简介:

空白UART_PutString (char szData [])

参数:

char szData [] 包含要通过UART传输的字符的零终止字符串

返回值:

<无>

描述:

这个函数通过UART1传输以null结尾的字符串中的所有字符。
不发送终止null字符。

例子:

# include“uart.h”

UART_PutString(“Hello World \ r \ n”);

UART_GetString

剧情简介:

uint8_t UART_GetString(char* pchBuff, int cchBuff)

参数:

char * pchBuff 一个指向char缓冲区的指针,用来保存接收到的以零结束的字符串
int cchBuff 用于保存以零结束的字符串的缓冲区大小

返回值:

<无>

描述:

这个函数提供了一个通过UART1接收的以空结束的字符串,该字符串由UART中断处理程序放置在循环缓冲区中。

如果接收到的字符串在循环缓冲区中可用,则将该字符串复制到pchBuff字符串中并返回其长度。

否则,函数返回0。

例子:

# include“uart.h”

cchi = UART_GetString(uartCmd, 0x40);