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);
  }
}
相关推荐
BackCatK Chen21 分钟前
第 8 篇:TMC2240 电机正反转实现|DIR 引脚控制 + 代码优化(稳定不抖动)
stm32·单片机·嵌入式硬件·保姆级教程·电机正反转·tmc2240·dir引脚控制
星马梦缘1 小时前
EDA彩灯电路绘制
单片机·嵌入式硬件·物联网·pcb·eda·嘉立创
Forsete3 小时前
LINUX驱动开发#9——定时器
linux·驱动开发·单片机
Hello_Embed6 小时前
libmodbus 移植 STM32(USB 串口后端篇)
笔记·stm32·单片机·嵌入式·freertos·libmodbus
VekiSon7 小时前
Linux内核驱动——杂项设备驱动与内核模块编译
linux·c语言·arm开发·嵌入式硬件
来自晴朗的明天8 小时前
14、光耦隔离电路(EL3H7)
单片机·嵌入式硬件·硬件工程
G***技8 小时前
杰和IB3-272:以低功耗高性能打造新一代工业智能交互核心
单片机·嵌入式硬件·物联网
czhaii9 小时前
STC AI8052U单片机特点
单片机
MAR-Sky9 小时前
keil5中数据的不同定义和单片机(以stc8为例)里的对应关系(idata,xdata,data,code)
单片机·嵌入式硬件
项目題供诗11 小时前
51单片机入门(八)
单片机·嵌入式硬件·51单片机