芯路恒电子技术论坛

 找回密码
 立即注册
热搜: 合集
查看: 4411|回复: 0

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

[复制链接]

该用户从未签到

59

主题

73

帖子

764

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
764
发表于 2022-8-29 16:10:10 | 显示全部楼层 |阅读模式

简介

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

工程配置

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

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

image.png

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

image.png

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

image.png

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

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

image.png

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

image.png

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

image.png

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

image.png

附件

XADC_Measure.zip

6.67 MB, 下载次数: 177

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|芯路恒电子技术论坛 |鄂ICP备2021003648号

GMT+8, 2024-5-2 21:51 , Processed in 0.128514 second(s), 35 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc. Template By 【未来科技】【 www.wekei.cn 】

快速回复 返回顶部 返回列表