STM32F4----DCA数字量转换成模拟量

STM32F4----DCA数字量转换成模拟量

基本原理

上一节讲诉了ADC的具体原理与程序搭建https://blog.csdn.net/qq_35970934/article/details/143999874?spm=1001.2014.3001.5501。这节讲DAC的原理和程序,在实际应用中,我们经常需要调节电压的输出大小,这种调节通常是通过改变输入控制量的大小来实现的,这就需要使用到DAC(数字---模拟转换器)功能,它允许将数字信号转换为模拟电压输出。例如,假设有一个可以调节亮度的LED灯,可通过滑动条(滑动条的位置可以被表示为一个0---100的数字)输入一个值来调节LED灯的亮度,这个输入值就是一个数字信号,而输出的模拟信号即LED灯的电压。

STM32F4内置的DAC简介。

1)DAC转换器:STM32F4拥有两个DAC转换器,每个转换器对应一个输出通道。这使得微控制器能够同时输出两路模拟信号,适用于需要多个模拟输出的应用场景。

2)输出分辨率:该模块支持8位或12位的单调输出。在12位模式下,数据可以左对齐或右对齐,提供更灵活的数据格式配置。

3)同步更新与波形生成:具备同步更新功能,可以同时更新两个DAC通道的输出。此外,还有噪声波形和三角波形生成的功能,这对于需要特定波形输出的应用非常有用。

4)DMA功能:每个DAC通道都有直接内存访问(DMA)功能。这意味着可以在不占用CPU资源的情况下,实现数据的高效传输。

5)外部触发转换:支持外部触发转换,允许外部事件控制DAC输出的时机,适合需要精确控制模拟输出时机的应用。

6)引脚配置:DAC输出通常使用GPIO的复用功能,对于STM32F4DAC来说,输出引脚一般为PA4和PA5。在使用DAC功能时,这些引脚会自动连接到模拟转换器输出。

7)电源供应:DAC模块有专门的模拟供电VDDA和VSSA,以及参考电压Vref+。正确配置供电对于确保DAC输出精度和稳定性非常关键。

总的来说,DAC功能是一个非常实用的工具,它可以将数字信号转换为模拟信号,从而实现对电压输出的精确调节。

接下来介绍具体编程步骤

步骤一:结构体介绍

c 复制代码
//ADC初始化结构体
typedef struct
{
  uint32_t DAC_Trigger;  // 定义一个32位无符号整数变量,用于存储DAC触发器的配置                
  uint32_t DAC_WaveGeneration; // 定义一个32位无符号整数变量,用于存储DAC波形生成的配置     
  uint32_t DAC_LFSRUnmask_TriangleAmplitude; // 定义一个32位无符号整数变量,用于存储DAC线性反馈移位寄存器(LFSR)的三角波幅度配置
  uint32_t DAC_OutputBuffer; // 定义一个32位无符号整数变量,用于存储DAC输出缓冲区的配置
}ADC_InitTypeDef;

步骤二:DCA程序配置

c 复制代码
//DCA初始化配置
//程序包领取需加qq
// 3182068342
void DAC_ControlIO_Init(void)
{

}
c 复制代码
//设置DAC输出值value0-3300
//程序包领取需加qq
// 3182068342
float DAC_SetValue(float value)  
{

}

步骤三:主程序

c 复制代码
//程序包领取需加qq
// 3182068342
int main(void)
{
  float Adc_value;
  float value;
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //中断分组 
  LED_Init(); //初始化LED
  usart1_Init(); //初始化USART1外设
  KEY_Init(); //初始化按键输入功能
  ADC_ControlIO_Init(); //初始化ADC控制IO
  DAC_ControlIO_Init(); //初始化DAC控制IO	
  while(1)
  { 
    scanf("%f",&value);  //来自上位机数据
    DAC_SetChannel1Data(DAC_Align_12b_R,DAC_SetValue(value));  //将value值转化为电压值后发送至DAC通道1输出
    Adc_value = Average_ADC(10);  //读取ADC平均值
    printf("%.3f\r\n",Adc_value);
    delay_ms(10);
  }
}
相关推荐
Shaun_青璇9 分钟前
STM32 流水灯实验
stm32·单片机·嵌入式硬件·mcu·物联网
@@庆4 小时前
任务中断的两套API函数(改进FormISR的实时性)资源管理_互斥操作的本质(解决DH11经常出错的问题)
arm开发·stm32·单片机·嵌入式硬件·freertos
mftang5 小时前
STM32 Nucleo-64 boards板卡介绍
stm32·单片机·嵌入式硬件
code_snow5 小时前
STM32-- 技巧-延时
stm32·单片机·嵌入式硬件
霖霖7145 小时前
基本功能实现
单片机·嵌入式硬件
Shaun_青璇5 小时前
stm32 点亮LED
stm32·单片机·嵌入式硬件·mcu·物联网
7yewh5 小时前
嵌入式硬件实战基础篇(三)-四层板PCB设计-步进电机驱动(TMC2208/TMC2209)
驱动开发·嵌入式硬件·mcu·物联网·硬件架构·硬件工程·pcb工艺
辞丶1766 小时前
STM32基于HALL库的串口以及DMA(串口总篇)
stm32·单片机·嵌入式硬件
相醉为友7 小时前
003 STM32基础、架构以及资料介绍——常识
stm32·单片机·嵌入式硬件