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

一、xadc简介
zynq器件xadc模块包括2个12比特1 mips的模数转换器和相关的片上传感器,内置温度传感器和功耗传感器,可实时监测片内结温、各路电压数据,并可输出告警信号。
xadc模拟输入包括专用模拟输入vp/vn和16组复用模拟信号输入vaux(15:0);xadc转换结果可以通过动态重配接口(drp)或者jtag接口输出;告警信号可通过alm(7:0)输出,并有专用的温度告警信号ot。
xadc还包括几个支持测量芯片上电源电压和模具温度的片上传感器。adc转换数据存储在称为状态寄存器的专用寄存器中。这些寄存器可以通过fpga互连访问,使用一个16位同步读写端口,称为动态重新配置端口(drp)。adc转换数据也可以通过jtag tap访问,可以在配置之前(预配置),也可以在配置之后访问。对于jtag tap,用户不需要实例化xadc,因为它是一个专用接口,使用现有的fpga jtag基础结构。正如后面所讨论的,如果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进行配置。
在对xadc进行寄存器配置之前,首先要在vivado中进行硬件电路的搭建,这部分内容可以通过建立block块完成,具体配置方法请参考https://blog.csdn.net/taowei1314520/article/details/83656386。本文借助外部vpvn测量端口,通过搭建惠斯顿电桥进行温度的测量(具体方法后面会详细介绍到),所以需要在搭建硬件电路时引出vpvn和配置xdc管脚约束。
2.1 配置寄存器
在配置寄存器之前,首先要对两种寄存器进行解释说明。
控制寄存器:用于控制和确定处理器的操作模式以及当前执行任务的特性。
状态寄存器:用来存放两类信息,一类是体现当前指令执行结果的各种状态信息,另一类是存放控制信息。
1.配置控制寄存器configuration register 0
通过写入c_baseaddr + 0x300(基地址+偏移量)来定位到该寄存器的位置,下图为该寄存器的bit位对照图。
cavg:这个比特位用于禁用计算校验系数的平均,使能为0,使能为1(平均固定在16个样本)。
avg1、avg0:这些位用于在单通道和序列模式下设置所选通道上的样本平均量。
mux:这个比特位为外部多路复用,设置1即启动外部多路复用功能。(本文所采用的的vp/vn位专用pl端引脚,所以这里不进行多路复用)。
bu:这个比特位是进行单双极性的选择,双极性为1,单极性为0。本文采用的是模拟差分的输入方式,因为差分输入能够有效地降低干扰,实现数据更加稳定地传输。
ec:这个比特位用于为xadc采样模式,1为event-driven sampling mode,0为continuous sampling mode。
event-driven sampling mode:该工作模式下,采样瞬间和随后的转换过程由一个称谓转换开关的触发信号启动,当需要对采样的时刻进行精确控制时,采用该模式。在该模式下,dclk必须始终存在。
continuous sampling mode:该工作模式下,adc在当前转换周期结束时自动启动新的转换,adc持续对选定的模拟输入进行转换,模数转换过程由采集阶段和转换阶段两部分组成。
acq:在使用单通道模式时,该位用于将连续采样模式下的外部模拟输入的可用时间增加6次adcclk周期,如果没有设置acq位,则在收购的最后阶段允许使用4个adcclks或150个ns。通过将此位设置为逻辑1,可以增加获取时间。
ch4~ch0:在单通道模式或外部多路复用模式下工作时,这些位用于选择adc输入通道。
2. 配置控制寄存器configuration register 1
通过写入c_baseaddr + 0x304(基地址+偏移量)来定位到该寄存器的位置,下图为该寄存器的bit位对照图。
seq3~seq0:这些比特位用来使能通道序列。
default mode:在这种操作模式下,xadc自动监控芯片上的传感器,并将结果存储在状态寄存器中。这两种adc都是在这种模式下校准的,所有传感器都使用平均16个样本。xadc在此模式下独立于任何其他控制寄存器设置操作。
single pass mode:在这种操作模式下,序列操作一次通过序列通道寄存器,然后停止。
continuous sequence mode:该模式相当于single pass mode的自动版,在一次操作结束后又会自动重新开始。
simultaneous sampling mode:在该模式下,测序器通过8对辅助模拟输入通道自动进行同步采样和转换,这在需要保留两个信号之间的相位关系的应用程序中非常有用,大部分用于多路复用情况下。
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位对照图。
cd7~cd0:这些位用于选择adc的drp时钟(dclk)和低频率adc时钟(adcclk)之间的分频比。
drp:动态配置端口,可直接通过pl部分访问,也可以通过高级接口单元。
所有xadc计时同步到drp时钟(dclk)。adcclk是通过将dclk在配置寄存器2中分频得到的。
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验证结果能够完整的存储到寄存器中。
将adc的外部模拟输入通道配置为双极时,它们可以容纳真正的差分和双极模拟信号类型。双极模式下adc的输出编码是双极模式下的补码,用来表示vp上输入信号相对于vn的符号。设计代码转换发生在连续整数lsb值,也就是说,一个lsb、两个lsb、三个lsb等。伏特的lsb大小即1个数据位等于244uv。
2.3 温度采集
本文采用pt100热电阻作为外部温度测量器件,通过搭建惠斯顿电桥,实现温度的采集。
1、将xadc在pl端的vpvn引脚直接接在电桥上,利用pt100在不同温度下电阻值发生变化的原理,实现vp/vn电压差的改变,根据公式计算得出温度值,下图为惠斯顿电桥。
计算公式:
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)
2、pt100 是电阻式温度传感器,测温的本质其实是测量传感器的电阻,通常是将电阻的变化转换成电压或电流等模拟信号,再将模拟信号转换成数字信号,再由处理器换算出相应温度。
通过查找表或公式计算的方法,将电阻值转换为对应的温度值,以下给出“pt100温度-电压”对照表和各种类型的接线法。
a.二线制接法:如图4(a)所示,这种接法不考虑pt100 电缆的导线电阻,将a/d 采样端与电流源的正极输出端接在一起,这种接法由于没有考虑测温电缆的电阻,因此只能适用于测温距离较近的场合。
b.三线制接法:如图4(b)所示,这种接法增加了用于a/d 采样的补偿线,三线制接法消除了连接导线电阻引起的测量误差,这种接法适用于中等测温距离的场合。
c.四线制接法:如图4©所示,这种接法不仅增加了a/d 采样补偿线,还加了一条a/d对地的补偿线,这样可以近一步的减小测量误差,可以用于测温距离较远的场合。如果只从精度上考虑,采用四线制接法效果最好。
三、下载与调试
调试完成后,接下来就是将程序固化到板子中,我大致介绍一下程序固化方法和启动流程。
3.1 程序的固化方法
一般在调试程序的过程中fpga用的是jtag模式,不需要片外配置芯片,是直接将我们编写的程序下载到fpga的片内ram中,掉电不保留数据。而固化的目的是使板卡掉电不丢失程序,通常在调试阶段需要多次启动,每次上电都重新下载程序是一件很麻烦的事情,所以将程序固化进去会方便很多,下面是固化程序的参考流程。
https://blog.csdn.net/wmyan/article/details/79292778
如果大家觉得步骤很复杂的话,我用框图的形式总结了一下,可能会清楚点。
3.2 程序的启动流程
zynq7000 soc芯片可以从flash启动,也可以从sd卡里启动。zynq7000 soc芯片上电后,先运行的是arm系统(ps端)。然后通过arm系统软件部分加载fpga的比特流文件.bit至fpga(pl端),启动fpga逻辑功能。
boot rom:开发板上电,z7000会先执行片内boot rom 代码,boot rom代码读取boot mode寄存器决定哪一种启动方式(sd card/qspi flash/jtag)。
确定好启动方式后,boot rom从相应的启动设备中(sd card/qspi flash)加载到first stage bootloader (fsbl)到on chip memory(ocm)ram,并将执行权交给fsbl。
fsbl:(a)初始化cpu,初始化串口。(b)ps一些控制器初始化。(c)禁止l1 data cache。(d)注册arm中断向量。(e)通过boot mode寄存器判断启动方式。
3.3 程序的测试
通过uart串口输出,借助串口调试助手可以看到实时的温度数值,完成测试。
四、总结
大致归纳一下xadc用到的基本知识(仅针对个人的学习笔记总结)。
1、轮询模式:cpu重复检查设备的状态寄存器,直到寄存器的值表明i/o操作已经完成。
2、多路复用器mux:能够接收多个信号,按每个信号可恢复方式合成单个输出信号。
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、掩码:是一串二进制代码对目标字段进行位与运算,屏蔽当前的输入位。
10、状态寄存器只能查看工作状态(read only),控制寄存器可以配置(read and write)。
11、没有jtag一般用anolog-input mode(4ch and 4dh)配置。
通过实现利用xadc对温度的采集,我学习到了如何配置寄存器(直接用地址写寄存器的方式),学习到了什么是固化程序以及如何将程序固化到fpga板卡中,这同时用到了vivado和sdk编译环境,理解了温度传感器的工作原理,最重要的是能够系统地对一项工程进行梳理,这对于学习fpga有很大的帮助,希望以后能够通过学习和写博客的这种方式慢慢进步。

