原创 【博客大赛】STM32的DAC深入探究之一

2013-4-25 17:17 15439 16 23 分类: MCU/ 嵌入式 文集: C

前言:五月底答辩,我的毕设还没开始。由于设计中要用到DA,所以我直接用STM32的DAC来产生电压,控制VCA810放大。

下面是我的学习笔记。(附件是代码)

1、简述:

12位数字输入,电压输出,DAC可以配置为8位或12位模式。有2个输出通道。在双DAC模式下,两个通道可以独立地工作。

 

特殊功能: 噪声波形生成,三角波形生成,外部触发转换,双DAC同时或者分别转换;每个通道都有DMA功能;

 

参考电压:2.4V~ 3.3V

 

因为一旦使能DAC通道,那么相应的GPIO便自动地连接到DAC转换器,因此,模拟输出前应该设置成模拟输入,目的是避免寄生的干扰和额外的功耗;

 

2、函数介绍:

1)缺省函数

DAC_Init();

 

2DAC_Init(DAC_Channel_1,&DAC_InitStructure);初始化函数

DAC_InitTypeDef            DAC_InitStructure;

初始化的设置有四个:

DAC_Trigger:指定所选DAC的触发源,有9个触发源可以选择:

DAC_Trigger_None

DAC_Trigger_T6_TRGO

DAC_Trigger_T8_TRGO

DAC_Trigger_T7_TRGO

DAC_Trigger_T5_TRGO

DAC_Trigger_T2_TRGO

DAC_Trigger_T4_TRGO

DAC_Trigger_Ext_IT9

DAC_Trigger_Software

 

❷DAC_WaveGeneration :指定DAC是否产生噪声波形,三角波或者不产生以上波形

DAC_WaveGeneration_None

DAC_WaveGeneration_Noise

DAC_WaveGeneration_Triangle

DAC_LFSRUnmask_TriangleAmplitude:如果选择了产生噪声波形或者三角波,那么这里可以选择噪声波形的LFSRUnMask屏蔽位(不晓得是什么东西) 或者三角波的最大幅度

DAC_OutputBuffer:指定输出是否要缓冲一下

DAC_OutputBuffer_Enable

DAC_OutputBuffer_Disable

3DAC_Cmd(DAC_Channel_1,EANBLE); DAC通道使能函数

 

4DAC_DMACmd(DAC_Channel_1,ENABLE); 如果要用到DMADAC那么就要使能哪个DAC通道

 

5DAC_SoftwareTriggerCmd(DAC_Channel_1, ENABLE);软件触发使能函数,一般单通道时候使用

 

6DAC_DualSoftwareTriggerCmd(ENABLE);如果要同时控制两个DAC通道,那么就要使能此函数

 

7DAC_Wave GenerationCmd(DAC_Channel_1, DAC_Wave_Noise, ENABLE);波形发生使能函数,可以选择哪个通道以及噪声或者三角波波形

 

8DAC_SetChannel1Data(DAC_Align_12b_R, 0x500);

选择通道1的数据位数和对齐方式,以及具体输出值。三种对齐数据位方式:

DAC_Align_12b_R  12位右对齐,数值小于4096

DAC_Align_12b_L 12位左对齐,数值小于0XxFFF0

DAC_Align_8b_R 8位右对齐,数值小于256

9DAC_SetChannel2Data(DAC_Align_12b_L, 0x8880);同理(8

 

10DAC_SetDualChannelData(DAC_Align_8b_R, 0x40, 0xF1);同理(8)

 

11u16 DataValue;

DataValue = DAC_GetDataOutputValue(DAC_Channel_1); 得到当前DAC输出的值

3、具体应用:

3.1 产生一个直流电压:

GPIOA_04 DAC1 , GPIOA_05 DAC2

1、设置GPIOA_04 05 为模拟输入;

  GPIO_InitTypeDef GPIO_InitStructure;

  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_4 | GPIO_Pin_5;

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;

  GPIO_Init(GPIOA, &GPIO_InitStructure)

 

2、开启GPIOADAC的时钟。注意GPIOA的时钟是在APB2,DAC的时钟则是在APB1

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

  RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);

3、配置DAC输出直流电压

DAC_InitTypeDef            DAC_InitStructure;

DAC_InitStructure.DAC_Trigger = DAC_Trigger_None;//选择DAC的触发输出,当产生波形时可用定时器触发

DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None;

DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Disable;

DAC_Init(DAC_Channel_1, &DAC_InitStructure);

DAC_Cmd(DAC_Channel_1, ENABLE);

DAC_SetChannel1Data(DAC_Align_12b_R,4095);//我的板子实际输出的是3.265v

 

 

PARTNER CONTENT

文章评论7条评论)

登录后参与讨论

用户547821 2015-8-26 14:40

bu cuo bu cuo.

用户379861 2014-3-1 01:03

不错,就是没积分下载

345002072_353389109 2014-2-27 15:00

请看VCA810的芯片手册。

用户212215 2014-2-27 09:48

电压放大如何做的?

用户1500110 2014-1-16 14:04

對剛入門是很好的參考範例,辛苦了!

用户1500110 2014-1-16 14:03

對剛入門是很好的參考範例,辛苦了!

用户1698815 2013-9-25 16:41

楼主写得很仔细哦!顶一个!!

用户412065 2013-2-27 10:27

有些社么活动啊
相关推荐阅读
啊左不是蜗牛 2015-01-28 09:21
【博客大赛】那样的人生,看不穿
         昨晚11点跟PM姐姐聊天,问她今晚要不要加班,她回:刚刚开发哥哥陪她出来打的。。。我以为我十点半从实验室回去已经够晚了。。我脸红了。        我问她为什么不早点回去...
啊左不是蜗牛 2015-01-13 19:41
【智能手机】三个观点说说国产手机未来
在此篇文章之前还有一个各大手机品牌的总结,请点击查看。 智能手机之论英雄出处      谈手机之前换个角度,类比一下PC领域。 PC领域毛利最高的时候,国产PC一直混在低端。随着时代发...
啊左不是蜗牛 2015-01-09 17:56
【智能手机】论英雄出处
我认为,如果你不知道对手的底细,那么你就很难战胜对手。知己知彼,百战百胜。所以,我简单地说说我对这几家手机品牌的看法。个人之见,欢迎讨论。   苹果: 1976年成立,在乔布斯这样的天...
啊左不是蜗牛 2014-11-19 13:48
【博客大赛】蜗牛求职记之华为篇
1、前言说明          蜗牛是电赛出身,本科做硬件嵌入式,画板子和写C程序,然后研究生阶段是转战android,但是由于项目涉及到硬件,导师项目众多,小伙伴少,于是我也负责部分st...
啊左不是蜗牛 2014-08-16 14:38
以另一种位图的思想来解决一道OJ题目
前言: 以前所接触到的位图的思想都是以1位的形式去存储某个数出现的次数是1次还是0次。常见的例子不外乎在《编程珠玑》上的开篇例子里,1千万个数的排序统计,用1.25M的内存空间就可以达到遍历一...
啊左不是蜗牛 2014-08-15 11:57
Android 笔记之 listview 性能优化
列表显示需要三个元素, (1)listview 视图,用来显示列表的View ; (2)适配器,用来把数据映射到listView上面的 (3)数据,具体将被映射的数据,包括字符串,图片...
EE直播间
更多
我要评论
7
16
关闭 站长推荐上一条 /3 下一条