DAC
- 前言
- 一、理论介绍
- 二、DAC代码
- 三、实验结果
- 总结
前言
前言写个参考吧
STM32 DAC+串口
一、理论介绍
DAC是数字模拟转换器(Digital to Analog Converter)的缩写,它是一种将数字信号转换为模拟信号的设备。
RC有2个通道。
DAC的初始化
#include "DAC.h"void DAC_init()
{//开启时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);RCC_APB1PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//配置PA4、PA5为模拟输入//PA4 ==> DAC_Channel_1//PA5 ==> DAC_Channel_2GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN ;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5 ; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);//DAC初始化DAC_InitTypeDef DAC_InitStructure; DAC_InitStructure.DAC_LFSRUnmask_TriangleAmplitude = DAC_LFSRUnmask_Bits11_0;DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Disable; //不使能缓存器[也就是电压跟随器],外部电路需要加功放//如果使能,可能会导致误差
// DAC_InitStructure.DAC_Trigger = DAC_Trigger_None;DAC_InitStructure.DAC_Trigger=DAC_Trigger_Software; //软件触发DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None; //不选择的波形发生器DAC_Init(DAC_Channel_1,&DAC_InitStructure);//使能DACDAC_Cmd(DAC_Channel_1,ENABLE);DAC_SetChannel1Data(DAC_Align_12b_R, 2048); //分辨率为12位 右对齐 电压范围 0-4095//每个位表示一个电压级别,总共可以表示2^12=4096个不同的电压级别DAC_SoftwareTriggerCmd(DAC_Channel_1, ENABLE); //软件使能转换}/*** @brief DAC转换* @param 无 * @retval None*/
uint16_t DAC_Trans(void)
{// 写入数字电压DAC_SetChannel1Data(DAC_Align_12b_R, 2048); // 12位 电压范围 0-4095// 触发转换DAC_SoftwareTriggerCmd(DAC_Channel_1, ENABLE);// 等待转换完成
// while(DAC_GetFlagStatus(DAC_Channel_1, uint32_t DAC_FLAG);
// while(DAC_GetFlagStatus(DAC_Channel_1, DAC_FLAG_DMAUDR) == RESET);return DAC_GetDataOutputValue(DAC_Channel_1);
}
主要需要解释的一个是DAC的初始化
-
1、DAC_Trigger
指定所选DAC通道的外部触发
此参数的值可以是 @ref DAC_trigger_selection- 1.1 参数介绍
-
1.1.1 DAC_Trigger_None
加载DAC1_DHRxxxx寄存器后,转换是自动的,而不是通过外部触发 -
1.1.2 DAC_Trigger_T6_TRGO
TIM6 TRGO 被选为 DAC 通道的外部转换触发器 -
1.1.3 DAC_Trigger_T8_TRGO
TIM8 TRGO 被选为 DAC 通道的外部转换触发器
仅在高精度设备中 -
1.1.4 DAC_Trigger_T3_TRGO
TIM8 TRGO 被选为 DAC 通道的外部转换触发器,仅适用于连接线、中密度和低密度超值线设备.
[不知道是不是芯片解释手册写的有问题这里T3的解释变成了T8的。。。。] -
1.1.5 DAC_Trigger_T7_TRGO
TIM7 TRGO被选为DAC通道的外部转换触发器 -
1.1.6 DAC_Trigger_T5_TRGO
TIM5 TRGO被选为DAC通道的外部转换触发器 -
1.1.6 DAC_Trigger_T15_TRGO
TIM15 TRGO 被选为 DAC 通道的外部转换触发器
仅适用于中密度和低密度超值生产线设备 -
1.1.7 DAC_Trigger_T2_TRGO
TIM2 TRGO 被选为 DAC 通道的外部转换触发器 -
1.1.8 DAC_Trigger_T4_TRGO
TIM4 TRGO 被选为 DAC 通道的外部转换触发器 -
1.1.9 DAC_Trigger_Ext_IT9
EXTI Line9 事件被选为 DAC 通道的外部转换触发器 -
1.1.10 DAC_Trigger_Software
通过DAC通道的软件触发器启动转换
-
- 1.1 参数介绍
-
2、DAC_WaveGeneration
指定DAC通道噪声波还是三角波
是否生成,或者是否未生成波。
此参数的值可以是 @ref DAC_wave_generation -
3、DAC_LFSRUnmask_TriangleAmplitude
指定用于生成噪声波的 LFSR 模板或
DAC通道的最大振幅三角形生成。
此参数的值可以是 @ref DAC_lfsrunmask_triangleamplitude -
4、 DAC_OutputBuffer
指定是启用还是禁用DAC通道输出缓冲器,
此参数的值可以是 @ref DAC_output_buffer- 4.1 参数介绍
STM32的这个输出缓存使能虽然使输出能力强,但却会导致输出实际电压无法到0V.所以,一般情况下大家都不让它使能的,但是如果使能会提高驱动能力。
-内部电压电压跟随器,选择驱动能力会增强【参考前言的参考博文和以下的】
STM32的DAC输出驱动电压
- 4.1 参数介绍
二、DAC代码
三、实验结果
总结
这篇文章依旧没有总结