细说MCU的DAC1和DAC2各自输出一通道模拟信号的方法

news2025/1/12 3:06:45

目录

一、参考硬件

二、 建立新工程

1.配置DAC1  

2.配置DAC1的DMA

3.配置DAC2

4.配置DAC2的DMA

5.配置定时器       

6.配置时钟和Debug

三、修改代码

四、 查看结果


一、参考硬件

        本项目依赖的软件和硬件工程参考本文作者写的文章:   细说MCU的DAC1实现两个通道同时输出的方法-CSDN博客  https://wenchm.blog.csdn.net/article/details/140775537 icon-default.png?t=N7T8https://wenchm.blog.csdn.net/article/details/140775537         参考文件中中使用了DAC1的两个通道CH1和CH2。本文修改硬件配置,分别使用 DAC1的通道1和DAC2的通道1(DAC2只有一个通道)输出参考文件中的两个波形。

二、 建立新工程

1.配置DAC1  

        在DAC1的模式(Mode)区,将通道的模式(OUT1 mode)选择为连接到外部引脚(Connected to external pin only)。

        在DAC1通道的设置区,先将它们的输出缓冲(Output Buffer)禁止 (也可以保持使能),随后分别将它们的Trigger参数选择为Timer3 Trigger Out event。

2.配置DAC1的DMA

        增加一个DAC1_CH1 请求。DMA请求模式选择Circular,让它循环工作;将外设 (Peripheral)选择为按字(Word)的方式,存储器(Memory)的数据宽度选择为按半字(Half Word)的方式。其余参数保持默认值。

        由于要使用两路DAC输出 具有一定相位差的信号,所以两路DAC要做同步参数配置。具体配置方式是在DMA请求同 步设置(DMA Request Synchronization Settings)栏,勾选上使能参数(Enable Synchronization)和使能事件(Enable event)。 

3.配置DAC2

        在DAC2的模式(Mode)区,将通道的模式(OUT1 mode)选择为连接到外部引脚(Connected to external pin only)。

        在DAC1通道的设置区,先将它们的输出缓冲(Output Buffer)禁止 (也可以保持使能),随后分别将它们的Trigger参数选择为Timer3 Trigger Out event。

4.配置DAC2的DMA

        增加一个DAC2_CH1 请求。DMA请求模式选择Circular,让它循环工作;将外设 (Peripheral)选择为按字(Word)的方式,存储器(Memory)的数据宽度选择为按半字(Half Word)的方式。其余参数保持默认值。

        在同步参数配置界面中,也勾选上使能参数(Enable Synchronization) 和使能事件(Enable event),然后将同步信号(Synchronization signal)选择为DMAMUX1 channel0(DMA1 Channell ) event。由于DAC1用的是DMA1 Channel1,依此方式,就可以实现两个DAC之间的同步(也可以在DAC1中配置同步信号)。

5.配置定时器       

        选择TIM3,时钟源(Clock Source)选择为内部时钟(Internal Clock)。将预分频因子设置为0,计数器周期设为169,并将触发事件(Trigger Event Selection TRGO)选择为Update Event,其余参数保持默认值。

6.配置时钟和Debug

        将高速时钟(HSE)设置为 Crystal/Ceramic Resonator,使用片外时钟晶体作为HSE的时钟源。最后,在SYS中将 Debug设置为Serial Wire。由于没有使用中断,所以不用配置NVIC。

三、修改代码

        在初始化代码中加入启动定时器、启动DAC的代码。由于本例中用了两个DAC,所以要分别对它们进行初始化:

/* USER CODE BEGIN 2 */
  HAL_TIM_Base_Start(&htim3);
  HAL_DAC_Start_DMA(&hdac1,DAC_CHANNEL_1,(uint32_t*)
		  SineWaveDataPh90,DAC_BUFFER_SIZE,DAC_ALIGN_12B_R);
  HAL_DAC_Start_DMA(&hdac2,DAC_CHANNEL_1,(uint32_t*)
		  SineWaveDataPh0,DAC_BUFFER_SIZE,DAC_ALIGN_12B_R);
/* USER CODE END 2 */

         用MATLAB语句生成波形数据,存储在数组中,其中初始相位为90°的波形,幅值为A/2,一个周期内的数据点数依然设为50:

