OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 11430|回复: 22

求大神指点!!STM32F407用DAC输出正弦波的问题

[复制链接]

7

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
125
金钱
125
注册时间
2016-2-21
在线时间
32 小时
发表于 2016-3-6 15:36:16 | 显示全部楼层 |阅读模式
1金钱
各位大神,小弟新人一枚。最近在用DAC调正弦波的时候,在示波器上看到的波形是这样的:

示波器波形

示波器波形
但是我看网上例程上的波形是这样的(黄色波形):

标准波形

标准波形
  找了很久不知道是啥原因,请大神们多多指教,小弟感激不尽

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

7

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
125
金钱
125
注册时间
2016-2-21
在线时间
32 小时
 楼主| 发表于 2016-3-6 15:37:02 | 显示全部楼层
本帖最后由 王木土哈哈哈 于 2016-3-6 15:42 编辑

#include "dac.h"
#include "sys.h"

#define DAC_DHR12R1  0x40007420 //DAC通道1输出寄存器地址

const uint16_t Sine12bit[32]={
2448,2832,3186,3496,3751,3940,4057,4096,4057,3940,
3751,3496,3186,2832,2448,2048,1648,1264,910,600,
345,156,39,0,39,156,345,600,910,1264,1648,2048
};

uint32_t DualSine12bit[32];

static void DAC_Config(void)//使能DAC时钟,初始化GPIO
{
        GPIO_InitTypeDef GPIO_InitStruct;
        DAC_InitTypeDef   DAC_InitStruct;
       
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC,ENABLE);
       
        GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AN;//模拟输入
        GPIO_InitStruct.GPIO_Pin=GPIO_Pin_4;
        GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_DOWN;
        GPIO_Init(GPIOA,&GPIO_InitStruct);//初始化GPIO
       
        DAC_InitStruct.DAC_OutputBuffer=DAC_OutputBuffer_Disable;//不使用DAC输出缓存
        DAC_InitStruct.DAC_Trigger=DAC_Trigger_T2_TRGO;//使用定时器2作为触发源
        DAC_InitStruct.DAC_WaveGeneration=DAC_WaveGeneration_None;//不使用波形发生器
        DAC_Init(DAC_Channel_1,&DAC_InitStruct);//初始化DAC1
       
        DAC_Cmd(DAC_Channel_1,ENABLE);//使能DAC通道1
       
        DAC_DMACmd(DAC_Channel_1,ENABLE);//使能DAC的DMA请求
}

static void DAC_TIM_Config(void)//配置定时器
{
        TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
       
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
       
        TIM_TimeBaseInitStruct.TIM_ClockDivision=TIM_CKD_DIV1;
        TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up;//向上计数
        TIM_TimeBaseInitStruct.TIM_Period=19;//自动重装载值19,定时周期20
        TIM_TimeBaseInitStruct.TIM_Prescaler=0x0;//预分频,不分频84M/(0+1)=84M
        TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStruct);//定时器初始化配置
       
        TIM_SelectOutputTrigger(TIM2,TIM_TRGOSource_Update);//配置TIM2触发源
       
        TIM_Cmd(TIM2,ENABLE);//使能TIM2时钟

}

static void DAC_DMA_Config(void)//配置DMA
{
        DMA_InitTypeDef DMA_InitStruct;
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2,ENABLE);
       
        DMA_InitStruct.DMA_BufferSize=32;//缓存大小为32字节
        DMA_InitStruct.DMA_Channel=DMA_Channel_4;//DMA通道4
        DMA_InitStruct.DMA_DIR=DMA_DIR_MemoryToPeripheral;//方向为存储器到外设
        DMA_InitStruct.DMA_FIFOMode=DMA_FIFOMode_Disable;//关闭双缓冲模式
        DMA_InitStruct.DMA_Memory0BaseAddr=(uint32_t)&DualSine12bit;//存储器数据地址DualSine12bit
        DMA_InitStruct.DMA_MemoryDataSize=DMA_MemoryDataSize_Word;//存储器数据以字为单位
        DMA_InitStruct.DMA_MemoryInc=DMA_MemoryInc_Enable;//存储器地址自增
        DMA_InitStruct.DMA_Mode=DMA_Mode_Circular;//DMA循环模式
        DMA_InitStruct.DMA_PeripheralBaseAddr=DAC_DHR12R1;//外设地址基地址为DAC通道1数据寄存器地址
        DMA_InitStruct.DMA_PeripheralDataSize=DMA_PeripheralDataSize_Word;//外设数据以字为单位
        DMA_InitStruct.DMA_PeripheralInc=DMA_PeripheralInc_Disable;//外设地址不自增
        DMA_InitStruct.DMA_Priority=DMA_Priority_High;//高DMA通道优先级
        DMA_Init(DMA2_Stream7,&DMA_InitStruct);//初始化DMA
       
        DMA_Cmd(DMA2_Stream7,ENABLE);//使能DMA数据流7

}
void MYDAC_Init(void)
{
        DAC_Config();
        DAC_TIM_Config();
        DAC_DMA_Config();

}

回复

使用道具 举报

14

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
109
金钱
109
注册时间
2015-6-8
在线时间
6 小时
发表于 2016-3-6 15:46:42 | 显示全部楼层
感觉是噪声啊
回复

