你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

查看: 2316|回复: 2

【连载】【ALIENTEK 战舰STM32开发板】STM32开发指南--第二十四章 DAC实验

[复制链接]

50

主题

7

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2013-3-12 21:18:57 | 显示全部楼层 |阅读模式
第二十四章 DAC实验

上两章,我们介绍了STM32ADC使用,本章我们将向大家介绍STM32DAC功能。在本章中,我们将利用按键(或USMART)控制STM32内部DAC模块的通道1来输出电压,通过ADC1的通道1采集DAC的输出电压,在LCD模块上面显示ADC获取到的电压值以及DAC的设定输出电压值等信息。本章将分为如下几个部分:
24.1 STM32 DAC简介
24.2 硬件设计
24.3 软件设计
24.4 下载验证

<div class="WordSection2" style="layout-grid:  15.6pt none">24.1 STM32 DAC简介

大容量的STM32F103具有内部DAC,战舰STM32选择的是STM32F103ZET6属于大容量产品,所以是带有DAC模块的。
STM32DAC模块(数字/模拟转换模块)12位数字输入,电压输出型的DACDAC可以配置为8位或12位模式,也可以与DMA控制器配合使用。DAC工作在12位模式时,数据可以设置成左对齐或右对齐。DAC模块有2个输出通道,每个通道都有单独的转换器。在双DAC模式下,2个通道可以独立地进行转换,也可以同时进行转换并同步地更新2个通道的输出。DAC可以通过引脚输入参考电压VREF+以获得更精确的转换结果。
STM32DAC模块主要特点有:
2DAC转换器:每个转换器对应1个输出通道
8位或者12位单调输出
12位模式下数据左对齐或者右对齐
同步更新功能
噪声波形生成
三角波形生成
DAC通道同时或者分别转换
每个通道都有DMA功能
单个DAC通道的框图如图24.1.1所示:
 
<span style="font-family: 宋体">
图中VDDAVSSADAC模块模拟部分的供电,而Vref+则是DAC模块的参考电压。DAC_OUTx就是DAC的输出通道了(对应PA4或者PA5引脚)。
从图24.1.1可以看出,DAC输出是受DORx寄存器直接控制的,但是我们不能直接往DORx寄存器写入数据,而是通过DHRx间接的传给DORx寄存器,实现对DAC输出的控制。前面我们提到,STM32DAC支持8/12位模式,8位模式的时候是固定的右对齐的,而12位模式又可以设置左对齐/右对齐。单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]位)。
我们本章使用的就是单DAC通道1,采用12位右对齐格式,所以采用第③种情况。
如果没有选中硬件触发(寄存器DAC_CR1TENx位置’0),存入寄存器DAC_DHRx的数据会在一个APB1时钟周期后自动传至寄存器DAC_DORx。如果选中硬件触发(寄存器DAC_CR1TENx位置’1),数据传输在触发发生以后3APB1时钟周期后完成。 一旦数据从DAC_DHRx寄存器装入DAC_DORx寄存器,在经过时间之后,输出即有效,这段时间的长短依电源电压和模拟输出负载的不同会有所变化。我们可以从STM32F103ZET6的数据手册查到的典型值为3us,最大是4us。所以DAC的转换速度最快是250K左右。

本章我们将不使用硬件触发(TEN=0),其转换的时间框图如图24.1.2所示:


24.1.2 TEN=0DAC模块转换时间框图

DAC的参考电压为Vref+的时候,DAC的输出电压是线性的从0~Vref+12位模式下DAC输出电压与Vref+以及DORx的计算公式如下:
DACx输出电压=Vref*DORx/4095

接下来,我们介绍一下要实现DAC的通道1输出,需要用到的一些寄存器。首先是DAC控制寄存器DAC_CR,该寄存器的各位描述如图24.1.3所示:
 
<span style="font-family: 宋体">

       DAC_CR的低16位用于控制通道1,而高16位用于控制通道2,我们这里仅列出比较重要的最低8位的详细描述,如图24.1.4所示:
