文章代码使用
HAL
库。
文章目录
- 前言
- 一、根据手册了解 DAC 重要特性 :
- 二、CubeMX 创建工程:
- 三、DAC 代码:
- 1. 设置DAC输出值函数。
- 2. 开启DAC输出函数。
- 3. DAC 输出电压。
- 总结
前言
DAC 就是 数字模拟信号转换器 ,也就是把 数字信号转变成模拟信号的设备,它的功能与 ADC 相反。
一、根据手册了解 DAC 重要特性 :
参考 手册:
-
DAC 模块是 12 位 的,就是 2的12 次方,换成十进制就是 4096(0 ~ 4095)。
-
在12位模式下,数据可以 向左排列 (左对齐)或 向右对齐 (右对齐)。
- 左对齐: 12 位 写成 十六进制就是 0 x f f f 0.
- 右对齐: 12 位 写成 十六进制就是 0 x 0 f f f.
我们比赛中最好使用 右对齐,因为 0 x 0 f f f 十进制范围 就是 0 ~ 4095.
- 对于蓝桥杯比赛的板子有 2 个ADC(ADC1, ADC2),每个 ADC 都 2 个通道。
不过 针对于比赛我们只需要了解 ADC1 的 通道 1 ,通道 2。
下面就是 ADC 1 的两个通道的 io 接口, PA4, PA5:
- 我们通过 ADC 模块可以把 数字信号转变成模拟信号,可以 输出一个 3.3 V 的电压,或者波形。
输出电压后,可以通过电压表
对J3 排针
的 测量来判断电压是否 正确输出。
下图为 J3 排针的 引脚图:
二、CubeMX 创建工程:
-
设置 RCC。
-
设置 PA4 ,PA5 为 通道 1,通道 2。
-
设置 通道 1,通道 2 连接外部引脚。
-
设置时钟:选用内部时钟,80 MHZ。
-
设置工程模式和版本。
-
加入.c /.h文件(便于编写代码)。
-
创建工程。
三、DAC 代码:
1. 设置DAC输出值函数。
HAL_DAC_SetValue(DAC_HandleTypeDef *hdac, uint32_t Channel, uint32_t Alignment, uint32_t Data);
参数一: DAC 结构体名。(位于 dac 头文件中)
参数二: 设置DAC通道。
- 进入 HAL_DAC_SetValue 函数,再进入 IS_DAC_CHANNEL 函数。
- 找到 参数 二。
参数三: 设置DAC对齐方式。
- 进入 HAL_DAC_SetValue 函数 中的 IS_DAC_ALIGN 函数。
- 找到 参数 三。(前面讲了 我们使用 12 位 右对齐:)
参数四: 设置输出电压值 12位最大位4095。
2. 开启DAC输出函数。
HAL_DAC_Start(DAC_HandleTypeDef *hdac, uint32_t Channel);
参数一: DAC结构体名。
参数二: DAC通道。
3. DAC 输出电压。
DAC 模块 12位 ,最大输出 4095 ,范围是 0 ~ 4095.
模拟电压是 0 ~ 3.3 V 。
V 输出 = (V设置 / 3.3)* 4095
;
V设置 范围是 0 ~ 3.3 v.
- 设置 DAC1 通道 1 输出 1.1 V 电压。
dac1 = (1.1 / 3.3) * 4095;
HAL_DAC_SetValue(&hdac1, DAC_CHANNEL_1, DAC_ALIGN_12B_R, dac1); //设置输出
HAL_DAC_Start(&hdac1, DAC_CHANNEL_1); //启动 DAC
- 设置 DAC1 通道 2 输出 2.2V 电压。
dac1 = (2.2 / 3.3) * 4095;
HAL_DAC_SetValue(&hdac1, DAC_CHANNEL_2, DAC_ALIGN_12B_R, dac2); //设置输出
HAL_DAC_Start(&hdac1, DAC_CHANNEL_2); //启动 DAC
用 电压表
进行 测量 J3 排针
可以测出 相应电压。
总结
要想 比较 DAC 与 ADC ,这篇文章 详细介绍了 ADC ,可以看看: 蓝桥杯stm32 实现 ADC采集数据CubeMX