Xilinx-ZYNQ7000:如何用XADC测外部温度值

网友投稿 500 2022-11-19

Xilinx-ZYNQ7000:如何用XADC测外部温度值

具体的参考手册如下:

ug480:7Series_XADC.pdf

xapp795:driving-xadc.pdf

xapp554:xadc-layout-guidelines.pdf

xapp1203:post-proc-ip-zynq-xadc.pdf

xapp1183:zynq-xadc-axi.pdf

xapp1182:zynq_axi_xadc_mon.pdf

xapp1172:zynq_ps_xadc.pdf

pg019:axi_xadc.pdf

pg091:xadc-wiz.pdf

ug953:vivado-7series-libraries.pdf

ug585:Zynq-7000-TRM.pdf

二、XADC的配置方法

本文采用vivado编译环境对XADC进行配置。

2.1 配置寄存器

在配置寄存器之前,首先要对两种寄存器进行解释说明。

控制寄存器:用于控制和确定处理器的操作模式以及当前执行任务的特性。

状态寄存器:用来存放两类信息,一类是体现当前指令执行结果的各种状态信息,另一类是存放控制信息。

通过写入C_BASEADDR + 0x300(基地址+偏移量)来定位到该寄存器的位置,下图为该寄存器的bit位对照图。

CAVG:这个比特位用于禁用计算校验系数的平均,使能为0,使能为1(平均固定在16个样本)。

AVG1、AVG0:这些位用于在单通道和序列模式下设置所选通道上的样本平均量。

MUX:这个比特位为外部多路复用,设置1即启动外部多路复用功能。(本文所采用的的VP/VN位专用PL端引脚,所以这里不进行多路复用)。

BU:这个比特位是进行单双极性的选择,双极性为1,单极性为0。本文采用的是模拟差分的输入方式,因为差分输入能够有效地降低干扰,实现数据更加稳定地传输。

event-driven sampling mode:该工作模式下,采样瞬间和随后的转换过程由一个称谓转换开关的触发信号启动,当需要对采样的时刻进行精确控制时,采用该模式。在该模式下,DCLK必须始终存在。

ACQ:在使用单通道模式时,该位用于将连续采样模式下的外部模拟输入的可用时间增加6次ADCCLK周期,如果没有设置ACQ位,则在收购的最后阶段允许使用4个ADCCLKs或150个ns。通过将此位设置为逻辑1,可以增加获取时间。

CH4~CH0:在单通道模式或外部多路复用模式下工作时,这些位用于选择ADC输入通道。

2. 配置控制寄存器Configuration register 1

通过写入C_BASEADDR + 0x304(基地址+偏移量)来定位到该寄存器的位置,下图为该寄存器的bit位对照图。

SEQ3~SEQ0:这些比特位用来使能通道序列。

Single Pass Mode:在这种操作模式下,序列操作一次通过序列通道寄存器,然后停止。

Continuous sequence mode:该模式相当于single pass mode的自动版,在一次操作结束后又会自动重新开始。

Auxiliary analog channels 0 to 7 are assigned to ADC A and are nominated as A channels.

Auxiliary analog channels 8 to 15 are assigned to ADC B and are nominated as B channels

Independent ADC Mode:通常用于报警模式和监测模式,在这种模式下,警报输出使能,并且使用者必须正确地配置报警阈值。与默认的测序模式一样,平均值固定在16个采样点。

ALM6~ALM0:这些位用于禁用温度的单个警报输出,1为禁用报警输出。

CAL3~CAL0:这些位使校准系数应用于ADC和片上供应传感器测量,1为使能校准,0位不使能。

OT:这个位用于禁用温度过高信号。通过将此位设置为逻辑1来禁用警报。

3. 配置控制寄存器Configuration register 2

通过写入C_BASEADDR + 0x308(基地址+偏移量)来定位到该寄存器的位置,下图为该寄存器的bit位对照图。

DRP:动态配置端口,可直接通过PL部分访问,也可以通过高级接口单元。