24.1.4 寄存器DAC_CR低八位详细描述

       首先,我们来看DAC通道1使能位(EN1),该位用来控制DAC通道1使能的,本章我们就是用的DAC通道1,所以该位设置为1
       再看关闭DAC通道1输出缓存控制位(BOFF1),这里STM32DAC输出缓存做的有些不好,如果使能的话,虽然输出能力强一点,但是输出没法到0,这是个很严重的问题。所以本章我们不使用输出缓存。即设置该位为1
       DAC通道1触发使能位(TEN1),该位用来控制是否使用触发,里我们不使用触发,所以设置该位为0
       DAC通道1触发选择位(TSEL1[2:0]),这里我们没用到外部触发,所以设置这几个位为0就行了。
       DAC通道1噪声/三角波生成使能位(WAVE1[1:0]),这里我们同样没用到波形发生器,故也设置为0即可。
       DAC通道1屏蔽/复制选择器(MAMP[3:0]),这些位仅在使用了波形发生器的时候有用,本章没有用到波形发生器,故设置为0就可以了。
       最后是DAC通道1 DMA使能位(DMAEN1),本章我们没有用到DMA功能,故还是设置为0
       通道2的情况和通道1一模一样,这里就不不细说了。在DAC_CR设置好之后,DAC就可以正常工作了,我们仅需要再设置DAC的数据保持寄存器的值,就可以在DAC输出通道得到你想要的电压了(对应IO口设置为模拟输入)。本章,我们用的是DAC通道112位右对齐数据保持寄存器:DAC_DHR12R1,该寄存器各位描述如图24.1.5所示:
 
<span style="font-family: 宋体">
图       该寄存器用来设置DAC输出,通过写入12位数据到该寄存器,就可以在DAC输出通道1PA4)得到我们所要的结果。
       通过以上介绍,我们了解了STM32实现DAC输出的相关设置,本章我们将使用DAC模块的通道1来输出模拟电压,其详细设置步骤如下:
1)开启PA口时钟,设置PA4为模拟输入。
STM32F103ZET6DAC通道1是接在PA4上的,所以,我们先要使能PORTA的时钟,然后设置PA4为模拟输入(虽然是输入,但是STM32内部会连接在DAC模拟输出上)。
2)使能DAC1时钟。
同其他外设一样,要想使用,必须先开启相应的时钟。STM32DAC模块时钟是由APB1提供的,所以我们先要在APB1ENR寄存器里面设置DAC模块的时钟使能。
3)设置DAC的工作模式。
该部分设置全部通过DAC_CR设置实现,包括:DAC通道1使能、DAC通道1输出缓存关闭、不使用触发、不使用波形发生器等设置。  
4)设置DAC的输出值。
通过前面3个步骤的设置,DAC就可以开始工作了,我们使用12位右对齐数据格式,所以我们通过设置DHR12R1,就可以在DAC输出引脚(PA4)得到不同的电压值了。
最后,再提醒一下大家,本例程,我们使用的是3.3V的参考电压,即Vref+连接VDDA
通过以上几个步骤的设置,我们就能正常的使用STM32DAC通道1来输出不同的模拟电压了。
24.2 硬件设计

本章用到的硬件资源有:
1)  指示灯DS0
2)  WK_UPKEY1按键
3)  串口
4)  TFTLCD模块
5)  ADC
6)  DAC
本章,我们使用DAC通道1输出模拟电压,然后通过ADC1的通道1对该输出电压进行读取,并显示在LCD模块上面,DAC的输出电压,我们通过按键(或USMART)进行设置。
我们需要用到ADC采集DAC的输出电压,所以需要在硬件上把他们短接起来。ADCDAC的连接原理图如图24.2.1所示:
 
<span style="font-family: 宋体">
图       P14是多功能端口,我们只需要通过跳线帽短接P14ADCDAC,就可以开始做本章实验了。如图24.2.2所示:
 

<span style="font-family: 宋体">
图 
24.3 软件设计

找到上一章的工程,首先在HARDWARE文件夹下新建一个DAC的文件夹。然后打开USER文件夹下的工程,新建一个dac.c的文件和dac.h的头文件,保存在DAC文件夹下,并将DAC文件夹加入头文件包含路径。
打开dac.c,输入如下代码:
#include "dac.h"
//DAC通道1输出初始化
void Dac1_Init(void)
{

<span lang="EN-US">       RCC->APB2ENR|=1CR|=1

《STM32开发指南》第二十四章 DAC实验.rar

下载

851.13 KB, 下载次数: 15, 下载积分: ST金币 -1

实验19 DAC实验.rar

下载

109.97 KB, 下载次数: 16, 下载积分: ST金币 -1

回复

使用道具 举报

24

主题

591

回帖

0

蝴蝶豆

中级会员

最后登录
2020-12-2
发表于 2013-3-12 21:28:57 | 显示全部楼层

RE:【连载】【ALIENTEK 战舰STM32开发板】STM32开发指南--第二十四章 DAC实验

挺好的。
回复 支持 反对

使用道具 举报

50

主题

7

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
 楼主| 发表于 2013-3-12 21:33:33 | 显示全部楼层

回复:【连载】【ALIENTEK 战舰STM32开发板】STM32开发指南--第二十四章 DAC实验

回复第 2 楼 于2013-03-12 21:28:57发表:
挺好的。 

刚刚图片搞错了,sorry。
回复 支持 反对

使用道具 举报

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版