STM32(F429) DAC 详解与应用实例

news2024/9/20 22:59:08

目录

前言

一、DAC 概述

1.主要特点

2.工作原理

3.DAC通道框图

二、DAC 的配置与使用

1.硬件连接

2.软件配置

3.应用实例:模拟电压输出

三、DAC 的高级应用

1.三角波的生成 

2.噪音生成

四、DAC 的应用注意事项

1.参考电压选择

2.输出负载能力

3.噪声和干扰抑制

五、总结


前言

    在嵌入式系统开发中,STM32 系列微控制器以其强大的性能和丰富的外设资源而备受开发者青睐。其中,STM32F429 中的数模转换器(DAC)为实现模拟信号输出提供了便捷的解决方案。本文将详细介绍 STM32F429 的 DAC 功能,并结合实际应用实例展示其在嵌入式系统中的强大作用。

一、DAC 概述

STM32F429 的 DAC 是一种 12 位数字模拟转换器,具有两个独立的输出通道。它可以将数字信号转换为模拟电压输出,广泛应用于音频输出、传感器信号模拟、波形生成等领域。

1.主要特点

  • 12 位分辨率:能够提供较高的转换精度,满足大多数应用的需求。
  • 两个独立通道:可以同时输出两个不同的模拟信号,提高系统的灵活性。
  • 多种输出模式:支持正常模式、三角波生成模式和噪声生成模式,满足不同的应用场景。
  • 数据对齐方式可选:可以根据需要选择左对齐或右对齐的数据格式。
  • 触发源丰富:可以通过软件触发、外部事件触发或定时器触发等方式启动转换。

2.工作原理

  • DAC 接收数字输入值,并通过内部的电阻网络将其转换为模拟电压输出。数字输入值的范围为 0 到 4095(12 位),对应的模拟输出电压范围由参考电压决定。
  • 在正常模式下,DAC 根据数字输入值直接输出相应的模拟电压。在三角波生成模式下,DAC 自动生成连续的三角波输出。在噪声生成模式下,DAC 输出带有随机噪声的模拟信号。

3.DAC通道框图

二、DAC 的配置与使用

1.硬件连接

  • STM32F429 的 DAC 输出引脚通常需要连接到外部的模拟电路或负载。在连接时,需要注意输出电压范围和负载能力,以确保输出信号的准确性和稳定性。
  • 为了获得更好的性能,建议在 DAC 输出引脚附近添加适当的滤波电容,以减少噪声和干扰。

2.软件配置

  • 开启 DAC 时钟:在使用 DAC 之前,需要先开启相应的时钟。可以通过 RCC(Reset and Clock Control)寄存器来配置时钟源和时钟分频系数。
  • 初始化 DAC:使用 STM32 的库函数对 DAC 进行初始化,包括设置工作模式、数据对齐方式、触发源等参数。
  • 设置输出值:通过向 DAC 的数据寄存器写入数字值,来控制模拟输出电压的大小。可以使用软件触发或外部触发方式启动转换。

3.应用实例:模拟电压输出

以下是一个简单的示例代码,展示了如何使用 STM32F429 的 DAC 输出模拟电压:

#include "stm32f4xx.h"

int main(void)
{
    // 开启 DAC 时钟
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);

    // 初始化 DAC
    DAC_InitTypeDef DAC_InitStructure;
    DAC_InitStructure.DAC_Trigger = DAC_Trigger_None;
    DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None;
    DAC_InitStructure.DAC_LFSRUnmask_TriangleAmplitude = DAC_LFSRUnmask_Bit0;
    DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Enable;
    DAC_Init(DAC_Channel_1, &DAC_InitStructure);

    // 使能 DAC
    DAC_Cmd(DAC_Channel_1, ENABLE);

    // 设置输出值
    DAC_SetChannel1Data(DAC_Align_12b_R, 2048);

    while (1)
    {
    }
}

在上述代码中,首先开启了 DAC 的时钟,然后初始化 DAC 为正常模式,输出缓冲器使能。接着,通过设置输出值为 2048,使 DAC 输出大约一半参考电压的模拟电压。

三、DAC 的高级应用

1.三角波的生成 

STM32F429 的 DAC 可以通过设置工作模式为三角波生成模式,自动生成连续的三角波输出。以下是一个示例代码: 

#include "stm32f4xx.h"

int main(void)
{
    // 开启 DAC 时钟
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);

    // 初始化 DAC
    DAC_InitTypeDef DAC_InitStructure;
    DAC_InitStructure.DAC_Trigger = DAC_Trigger_None;
    DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_Triangle;
    DAC_InitStructure.DAC_LFSRUnmask_TriangleAmplitude = DAC_LFSRUnmask_Bit0;
    DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Enable;
    DAC_Init(DAC_Channel_1, &DAC_InitStructure);

    // 使能 DAC
    DAC_Cmd(DAC_Channel_1, ENABLE);

    while (1)
    {
    }
}

