当前位置:   article > 正文

MYIR-ZYNQ7000系列-zturn教程(21):用开发板上xadc的Vp和Vn测量输入的电压_赛灵思怎么通过xadc读输入电压

赛灵思怎么通过xadc读输入电压

开发板环境: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文件,因为这里是两个专用的管脚,这里只需约束电压就可以了

  1. set_property IOSTANDARD LVCMOS33 [get_ports Vp_Vn_v_n]
  2. set_property IOSTANDARD LVCMOS33 [get_ports Vp_Vn_v_p]

step4 导出硬件配置、打开SDK、新建fsbl

新建fsbl

step5  新建一个xadc_test工程

使用hello_world工程模板

主程序

  1. /*
  2. * main.c
  3. */
  4. #include "xsysmon.h"
  5. #include "xparameters.h"
  6. #include "xstatus.h"
  7. #include "xil_exception.h"
  8. #include "xil_printf.h"
  9. #include "sleep.h"
  10. #define XPAR_AXI_XADC_0_DEVICE_ID 0
  11. #define C_BASEADDR 0x43C00000
  12. int main()
  13. {
  14. u16 data;
  15. u32 data1;
  16. Xil_Out32(C_BASEADDR + 0x300 , 0x9103); //40
  17. Xil_Out32(C_BASEADDR + 0x304 , 0x3F0F);//41
  18. Xil_Out32(C_BASEADDR + 0x308 , 0x0400);//42
  19. Xil_Out32(C_BASEADDR + 0x320 , 0x800); //48
  20. while(1)
  21. {
  22. data = Xil_In32(C_BASEADDR + 0x20C);
  23. data = data >> 4;
  24. data = data*0.244;
  25. xil_printf("data = %03dmv\n\r",data);
  26. sleep(2);
  27. }
  28. return 0;
  29. }

生成一个BOOT.bin文件

四个测试点的电压如下图所示

Vp接的第一个测试点

切换到第二个测试点电压为70mv左右

第三个测试点100mv左右

第四个测试点135mv左右

最后我们断开所有的测试点将Vp悬空

可以看到我悬空了后这个管脚可以采集到电压为667mv左右,我用数字万用表测试这个悬空的电压为500多mv和这测量也比较接近

这个是将Vp接地后测量的电压,可以看到接地后这个Vp电压比较低为5mv左右,这就是这个xadc的所有的测量结果

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/509896
推荐阅读
相关标签
  

闽ICP备14008679号