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);
  }
}
相关推荐
ベadvance courageouslyミ15 小时前
嵌入式硬件基础
嵌入式硬件·51单片机·嵌入式·数码管·二极管
范纹杉想快点毕业15 小时前
欧几里得算法与扩展欧几里得算法,C语言编程实现(零基础全解析)
运维·c语言·单片机·嵌入式硬件·算法
2301_7737303115 小时前
嵌入式—51单片机day1
单片机·嵌入式硬件·51单片机
PegasusYu16 小时前
STM32校准读取激光测距传感器VL53L0X距离数据
stm32·测距·stm32cubeide·激光测距·vl53l0x·飞行时间·stm32g031f8
代码游侠16 小时前
学习笔记——嵌入式与51单片机学习
单片机·嵌入式硬件·学习·51单片机
zy1353806757316 小时前
12V输入5V/2A输出升降压芯片AH4002
科技·单片机·物联网·fpga开发·硬件工程·智能电视
代码游侠16 小时前
学习笔记——嵌入式系统与51单片机核心
笔记·单片机·嵌入式硬件·学习·51单片机
一枝小雨16 小时前
【OTA专题】15 实现App后台无感下载固件
stm32·单片机·嵌入式·ota·bootloader
小郭团队17 小时前
教育公平的探索
大数据·人工智能·嵌入式硬件·算法·硬件架构
lemoncat817 小时前
PCB线圈电感设计器推荐
嵌入式硬件·pcb