/* USER CODE BEGIN PV */
uint16_t SineWaveDataPh90[DAC_BUFFER_SIZE] = {3071,3063,3039,2999,2944,2876,2794,2700,2596,
		2483,2364,2239,2112,1983,1856,1731,1612,1499,1395,1301,1219,1151,1096,1056,1032,1024,1032,
		1056,1096,1151,1219,1301,1395,1499,1612,1731,1856,1983,2112,2239,2364,2483,2596,2700,2794,
		2876,2944,2999,3039,3063
 };
uint16_t SineWaveDataPh0[DAC_BUFFER_SIZE] = {2047,2304,2557,2801,3034,3251,3449,3625,3776,
		3900,3994,4058,4090,4090,4058,3994,3900,3776,3625,3449,3251,3034,2801,2557,2304,2048,1791,
		1538,1294,1061,844,646,470,319,195,101,37,5,5,37,101,195,319,470,646,844,1061,1294,1538,1791 };
/* USER CODE END PV */

        在main.h文件中修改数组长度为50: 

/* USER CODE BEGIN Private defines */
#define DAC_BUFFER_SIZE (uint16_t) 50
/* USER CODE END Private defines */

四、 查看结果

        分别用示波器查看PA4(DAC1通道1的输出)和PA6(DAC2的输出,在NUCLEO G474RE板上通过CN10的第13引脚或CN5的第5引脚引出)引脚上的波形。

        示波器的通道1对应的是PA4,通道2对应的是PA6;两路波形的相位差 90°;所生成正弦波的频率为20 kHz。

 

 

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

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

相关文章

【中项第三版】系统集成项目管理工程师 | 第 11 章 规划过程组⑧ | 11.21 - 11.22

前言 第11章对应的内容选择题和案例分析都会进行考查,这一章节属于10大管理的内容,学习要以教材为准。本章上午题分值预计在15分。 目录 11.21 实施定量风险分析 11.21.1 主要输入 11.21.2 主要工具与技术 11.21.3 主要输出 11.22 规划风险应对 …

UPLOAD-LABS靶场[超详细通关教程,通关攻略]

---------------------------------------- 靶场环境: 下载链接: https://codeload.github.com/c0ny1/upload-labs/zip/refs/heads/master 使用小皮集成环境来完成这个靶场 将文件放到WWW目录下就可以进行访问 ------------------------------------…

【JavaEE】HTTP(3)

🤡🤡🤡个人主页🤡🤡🤡 🤡🤡🤡JavaEE专栏🤡🤡🤡 文章目录 1.HTTP响应1.2状态码 2.HTTPS协议2.1概念2.2引入对称加密2.2.1概念2.2.2图解…

Ribbon-微服务注册中心(Ribbon概述 基于Ribbon实现订单调⽤商品服务 服务调⽤Ribbon⾼级 )

目录 一、Ribbon概述 1. 什么是Ribbon 2. Ribbon的主要作⽤ 二、基于Ribbon实现订单调⽤商品服务 1. 坐标依赖 2. ⼯程改造 三、服务调⽤Ribbon⾼级 1. 负载均衡概述 2. 客户端负载均衡与服务端负载均衡 3. 基于Ribbon实现负载均衡 3.1 搭建多服务实例 3.2 负载均衡…

完蛋!我把AI喂吐了!

