数模转换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原理的主要内容,如果未能解决你的问题,请参考以下文章