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.

[参考译文] MSP430F6459-HIREL:如何从内部 DAC 生成 I 相和 Q 相数据

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1299783/msp430f6459-hirel-how-to-generate-i-phase-and-q-phase-data-from-internal-dac

器件型号:MSP430F6459-HIREL

您好!

如何 从微控制器的 DAC0和 DAC1生成 I 相和 Q 相(正弦和余弦)数据,且 峰峰值电压必须为0.9V?

在哪里可以找到生成 I - PHASE 和 Q - PHASE 数据的示例代码?

此致、

Mounika

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

    尊敬的 Mounika:

    我们没有创建正弦波的示例代码,但我会给你一些建议开始。

    1. 您可以使用值的查找表/数组来生成正弦波。 如果您希望正弦和余弦同步、则可以使用相同的数组、并从峰值/零点开始、从中点开始。 然后在更新 DAC 时逐步操作数组。
    2. 由于您想要0.9V 作为峰值、我建议使用1.5V 内部基准(假设您未使用外部基准)。 ≈的最大值将为0.9 * 4096 μ A 3686 (以十六进制表示为 E66)。
    3. 有多种方法来决定何时更新 DAC。 由于您想要一个正弦波、我建议使用一个计时器、以便为 DAC 定义一个周期/频率。 请参见 TRM 中的 DAC12LSELx 寄存器。

    TRM 链路 -我强烈建议查看 TRM 的 DAC12部分。

    DAC 代码示例- 设置 DAC0、设置 DAC1

    此致、
    卢克

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

    对于 cos、只需以1/4的方式开始查找表(或3/4、具体取决于您需要前导或滞后)、因此不需要两个查找表。

    请注意、这是一个简单的无调制正弦波、

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

    下面是一个我粘贴到我的项目中的函数,当我需要静态/不经常生成一个 sin ()表。 它使用浮点 sin (),所以你不想太频繁地执行它。 也许您可以将其改编为有用的内容。

    #include <math.h>               // sin(), M_PI
    #define OSR     100000UL        // Output rate 100ksps
    #define SIN_HZ  (1000L)		    // sin() frequency
    #define DACTOP  (1L << 12)      // 12-bit DAC
    #define DACMID  (DACTOP/2-1)    // Amplitude is centered at half-range
    #define NPTS    (OSR/SIN_HZ)    // Points in a full cycle
    int16_t wave[NPTS+1];           // full-wave points
    uint16_t wavei;
    void
    init_data(void)
    {
        uint16_t i;
        for (i = 0 ; i < NPTS+1 ; ++i)
        {
            wave[i] = DACMID * sin(i*2*M_PI/(OSR/SIN_HZ));
        }
        wavei = 0;
        return;
    }   // end init_data()

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

    布鲁斯:

    wavei 的作用是什么? 作为一个全局变量,它由 init 例程设置为零;如果不是,则不能说它是*not*零,但在例程中却设置为零。

    我认为这是一个"我在表中"的旗帜,但我必须错过一些东西。

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

    波威没有太多的提及。 它是一个(循环的)索引到 wave[],在这里初始化它似乎是合适的。

    我针对 FR2355 (无 DMA)将此型号从某个器件提升为该型号、以便由计时器 ISR 进行计数。 在基于 DMA 的实现中、不需要 wavei。