DAC+定时器 生成正弦波,三角波

发布时间 2023-06-15 10:01:08作者: 虎啸岳林

正弦波生成

配置如下

DAC触发 trigger是由TIM2事件触发。 

TIM2配置方式

/**
 * 生成正弦波数据点函数
 * @param NPoints       �???个周期内的点�???
 * @param VMaxRange     输出的电压最大�?�,取�?�范�???0~3.3V
 * @param SineWaveTable 存放生成的数据点
 */
void SineWaveGen(uint32_t NPoints, float VMaxRange, uint16_t* SineWaveTable)
{
#ifndef PI
#define PI 3.14159265358979323846
#endif

    int    b       = 0;
    double radian  = 0;  // 弧度
    double setup   = 0;  // 弧度和弧度之间的大小
    double voltage = 0;  // 输出电压

    setup = (2 * PI) / NPoints;  // 两点之间的间�???

    while (b< NPoints)
    {
        voltage = VMaxRange / 2.0 * (sin(radian) + 1.0);              // 计算电压
        SineWaveTable[b] = (uint16_t)(voltage * 4096 / 3.3);          // 电压转为DAC数�??
        radian += setup;                                              // 下一个点的弧�???
        b++;
    }
}
int main()
{

SineWaveGen(100,3.3,SineWaveTable);//生成sin函数的点


HAL_TIM_Base_Start(&htim2);
HAL_DAC_Start_DMA(&hdac, DAC_CHANNEL_1, (uint32_t *)SineWaveTable, 100, DAC_ALIGN_12B_R);

while(1)
{

}
}

 

 

 

三角波 

可以在配置中生成 三角波和噪声波,4095可以改幅度,同样是tim2触发tim2配置同上

 然后写开始函数

int main()
{
HAL_TIM_Base_Start(&htim2);
 HAL_DAC_Start(&hdac, DAC_CHANNEL_1);
while1)
{

}
}

看示波器生成波形