搜索
查看: 14856|回复: 6

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

[复制链接]
  • TA的每日心情
    开心
    2018-2-6 09:20
  • 签到天数: 1 天

    [LV.1]初来乍到

    1182

    主题

    4967

    帖子

    1

    蝴蝶豆

    论坛元老

    最后登录
    2020-3-17
    发表于 2016-6-21 18:02:27 | 显示全部楼层 |阅读模式
    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

    回复

    使用道具 举报

    该用户从未签到

    9

    主题

    25

    帖子

    0

    蝴蝶豆

    初级会员

    最后登录
    2019-12-30
    发表于 2016-6-23 17:47:33 | 显示全部楼层
    学习学习
    回复

    使用道具 举报

    该用户从未签到

    7

    主题

    197

    帖子

    0

    蝴蝶豆

    金牌会员

    最后登录
    2018-9-30
    发表于 2016-6-23 19:16:13 | 显示全部楼层
    ,谢谢,学习一下!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    47

    主题

    1683

    帖子

    7

    蝴蝶豆

    论坛元老

    最后登录
    2022-4-9
    发表于 2016-6-23 21:20:15 | 显示全部楼层
    学习学习
    回复

    使用道具 举报

    该用户从未签到

    1

    主题

    2

    帖子

    0

    蝴蝶豆

    初级会员

    最后登录
    2018-7-30
    发表于 2016-9-18 16:44:02 | 显示全部楼层
    楼主很棒呀
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    8

    帖子

    0

    蝴蝶豆

    高级会员

    最后登录
    2021-9-24
    发表于 2017-1-12 19:20:56 | 显示全部楼层
    谢谢,学习一下!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    27

    帖子

    0

    蝴蝶豆

    初级会员

    最后登录
    2018-6-13
    发表于 2018-2-19 12:50:06 | 显示全部楼层
    谢谢发帖,辛苦!辛苦!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|论坛-意法半导体STM32/STM8技术社区

    GMT+8, 2024-5-3 07:06 , Processed in 0.201940 second(s), 43 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表