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

news2024/11/24 15:17:41

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功能是一个非常实用的工具,它可以将数字信号转换为模拟信号,从而实现对电压输出的精确调节。

接下来介绍具体编程步骤

步骤一:结构体介绍

//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程序配置

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

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

}

步骤三:主程序

//程序包领取需加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);
  }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2246726.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何通过OpenSSL来创建自签名的CA证书?

通过创建自签名CA证书可以让我们在没有商业支持的情况下学习与研究PKI(公钥基础设施)和SSL/TLS技术,本文将详细介绍如何通过OpenSSL来创建自签名的CA证书。 1. 初衷:为什么需要创建自签名CA证书? 除了开篇引言中提到的…

mac安装Pytest、Allure、brew

安装环境 安装pytest 命令 pip3 install pytest 安装allure 命令:brew install allure 好吧 那我们在安装allure之前 我们先安装brew 安装brew 去了官网复制了命令 还是无法下载 如果你们也和我一样可以用这个方法哦 使用国内的代码仓库来执行brew的安装脚本…

Python中“暂停”(time.sleep?input?)

input函数最是经典,在多种实现中简单粗暴单纯而经济。 (笔记模板由python脚本于2024年11月22日 10:58:38创建,本篇笔记适合比较熟悉python的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网:https://www.python.org/ Free:大…

刷题——【模板】二维前缀和

前缀和 题目题目链接题解方法一方法二 题目 描述 给你一个 n 行 m 列的矩阵 A ,下标从1开始。 接下来有 q 次查询,每次查询输入 4 个参数 x1 , y1 , x2 , y2 请输出以 (x1, y1) 为左上角 , (x2,y2) 为右下角的子矩阵的和, 输入描述&#x…

10 - Clickhouse集群部署以及副本和分片

目 一、副本 1、简介 2、副本写入流程 3、副本配置步骤 3.1、启动zookeeper集群 3.2、在 hallo100 的/etc/clickhouse-server/config.d 目录下创建一个名为metrika.xml 的配置文件,内容如下: 3.3、在 hallo100 的/etc/clickhouse-server/config.xml 中增加如…

Ubuntu24.04LTS设置root用户可远程登录

Ubuntu24.04LTS设置root用户可远程登录 文章目录 Ubuntu24.04LTS设置root用户可远程登录1. 设置root密码2. 设置root用户可远程登录1. 查看ssh服务是否安装2. 安装ssh服务3. 再次查看ssh服务是否安装4. 配置ssh文件5. 重启ssh服务6. root远程登录 1. 设置root密码 Ubuntu安装后…

DMA理论篇

DMA理论篇 简介 传统的数据传输都是需要CPU来实现,从一个地方拷贝到另一个地方;而DMA(Direct Memory Access)则不完全依赖CPU,DMA更新芯片SOC的一个控制器,他可以控制数据从内存中传输到另一个地方(外设、soc其它模块)&#xff…

理解原子变量之三:原子性与memory_order_relaxed

目录 CPU与内存的关系 原子性 典型使用场景 在本系列的第一篇文章理解原子变量之一:从互斥锁到原子变量,最粗浅的认识_原子互斥-CSDN博客,我通过几个实例从感性认识的角度介绍了原子性。本文在第一篇文章的基础上,从理性认识的…

医院信息化与智能化系统(22)

医院信息化与智能化系统(22) 这里只描述对应过程,和可能遇到的问题及解决办法以及对应的参考链接,并不会直接每一步详细配置 如果你想通过文字描述或代码画流程图,可以试试PlantUML,告诉GPT你的文件结构,让他给你对应…

青少年编程等级考试C++一级,硬币反转问题

代码 #include<iostream>using namespace std;bool a[300];int main(){ int n,m; cin >> n >> m; for(int i 1;i < m;i) { for (int j 1;j < n;j) { if( j % i 0) { a[j] !a[j];…

数字化工厂 MES试点方案全解析(二)

生产过程监控与数据采集 在生产线上部署各类传感器、数据采集终端等设备&#xff0c;与 MES 系统相连&#xff0c;实时采集生产数据&#xff0c;如设备运行参数&#xff08;温度、压力、转速等&#xff09;、产品加工数据&#xff08;尺寸、重量、加工时间等&#xff09;、物料…

动态规划子数组系列一>最长湍流子数组

1.题目&#xff1a; 解析&#xff1a; 代码&#xff1a; public int maxTurbulenceSize(int[] arr) {int n arr.length;int[] f new int[n];int[] g new int[n];for(int i 0; i < n; i)f[i] g[i] 1;int ret 1;for(int i 1; i < n-1; i,m. l.kmddsfsdafsd){int…

(十一)Python字符串常用操作

一、访问字符串值 Python访问子字符串变量&#xff0c;可以使用方括号来截取字符串。与列表的索引一样&#xff0c;字符串索引从0开始。 hh"LaoTie 666" hh[2] mm"床前明月光" mm[3] 字符串的索引值可以为负值。若索引值为负数&#xff0c;则表示由字符…

Sigrity SPEED2000 DDR simulation模式如何生成和解读DDR仿真报告-SODIMM-Write模式

Sigrity SPEED2000 DDR simulation模式如何生成和解读DDR仿真报告-SODIMM-Write模式 Sigrity SPEED2000 DDR simulation模式如何进行DDR仿真分析操作指导-SODIMM-Write模式详细介绍了如何进行DDR Write模式的仿真分析,下面基于此仿真结果进行DDR报告的输出和解读分析 在workfl…

【图像检测】深度学习与传统算法的区别(识别逻辑、学习能力、泛化能力)

识别逻辑 深度学习 使用了端到端的学习策略&#xff0c;直接学习从图像到检测结果的映射关系&#xff0c;自动提取特征&#xff0c;并且根据特征与特征之间的关系&#xff0c;计算出检测结果。 传统算法 则是人工提取特征&#xff0c;比如边缘特征&#xff0c;直线特征&#x…

TypeScript 系统学习 章节3

想学习 TypeScript 的小伙伴看过来&#xff0c;本文将带你一步步学习 TypeScript 入门相关的十四个知识点&#xff0c;详细的内容大纲请看下图&#xff1a; 一、TypeScript 是什么 TypeScript 是一种由微软开发的自由和开源的编程语言。它是 JavaScript 的一个超集&#xff0c…

opencv undefined reference to `cv::noarray()‘ 。window系统配置opencv,找到opencv库,但连接不了

之前都是在ubuntu里用opencv&#xff0c;今天为了方便在平时用Window10系统也用下c版的cv&#xff0c;就想配置一下vscode的cv环境&#xff0c;直接下载了一个编译好的opencv库&#xff08;带build文件夹的&#xff09;&#xff0c;刚开始用的是visual studio的编译器&#xff…

利用FileZilla搭建ftp服务器

一 利用windows自带的ftp服务搭建服务器&#xff0c;要复杂一些&#xff0c;好处是无需借用外部软件。 也有一些好的工具&#xff0c;如FileZilla的Server版&#xff0c;构建过程简单&#xff0c;好用。 下面看看。 二 安装FileZilla Server 当前下载版本是0.9.43&#xf…

【刷题21】BFS解决FloodFill算法专题

目录 一、图像渲染二、岛屿数量三、岛屿的最大面积四、被环绕的区域 一、图像渲染 题目&#xff1a; 思路&#xff1a; 如果起始位置的颜色(数值)与color相同&#xff0c;直接返回该数组上下左右一层一层的找与当前位置颜色相同的&#xff0c;并且该位置不越界&#xff0c;然…

DICOM核心概念:显式 VR(Explicit VR)与隐式 VR(Implicit VR)在DICOM中的定义与区别

在DICOM&#xff08;Digital Imaging and Communications in Medicine&#xff09;标准中&#xff0c;VR&#xff08;Value Representation&#xff09; 表示数据元素的值的类型和格式。理解显式 VR&#xff08;Explicit VR&#xff09;与隐式 VR&#xff08;Implicit VR&#…