STM32G4的数模转换器(DAC)的应用

news/2024/11/20 18:00:35/

目录

概述

1 DAC模块介绍

2 STM32Cube配置参数

2.1 参数配置

 2.2 项目架构

3 代码实现 

3.1 接口函数

3.2 功能函数 

3.3 波形源代码

4 DAC功能测试

4.1 测试方法介绍

4.2 波形测试


概述

本文主要介绍如何使用STM32G4的DAC模块功能,笔者使用STM32Cube工具配置DAC模块的参数,并使用HAL提供的函数接口验证DAC输出模拟量的功能。

1 DAC模块介绍

请参看原文:

STM32G4的数模转换器(DAC)功能介绍-CSDN博客

2 STM32Cube配置参数

2.1 参数配置

1) 选择通道

选择DAC1模块,其对应的IO接口为:

DAC1_OUT_PIN:   PA4

2)配置参数

使能如下参数

 2.2 项目架构

完成2.1节参数配置后,就可以生成项目,其程序架构如下:

3 代码实现 

3.1 接口函数

使用STM32Cube工具生成的代码已经完成DAC模块的初始化功能,程序员只实现DAC的输入数据接口

代码29行:DAC数据的输入接口

3.2 功能函数 

1)生成反正弦波函数

2)生成正弦函数

3) 三角波函数

3.3 波形源代码

/* USER CODE BEGIN Header */
/********************************************************************************* File Name        :  waveLib.c* Description      :  main task ******************************************************************************* @attention*
* COPYRIGHT:    Copyright (c) 2024  tangmingfei2013@126.com* CREATED BY:   mingfei.tang
* DATE:         JUL 05th, 2024*******************************************************************************/
/* USER CODE END Header */
#include "waveLib.h"
#include "dac.h"
#include <stdio.h> 
#include <string.h>
#include <stdbool.h>
#include <math.h>#define PI    3.14159void DAC_SetConvert( uint32_t value)
{HAL_DAC_SetValue( &hdac1, DAC_CHANNEL_1, DAC_ALIGN_12B_R,value );
}float dac_triangle_wave( void )
{static double t = -1;float value, angle;if( t >= 1 ){t = -1;}t += 0.001;angle = t*1000;return  angle;
}float asin_wave( void )
{static double t = -1;float value, angle;if( t >= 1 ){t = -1;}value = asin( t ); angle = (180*value)/3.1415926;t += 0.001;return  angle;
}float sin_wave( void )
{float value, angle;static double t = -1;angle = 2*PI*t;value = 100*sin( angle ); t += 0.001;if( t >= 1 ){t = -1;}return  value;
}/* End of this file */

4 DAC功能测试

4.1 测试方法介绍

使用DAC模块输出模拟波形,ADC模块采样该波形数据

代码66行: 设置原始波形数据

代码68行: 配置DAC数据

代码76行:显示原始波形数据

源代码文件

void Debug_adcLog( void )
{float value;value = 200+ dac_triangle_wave();// dac_triangle_wave();DAC_SetConvert(value);if( bl_ready ){bl_ready = false;adc1_value_list[2] = value;// asin wave adc1_value_list[3] = dac_triangle_wave();Debug_PrintfJustFloat( pADC_ValList, ADC_TOTAL_CH );}
}

4.2 波形测试

 1)正弦波形测试

2)反正弦波测试

 原始波形:

ADC采样的波形

 3)三角波测试

原始波形

ADC采样的波形

 


http://www.ppmy.cn/news/1548536.html

相关文章

验证双随机矩阵(doubly stochastic matrix) 满足C(P)=C(P^T)

验证双随机矩阵(doubly stochastic matrix) 满足C( P P P)C(P T ^T T) 双随机矩阵&#xff1a; 在数学中&#xff0c;一个双随机矩阵&#xff08;doubly stochastic matrix&#xff09;是一个满足以下条件的矩阵&#xff1a; 非负矩阵&#xff1a;矩阵中的每个元素都是非负的…

LDR6500:C to DP与DP to C视频转接线双向方案

在当前的数字时代&#xff0c;投屏技术和视频接口转换已成为连接不同设备、共享内容的常用手段。LDR6500&#xff0c;作为乐得瑞科技精心研发的USB Power Delivery&#xff08;PD&#xff09;协议芯片&#xff0c;凭借其卓越的性能和广泛的兼容性&#xff0c;在C-to-DP&#xf…

《生成式 AI》课程 第3講 CODE TASK 任务3:自定义任务的机器人

课程 《生成式 AI》课程 第3講&#xff1a;訓練不了人工智慧嗎&#xff1f;你可以訓練你自己-CSDN博客 我们希望你创建一个定制的服务机器人。 您可以想出任何您希望机器人执行的任务&#xff0c;例如&#xff0c;一个可以解决简单的数学问题的机器人0 一个机器人&#xff0c…

家庭网络常识:猫与路由器

这张图大家应该不陌生——以前家庭网络的连接方式。 图1 家庭网络连接示意图 来说说猫/光猫&#xff1a; 先看看两者的图片。 图2 猫 图3 光猫 这个东西因为英文叫“modem”&#xff0c;类似中文的“猫”&#xff0c;所以简称“猫”。 猫和光猫的区别就是&#xff0c;一…

【数据结构】树——链式存储二叉树的基础

写在前面 书接上文&#xff1a;【数据结构】树——顺序存储二叉树 本篇笔记主要讲解链式存储二叉树的主要思想、如何访问每个结点、结点之间的关联、如何递归查找每个结点&#xff0c;为后续更高级的树形结构打下基础。不了解树的小伙伴可以查看上文 文章目录 写在前面 一、链…

【全栈环境搭建】Fantasy和ZMFrameWork整合

1.环境搭建 一、Fantasy框架下载1.https://github.com/qq362946/Fantasy.git2.修改 Fantasy/examples/Server/Main/NLog.config 配置打印日志文件:<?xml version"1.0" encoding"utf-8" ?> <nlog xmlns"http://www.nlog-project.org/schem…

docker有哪些网络模式

Docker 提供了多种网络模式&#xff08;Networking Modes&#xff09;&#xff0c;每种模式都有其特定的用例和优缺点。以下是 Docker 的几种主要网络模式&#xff1a; 1. Bridge 网络&#xff08;默认&#xff09; 描述&#xff1a;在这种模式下&#xff0c;Docker 创建了一…

集群聊天服务器(7)数据模块

目录 Mysql数据库代码封装头文件与源文件 Mysql数据库代码封装 业务层代码不要直接写数据库&#xff0c;因为业务层和数据层的代码逻辑也想完全区分开。万一不想存储mysql&#xff0c;想存redis的话&#xff0c;就要改动大量业务代码。解耦合就是改起来很方便。 首先需要安装m…