ADAS+智慧出行,自动驾驶两手都要抓
Visual Studio Code 1.70现已发布
如何在家远程控制办公室电脑,进行远程办公
地平线旭日X3派试用 | ssh密钥登陆 蓝牙手柄连入ros
Kepware助力ZPI实现对制造工艺高度自动化的追求
Xilinx-ZYNQ7000:如何用XADC测外部温度值
美国运营商威瑞森Verizon已在芝加哥和明尼阿波利斯开启了5G无线网络
基于高精度Σ-ΔADC和DSP的广播级数字音频延时器
基于人工智能和区块链技术的Skychain项目将彻底改变医疗行业
模拟量子计算在未来还将面临诸多挑战
空中客车公司在2019年的飞机交付数量总结分析
波音计划将于明年1月份停产737MAX飞机
沁恒股份8位USB设备单片机: CH552概述
剖析最为复杂的低功耗MCU STM32U5
灵云全智能能力平台之语音合成(TTS)能力服务
科学与艺术的碰撞 MWC上海惊现安迪·沃霍尔继承人
半导体熊市来临,全球芯片产业即将见顶!
Shark鲨客蒸汽洗地机AWE发布亮相 洗地机迎来“蒸汽”时代
看AVR软USB接口如何解决传统RS232接口数据采集的诸多问题
能源行业未来发展趋势 解读2023能源行业五大趋势