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

查看: 2282|回复: 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管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版