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);
  }
}
相关推荐
HIZYUAN1 小时前
AG32嵌入式系统如何实现加密与固件升级(一)
stm32·单片机·嵌入式硬件·mcu·fpga开发·创业创新
YTao_G5 小时前
STM32模块:022 PWR电源控制
stm32·单片机·嵌入式硬件
丁满与彭彭7 小时前
嵌入式学习笔记-MCU阶段-DAY01
笔记·单片机·学习
海海不掉头发7 小时前
【计算机组成原理】-CPU章节学习篇—笔记随笔
笔记·单片机·学习·考研·计算机组成原理
趣多多代言人8 小时前
从零开始手写嵌入式实时操作系统
开发语言·arm开发·单片机·嵌入式硬件·面试·职场和发展·嵌入式
h137286978698 小时前
Type-C PD快充协议智能芯片S312L详解
嵌入式硬件
不想学习\??!10 小时前
STM32-外部中断
stm32·单片机·嵌入式硬件
不想学习\??!11 小时前
STM32-定时器
stm32·单片机·嵌入式硬件
LIN-JUN-WEI11 小时前
[ESP32]VSCODE+ESP-IDF环境搭建及blink例程尝试(win10 win11均配置成功)
c语言·开发语言·ide·vscode·单片机·学习·编辑器
LS_learner12 小时前
嵌入式系统中实现串口重定向
嵌入式硬件