IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 通过ADC按钮,控制DAC输出正弦波 -> 正文阅读

[嵌入式]通过ADC按钮,控制DAC输出正弦波

一、前言

在上一篇文章中说到,是可以实现通过ADC按钮,控制DAC输出正弦波,这次就来实现一下:这次项目主要参考官方例程dma_read和wave_gen,其中ADC的按钮是采集不同的电压输出,通过一个GPIO实现多种控制,而wave_gen的作用是通过ADC检测到的不同电压,来输出不同形式的正弦波,话不多说,进入实战!

二、概述

在上一期已经详细介绍过ADC,在这里主要介绍一下DAC的功能和API.

2.1 功能介绍

  • DAC的主要作用是将检测的数字信号转变为模拟信号输出
  • ESP32有两个8-bitDAC通道,分别连接到GPIO25(通道1)和GPIO26(通道2)。
  • DAC驱动器预先将这些通道设置为任意电压。
  • 当使用“内置DAC模式”时,DAC通道也可以由数字控制器通过I2S驱动程序以DMA样式写入样本数据驱动。

2.2 DAC API介绍

esp_err_t dac_pad_get_io_num(dac_channel_t channel, gpio_num_t *gpio_num)
获取特定 DAC 通道的 GPIO 编号。

参数

  • channel – 获取 gpio 编号的通道
  • gpio_num – 保存 gpio 编号的输出缓冲区
    返回
  • ESP_OK 如果成功
esp_err_t dac_output_voltage(dac_channel_t channel, uint8_t dac_value)
设置 DAC 输出电压。DAC 输出为 8 位。最大值 (255) 对应于 VDD3P3_RTC。

参数

  • channel - DAC通道
  • dac_value – DAC 输出值
esp_err_t dac_output_enable(dac_channel_t channel)
DAC焊盘输出使能

参数

  • channel - DAC通道

2.3 DAC输出波形

众所周知,波形都是连续输出的,但在这里的DAC还只能一点一点输出,而想做到连续输出波形,就必须借助定时器来对波形进行连续输出:
定时器的初始化

struct timer_config_t
	//具有定时器配置设置的数据结构

参数成员:

timer_alarm_t alarm_en 
	//定时器报警启用
timer_start_t counter_en 
	//计数器使能
timer_intr_mode_t intr_type 
	//中断方式
timer_count_dir_t counter_dir 
	//反方向
timer_autoreload_t auto_reload 
	//定时器自动重载
uint32_t divider
	//计数器时钟分频器。分频器的范围是从 2 到 65536。

一系列配置:

esp_err_t timer_init(timer_group_t group_num, timer_idx_t timer_num, const timer_config_t *config)
初始化和配置定时器。

参数

  • group_num – 定时器组号,0 代表 TIMERG0 或 1 代表 TIMERG1
  • timer_num – 定时器索引,hw_timer[0] 为 0,hw_timer[1] 为 1
  • config – 指向定时器初始化参数的指针。
esp_err_t timer_set_counter_value(timer_group_t group_num, timer_idx_t timer_num, uint64_t load_val)
将计数器设置为硬件定时器

参数

  • group_num – 定时器组,0 代表 TIMERG0 或 1 代表 TIMERG1
  • timer_num – 定时器索引,hw_timer[0] 为 0,hw_timer[1] 为 1
  • load_val – 写入硬件定时器的计数器值。
esp_err_t timer_set_alarm_value(timer_group_t group_num, timer_idx_t timer_num, uint64_t alarm_value)
设置定时器报警值。

参数

  • group_num – 定时器组,0 代表 TIMERG0 或 1 代表 TIMERG1
  • timer_num – 定时器索引,hw_timer[0] 为 0,hw_timer[1] 为 1
  • alarm_value – 用于设置警报值的 64 位值。
esp_err_t timer_enable_intr(timer_group_t group_num, timer_idx_t timer_num)
启用定时器中断。

参数

  • group_num – 定时器组号,0 代表 TIMERG0 或 1 代表 TIMERG1
  • timer_num – 定时器索引。
esp_err_t timer_isr_register(timer_group_t group_num, timer_idx_t timer_num, void (*fn)(void*), void *arg, int intr_alloc_flags, timer_isr_handle_t *handle)
注册 Timer 中断处理程序,该处理程序是一个 ISR。处理程序将附加到运行此函数的同一 CPU 内核。

参数

  • group_num – 定时器组号
  • timer_num – 定时器组的定时器索引
  • fn——中断处理函数。
  • arg - 处理函数的参数
  • intr_alloc_flags – 用于分配中断的标志。一个或多个 (ORred) ESP_INTR_FLAG_* 值。有关更多信息,请参见 esp_intr_alloc.h。
  • handle – 指向返回句柄的指针。如果非 NULL,将在此处返回中断句柄。

波形输出方程:

(int)((sin(i * CONST_PERIOD_2_PI / pnt_num) + 1) * (double)(AMP_DAC) / 2 + 0.5);

其中 i * CONST_PERIOD_2_PI / pnt_num为角频率;+ 1为初相;(AMP_DAC) / 2 + 0.5为振幅,只要改变相对应的值,相对应的值与相对于的按钮进行对照,就得出不同的正弦波进行输出。

三、总结

本次项目主要依靠ADC作为输入,DAC作为持续输出而得出的正弦波,没有太多难点,所以在这里做简单介绍!

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-09-04 01:27:46  更:2022-09-04 01:31:49 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 22:57:06-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码