开发板环境:vivado 2017.1 ,开发板型号xc7z020clg400-1,这里主要实现的功能是用xadc的Vp和Vn来测量我们输入到开发
板上的电压,如下图所示
工程链接:https://pan.baidu.com/s/1JFJOHf84dn6Yf2OWi3oYhw 提取码:54a6
在底板上就是这两个脚了
并且我焊接了一个3.3v电源的一个简单分压电路,因这个xadc的测量电压范围只有1V,所以你自己做的分压
电路不要超过1V,因没有滑动变阻器所以只能手动焊接,虽然焊接得不好还能凑合(这里一共有16个测试点,我这里只测试
四个测试点的电压),这里我只是进行单通道的连续采集模式。(这里模式和寄存器的配置请参考xilinx的ug480和pg091手册)
step1 调用一个zynq核并且配置
如果不会配置我的工程里面提供一个配置文件大家导入就可以了
step2 调用一个xadc核并且配置
配置xadc
这里全部都不勾选
配置完成后如下图所示
引出Vp和Vn管脚
这里分配的地址之后SDK里配置时会用到
step3 综合、生成顶层文件、生成bit文件
xdc文件,因为这里是两个专用的管脚,这里只需约束电压就可以了
-
set_property IOSTANDARD LVCMOS
33
[get_ports Vp_Vn_v_n]
-
set_property IOSTANDARD LVCMOS
33
[get_ports Vp_Vn_v_p]
step4 导出硬件配置、打开SDK、新建fsbl
新建fsbl
step5 新建一个xadc_test工程
使用hello_world工程模板
主程序
-
/*
-
* main.c
-
*/
-
#include "xsysmon.h"
-
#include "xparameters.h"
-
#include "xstatus.h"
-
#include "xil_exception.h"
-
#include "xil_printf.h"
-
#include "sleep.h"
-
-
#define XPAR_AXI_XADC_0_DEVICE_ID 0
-
-
#define C_BASEADDR 0x43C00000
-
-
-
-
int main()
-
{
-
-
u16 data;
-
u32 data1;
-
-
-
Xil_Out32(C_BASEADDR +
0x300 ,
0x9103);
//40
-
Xil_Out32(C_BASEADDR +
0x304 ,
0x3F0F);
//41
-
Xil_Out32(C_BASEADDR +
0x308 ,
0x0400);
//42
-
Xil_Out32(C_BASEADDR +
0x320 ,
0x800);
//48
-
-
while(
1)
-
{
-
-
data = Xil_In32(C_BASEADDR +
0x20C);
-
data = data >>
4;
-
data = data*
0.244;
-
xil_printf(
"data = %03dmv\n\r",data);
-
-
sleep(
2);
-
}
-
-
return
0;
-
}
-
生成一个BOOT.bin文件
四个测试点的电压如下图所示
Vp接的第一个测试点
切换到第二个测试点电压为70mv左右
第三个测试点100mv左右
第四个测试点135mv左右
最后我们断开所有的测试点将Vp悬空
可以看到我悬空了后这个管脚可以采集到电压为667mv左右,我用数字万用表测试这个悬空的电压为500多mv和这测量也比较接近
这个是将Vp接地后测量的电压,可以看到接地后这个Vp电压比较低为5mv左右,这就是这个xadc的所有的测量结果