mokongking

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

正弦波生成

配置如下

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)
{

}
}
复制代码

看示波器生成波形

 

posted on   虎啸岳林  阅读(230)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· Windows编程----内核对象竟然如此简单?
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用

导航

统计信息

点击右上角即可分享
微信分享提示