0

我正在使用 STM32F4 探索板。我使用 DAC Channel1 生成了 10Hz 正弦波。

根据 STM 的应用说明,正弦波生成应按如下方式完成:

在此处输入图像描述

它可用于使用以下公式产生所需的频率:

在此处输入图像描述

这是我填充 100 个样本的简单函数。由于我使用 fTimerTRGO = 1kHz,fSinewave 正确地以 1k/100 = 10Hz 出现

Appl_getSineVal();
HAL_DAC_Start_DMA(&hdac, DAC_CHANNEL_1, (uint32_t*)Appl_u16SineValue, 100, DAC_ALIGN_12B_R);
.
.
.
.
void Appl_getSineVal(void)
{
    for (uint8_t i=0; i<100; i+=1){
        Appl_u16SineValue[i] = ((sin(i*2*PI/100) + 1)*(4096/2));
    }
}

现在我想在同一通道上加上另一个频率为 5Hz 的正弦波,以获得混合频率信号。我需要帮助如何解决这个问题。

我尝试用不同的正弦值填充 Appl_u16SineValue[] 数组,但这些尝试在这里不值得一提。

4

1 回答 1

0

为了组合两个正弦波,只需添加它们:

sin(...) + sin(...)

由于总和在 [-2...2] 范围内(而不是 [-1...1]),因此需要对其进行缩放。否则它将超出 DAC 范围:

0.5 * sin(...) + 0.5 * sin(...)

现在它可以像以前一样适应 DAC 整数范围:

(0.5 * sin(...) + 0.5 * sin(...) + 1) * (4096 / 2)

除了增益 0.5 和 0.5,还可以选择其他增益,例如 0.3 和 0.7。他们只需要加起来 1.0。

更新

对于具有 10Hz 和 5Hz 正弦波的特定情况,代码如下所示:

for (uint8_t i=0; i < 200; i++) {
    mixed[i] = (0.5 * sin(i * 2*PI / 100) + 0.5 * sin(i * 2*PI / 200) + 1) * (4096 / 2);
}
于 2021-08-24T12:41:37.910 回答