手撕原子弹 发表于 2022-8-29 16:10:10

【Zynq】【XADC】Zynq使用XADC测量外部电压

### 简介

Zynq内部自带的XADC硬核,可用于测量和监控内部重要节点的电压和芯片温度等,并且还带有外部引脚可测量外部电压,其分辨率为12bit,单端测量范围为0~1V

### 工程配置

(1)添加PS端IP核,使用常规配置,并添加串口外设

(2)添加XADC IP核,其它保持默认,只修改通道为VAUX2

!(data/attachment/forum/202208/29/153016jill4jupu43jz43j.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")

(3)自动连线,并引出Vaux端口

!(data/attachment/forum/202208/29/153325yvq22ec7iiiqimnq.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")

(4)引脚分配,由于XADC是硬核,管脚已经固定,因此这里只能选择以下两个管脚

!(data/attachment/forum/202208/29/153510m4tpv44qw4uqt4uu.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")

(5)生成比特流并导出hdf文件

!(data/attachment/forum/202208/29/153612o535pq3cyuzapacq.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")

### 软件代码

创建SDK工程,在工程中新建main.c文件,将以下代码拷贝到main.c文件中

```
#include "xparameters.h"
#include "xadcps.h"
#include "stdio.h"
#include "sleep.h"

static XAdcPs XAdcInst;
static XAdcPs_Config *ConfigPtr;

int main()
{
      u16 ADC_Data;
      float Voltage;

      //初始化XAdc驱动
      ConfigPtr = XAdcPs_LookupConfig(XPAR_XADCPS_0_DEVICE_ID);
      XAdcPs_CfgInitialize(&XAdcInst, ConfigPtr,ConfigPtr->BaseAddress);

      XAdcPs_SetSequencerMode(&XAdcInst, XADCPS_SEQ_MODE_SAFE);
      XAdcPs_SetSeqChEnables (&XAdcInst, XADCPS_SEQ_CH_AUX02);
      XAdcPs_SetSequencerMode (&XAdcInst, XADCPS_SEQ_MODE_CONTINPASS);

      while(1)
      {
                ADC_Data = XAdcPs_GetAdcData(&XAdcInst, XADCPS_AUX02_OFFSET);
                Voltage = ADC_Data*1.0f/65536.0f;
                printf("The Current Voltage is %.3f Volts. \n",Voltage);
                sleep(1);
         }

      return 0;
}

```

保存并编译之后,将程序和比特流下载到开发板

### 验证设计

(1)将开发板串口连接到电脑并打开“SDK Terminal”连接串口,波特率为115200

!(data/attachment/forum/202208/29/160638uns44yuheuzc6us1.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")

(2)使用两根杜邦线连接开发板的PL端扩展口,红色接正极,黑色接负极或地

!(data/attachment/forum/202208/29/155725az75t66te65o865e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")

(3)这里我接的是一台直流稳压电源,设置为0.6V左右

!(data/attachment/forum/202208/29/155944vgrrmmmfhrnhelem.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")

(4)串口每隔一秒打印一次电压,测量的很准,也比较稳定

!(data/attachment/forum/202208/29/160941yz2lx0w0ixh02iez.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")

### 附件
页: [1]
查看完整版本: 【Zynq】【XADC】Zynq使用XADC测量外部电压