完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
` Xilinx FPGA器件特有的XADC(Xilinx Analog-to-Digital Converter)模块创新性的将模拟信号处理混合到FPGA器件中,便于对板级模拟信号采集、处理以及对板级温度、电源电压的监控。 XADC功能如图所示,内部有专门的温度传感器和供电传感器,用于监控FPGA器件本身的工作状态,也提供了1个独立的模拟电压输入通道(VP_0/VN_0)和16个复用的模拟电压输入通道(VAUXP/VAUXN)。内部的2个ADC有12bit位宽和1MSPS采样速率,可以外接精密基准电压源作为参考电压,基本能够满足一般应用。此外,也有专门的控制接口可以和FPGA逻辑互连,便于编程控制。供电电压监控的电压输入范围是0~3V,模拟电压输入通道的电压输入范围是0~1V。 图 XADC功能框图 集成XADC功能,需要例化XADC的IP核,然后通过访问XADC内部的寄存器实现模拟电压采集方式的设置,并读取转换后的模拟电压数据。XADC内部寄存器的映射如图所示。 图 XADC内部寄存器映射关系截图 在Zynq中,XADC模块通过AXI GP总线连接到PS。XADC相当于重新被封装为一个标准的AXI总线外设,它的寄存器映射关系也有所变化。在xilinx官方文档pg091-xadc-wiz.pdf中可以看到重新映射的寄存器地址。 关于Zynq的XADC应用,推荐大家参考xilinx下述3个文档。 ● pg091-xadc-wiz.pdf ● ug480_7Series_XADC.pdf ● ug585-Zynq-7000-TRM.pdf的Chapter 30 XADCInterface 本实例工程对应zstar_ex58。硬件上,XADC通过AXI接口连接到PS;PS编程读取XADC内部的温度和供电电压值,通过UART定时打印转换的最终温度和电压值。 2电压换算关系 模拟电压值换算 对于1个独立的模拟电压输入通道(VP_0/VN_0)和16个复用的模拟电压输入通道(VAUXP/VAUXN),它的输入范围是0~1V,参考电压1V。因此它读出的数据和实际电压值之间的换算关系如下: 对于12bit的ADC值,Vactual =Vdigital/4096 对于16bit的ADC值,Vactual =Vdigital/65536 温度值换算 从XADC的温度传感器读出的温度值,通过以下公式可以换算为实际的摄氏温度: 对于12bit的ADC值,Tactual =Tdigital*503.975/4096 – 273.15 对于16bit的ADC值,Tactual =Tdigital*503.975/65536 – 273.15 供电电压的换算公式 对于XADC中供电传感器读取的供电电压值,其量程范围是0~3V,参考电压3V。所以读取的值与实际电压之间的换算关系如下: 对于12bit的ADC值,Vactual =Vdigital*3/4096 对于16bit的ADC值,Vactual =Vdigital*3/65536 3 XADC IP添加与配置 在zstar_ex56工程实例的基础上,下面我们看看如何对XADC IP进行添加和配置。在Block Design的Diagram页面空白处单击右键,如图所示,点击Add IP…。 Search后输入关键词XADC,出现XADCWizard IP,双击添加这个IP到Diagram中。 和前面的操作一样,输入关键词axiinterconnect,将AXI Interconnect IP也添加到Diagram中。 新添加的2个IP模块如图所示。XADC无需多言,你懂得。这个AXIInterconnect的用处是将XADC的s_axi_lite接口转换到Zynq的AXI GP接口(AXI3),它相当于一个接口适配模块。 双击axi_interconnect_0组件,如图所示,弹出属性菜单中修改Number of Slave Interfaces和Number of MasterInterfaces都为1。 双击xadc_wiz_0组件,弹出属性菜单中修改如下。 ● 接口选项(InterfaceOptions)选择AXI4Lite,通过AXI Interconnect可以连接Zynq。 ● 时序模式(Timing Mode)选择Continuous Mode。 ● 启动通道选择(StartupChannel Selection)勾选Channel Sequencer。 ● 输入时钟频率(DCLKFrequency)输入100MHz。 ● ADC转换率(ADC Conversion Rate)输入1000KSPS,即所支持的最高速率。 ● 其它选项使用默认设置即可。 ADC Setup页面配置如图所示。 ● 序列模式(Sequencer Mode)选择Continuous Mode,即对ADC通道进行连续采集。 ● 通道平均(Channel Averaging)选择16,即XADC内部做16个连续采样值的均值滤波后输出。 ● 其它选项使用默认设置即可。 AlARMs页面如图所示,这里可以勾选需要进行监控的电压通道,并且可以设定报警闸值。 Channel Sequencer页面需要勾选TEMPERATURE、VCCINT、VCCAUX、VCCBRAM、VCCPINT、VCCPAUX、VCCDDRO和VP/VN,表示开启这些通道的ADC转换功能。 完成XADC的配置后,将axi_interconnect_0、xadc_wiz_0和processing_system7_0这3个模块连接如图所示。注意Vp_Vn是XADC的外部输入引脚,需要引出,若使用了XADC的16个复用通道,也一样要引出到顶层模块做引脚申明,并手动配置引脚号。 在Address Editor中,点击AutoAssign Address,确认xadc_wiz_0已经分配了相应的地址空间如图所示。 完成配置,生成新的PS系统后,更新顶层模块的接口,主要是XADC相关的几个新的接口,做相应连接(可以参考工程源码),然后重新编译整个Vivado工程。 4嵌入式软件编程 参考文档《玩转Zynq-工具篇:导出PS硬件配置和新建SDK工程.pdf》导出PS硬件工程,并打开EDK新建一个HelloWorld的模板工程。 重新编辑helloworld.c源码如下。在系统初始化(init_platform)后,依次读取XADC的温度采样值并转成实际温度值打印、读取XADC的VCCINT采样值并转成实际电压值打印、读取XADC的VCCAUX采样值并转成实际电压值打印、读取XADC的VP/VN采样值并转成实际电压值打印、读取XADC的VBRAM采样值并转成实际电压值打印。每隔5s做一次读取打印操作。 #include #include"platform.h" #include"xil_printf.h" #include"sleep.h" #include"xil_io.h" #defineXPAR_AXI_GP0_BASEADDR 0x43c00000 #defineXPAR_XADC_TEMPERATURE 0x200 #defineXPAR_XADC_VCCINT 0x204 #defineXPAR_XADC_VCCAUX 0x208 #defineXPAR_XADC_VPVN 0x20c #defineXPAR_XADC_VBRAM 0x218 intmain() { u32 temp; float voltage; init_platform(); printf("XADCTEST "); while(1) { printf(" "); temp = Xil_In32(XPAR_AXI_GP0_BASEADDR +XPAR_XADC_TEMPERATURE); temp = temp*503.975/65535 - 273.15; printf("Temperatureis %d degree ",temp); voltage =Xil_In32(XPAR_AXI_GP0_BASEADDR + XPAR_XADC_VCCINT); voltage = voltage/65536*3; printf("VCCINTis %f ",voltage); voltage =Xil_In32(XPAR_AXI_GP0_BASEADDR + XPAR_XADC_VCCAUX); voltage = voltage/65536*3; printf("VCCAUXis %f ",voltage); voltage =Xil_In32(XPAR_AXI_GP0_BASEADDR + XPAR_XADC_VPVN); voltage = voltage/65536; printf("VPVNis %f ",voltage); voltage =Xil_In32(XPAR_AXI_GP0_BASEADDR + XPAR_XADC_VBRAM); voltage = voltage/65536*3; printf("VBRAMis %f ",voltage); sleep(5); } cleanup_platform(); return 0; } 5板级调试 在Zstar板子上,设置跳线帽P3为JTAG模式,即PIN2-3短接。 连接好串口线(USB线连接PC的USB端口和Zstar板的UART接口)和Xilinx下载线(下载器连接PC的USB端口和Zstar板的JTAG插座)。使用5V电源给板子供电。 接着参考《玩转Zynq-工具篇:SDK在线运行裸跑程序.pdf》将zstar.bit文件和helloworld.elf文件烧录到Zynq中运行起来。 打开Putty,并设置好串口,可以看到如图缩回,每隔5s不断的打印采样到的当前温度和电压值。温度传感器在FPGA器件内部,因此采样到的Temperature值达到了52°C。 更多资料共享 腾讯微云链接:https://share.weiyun.com/5s6bA0s 百度网盘链接:https://pan.baidu.com/s/1XTQtP5LZAedkCwQtllAEyw 提取码:ld9c FPGA软件无线电开发(全阶视频教程+开发板+实例) ` |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
885个成员聚集在这个小组
加入小组4533 浏览 0 评论
特权同学 Verilog边码边学 Lesson01 Vivado下载与安装
2647 浏览 1 评论
玩转Zynq连载50——[ex69] FIR滤波器IP仿真实例
4332 浏览 2 评论
玩转Zynq连载49——[ex68] MT9V034摄像头的图像FFT滤波处理
5269 浏览 1 评论
玩转Zynq连载48——[ex67] Vivado FFT和IFFT IP核应用实例
5315 浏览 0 评论
1943浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 10:12 , Processed in 0.419438 second(s), Total 38, Slave 29 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号