大家好、
我使用失调电压为2.5V 的 INA828芯片(精密仪表放大器,也来自 TI)和微控制器 TMS570LS0914作为数据记录器。 我将通过 SPI 接收到的 ADC 数据存储在 SD 卡上。
ADC 转换器每100us 通过 RTI 中断启动一次。 我的测试信号是1kHz 测试信号。 因此、我有10次过采样。
如果我记录数据、ADC 转换器看起来会定期存根。
但是、如果我使用示波器来查看输入数据是否正确、这是绝对疯狂的。
有什么想法我必须去看?
此致
Lars
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.
大家好、
我使用失调电压为2.5V 的 INA828芯片(精密仪表放大器,也来自 TI)和微控制器 TMS570LS0914作为数据记录器。 我将通过 SPI 接收到的 ADC 数据存储在 SD 卡上。
ADC 转换器每100us 通过 RTI 中断启动一次。 我的测试信号是1kHz 测试信号。 因此、我有10次过采样。
如果我记录数据、ADC 转换器看起来会定期存根。
但是、如果我使用示波器来查看输入数据是否正确、这是绝对疯狂的。
有什么想法我必须去看?
此致
Lars
您好!
我使用了100us RTI 中断、在此中断例程中、我实现了以下代码行:
adcStartConversion (adcREG1、adcGROUP1);
while (!adcIsConversionComplete (adcREG1、adcGROUP1));
ulAdcStatus = adcGetData (adcREG1、adcGROUP1、&ADC1_DATA[0]);
我将 ADC 数据存储在双缓冲器中。 在第二个 RTI 中断例程12.8ms (128个值)中、一个缓冲器的数据通过 SPI 发送到 SD 卡。 第二个缓冲器用新的 ADC 数据填充。 我还使用了"retentrant_IRQ.h"、以便100us RTI 任务可以中断12.8ms 任务。
因此、我使用了以下 ADC 设置:
我的 SPI 设置为:
因此、我认为我使用的是正常设置、没有什么特别的。
此致
Lars
有关您的问题的另一个信息:
是 SD 卡中记录器数据的第一张图片、还是 ADC 转换存储器中的原始数据?
这两个图都显示了通过 ADC 转换器记录并存储在 SD 卡上的数据。
第一张图片包含 ADC 测量并存储在 SD 卡上的值。 但不使用示波器。
第二张图片包含 ADC 测量并存储在 SD 卡上的值。 但是、我使用示波器来验证我的输入数据是否真的正确。 这是我不理解的。 如果我使用示波器、一切都可以、工作正常。 如果我不使用示波器、ADC 转换器似乎会出现残桩。 看起来是周期性的残桩、但在12.8ms 的任务中不是如此。 大约为20ms。 但我没有任何20ms 的任务。
此致
Lars
您好、Lar、
[引用 userid="262296" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1055644/tms570ls0914-adc-converter-stucks/3907960 #3907960"]我还使用了"retentrant_IRQ.h"、以便100us RTI 任务可以中断12.8ms 任务。您是否使用在第二个 RTI (12.8ms) ISR 中重新启用 IRQ 的 Nexed 中断? 通常、中断 ISR 中的 IRQ 被禁用、因此另一个中断必须等待当前 ISR 完成。
您是否测量了使用 PMU 结束 RTI ISR 所花费的时间? 我认为如果使用 HALCoGen 生成的 API:spiTransmitData(),可能需要10ms 以上的时间。 从图1中可以看到、大约12~15 ADC 数据丢失。
您能否使用多缓冲 SPI 代替兼容 SPI? MibSPI1 TG0可支持多达256个缓冲器。 在第二个 RTI ISR 中、您只需使用 CPU 或 DMA 将128数据从缓冲器1复制到 MibSPI SRAM、并触发 MibSPI 传输。 这样、第二个 RTI 可能需要不到1ms 的时间。