使用道具 举报

7

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
125
金钱
125
注册时间
2016-2-21
在线时间
32 小时
 楼主| 发表于 2016-3-6 15:49:21 | 显示全部楼层

意思是我的sin数据DAC没输出出来?还是说输出出来了但是夹带有噪声?
回复

使用道具 举报

14

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
109
金钱
109
注册时间
2015-6-8
在线时间
6 小时
发表于 2016-3-6 15:51:48 | 显示全部楼层
王木土哈哈哈 发表于 2016-3-6 15:49
意思是我的sin数据DAC没输出出来?还是说输出出来了但是夹带有噪声?

没出来 这个是环境噪声。
回复

使用道具 举报

6

主题

1097

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3571
金钱
3571
注册时间
2014-12-2
在线时间
365 小时
发表于 2016-3-6 16:25:29 | 显示全部楼层
估计是示波器没有用好
坚决不用寄存器,拒绝重复造轮子。
回复

使用道具 举报

7

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
125
金钱
125
注册时间
2016-2-21
在线时间
32 小时
 楼主| 发表于 2016-3-6 17:16:51 | 显示全部楼层
xkwy 发表于 2016-3-6 16:25
估计是示波器没有用好

我就接了两根线,通道1的两根,一根接PA4口(DAC输出口),另外一根接STM32的GND,请问这样接有什么问题吗
回复

使用道具 举报

6

主题

1097

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3571
金钱
3571
注册时间
2014-12-2
在线时间
365 小时
发表于 2016-3-6 17:26:21 | 显示全部楼层
王木土哈哈哈 发表于 2016-3-6 17:16
我就接了两根线,通道1的两根,一根接PA4口(DAC输出口),另外一根接STM32的GND,请问这样接有什么问题 ...

我指的是示波器的表笔线、信号的耦合方式、噪声抑制、带宽限制等等的设置可能有问题
坚决不用寄存器,拒绝重复造轮子。
回复

使用道具 举报

2

主题

7

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2016-4-24
在线时间
7 小时
发表于 2016-4-24 09:32:39 | 显示全部楼层
王木土哈哈哈 发表于 2016-3-6 15:37
#include "dac.h"
#include "sys.h"

程序有问题吧!
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11522
金钱
11522
注册时间
2014-4-1
在线时间
1310 小时
发表于 2016-4-24 15:01:45 | 显示全部楼层

如果波形的幅度正常,说明DAC基本正常。
但现在幅度只有20mv,应当是硬件问题或者测量问题。


回复

使用道具 举报

2

主题

686

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
10768
金钱
10768
注册时间
2014-6-12
在线时间
1033 小时
发表于 2016-4-24 17:37:51 | 显示全部楼层
把源程序贴出来别人才好帮你试,否则都是在猜。
回复

使用道具 举报

3

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2015-8-20
在线时间
24 小时
发表于 2016-5-3 11:03:37 | 显示全部楼层
有大神,能解释下为什么按这个程序编译不能产生正弦波吗?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2016-5-4 21:57:25 | 显示全部楼层
zlb86921 发表于 2016-5-3 11:03
有大神,能解释下为什么按这个程序编译不能产生正弦波吗?

建议你先输出个三角波,找找感觉吧
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
24
金钱
24
注册时间
2016-5-13
在线时间
2 小时
发表于 2016-9-1 11:21:28 | 显示全部楼层
我也遇到了一模一样的问题。。。。解决不了啊。。。。
回复

使用道具 举报

11

主题

108

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
492
金钱
492
注册时间
2015-3-3
在线时间
114 小时
发表于 2016-9-1 11:31:26 | 显示全部楼层
程序配置有问题,楼主在好好检查一下
回复

使用道具 举报

freewind 该用户已被删除
发表于 2017-3-6 21:34:47 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

freewind 该用户已被删除
发表于 2017-3-8 22:25:02 来自手机 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

3

主题

105

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
297
金钱
297
注册时间
2013-12-24
在线时间
28 小时
发表于 2017-3-9 08:56:53 | 显示全部楼层
没调过,帮顶
回复

使用道具 举报

9

主题

209

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1358
金钱
1358
注册时间
2015-12-19
在线时间
108 小时
发表于 2017-3-9 09:09:54 | 显示全部楼层
关注中
回复

使用道具 举报

9

主题

44

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
248
金钱
248
注册时间
2017-7-10
在线时间
31 小时
发表于 2017-7-18 20:11:20 | 显示全部楼层
你的DMA配置是随心所欲配的吧,麻烦你看看数据手册好吧
回复

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2017-11-17
在线时间
14 小时
发表于 2018-10-24 21:51:48 | 显示全部楼层
我也是用示波器打了,也是这个样子不正常的。不知道为什么???
回复

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4106
金钱
4106
注册时间
2018-8-14
在线时间
696 小时
发表于 2018-10-25 00:16:25 | 显示全部楼层
你示波器看到的是电源的躁声50Hz
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2020-4-7
在线时间
1 小时
发表于 2020-4-7 14:02:28 | 显示全部楼层
我觉得是DAC1寄存器地址,DAM的配置,
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-2 18:07

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表