打印
[应用相关]

上位机控制STM32 DA 输出不同电压

[复制链接]
5428|41
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gaoke231|  楼主 | 2018-11-29 15:44 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
利用串口 控制 STM32 内部 DAC 1 来输出电压,通过 ADC1的通道 1 采集 DAC 的输出电压,在 LCD 模块上面显示 ADC 获取到的电压值以及 DAC 的设定
输出电压值等信息。  

沙发
gaoke231|  楼主 | 2018-11-29 15:45 | 只看该作者
大容量的 STM32F103 具有内部 DAC,  STM32F103RCT6 属于大容量产品,所以是带有 DAC 模块的。

使用特权

评论回复
板凳
gaoke231|  楼主 | 2018-11-29 15:47 | 只看该作者
STM32 的 DAC 模块(数字/模拟转换模块)是 12 位数字输入,电压输出型的 DAC。 DAC
可以配置为 8 位或 12 位模式,也可以与 DMA 控制器配合使用。 DAC 工作在 12 位模式时,
数据可以设置成左对齐或右对齐。DAC 模块有 2 个输出通道,每个通道都有单独的转换器。
在双 DAC 模式下, 2 个通道可以独立地进行转换,也可以同时进行转换并同步地更新 2 个
通道的输出。

使用特权

评论回复
地板
gaoke231|  楼主 | 2018-11-29 15:49 | 只看该作者
STM32 的 DAC 模块 包含2 个 DAC 转换器:每个转换器对应 1 个输出通道

使用特权

评论回复
5
gaoke231|  楼主 | 2018-11-29 15:54 | 只看该作者
STM32 的 DAC 模块  12 位模式下数据左对齐或者右对齐

使用特权

评论回复
6
gaoke231|  楼主 | 2018-11-29 15:55 | 只看该作者
STM32 的 DAC 模块:同步更新功能   噪声波形生成   三角波形生成

使用特权

评论回复
7
gaoke231|  楼主 | 2018-11-29 15:55 | 只看该作者
STM32 的 DAC 模块:双 DAC 通道同时或者分别转换

使用特权

评论回复
8
gaoke231|  楼主 | 2018-11-29 15:57 | 只看该作者
STM32 的 DAC 模块  每个通道都有 DMA 功能

使用特权

评论回复
9
gaoke231|  楼主 | 2018-11-29 16:00 | 只看该作者
单个 DAC 通道的框图如图 所示  



使用特权

评论回复
10
gaoke231|  楼主 | 2018-11-29 16:01 | 只看该作者
VDDA 和 VSSA 为 DAC 模块模拟部分的供电, Vref+是参考电压输入引脚,不过我们使用的 STM32F103RCT6,只有 64 引脚,没有 Vref 引脚,参考电压直接来自 VDDA 也是3.3V

使用特权

评论回复
11
gaoke231|  楼主 | 2018-11-29 16:02 | 只看该作者
DAC_OUTx 就是 DAC 的输出通道了(对应 PA4 或者 PA5 引脚)。用这个来输出变化的电压

使用特权

评论回复
12
gaoke231|  楼主 | 2018-11-29 16:03 | 只看该作者
DAC 输出是受 DORx 寄存器直接控制的,但是我们不能直接往
DORx 寄存器写入数据,而是通过 DHRx 间接的传给 DORx 寄存器,实现对 DAC 输出的控
制。前面我们提到, STM32 的 DAC 支持 8/12 位模式, 8 位模式的时候是固定的右对齐的,
而 12 位模式又可以设置左对齐/右对齐。

使用特权

评论回复
13
gaoke231|  楼主 | 2018-11-29 16:06 | 只看该作者
单 DAC 通道 x,总共有 3 种情况:
① 8 位数据右对齐:用户将数据写入 DAC_DHR8Rx[7:0]位(实际是存入 DHRx[11:4]
位)。
② 12 位数据左对齐:用户将数据写入 DAC_DHR12Lx[15:4]位(实际是存入 DHRx[11:0]
位)。
③ 12 位数据右对齐:用户将数据写入 DAC_DHR12Rx[11:0]位(实际是存入 DHRx[11:0]
位)。

使用特权

评论回复
14
gaoke231|  楼主 | 2018-11-29 16:07 | 只看该作者
我们使用的是单 DAC 通道 1,采用 12 位右对齐格式,所以采用第③种情况

使用特权

评论回复
15
gaoke231|  楼主 | 2018-11-29 16:08 | 只看该作者
如果没有选中硬件触发(寄存器 DAC_CR1 的 TENx 位置’ 0’ ),存入寄存器 DAC_DHRx
的数据会在一个 APB1 时钟周期后自动传至寄存器 DAC_DORx。如果选中硬件触发(寄存器
DAC_CR1 的 TENx 位置’ 1’ ),数据传输在触发发生以后 3 个 APB1 时钟周期后完成。 一
旦数据从 DAC_DHRx 寄存器装入 DAC_DORx 寄存器,在经过时间 之后,输出即
有效,这段时间的长短依电源电压和模拟输出负载的不同会有所变化。 我们可以从
STM32F103RCT6 的数据手册查到 的典型值为 3us,最大是 4us。所以 DAC 的转换
速度最快是 250K 左右。

使用特权

评论回复
16
gaoke231|  楼主 | 2018-11-29 16:14 | 只看该作者
要实现 DAC 的通道 1 输出,需要用到的一些寄存器。首先是DAC 控制寄存器 DAC_CR,该寄存器的各位描述如图 所示:
  


使用特权

评论回复
17
gaoke231|  楼主 | 2018-11-29 16:15 | 只看该作者
DAC_CR 的低 16 位用于控制通道 1,而高 16 位用于控制通道 2

使用特权

评论回复
18
gaoke231|  楼主 | 2018-11-29 16:15 | 只看该作者
DAC 通道 1 使能位(EN1),该位用来控制 DAC 通道 1 使能的,本次我们就是用的 DAC 通道 1,所以该位设置为 1

使用特权

评论回复
19
gaoke231|  楼主 | 2018-11-29 16:16 | 只看该作者
关闭 DAC 通道 1 输出缓存控制位(BOFF1),这里 STM32 的 DAC 输出缓存做的
有些不好,如果使能的话,虽然输出能力强一点,但是输出没法到 0,这是个很严重的问题。
所以本次我们不使用输出缓存。即设置该位为 1。

使用特权

评论回复
20
gaoke231|  楼主 | 2018-11-29 16:16 | 只看该作者
DAC 通道 1 触发使能位(TEN1),该位用来控制是否使用触发,里我们不使用触发,所以设置该位为 0。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

54

主题

1310

帖子

5

粉丝