当前位置: 首页 > news >正文

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

目录

概述

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.lryc.cn/news/488012.html

相关文章:

  • SpringMVC跨线程获取requests请求对象(子线程共享servletRequestAttributes)和跨线程获取token信息
  • 提取repo的仓库和工作树(无效)
  • 力扣整理版七:二叉树(待更新)
  • 基于单片机的多功能环保宠物窝设计
  • HBase 基础操作
  • 小米顾此失彼:汽车毛利大增,手机却跌至低谷
  • PCL 三维重建 a-shape曲面重建算法
  • 【Android】线程池的解析
  • 集群聊天服务器(8)用户登录业务
  • Go语言中的错误嵌套
  • 51单片机基础 06 串口通信与串口中断
  • Elasticsearch:更好的二进制量化(BBQ)对比乘积量化(PQ)
  • 【GNU】gcc -g编译选项 -g0 -g1 -g2 -g3 -gdwarf
  • MySQL【六】
  • 杰发科技AC7801——ADC定时器触发的简单使用
  • VTK知识学习(8)-坐标系统
  • IO流部分串讲
  • Excel——宏教程(2)
  • unity 中 RectTransform 的常用几个属性
  • 项目-摄像
  • 摄像机ISP和DSP的区别?
  • Ubuntu24安装配置NDK
  • 【Next】中间件
  • Vulnhub靶场案例渗透[11]- Momentum2
  • STM32设计防丢防摔智能行李箱-分享
  • Vue Mixin混入机制
  • 数据库类型建表
  • iOS 18 导航栏插入动画会导致背景短暂变白的解决
  • 深度学习之人脸检测
  • 解决前后端发版本时候,手动清除浏览器缓存