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.
大家好、
我目前在尝试使用指定的 ADC 持续读取数据时遇到难题。 在我的应用中、该器件成功使用不同输入执行测量循环。 然而、在特定事件期间、我需要连续读取特定输入 并以特定的速率(1k S/s)进行采样。 我面临的问题是、每次发生该事件时、我都会将寄存器设置为 RDATAC 模式、但返回的测量值包含与我尝试获取的实际测量值无关的随机值。
我捕获了一些示波器镜头、并观察到 MIMO 总线上存在这些不寻常的值。 因此、它们不是由我的通信系统中任何形式的噪声引起的。
要启用 RDATAC 模式、我将配置四个寄存器并使用三个命令。 此寄存器包括 STATUS (启用输入缓冲器)、MUX (将+AIN6和-AIN7设置为差分输入)、ADCON (针对单位增益)、和 DRATE (针对2k S/s 上的采样)。
附件是供您参考的示波器屏幕截图。
写入这些寄存器后、会引入2ms 的延迟。 随后、RDATAC、SYNC 和 WAKEUP 命令按此顺序执行、每条命令以2ms 的延迟间隔。
此初始化之后、每当发生 DRDY (Pin)外部事件时、我都会使用 RDATA 命令、将返回值存储在缓冲区中、大小为1000。 尽管为2k S/s 设置了 DRATE、但我始终每1ms 收到一个测量值(奇怪的行为、但不是问题)。
下表显示了返回值以及第一个测量值(Cap_Sample [0])的范围触发器。
预期测量是初始值约为0.156V 的电容式放电(100nF 与1MOhm 并联)。
您能帮我找到我做错了什么吗?
尊敬的 Lucas Rosa:
作为供参考、如果您使用 RDATAC 模式、则无需发出 RDATA 命令。 RDATAC 模式的整体用途是、一旦您开始发出 SCLK、ADC 就会输出数据。
如下图所示、当您发送 RDATA 命令时、您要在 DIN (MOSI)上发送哪些其他命令? 在数据事务期间不应发送任何其他内容。 除了0x00 (NOP)命令外、这些命令看起来也不像有效命令
您能否提供一些简短的伪代码来帮助我了解预期的固件流程? 请不要发送实际的代码、而是简单分步地描述您正在执行的操作。 听起来您正在混合 SDATAC 和 RDATAC 模式、并且不清楚您是否要在各个通道间进行多路复用(我假设是这样、否则您为什么会使用8通道 ADC)
-Bryan
您好、Bryan:
感谢您的帮助。 我最初忽略了 RDATA 命令在 RDATAC 操作中不是必需的。 关键的解决方案是确保 MOSI 总线在 MISO 传输期间保持低电平。 由于传输了用于生成 SCK 的非空虚拟数据、因此发送随机值时会出现问题。 我故意发送0x00 0x00 0x00来解决此问题、现在测量结果是准确的。
再次感谢您的帮助!
尊敬的 Lucas Rosa:
很高兴我们可以帮助您快速解决此问题!
-Bryan