PD1、PD0:XADC的中断位。通过设置PD1 = PD0 = 1,可以永久关闭整个XADC块。

4. 配置序列寄存器Sequence Register 0:首先写入C_BASEADDR + 0x320(基地址+偏移量)来定位到该寄存器的位置,再通过写bit位来选择序列通道,本文采用VPVN序列通道,所以给第12位置1(0000_1000_0000_0000),具体对应表如下。

5. 配置输出寄存器:通过写入C_BASEADDR + 0x20C(基地址+偏移量)来定位到该寄存器的位置,在专用模拟输入通道(Vp/Vn)上A/D转换的12位MSB验证结果存储在此寄存器中。

2.2 结果换算

定义和一些计算所应用到的数据位数为16位(unsigned short),而我们所用到的只有12位,所以需要将数据进行右移4位来保证12位MSB验证结果能够完整的存储到寄存器中。

2.3 温度采集

本文采用PT100热电阻作为外部温度测量器件,通过搭建惠斯顿电桥,实现温度的采集。

计算公式:

V=VP0−VN0 V = VP0 - VN0V=VP0−VN0

Rpt=(13200+29000V)/(412.5−145V) Rpt = (13200 + 29000V)/(412.5 - 145V)Rpt=(13200+29000V)/(412.5−145V)

通过查找表或公式计算的方法,将电阻值转换为对应的温度值,以下给出“PT100温度-电压”对照表和各种类型的接线法。

b.三线制接法:如图4(b)所示,这种接法增加了用于A/D 采样的补偿线,三线制接法消除了连接导线电阻引起的测量误差,这种接法适用于中等测温距离的场合。

c.四线制接法:如图4©所示,这种接法不仅增加了A/D 采样补偿线,还加了一条A/D对地的补偿线,这样可以近一步的减小测量误差,可以用于测温距离较远的场合。如果只从精度上考虑,采用四线制接法效果最好。

调试完成后,接下来就是将程序固化到板子中,我大致介绍一下程序固化方法和启动流程。

3.1 程序的固化方法

如果大家觉得步骤很复杂的话,我用框图的形式总结了一下,可能会清楚点。

3.2 程序的启动流程

确定好启动方式后,BOOT ROM从相应的启动设备中(SD card/QSPI flash)加载到First Stage Bootloader (FSBL)到On Chip Memory(OCM)RAM,并将执行权交给FSBL。

四、总结

大致归纳一下XADC用到的基本知识(仅针对个人的学习笔记总结)。

3、XADC也需要参考电压,参考电压由芯片内部或外部决定。

4、VP/VN在多路复用通道外(XADC有17个通道),即PL引脚复用。

5、XADC模块的引脚封装均在BANK0中。

6、用VP/VN能够有效减小干扰,噪声相减则抵消。

7、VP-VN的电压输出范围是-0.5V ~ +0.5V,VP与VN相对于GNDADC电压必须大于0。

8、模拟信号通道在管脚配置时不需要加电压,数字信号通道在管脚配置时需要加电压,电压相当于一个标准(FPGA有1.8V 2.5V 3.3V),例如3.3V控制时,达到3.3V就相当于逻辑1,0V就相当于逻辑0。

9、掩码:是一串二进制代码对目标字段进行位与运算,屏蔽当前的输入位。

11、没有JTAG一般用Anolog-Input Mode(4Ch and 4Dh)配置。

通过实现利用XADC对温度的采集,我学习到了如何配置寄存器(直接用地址写寄存器的方式),学习到了什么是固化程序以及如何将程序固化到FPGA板卡中,这同时用到了vivado和sdk编译环境,理解了温度传感器的工作原理,最重要的是能够系统地对一项工程进行梳理,这对于学习FPGA有很大的帮助,希望以后能够通过学习和写博客的这种方式慢慢进步。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:springboot如何读取自定义properties并注入到bean中
下一篇:Python爬虫新手入门教学(十三):爬取高质量超清壁纸Python爬虫新手入门教学(十一):最近王者荣耀皮肤爬取
相关文章

 发表评论

暂时没有评论,来抢沙发吧~