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

【实战经验】STM32 F1系列 DAC的示例详解

[复制链接]
zero99 发布时间:2016-6-21 18:02
STM32 F1系列 DAC的示例详解

前言
基于学习的目的,详细讲解关于Cube库中的DAC的功能。本次介绍DAC。

一、示例详解
基于硬件平台:STM32F10C-EVAL,MCU的型号是STM32F107VCT6。
软件则是其Cube库,路径:STM32Cube\Repository\STM32Cube_FW_F1_V1.3.0\Projects\STM3210C_EVAL\Examples\DAC\DAC_SignalsGeneration。
1、主程序
软件配置,运行程序可以发现,系统时钟设置为72MHz,定时器使用到的是TIM6;
11.jpg
12.jpg
根据时钟树的图谱及其程序, 该示例选择的是内部时钟源作为定时器的时钟源;TIM6的时钟源来自APB1的分频。
13.jpg
14.jpg
15.jpg
AHB 时钟 (HCLK)在RCC_CFGR寄存器中的分频系数HPRE的值为0,即SYSCLK not divided,即/1,所以HCLK就是72MHz;
APB1的prescaler的系数是PPRE1:0x4,HCLK divided 2,即/2,APB1CLK为36MHz;由于APB1的prescaler系数部分频,即/4,所以倍频器起作用,即为上图中的TIMxCLK = 72Mhz。
2、 定时器Tim6
16.jpg
17.jpg
设置的是向上计数,周期是0x7FF(2047),从0开始计数到2047,所以该定时器的更新周期:(2047+1)/72 = 28us,
18.jpg
所以传输的6个数值:
19.jpg
对于8位的DAC,程序中设定的是右对齐,
20.jpg
所以,对应的DOR分别为
0x000(0), 0x330(816), 0x660(1632), 0x990(2448), 0xCC0(3264), 0xFF0(4080) ;
而Vref = 3.3V, 所以:
Vdac 分别等于:也是约在0V; 0.66V; 1.32V; 1.98V; 2.64V; 3.3V之间;
3、阶梯波形
21.jpg
22.jpg
对于阶梯波形比较简单:
就是上述的6个数值每个28us触发DMA传输一次到DOR的寄存器;
所以测得的实际波形(6个梯阶,电压分别0V; 0.66V; 1.32V; 1.98V; 2.64V; 3.3V; 周期28*6 = 168us);
验证的波形如下:
23.jpg
对于阶梯波形的产生,WAVE设置的是0x00;即:wave generation disable;
24.jpg
4、三角波
25.jpg
产生三角波的主要代码如上,其实也就是下面的这一段代码:
26.jpg
其实也就是设置下面的寄存器的比特位;
27.jpg
最大的振幅是3.3V,即对应的是4095,
软件里面设置的2047,所以振幅是大约1.65V
28.jpg
该三角波的产生是由单片机的硬件产生的,软件控制的是:振幅和周期;
振幅通过上述寄存器中的MAMP1来控制;
周期则是定时器Tim6的触发事件?
但是这里的周期并不是128us啊?
改变幅值也会改变三角波的周期的,
那么这幅值和周期以及定时器之间三者的关系如何呢?
答案:
29.jpg
30.jpg
符合推论。
设置的波形控制模式:WAVE1 = 0x02,即产生三角波;
31.jpg
对于三角波的产生器,还有一段函数代码的作用是什么意思呢?
32.jpg
33.jpg
即其中的代码:
34.jpg
是什么作用呢?
产生的波形:
35.jpg
36.jpg
在加了函数之后:
37.jpg
38.jpg
从波形上来看,当参数数值不为0时,波形更像三角波,
那这个参数影响的是什么呢?
39.jpg
参数的tmp的值,位于0x200004A4处,初始值为0,运行到:
40.jpg
后tmp的值为0x40007400,该值是解释得通的:DAC外设的基地址(0x40007400)
41.jpg
执行完语句之后:由于传递的参数是#define DAC_ALIGN_12B_R    ((uint32_t)0x00000000)
42.jpg
得到的结果是(注意上图中虽然断点停在了DAC_DHR12R2_ALIGNMENT处,但是程序是DAC_CHANNEL_1,所以最终执行的还是下面的语句)
43.jpg
所以最终产生的效果就是:
44.jpg
地址为0x40007408的寄存器赋值,即下面寄存器赋值:
45.jpg
但是这寄存器的作用是什么呢?holding data?
Holding data寄存器,可以简单的理解为:
设置影响DAC的直流分量(直流分量还是根据下面的公式计算出来的):
46.jpg
当传递的参数设置为0是,DACoutput即三角波的最低电平为0:
当传递的参数设置为2047,DACoutput即三角波的最低电平为1.65V
47.jpg
如果传递的参数设置为1024,DACoutput即三角波的最低电平为0.82V;
48.jpg
如果传递的参数设置为3000,DACoutput即三角波的最低电平为2.42V;
49.jpg
50.jpg
5、噪声产生器
主要函数的代码如下:

51.jpg
52.jpg

由于一般的认为噪声是随机性的,所以可以认为只是修改幅值,对于其周期不可控



文档下载地址:
https://www.stmcu.org.cn/document/detail/index/id-217139

实战经验汇总:
https://www.stmcu.org.cn/module/forum/thread-576401-1-1.html

收藏 3 评论6 发布时间:2016-6-21 18:02

举报

6个回答
yuxin-366840 回答时间:2016-6-23 17:47:33
学习学习
加拿大 回答时间:2016-6-23 19:16:13
,谢谢,学习一下!
moyanming2013 回答时间:2016-6-23 21:20:15
学习学习
豆包必胜 回答时间:2016-9-18 16:44:02
楼主很棒呀
gl542400 回答时间:2017-1-12 19:20:56
谢谢,学习一下!
弱电电人 回答时间:2018-2-19 12:50:06
谢谢发帖,辛苦!辛苦!

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似技术帖

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