当我们用 [RAG] 构建一个知识库问答应用的时候,总是希望知识库里面灌的数据越多,问答的效果越好,事实真是如此吗?这篇文章给大家答案。 引言 在人工智能问答系统的发展中,RAG(Retrieval-Augmented Generat…

努比亚开局连发两款旗舰机,其中一款还能卫星通话?

在智能手机市场竞争日益激烈的当下,努比亚作为国内知名手机品牌,始终致力于为消费者带来兼具创新性和实用性的产品。 近日,努比亚正式发布了两款备受瞩目的旗舰手机——努比亚Z60 Ultra领先版和努比亚Z60S Pro。两款手机不仅在硬件配置上实现…

Macbook Pro升级macOS 10.15及以上的全过程

Author : Spinach | GHB Link : http://blog.csdn.net/bocai8058文章目录 前言升级步骤选择指定macOS版本并下载安装升级macOS安装过程安装完成 前言 由于现在更多软件安装所需系统要求10.15及以上,导致很多app应用不能使用,如edge mac的操作系统要求…

LlamaIndex vs LangChain: 理解关键差异

LLM(大型语言模型)已成为各行各业不可或缺的工具,用于生成类人文本、翻译语言和回答问题等任务。有时,LLM的响应令人惊叹,因为它们比人类更迅速、更准确。这表明了它们对当今技术格局的重大影响。 今天让我们聊聊 Llam…

i2c中结构体 数据传输 i2c Tools使用

I2C中重要结构体 在I2C(Inter-Integrated Circuit)通信中,涉及的主要结构体通常用于描述设备、消息和传输的配置。以下是一些常见的I2C结构体及其作用: i2c_adapter: 这是一个代表I2C总线适配器的结构体。它包含与该I2C总线相关的…

【Django5】模型定义与使用

系列文章目录 第一章 Django使用的基础知识 第二章 setting.py文件的配置 第三章 路由的定义与使用 第四章 视图的定义与使用 第五章 二进制文件下载响应 第六章 Http请求&HttpRequest请求类 第七章 会话管理(Cookies&Session) 第八章 文件上传…

【ai】 2005年 rule based expert system学习笔记1

PPT 是2005年的? Negnevitsky, Pearson Education 使用两种推理引擎的选择 backward chaining(逆向链接)推理过程 backward chaining(逆向链接)推理过程的GPT解释 这幅图展示了一个基于规则的专家系统如何通过backward chaining(逆向链接)推理过程来达到最终的推理目标…

[tomato]靶机复现漏洞详解!

靶机地址: https://download.vulnhub.com/tomato/Tomato.ova 靶机环境:Vmware 网络:NAT模式 信息收集: arp-scan -l 扫描靶机ip地址 扫描开放的端口信息 nmap -sS -sV -p- 192.168.77.135 发现开放端口21&#xff…

Matplotlib柱形图大揭秘:让数据‘站’起来,比增高鞋垫还管用!

1. Matplotlib绘制柱形图/柱状图/条形图 柱状图是一种用矩形柱来表示数据分类的图表,柱状图可以垂直绘制,也可以水平绘制,它的高度与其表示的数据成正比关系 # 导包 import numpy as np import pandas as pd import matplotlib.pyplot as p…

黑马Java零基础视频教程精华部分_9_面向对象进阶(1)

系列文章目录 文章目录 系列文章目录一、static(表示静态) 是Java中的一个修饰符,可以修饰成员方法,成员变量1、静态变量2、静态变量底层原理3、static静态方法4、工具类、测试类、Javabean类5、static注意事项从代码层面从内存层面 6、重新认识main方法…

[ WARN:0@0.014] global loadsave.cpp:248 cv::findDecoder imread_

[ WARN:00.014] global loadsave.cpp:248 cv::findDecoder imread_ 目录 [ WARN:00.014] global loadsave.cpp:248 cv::findDecoder imread_ 【常见模块错误】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页,我是博主英杰…

网工必装软件,SecureCRT从零到精通,不可错过

号主:老杨丨11年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部 中午好,我的网工朋友。 相信在平时的日常工作中,大家经常需要通过安全的方式远程访问各种设备和服务。SecureCRT作为一款强…

JavaWeb的三层架构和分层解耦

博客主页:音符犹如代码系列专栏:JavaWeb关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ 目录 三层架构 分层解耦 三层架构是哪三层? Controller:表现层…

云微客短视频矩阵能带来流量吗?有哪些产品特色?

短视频平台,现如今已经成为了互联网最大的流量池,诸如抖音、快手、小红书、视频号、哔哩哔哩等平台,日活量都在上亿。短视频赛道汇聚了无数的用户群体,所以商企品牌的营销定位就应该在这里。 许多企业看到了这样的营销商机&#x…

AI绘画模型之:CLIP 与 DALL-E 2

重磅推荐专栏: 《大模型AIGC》 《课程大纲》 《知识星球》 本专栏致力于探索和讨论当今最前沿的技术趋势和应用领域,包括但不限于ChatGPT和Stable Diffusion等。我们将深入研究大型模型的开发和应用,以及与之相关的人工智能生成内容(AIGC)技术。通过深入的技术解析和实践经…

自动驾驶:SLAM

什么是SLAM SLAM,即Simultaneous Localization and Mapping(同时定位与地图构建) 最早由Smith、Self和Cheeseman于1988年提出。是自动驾驶领域中的一项核心技术。它允许自动驾驶车辆在使用各种传感器(如激光雷达、摄像头、IMU等&…