### STM32-DAC篇(基于f103)
#### 一、基础知识
**1.1 什么是DAC?**
DAC,全称为Digital-to-Analog Converter(数字/模拟转换器),是一种能够将数字信号转换成模拟信号的电子器件。在STM32微控制器中,DAC模块用于将数字信号转换为模拟电压输出,适用于需要模拟输出的应用场景,如控制模拟设备或信号处理。
**1.2 DAC的特性参数**
- **分辨率**:指的是DAC能够分辨的最小电压变化量,通常以二进制位数表示,例如8位、12位等。
- **建立时间**:表示将一个数字量转换为稳定模拟信号所需的时间。
- **精度**:是指DAC输出的实际电压与其理论值之间的差异程度。
- **参考电压**:DAC输出电压是相对于参考电压的一定比例,参考电压的选择直接影响到输出电压的范围。
**1.3 STM32各系列DAC的主要特性**
- STM32系列微控制器中,不同的型号拥有不同特性的DAC模块,例如:
- F1/F4/F7/H7等系列都内置有DAC模块。
- 某些系列支持双通道DAC输出。
- 不同系列支持不同的分辨率(如8位或12位)。
#### 二、DAC的工作原理
**2.1 DAC框图简介**
- 在F1/F4/F7/H7等STM32系列中,DAC框图基本相同,主要包括以下几个部分:
- 数据输入寄存器:用于存储待转换的数据。
- 数模转换器:完成数字到模拟信号的转换。
- 输出缓冲:保持输出信号的稳定性。
- 触发源:决定转换何时进行。
**2.2 参考电压/模拟部分电压**
- DAC供电电源:VSSA、VDDA(2.4V≤VDDA≤3.6V)
- DAC输出电压范围:VREF–≤VOUT≤VREF+(即0V≤VOUT≤3.6V)
**2.3 DAC数据格式**
- 8位模式:只支持右对齐,使用寄存器`DHR8Rx`或`DHR8RD`。
- 12位模式:支持左对齐和右对齐,使用寄存器`DHR12Rx`、`DHR12RD`或`DHR12Lx`、`DHR12LD`。
**2.4 触发源**
- 三种触发转换的方式:自动触发、软件触发、外部事件触发。
- `TENx`位置0:禁止触发。
- `TSELx[2:0]`:选择外部事件触发源。
- `SWTRIGx`位:选择软件触发。
**2.5 DMA请求**
- 当`DMAENx`位置1时,会产生DMA请求,使得DHRx的数据转移到DORx。
- 在12位模式下,数据加载到DORx后,模拟输出电压将经过时间`VSETTLING`后可用。
#### 三、DAC输出实验
**3.1 实验简要**
- 本节主要介绍如何通过STM32的DAC输出特定的模拟电压。
- 实验中将使用12位右对齐模式,通过DAC1通道1(PA4)输出预设电压。
- 通过ADC1通道1 (PA1)采集输出电压,并显示ADC转换的数字量及换算后的电压值。
**3.2 DAC寄存器介绍**
- `TEN1`位置0:关闭通道1触发(即自动)。
- `BOFF1`位置1:关闭输出缓冲。
**3.3 DAC输出实验配置步骤**
1. **初始化DAC**:使用`HAL_DAC_Init()`。
2. **DAC MSP初始化**:使用`HAL_DAC_MspInit()`来配置NVIC、CLOCK、GPIO等。
3. **配置DAC相应通道相关参数**:使用`HAL_DAC_ConfigChannel()`。
4. **启动D/A转换**:使用`HAL_DAC_Start()`。
5. **设置输出数字量**:使用`HAL_DAC_SetValue()`。
6. **读取通道输出数字量**(可选):使用`HAL_DAC_GetValue()`。
**3.4 编程实战:DAC输出实验**
- 实验目标:使用12位右对齐模式通过DAC1通道1(PA4)输出预设电压。
#### 四、DAC输出三角波实验
**4.1 实验简要**
- 本实验将通过STM32的DAC输出三角波。
- 使用12位右对齐模式,通过DAC1通道1(PA4)输出三角波。
- 通过DS100示波器查看波形。
**4.2 编程实战:DAC输出三角波实验**
- 实验配置步骤与上一节相似,但需要编写特定的程序来生成三角波形。
#### 五、DAC输出正弦波实验
**5.1 实验简要**
- 本实验将通过STM32的DAC输出正弦波。
- 使用12位右对齐模式,通过DAC1通道1(PA4)输出正弦波。
- 通过DS100示波器查看波形。
**5.2 DAC输出正弦波实验配置步骤**
1. **初始化DMA**。
2. **将DMA和ADC句柄联系起来**。
3. **初始化DAC**。
4. **DAC MSP初始化**。
5. **配置DAC相应通道相关参数**。
6. **启动DMA传输**。
7. **配置定时器溢出频率并启动**。
8. **配置定时器触发DAC转换**。
9. **停止/启动DAC转换**。
**5.3 产生正弦波序列函数介绍**
- 为了生成正弦波形,可以编写一个函数`void dac_sine_wave(uint16_t maxval, uint16_t dt, uint16_t samples, uint16_t n)`,该函数根据给定的最大值、采样间隔、采样点数等参数生成正弦波序列。
#### 六、PWM DAC实验
**6.1 PWM DAC应用背景**
- 在某些应用中,当需要多个DAC输出通道而STM32只提供了两个时,可以通过PWM加RC滤波器的方式来低成本地实现更多的DAC输出。
- 这种方法适用于精度要求不高的场合。
**6.2 编程实战:PWM DAC实验**
- 通过配置定时器生成PWM信号,再通过RC滤波器平滑PWM信号得到近似的模拟电压输出。
#### 七、课堂总结
- 本文详细介绍了STM32的DAC模块的基本概念、工作原理以及如何通过编程实现不同的DAC输出实验。
- 通过这些实验,读者可以更深入地理解DAC的工作机制,并掌握如何利用STM32的DAC模块实现模拟输出功能。
- 对于希望进一步了解或实践DAC应用的开发者来说,这些内容提供了宝贵的指导。
2024-08-21 14:08:35
416KB
stm32
1