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电缆
软件
-
Vivado Design Suite & Xilinx SDK 2019.1
-
必须使用版本2019.1生成项目
-
-
勤奋的董事会支持文件Vivado
-
遵循Vivado板文件为Digilent 7系列FPGA板关于如何安装Vivado板支持文件的指南。
-
-
Vivado-Hierarchies
-
遵循向Vivado IPI设计中添加分层块关于如何添加Pmod层次块的指南。
-
下载
下载并启动ZyboZ7-20 Pmod ToF演示
请阅读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)。
演示总体结构
描述
创建这个演示是为了展示Pmod ToF的功能。请查阅Pmod ToF分层块库文档,以全面描述包含Pmod驱动程序的层次块。除了这些功能之外,该演示还提供了两个扩展Pmod ToF功能的额外模块。
的UART模块提供系统板的UART接口(USB - UART接口)与上位机之间的通信。
的PmodToFCMD模块用于解释UART命令。
演示模块
除了Pmod ToF库模块外,还可以在Pmod ToF分层块库文档中,还有另外两个模块扩展了Pmod ToF功能。这些模块描述如下:
PmodToFCMD模块
PmodToFCMD模块实现了一个命令解释器,它具有以下功能:
-
该模块通过UART监听单个Pmod ToF命令。用户必须通过连接到Zybo Z7-20单板对应的USB端口的终端提供这些命令。
-
命令由PmodToFCMD模块识别,并通过对必要模块的调用实现。
-
命令解释器通过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);