赞
踩
开发板环境: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 LVCMOS33 [get_ports Vp_Vn_v_n]
- set_property IOSTANDARD LVCMOS33 [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的所有的测量结果
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。