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.

[参考译文] TMS570LS0914 ADC 转换器残桩

Guru**** 1821780 points
Other Parts Discussed in Thread: INA828, TMS570LS0914, HALCOGEN
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1055644/tms570ls0914-adc-converter-stucks

主题中讨论的其他器件:INA828TMS570LS0914HALCOGEN

大家好、

我使用失调电压为2.5V 的 INA828芯片(精密仪表放大器,也来自 TI)和微控制器 TMS570LS0914作为数据记录器。 我将通过 SPI 接收到的 ADC 数据存储在 SD 卡上。

ADC 转换器每100us 通过 RTI 中断启动一次。 我的测试信号是1kHz 测试信号。 因此、我有10次过采样。

如果我记录数据、ADC 转换器看起来会定期存根。

但是、如果我使用示波器来查看输入数据是否正确、这是绝对疯狂的。

有什么想法我必须去看?

此致

Lars

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Lars、

    您如何读取 ADC 转换结果? ADC 和 SPI 传输的设置是什么?

    是 SD 卡中记录器数据的第一张图片、还是 ADC 转换存储器中的原始数据?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我使用了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 的时间。