数模转换DAC原理

Posted studying~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数模转换DAC原理相关的知识,希望对你有一定的参考价值。

DAC:数模转换器,即将数字量(数字123)转化为模拟量(电压值1v2v3v)。

STM32的DAC模块主要特点有:

① 2个DAC转换器2个输出通道,每个转换器对应1个输出通道
② 8位或者12位输出
③ 12位模式下数据左对齐或者右对齐 ,8位模式下数据右对齐
④ 同步更新功能
⑤ 噪声波形生成
⑥ 三角波形生成
⑦ 双DAC通道同时或者分别(独立)转换
⑧ 每个通道都有DMA功能

DAC模块框图

在这里插入图片描述
VDDA和VSSA为DAC模块模拟部分的供电。
Vref+则是DAC模块的参考电压,电压范围:2.4v<=Vref+<=VDDA(一般为3.3v)。
DAC_OUTx就是DAC的输出通道(DAC1对应PA4引脚,DAC2对应PA5引脚)。
框图流程:
1.设置数据格式为8位或12位。
2.写数据到DHR。
3.DHR自动将数据传入DORx(不能直接写DORx)。
4.外部事件或软件触发转换,将数字量转换为模拟量,一段时间后输出到对应引脚,下图解释为什么是一段时间。
在这里插入图片描述

DAC数据格式

每个DAC通道都有这三种模式:12位模式下数据左对齐或者右对齐 ,8位模式下数据右对齐,分别对应三种寄存器,使用时只需设置一种,设置后会将数据转存到DHR中,进而到DORx。

DAC输出电压和DOR的转换关系

在这里插入图片描述

DAC通道使能

DAC通道使能,只会使能DAC通道的模拟部分,不会使能数字部分,数字部分一直保持工作,即便没有使能。

使能DAC 输出缓存

由于DAC输出电压需要消耗一段时间,使能DAC输出缓存可以增加输出速度,但是没法输出0v电压。

====================================================================

DAC配置步骤(以DAC1为例):

1.开启PA口时钟,设置PA4为模拟输入
DAC本身是输出,为什么要设置端口为模拟输入呢?
因为一旦使能DAC通道,相应的GPIO (PA4,PA5)引脚会自动与DAC 的模拟输出相连,设置为输入,是为了避免额外的干扰和功耗。

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE );	  //使能GPIOA通道时钟
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;				 // 端口配置
 	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; 		 //模拟输入
 	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 	GPIO_Init(GPIOA, &GPIO_InitStructure);
	GPIO_SetBits(GPIOA,GPIO_Pin_4)	;//PA.4 输出高

2.使能DAC1时钟

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE );	  //使能DAC通道时钟 

3.初始化DAC

	DAC_InitType.DAC_Trigger=DAC_Trigger_None;	//不使用触发功能 TEN1=0
	DAC_InitType.DAC_WaveGeneration=DAC_WaveGeneration_None;//不使用波形发生
	DAC_InitType.DAC_LFSRUnmask_TriangleAmplitude=DAC_LFSRUnmask_Bit0;//屏蔽、幅值设置
	DAC_InitType.DAC_OutputBuffer=DAC_OutputBuffer_Disable ;	//DAC1输出缓存关闭 BOFF1=1
    DAC_Init(DAC_Channel_1,&DAC_InitType);	 //初始化DAC通道1

4.使能DAC 转换通道

	DAC_Cmd(DAC_Channel_1, ENABLE);  //使能DAC1

5.设置DAC的输出值(数据格式,以及赋值)

    DAC_SetChannel1Data(DAC_Align_12b_R, 0);  //12位右对齐数据格式设置DAC值

以上是关于数模转换DAC原理的主要内容,如果未能解决你的问题,请参考以下文章

4.8 51单片机-PCF8591(ADC/DAC)转换芯片

DAC

DAC

DAC

温故《单片机基础》之——DA转换

数字/模拟转换(DAC)