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.

[参考译文] MSP430F5438A:如何使用计时器触发 ADC 以获得1k 采样/秒

Guru**** 2862450 points

Other Parts Discussed in Thread: MSP430F5438A

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/832441/msp430f5438a-how-trigger-adc-with-timer-to-get-1k-sample-sec

器件型号:MSP430F5438A

HELO 先生、

如何使用 CONSEQ=2和 MSC 的计时器触发 msp430f5438a ADC。

采样频率=~1kHz

使用的时钟为 SMCLK = 12MHz、在这里、我通过引用寄存器级示例、通过使用 UCS 模块更改了时钟频率设置。

此外、我还需要通过串行(UART)将 ADC 数据传输到 PC。

您能不能告诉我我我每秒能获得1k 个样本

谢谢

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

    在过去的一段时间里、我为 F5529发布了一个相关示例:

    https://e2e.ti.com/support/microcontrollers/msp430/f/166/p/647533/2381069

    我没有 F5438A、但查看数据表(SLAS655F)表6-8和6-10您的最佳选择可能是使用 SHS=3和 TB0.1 (该示例使用 F5529上的 SH=1和 TA0.1)。

    它假设 SMCLK=1MHz、这会影响 ADC_TIMER_PERIOD 的值。

    如果使用 CONSEQ=2、则应使用 MSC=0。 在这种情况下、您可以移除 ISR 中 ENC 的切换。

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

    您好、Shiva、

    我已经七天没有听到您的声音,因此我假设您能够解决您的问题。 如果情况并非如此,请单击“这无法解决我的问题”按钮,并使用更多信息回复此主题。 如果此主题锁定、请单击"提出相关问题"按钮、然后在新主题中描述您的问题的当前状态以及您可能需要帮助我们帮助解决您的问题的任何其他详细信息。

    此致、

    Johnson

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

    您好、先生、

    很抱歉耽误你的回答。

    1)在 MSP430F5438A 寄存器级示例中

    a) msp430x54xA_adc_12_02.c 示例对于稳定@~1MHz 的基准、有75us 的延迟、我正在使用12MHz 时钟(使用使用示波器测试的 UCS 模块)如果我使用 REF 模块、那么稳定基准的延迟可能是12*75us 吗?

    b)在 msp430x54xA_adc_12_06.c 中#define  Num_for_Results  8.

    为什么 num_for_samples 为8? 它是8个样本/秒、如果我需要1000个样本/秒、我是否需要将其更改为1000?

    2) 2)我想使用计时器(ADC12SHS_3)来触发 ADC、正如您说过的、使用 TB0.1、那么我如何计算计时器值(TB0CCR1)来获得1k 个样本?

    请澄清这些细节

    此致

    Shiva

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

    您好、Shiva、

    对于第一个问题、在 msp430x54xA_adc_12_02.c 的代码示例中、延迟函数主要用于稳定基准电压、因此不需要非常精确。 当您使用12MHz 时钟时,可以将其设置为75*12。 延迟时间也约为75us。

    在 msp430x54xA_adc_12_06.c 的代码示例中  、Num_for_results 的参数仅设置缓冲区的大小、不决定采样率。

    对于第二个问题、您可以使用 TB0.1来设置 计时采样、如果您想获得1K 采样、则需要满足 CCR 值、从零到1ms 内设置的值、这些值取决于 TB0.1时钟源、  您可以参考我们有关 TB0.1的代码示例、同时、ADC12SHSx 寄存器和 TB0.1具有相应的关系、如下图:所示

    我想您可以尝试以下方法、以便 在1秒内实现1000次的 AD 采样:

    设置1ms 计时器中断并在计时器中断中启动 AD 采样。 当然、这种方法可能会遇到其他问题。 这仅供您参考。

    此致

    Johnson

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

    2) 2)在链接的示例中(源自 ADC_06):

    >#define ADC_TIMER_PERIOD 20000     // 1MHz/20000 = 50Hz。 根据口味进行调整。

    反转算术、您可以尝试:

    >#define ADC_TIMER_PERIOD (12000000UL/1000UL)   // SMCLK=12MHz/RATE =1kHz -> 12000 (适合 uint16_t)

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

    您好、Shiva、

    我已经七天没有听到您的声音,因此我假设您能够解决您的问题。 如果情况并非如此,请单击“这无法解决我的问题”按钮,并使用更多信息回复此主题。 如果此主题锁定、请单击"提出相关问题"按钮、然后在新主题中描述您的问题的当前状态以及您可能需要帮助我们帮助解决您的问题的任何其他详细信息。

    此致、

    Johnson