除了在我的系统中建立一个固定延迟来考虑 SFOCAL (大约500ms)、是否可以轮询状态寄存器(位6)的 DRDYn 位来检查 SFOCAL 何时完成?
我们已经使用 ads124s08一段时间、但正在尝试提高电路板上电压/电流监视器的精度。 数据表中显示、使用 SFOCAL 校准失调电压应该很容易在我们的 FPGA 设计中实现、到目前为止、我们还没有成功。 任何帮助都将不胜感激,谢谢
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
除了在我的系统中建立一个固定延迟来考虑 SFOCAL (大约500ms)、是否可以轮询状态寄存器(位6)的 DRDYn 位来检查 SFOCAL 何时完成?
我们已经使用 ads124s08一段时间、但正在尝试提高电路板上电压/电流监视器的精度。 数据表中显示、使用 SFOCAL 校准失调电压应该很容易在我们的 FPGA 设计中实现、到目前为止、我们还没有成功。 任何帮助都将不胜感激,谢谢
如果有用、以下是我尝试从器件中捕获的步骤:
首先将多路复用器通道指针(‘CHAN’)初始化为0
步骤1:在 ADC 中配置以下寄存器:
REF (05h)= 39h
数据速率(04h)= 34h
INPMUX (02h)= 0Ch
步骤2:读回并验证在步骤1中配置的寄存器
步骤3:发送 START 命令
步骤4:发送 SFOCAL 命令
步骤5:等待1秒钟
第6步:将 INPMUX 设置为{ 、0xc}
步骤7:发送 START 命令
步骤8:等待100ms、然后发送 RDATA 命令
第9步:‘FPGA 中的寄存器中的 ADC 数据,将指针“CHAN”递增1 (如果‘CHAN’等于12,则复位为0),然后转至第6步
注释、
如果我跳过步骤4和5、我能够捕获数据、而不会出现任何问题。 但是、这不是解决方案、因为我需要补偿偏移
Kevin
很抱歉,我在上一篇文章中列出了我在发出 SFOCAL 命令后使用的简单延迟(1秒)的顺序,而不是我在第一篇文章中提到的状态轮询。
昨天晚上、我决定在阅读文章后尝试延迟方法、Bob 建议400ms 延迟对于 SFCAL 来说可能足够了(无论如何、对于该特定配置)。 我的最终目标是使用状态(DRDYn 位)轮询方法、但现在、如果我可以使延迟方法正常工作、那就会给我一段时间
尊敬的 Bob:
感谢你的帮助。
当您提到在 DRDY 或 DOUT/DRDY 中寻找由高电平到低电平的转换时、我认为您是指器件上的两个物理引脚(而不是我不知道的某些寄存器位)?
遗憾的是、这是一种现有设计、我们的客户已经在其系统中安装了许多模块。 遗憾的是、更改电路板以允许 FPGA 监控这些引脚不是一个选项。
考虑到这一事实、我需要修改 FPGA、使用两种方法中的一种来确保 SFOCAL 已经完成:
它听起来像是选项1)是一个非启动器件,因为 RDY 位(状态寄存器的位6)在这方面没有什么帮助,但我希望2)能起作用。 这是我在之前的帖子中描述的流程(步骤1至9)。
但是,我担心您的说法,即‘在 ADC 转换期间和转换完成之前,SFOCAL 必须是问题’。 鉴于 FPGA 无法监控 DRDY 或 DOUT/DRDY 引脚、使用基于 FPGA 状态机的方法、如何确保在发出 SFOCAL 命令时转换当前正在进行中?
在我的状态机设计中、我发送 START 命令、一旦 SPI 可用、我就发送 SFOCAL 命令。 当 SFOCAL 完成时、这是否保证转换正在进行中、或者是否可以 a)尚未开始、或 b)已经完成?
我意识到'DOUT/DRDY '引脚也是我用于 SPI 接口的引脚、因此 FPGA 已经将其作为 SPI 控制器实施的一部分进行监控。 因此、在理论上、我应该能够在发出 SFOCAL 命令后接入该信号并对其进行监控、以查找从高电平到低电平的转换。 但是、据我了解、我继续使用1秒固定延迟应该没有问题-这是正确的吗?
因此、如果固定延迟是可以的、那么这就不能解决在转换过程中如何确保发出 SFOCAL 命令的问题了?
如果有用、我已经捕获了 FPGA 内部的 SPI 信号、以显示 START 命令后跟 SFOCAL 命令。 如您所见、这些是背靠背的、但是否可以保证当 ADS124S08看到 SFOCAL 命令时、转换实际在进行中?
此外、我想提到的是、我使用的是单次转换模式。
请注意、该波形来自 Xilinx Vivado ILA、它实际上是一个"逻辑分析仪"、我已将其内置到 FPGA 中、用于调试该 SPI 接口。 您可以在顶部看到的时间刻度是时钟数、其中每个时钟的周期为4.56ns
Kevin
尊敬的 Bob:
很抱歉、我不知道您是在办公室外、无论如何都感谢您的回复。 如果您能向我提供任何信息、我们一定会不胜感激。
"您如何确定 SFOCAL 不工作?" 。
这是一个很好的问题。 答案是、无论我是否发出 SFOCAL 命令、我都会在转换后看到完全相同的读回值。 我想知道这是否合理、并且器件可能不需要更改偏移校准?
我目前正在更新状态机、以便在 SOFCAL (+等待时间)前后转储三个 OFCAL 寄存器、以查看它们是否发生了变化。
我将再次查看数据表、看看我是否可以确定延迟时间需要是多少。 我之前已经看过、但无法弄清楚、这就是为什么我超出了板面、现在决定使用1秒的延迟。 如果可能、我希望在我们产品的生产版本中将其降低。
我忘记问一个问题 参考我之前给出的序列、我是否必须为我使用的每个多路复用器设置发出 SFOCAL 命令、或者这是否重要?
Bob、我尝试了一个实验、修改了 FPGA 中的状态机、在 SFOCAL 命令之前和 SFOCAL (+等待时间)之后读取三个 OFCAL 寄存器、以查看是否有任何变化。 令我惊讶的是、这里虽然很小、但 结果如下:
SFOCAL 之前:00、00 (OFCAL2、OFCAL1、OFCAL0)
在 SFOCAL 之后:FF、FF、D7
在 SFOCAL 之前:FF、FF、D7
在 SFOCAL 之后:FF、FF、D5 *
在 SFOCAL 之前:FF、FF、D5
在 SFOCAL 之后:FF、FF、D6 *
在 SFOCAL 之前:FF、FF、D6
在 SFOCAL 之后:FF、FF、D6
在这里、您可以看到从运行到运行、OFCAL0的值正在(向上或向下)改变1或2。 这是否意味着自偏移校准正在工作?
我不知道原因、但我希望偏移的调整会更加剧烈、
Kevin
Bob、
我尝试了一个实验
我修改了 FPGA 中的状态机、以运行上述步骤、但不发送 SFOCAL 命令除外。 从电路板加电和 FPGA 加载开始、我可以确认我始终从三个 OFCAL 寄存器读取0。
因此、这似乎可以确认在我昨天的测试中、SFOCAL 实际上是在工作的。
接下来、我将确定校准需要多长时间、然后我将相应地调整我内置到 FPGA 中的固定延迟。 我还将查看是否可以监控 FPGA 中的 SPI 'DOUT/DRDY '引脚、作为我最初尝试工作的轮询方案的可能解决方案。
似乎我不能依赖'DOUT/DRDY '引脚来指示转换或校准何时完成。 在我的 FPGA 中、一旦 SPI 事务完成、我就会看到该引脚变为高电平-没有明显的延迟。
因此、我决定尝试从数据表中计算延迟、但遇到了一些困难、想知道您是否可以提供帮助? 下面是我的寄存器设置:
datarate = 14h (全局斩波被禁用、使用内部4.096Mhz 时钟、单次触发模式、低延迟滤波器、采样率= 20)
REF = 10h (基准监控器被禁用、正基准旁路被禁用、负基准旁路被禁用、内部2.5V 基准、内部基准被启用)
所有其他寄存器均为默认值
在数据表的表13中、我可以看到单次模式@ 20SPS 的数据转换时间为56.504ms
但是、我看到注释3、其中指出该时间不包括 DELAY[2:0]设置的 PGA 的可编程延迟。 但是、由于我不使用 PGA、我是否必须将其纳入延迟计算中?
对于自偏移校准、如何计算该时间? 。
在第9.3.14.1节"偏移校准"中、它提到了"SFOCAL 是一种自偏移校准、它使用 SYS_MON[2:0]= 001设置在内部将输入设置为中标度、并对偏移进行测量"和"在执行偏移校准后、 器件启动新的转换、而 DRDY 下降以指示新的转换已完成"
因此、如果我想知道 SFOCAL 的总时间是常规转换时间的两倍、或者我是否必须考虑器件将输入切换为中标度的额外延迟? 对于可编程延迟(delay[2:0])、我还必须将其考虑在内吗?
感谢您的帮助、
Kevin
尊敬的 Kevin:
只需回顾几件事情。 对于将要使用的基准设置、数据速率和 PGA 设置、应发出 SFOCAL 命令。 MUX 设置并不重要、因为 SFOCAL 使用内部短路来确定偏移。
如果您要使用显著增益、则更有可能看到更大的代码移位。 这是由于 LSB 值与增益128的增益之差、即增益为1。
SFOCAL 的总时间主要取决于进行校准时所用的 SYS 寄存器设置。 SYS 寄存器中的位设置是 CAL_SAMP 位、其中默认为8个样本。 线程中之前注释的大约400ms 时间用于20sps 数据速率(8 * 1/20sps)。
此致、
Bob B