在这个例子中,DAC 被配置为三角波生成模式,无需软件干预即可自动输出三角波。

2.噪音生成

DAC 还可以生成带有随机噪声的模拟信号,这在一些需要模拟噪声源的应用中非常有用。以下是一个噪声生成的示例代码:

#include "stm32f4xx.h"

int main(void)
{
    // 开启 DAC 时钟
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);

    // 初始化 DAC
    DAC_InitTypeDef DAC_InitStructure;
    DAC_InitStructure.DAC_Trigger = DAC_Trigger_None;
    DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_Noise;
    DAC_InitStructure.DAC_LFSRUnmask_TriangleAmplitude = DAC_LFSRUnmask_Bit0;
    DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Enable;
    DAC_Init(DAC_Channel_1, &DAC_InitStructure);

    // 使能 DAC
    DAC_Cmd(DAC_Channel_1, ENABLE);

    while (1)
    {
    }
}

通过设置 DAC 的工作模式为噪声生成模式,DAC 将输出带有随机噪声的模拟信号。

四、DAC 的应用注意事项

1.参考电压选择

  • DAC 的输出电压范围由参考电压决定。在选择参考电压时,需要考虑输出精度、稳定性和功耗等因素。通常,可以使用外部高精度参考电压源或内部参考电压
  • 如果使用内部参考电压,需要注意其精度和温度稳定性可能不如外部参考电压源。在对输出精度要求较高的应用中,建议使用外部参考电压源

2.输出负载能力

  • DAC 的输出引脚具有一定的负载能力,但在连接外部负载时,需要注意负载的大小和特性,以避免影响输出信号的准确性和稳定性
  • 如果负载较大,可以考虑使用运算放大器等缓冲电路来提高 DAC 的驱动能力。

3.噪声和干扰抑制

  • 在实际应用中,DAC 的输出信号可能会受到噪声和干扰的影响。为了提高信号的质量,可以采取以下措施:
  • 在硬件设计上,合理布局 PCB,减少电源噪声和电磁干扰。
  • 在软件上,可以使用数字滤波算法对输出信号进行处理,去除噪声和干扰。

五、总结

    STM32F429 的 DAC 是一个功能强大的外设,能够为嵌入式系统提供模拟信号输出。通过合理的配置和使用,可以实现各种应用,如音频输出、传感器信号模拟、波形生成等。在使用 DAC 时,需要注意参考电压选择、输出负载能力和噪声干扰抑制等问题,以确保输出信号的准确性和稳定性。希望本文对大家在使用 STM32F429 的 DAC 时有所帮助。

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

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

相关文章

pulsar官方文档学习记录——pulsasr事务

pulsar事务 之前pulsar消息机制,和架构概览作为一个后端搬砖的需要了解的也差不多了。再补充个pulsar事务 因为exactly-once语义应用场景很多 pulsar事务可以能使流应用程序能够在一个原子操作中 ,消费、处理消息,生成消息。 需要事务的原…

JS高级类型存储方式——含堆/栈分析

1、内存 在编写正式内容前,首先需要弄清楚的一个概念就是:内存 内存 :也就是电脑中的硬件 ,内存越大,可以同时开启的程序就越多内存的作用: 存储运行中的代码,把代码执行过程中所需要的数据&…

Halcon20.11深度学习目标检测模型

1.前言:.Halcon的深度学习标注工具一直在更新,我下载的20.11版本的Deep Learning Tool已经显示过期,无奈只能下载最新版MVTec Deep Learning Tool 24.05。不过最新版的标注工具做的很人性化,分类,目标检测,…

化挑战为机遇,联想凌拓迎来杨旭时代

【全球存储观察 | 科技热点关注】 2024年7月,联想凌拓CEO杨旭上任,引发业界广泛关注,成为国内数据存储领域的新闻焦点。 现在,联想凌拓迎来了杨旭时代。作为联想凌拓CEO,杨旭的到任给联想凌拓带来了怎样的…

又有不少人要为《黑神话:悟空》买电脑了

1. 什么是 3A 游戏?2. 《黑神话:悟空》是一款怎样的游戏?3. 又有不少人要为《黑神话:悟空》买电脑了 3.1. 《黑神话:悟空》对电脑性能的要求3.2. 性能测试工具 不管你是游戏玩家还是非游戏玩家,这两天肯定被“黑悟空”刷屏了。 因为就在昨…

爆赞!斯坦福大学力作《深度学习漫画书》,翻烂它都不为过!

“斯坦福大学深度学习漫画书”是一本以漫画形式介绍深度学习基础知识的书籍,作者是Andrew Ng。 这本书以漫画形式切入,将一图胜千言的道理玩到了极致!并通过生动有趣的漫画形式来深入了解深度学习的概念和应用,把复杂的深度学习技…

