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 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> DAC的简单应用 -> 正文阅读

[嵌入式]DAC的简单应用

1.简介

DAC指数字/模拟转换。STM32F103RCT6具有2个12位数字输入,模拟输出的DAC;支持数字输入配置成8位右对齐、12位左对齐或12位右对齐格式;在双DAC通道模式下支持单通道独立转换或双通道同步转换。

2.框图

在这里插入图片描述

  1. 根据框图,将数据写入DHRX寄存器后,经过控制逻辑后被传输到DORX寄存器后再转成模拟输出
  2. 值得注意的是,一旦使能DACx通道(ENx位置1),相应的GPIO引脚(DAC1对应PA4,DAC2对应PA5)会自动与DAC的模拟输出(DAC_OUTx)相连为了避免寄生的干扰和额外的功耗,引脚PA4或者PA5应在使能DACx通道前设置成模拟输入(AIN)

3.使能DAC通道

将ENx置1即可打开对DACx的供电。在经过一段启动时间Twakeup(见规格书,6.5us)后,DACx被使能
注:ENx只会使能DACx的模拟部分,即使ENx置0,DACx的数字部分仍在工作
在这里插入图片描述

4. DAC的转换

  1. 不能直接对DORx寄存器直接写入数据,任何输出到DACx的数据都必须写入到DHRx,经系统自动传输到DORx寄存器
  2. 如果没有选中硬件触发(TENx置0)写入到DHRx的数据,会在1个APB1时钟周期后自动传输到DORx寄存器;如果选中硬件触发(TENx置1),写入到DHRx的数据会在硬件触发后经3个APB1时钟周期自动传输到DORx寄存器(注:软件触发,在置1后经1个APB1时钟周期数据传输到DORx寄存器
  3. 一旦数据从DHRx传输到DORx后,经Tsetting后,模拟输出有效(见规格书,STM32F103RCT6的典型值为3us)
    在这里插入图片描述
    附:没有选中硬件触发(TENx = 0)时的时间框图
    在这里插入图片描述

5. 输出电压

数字输入经过DAC被线性地转换为模拟电压输出,其范围为0到VREF+。
任一DAC通道引脚上的输出电压满足下面的关系:
DAC输出 = VREF x (DOR / 4096)

6. DAC触发

如果TENx位被置1, DAC转换可以由某外部事件触发(定时器计数器、外部中断线)。配置控制位TSELx[2:0]可以选择8个触发事件之一触发
在这里插入图片描述

  1. 每次检测到TRGO事件发生或者外部中断9的发生,最近一次的DHRx的数据在经3个APB1时钟周期后传输到DORx寄存器
  2. 如果是软件触发,在置1后,经1个APB1周期后DHRx的数据传输到DORx寄存器,此时,SWTRIG由硬件自动清0
    注:在ENx置1后,不能再改变TSELx[2:0]

7. DAC寄存器

以**字(32位)**的方式操作这些寄存器

7.1 DAC控制寄存器(DAC_CR)

该寄存器用于控制DAC1和DAC2,低12位为DAC1,[28:16]为DAC2,这里仅看低12位
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7.2 DAC软件触发寄存器(DAC_SWTRIGR)

bit0和bit1分别用于设置DAC1和DAC2通道的软件触发,其余bit均保留
在这里插入图片描述在这里插入图片描述

7.3 DAC通道 1 的 12 位右对齐数据保持寄存器(DAC_DHR12R1)

这里仅说一下DAC1的12bit右对齐格式,其他的格式请查参考手册
低12bit为写入DHR寄存器的数据,这里用的是12bit右对齐格式
在这里插入图片描述

7.4 DAC通道 1 数据输出寄存器(DAC_DOR1)

DAC1和DAC2的格式一样,该DORx寄存器的数据会传输到DACx的模拟电路并转换成模拟输出
注:不能直接写数据到该寄存器,输出数据只能通过写入到DHR寄存器,经系统传输到DORx
在这里插入图片描述

8. 简单应用

不使用外部触发,噪声、三角波生成的简单初始化如下:

/****************************************************************************
* 函数名:bspDACInit()
* 功能:初始化DAC
* 输入:无
* 输出:无
*/
void bspDACInit(void)
{
	uint32_t ulTemp;
	
	RCC->APB2ENR |= 1 << 2;		/*使能GPIPA时钟*/
	GPIOA->CRL &= 0xFFF0FFFF;	/*PA4模拟输入*/
	
	RCC->APB1ENR |= 1 << 29;	/*使能DAC时钟*/
	
	ulTemp = DAC->CR;
	ulTemp &= 0xFFFF0000;
	ulTemp |= 0x00000003;
	DAC->CR = ulTemp;	/*失能ADC1的DMA,MAMP,波形发生器,触发;使能ADC1*/	
	
	DAC->DHR12R1 = 0;	/*输出数据初始值为0*/
}

在例程中运行如下:
在这里插入图片描述

9. 注意

  1. DAC输出电压 = VREF x (DOR / 4096)
  2. 在使能ENx前,必须先把DACx对应的GPIO设置成模拟输入
  3. 不建议使能DACx缓存(BOFFx = 0),因为启用缓存后,DACx的模拟输出不能到 0
  4. ENx使能后,不能再配置DAC控制寄存器了,因此ENx放在最后使能,并且ENx只控制DACx模拟部分的电,ENx = 0,不会影响DACx数字部分的工作
  5. 不使用外部触发,DHR写入的数据会在1个APB1时钟周期后传输到ODR寄存器;使用外部触发,DHR写入的数据会在3个APB1时钟周期后传输到ODR寄存器(软件触发,在置1后,只需1个APB1时钟周期即可把数据从DHR传输到ODR寄存器)
  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-09-15 02:09:57  更:2022-09-15 02:11:31 
 
开发: 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年12日历 -2024/12/28 17:25:14-

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