【本社翻译】Unity官方XR开发电子书

上个月(2024年7月),Unity 官方发布了一本聚焦 XR 开发的电子书,书名为《Create Virtual and Mixed Reality Experiences in Unity》。本书系统介绍了以 XR Interaction Toolkit 为代表的一系列 Unity XR 开发工具集,深…

基于JavaEE的远程医疗管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图详细视频演示技术栈系统测试为什么选择我官方认证玩家,服务很多代码文档,百分百好评,战绩可查!!入职于互联网大厂,可以交流,共同进步。有保障的售后 代码参考数据库参…

有源音箱申请Hi-Res认证指南

有源音箱(也称为主动式音箱)是一种内置功率放大器的音箱,其显著特点是音箱内部含有一套功率放大电路,可以直接通过音频线(如RCA线、3.5mm音频线或莲花线)与信号源(如电视、电脑、DVD播放器等&am…

LLM+Agent+多模态:大模型全栈入门、从0到企业落地、前沿论文,一定要看看!(全攻略保姆教程)

现在搞AI科研,基本上都离不开大模型。不管是“水”篇论文还是冲顶会,结合LLM的创新点都非常多。 但是LLM相关的内容很多,学校的老课程老教材关于LLM又太少。所以现在小白入门就只能靠自学,学习成本和门槛很高。 针对所有自学遇到…

使用yolov5实现目标检测和yolov8实现分割简单案例

一、前置 测试这个案例之前需要安装一些前置的东西,如果已经安装的可以忽略,下面我给出我跟着做的一些很好的博客提供大家参考,因为我们主要目的还是实现yolov5的目标检测。 1、安装nvidia显卡驱动 可以参考:【Windows】安装NV…

黑夜力作-Web爬虫入门与实战精讲-专栏导读

🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌,CSDN博客专家,阿里云社区专家博主,2023年CSDN全站百大博主。 🏆数年电商行业从业经验,历任核心研发工程师&am…

高性能minio集群环境搭建(配视频教程)

为后续进行《小卷原创视频教程:spring boot 3 vue3文件上传最佳实践》的大文件上传项目实战,这里带着小伙伴一起搭建下分布式开源文件存储minIO的集群环境。后续将对这个环境进行spring boot的集成,以进行企业级大文件上传的对接。 文章目录…

分布式基础理论——CAP理论和BASE理论

文章目录 CAP 理论BASE 理论参考资料 CAP 理论 CAP定理(CAP theorem)指出,在分布式系统中,设计读写操作时只能同时满足以下三个特性中的两个: 一致性(Consistency) : 所有节点访问同一份最新的…

Leetcode每日刷题之3.无重复字符的最长子串(C++)

1.题目解析 本题的目标是在给定的字符串中找出不含有重复字符的最长子串,并且返回其长度,这道题核心就是如何去重并且不能遗漏以保证子串长度最长,题目来源:3.无重复字符的最长子串 2.算法原理 本题的算法原理主要是"滑动窗口"也就…

做数据采集,你真的了解PLC插槽号吗?

有很多PLC可以在系统里配置多个独立CPU,各自有自己的任务。也有一些PLC,虽然只有一个CPU,但是,其位置是可变的。外部进行数据采集时,首先要搞明白采集目标是哪个CPU,否则,就会张冠李戴&#xff…

[大模型]Milvus Lite安装

文章目录 前提相关链接官方网站中文网站 创建虚拟环境安装Milvus连接Milvusattu连接工具attu官方开源地址下载地址连接 Milvus 是一款开源的向量数据库,它主要特点是高可用、高性能和易扩展,主要用于处理海量向量数据的实时召回。它基于诸如 FAISS、Anno…

nginx和tomcat负载均衡,动静分离

文章目录 一,tomcat1.tomca用途2.tomcat重要目录 二,nginx1.Nginx应用2.nginx作用3.nginx的正向代理和反向代理3.1正向代理3.2反向代理(单级)3.3反向代理(多级) 4.nginx负载均衡4.1Nginx支持的常见的分流算法1. 轮询(Round Robin):2.最少连接数(LeastCon…

【日记】黑神话的优化感觉有些微妙(1188 字)

正文 今天省分行一把手来我们县里。很奇怪。一整天都在为迎接他做准备。中午也没有什么午休,全员到工位上值班值守。 就算如此我还是抽了一点所剩无几的时间,体验了一下黑神话。 上午 10 点钟,远程控制电脑开始解压昨天的预载。大概解压了一个…

120KW可编程液冷负载优势和特点

120KW可编程液冷负载是一种先进的电力设备,它采用液冷技术进行冷却,具有高效、稳定、安全等特点。以下是其优势和特点的详细介绍: 1. 高效冷却:液冷负载采用液冷技术进行冷却,能够更有效地将热量传导出去,提…