STM32 系列 DAC的介绍与使用

这篇具有很好参考价值的文章主要介绍了STM32 系列 DAC的介绍与使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

STM32网上资料多,对自己来说基本的使用也是很简单的,
我的STM32专栏并没有什么系统的基础教学,基本上是某个项目用到了,或者产品使用过程出过问题
才会来记录一下,正好用到了 DAC ,一般产品还用得不多,正好来一篇文章记录一下

前言

最近是因为有一个项目需要输出 0~10V 的信号量,而且

想着应该可以直接使用 STM32 的 DAC 来做,虽然不一定实际使用,但是也就来试试看吧。

说句实话,博主自己做的产品,不常用 DAC,所以 本文我们就来好好复习下 STM32 的 DAC ,从应用角度讲讲如何快速使用起来。

我是矜辰所致,全网同名,尽量用心写好每一系列文章,不浮夸,不将就,认真对待学知识的我们,矜辰所致,金石为开!

一、STM32 带 DAC 的系列

目前博主产品使用的芯片为 STM32L051C8 系列,本来还想着直接CubeMX 设置一下,直接测试,才发现这个片片根本没有 DAC = =! 好吧,尴尬,后来查了下 L 系列确实都没有 DAC。

STM32L0:

STM32L0 系列都没有 DAC。(ST产品线一直在完善,也可能是我自己不知道有,有错误请指出!)

那么想着就用 STM32F103 系列把,然后又查了下资料,48pin 的STM32F103C系列 也没有 DAC ,自己最常用的两款芯片都没有,网上也没有直接说哪些有哪些没有的,只能去找 ST 的资料看看,果然在某份文档中找到了。

STM32F103:

STM32F103 系列带有 DAC 的型号如下图列表所示(从 STM32F103RC 起往上都有DAC):

STM32 系列 DAC的介绍与使用

那这么看到,如果使用STM32F系列,那么至少也得从64pin 的 STM32F103RC 开始使用了。

至于 STM32F1 系列的其他型号,比如 F100、F101、F102、F105/7 等系列,因为不常用,我也没有特意去查找。

考虑到想找一个与 STM32F103 Pin to Pin 的,我又去找了另外一个常用的系列,STM32L1系列 ,居然发现了 STM32L151C8 居然也有 DAC, 这倒是可以用用。

STM32L1:

STM32L1 系列都带有 DAC : STM32L151xxxx 、STM32L152xxxx 。

STM32F4:

更高端的 F4 系列芯片,想想都知道,全系列带有 DAC ,就是贵啊。

STM32F4 系列都带有 DAC 。

这里再多余的补充一下,为什么我找芯片都是从最低端的型号开始,而且找到合适的基本不会再往功能更强的去找了:

因为实际产品! 做产品不可能和学习一样,大家学习买的开发板,都是上百个脚,一步到位,基本都是系列旗舰芯片了,功能越强越好,性能越强越好。但是作为实际应用的产品来说,需要考虑成本的,没有一家公司会在满足性能的低成本芯片的情况下,去找一个所谓更好,更强的芯片!

二、DAC 基础简介

DAC把数字量转换为模拟量,在单片机上 ,给指定的寄存器一个数字量,模块就会转化成对应的模拟电压输出,理解和使用起来都是很简单的,如果想知道基本的理论,说明大家可以网上搜索一下一大堆,这里我们直接用起来没必要介绍那些 “没用” 理论。

对于 STM32 而言,我们使用起来也是非常简单,只需要记住下面几个点,基本上就没问题了:

2.1 DAC输出引脚

STM32 常用系列的 DAC 输出通道都是固定的:

DAC_OUT1 : PA4

DAC_OUT2 : PA5

2.2 引脚配置

在 IO 配置的时候为了避免额外的干扰, PA4 和 PA5 建议配置为模拟功能。

如果使用 CubeMX 软件,选择了 DAC 输出,系统自动会选择成 Analog mode,使能 DAC 通道之后,相应的 GPIO 引脚会自动与 DAC 的模拟输出相连。

2.3 DAC输出电压计算方法

12位模式下面:

DAC输出电压 = (DOR/2^12) * Vref+
.
上面 DOR 是寄存器,最终会拿到我们写入的数字量的寄存器
.
关于到底用 4096 还是 4095 ,其实平时用起来差不多,ST 的手册上面为 4095,那么建议4095 严谨一点吧,这里大家知道就行
.
一般来说,我们 Vref+ 可以连接至 VCC ,比如说3.3V , 那就是
DAC输出电压 = (写入的数字量 / 4095) * 3.3

那么同样的,8位模式下面的计算方法:

DAC输出电压 = (写入的数字量 / 255) * 3.3

三、CubeMX DAC配置

那么接下来我们来简单测试一下 DAC 的效果,这里我们使用 STM32CubeMX 软件进行配置。

DAC 的配置是相对很简单的,如下图:

STM32 系列 DAC的介绍与使用

选择两个输出通道,其中 External Trigger 选项为是否选择 外部中断EXTI9 触发,如下图:

STM32 系列 DAC的介绍与使用

我们测试的时候使用软件触发,不使用外部中断,所以这里不选择。

DAC 的基本设置,很简单,对于博主使用的 STM32L151 来说就只有2个选项:

STM32 系列 DAC的介绍与使用

关于输出缓存:

DAC选择了输出缓存,可以用来减少输出阻抗,无需外部运放即可直接驱动外部负载。但是输出的电压没法低于20mv。

不使能输出缓存,DAC可以输出低于20mv的信号。

对于其他型号的 DAC ,可能还会有下面两个选项:

Wave generation mode

波形生成模式:可选 三角波发生器 ( Triangle wave generation ) 和 噪声波形 ( noise wave generation )

Maximum Triangle Amplitude

最大三角波幅: 0-4095 对应 0V~3.3V

3.1 触发源 software trigger 与 None 的区别

这里要额外说明一下,最后一个选项 software trigger (软件触发) 与 选择 None (没有触发源)的区别。

这两种触发源很多小伙伴在使用的时候会搞糊涂,实际上这两者是完全不同的,先用文字简单解释一下(简单使用 HAL 库,不了解寄存器没关系,这里只是为了说明区别,):

选择 None (没有触发源):

只在向 DAC 数据寄存器 DHR 写入数据之后,DAC 转化模块自动转换一次。

选择 software trigger (软件触发):

向软件触发寄存器 SWTRIGR 中写入命令时触发转换,将 DOR 寄存器中的数据进行转换。 但是在这个之间需要向 DAC 数据寄存器 DHR 写入数据, 再进行软件触发操作。

可以说,software trigger (软件触发)就比 None (没有触发源) 多一个步骤,首先都要写 DHR 寄存器写入数据,写完后 None 自动转换,但是 software trigger 需要多一步软件触发操作。

在标准库中,使用步骤区别:

如果模式为 DAC_Trigger_None

直接使用 DAC_SetChannelxData() 设置输出电压,就可以设定输出电压的大小

如果模式为软件触发:

每次在使用 DAC_SetChannelxData() 设置或者修改输出电压后,
还需要调用 DAC_SoftwareTriggerCmd(),使能软件触发。

在 HAL 库中,没有单独的软件触发的代码,因为 HAL_DAC_Start() 函数中包含了软触发转换的代码。

所以在 HAL 库中,建议的使用方法步骤为:

初始化完成后,先使用 HAL_DAC_SetValue(); ,然后再使用 HAL_DAC_Start(); ,这样的先后顺序不管是使用上面的那种方式,都能够正常输出电压值。

明白了 软件触发 以后,在平时使用中需要谨慎使用,因为每一次修改输出电压后,都必须产生一次触发信号来使得 DAC 触发 。

四、 测试

接下来简单测试一下 STM32 的DAC。

4.1 基础测试

基础测试就是非常简单,使用 STM32CubMX 生成代码后,直接加上两句话就可以使得 DAC 有输出了,比如下图示例:

STM32 系列 DAC的介绍与使用

上面设置 value 为 2048 ,根据上面的 0-4095 对应 0V~3.3V,可知,我们的电压值为 1.6V 左右。

然后直接测量 通道2(PA5) 的电压,如下:

STM32 系列 DAC的介绍与使用

4.2 波形输出

上文我们说过,对于我目前使用的 STM32L151 不支持波形输出,其他型号的可能可以直接设置,那么我们自己来简单实现一个波形输出,也是比较简单的:

  while (1)
  {
    for (mydac_value = 4095; mydac_value > 0; mydac_value--)
    {
      HAL_DAC_SetValue(&hdac,DAC_CHANNEL_2,DAC_ALIGN_12B_R,mydac_value);
      HAL_Delay(1);
    }
    for (mydac_value = 0; mydac_value < 4095; mydac_value++)
    {
      HAL_DAC_SetValue(&hdac,DAC_CHANNEL_2,DAC_ALIGN_12B_R,mydac_value);
      HAL_Delay(1);
    }
    /* USER CODE END WHILE */
    /* USER CODE BEGIN 3 */
  }

直接上一下波形图:

STM32 系列 DAC的介绍与使用

上面的图形,有个小小的疑问,按理来说,从 0 ~ 3.3V 需要的时间 4095 ms ,4s 多,但是实际上花的时间比这多得多(5s 一个格子快2个格子了),难道这里是单片机处理 DAC 的值所需要的花费的时间 ? 这个问题如果发现问题的小伙伴还望告知!谢谢!

简单的测试就这样吧,一切还是比较正常的,具体的后期 DAC 会在设计 0 - 10V 输出电路的时候再次测试。是否好用可查看文章:单片机 0~10V 输出电路的实现

结语

本文从应用的角度介绍了 STM32 系列 DAC 的基本使用,小小的总结了一下一些常用的带 DAC 的系列型号。

没有过多的那些枯燥的寄存器什么的理论,虽然 DAC 的使用确实比较简单,但是还是有些细节问题文章也给到了说明,只希望大家能够简单快速的把 DAC 使用起来。

好了,本文就到这里,谢谢大家!文章来源地址https://www.toymoban.com/news/detail-434585.html

到了这里,关于STM32 系列 DAC的介绍与使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32—DAC详解

    数字/模拟转换模块(DAC)是12位数字输入,电压输出的数字/模拟转换器。 DAC输出可以配置为8位或12位模式,也可以与DMA控制器配合使用。 DAC工作在12位模式时,数据可以设置成左对齐或右对齐。 DAC模块有2个输出通道,每个通道都有单独的转换器。 在双DAC模式下,2个通道可以

    2024年02月13日
    浏览(23)
  • STM32的DAC

    STM32 的 DAC 模块(数字/模拟转换模块)是 12 位数字输入,电压输出型的 DAC。 DAC 可以配置为 8 位或 12 位模式,也可以与 DMA 控制器配合使用 DAC 工作在 12 位模式时,数据可以设置成左对齐或右对齐。 DAC 模块有 2 个输出通道,每个通道都有单独的转换器。在双DAC 模式下,2 个通

    2024年02月16日
    浏览(26)
  • 【STM32】基于HAL库建立自己的低功耗模式配置库(STM32L4系列低功耗所有配置汇总)

    【STM32】基于HAL库建立自己的低功耗模式配置库(STM32L4系列低功耗所有配置汇总) 此文章是讨论将先前所有的低功耗配置功能整合起来的一个库(适用于STM32L4系列) 目前除了普通唤醒方式外 加入了UART唤醒和RTC唤醒配置 如果后续有更多唤醒加入(如I2C等 将直接在后续的文章

    2024年02月19日
    浏览(46)
  • STM32实验-输出DAC正弦波

    首先我们知道正弦波的解析式为y=Asin(omiga*x+fei)+b,拓展到STM32中则会得到如下的式子: y=2048*sin((2*pi/samples)*x)+2048. 其中形参的取值范围是(samples/2)maxval,采样的间隔是2*pi/samples。 接下来编写我们的函数代码dac_sin.c: 接下来编写函数头文件dac_sin.h: 最后编写主函数main.c: 到这

    2024年02月15日
    浏览(35)
  • STM32——DAC数模转换实验

    一、数模转换原理 STM32的DAC模块是十二位数字输入,电压输出型的DAC,DAC可以配置为8位或12位模式,也可以与DMA控制器配合使用。DAC工作在12位模式时,数据可以设置成左对齐或者右对齐。DAC模块有2个输出通道,每个通道都有单独的转换器。在双DAC模式下,2个通道可以独立的

    2024年02月05日
    浏览(43)
  • stm32——hal库学习笔记(DAC)

    相关HAL库函数介绍 关键结构体介绍(F1为例) adc3.c adc3.h dac.c dac.h main.c dac.c dac.h main.c dac3.c dac3.h dac.c dac.h main.c 6.2.1,什么是PWM DAC技术? 6.2.2,用分段函数表示PWM波 6.2.3,将PWM波分段函数进行傅里叶级数展开 6.2.4,PWM DAC的分辨率 6.2.5,8位分辨率下对RC滤波器的设计要求 6.2.6,

    2024年02月22日
    浏览(51)
  • 【stm32】DAC输出三角波锯齿波

    导入DAC.ioc(见上节DAC学习笔记) CubeMX图形化配置 DAC配置 实现0.1ms定时周期 时钟树配置 程序编写 实现效果 采用CubeMonitor监测生成波形 也可用示波器检测波形生成结果 在此处更改配置 使用DMA触发任意波形 若要调整锯齿波的周期,修改TIM6的分频系数和计数周期即可 程序编写

    2024年02月22日
    浏览(41)
  • STM32实验-PWM DAC模拟输出

    一般一个STM32只有2个DAC输出通道,如果需要多路DAC输出,可以选择外扩DAC,但成本回相当高。于是在一些精度要求不高的场合,我们采用定时器输出PWM和RC滤波器模拟DAC来代替外扩DAC。 PWM占空比可由以下式子计算出:p = n / N (n是on的时间,即带宽,N是周期) PWM周期是由ARR决定

    2024年02月08日
    浏览(43)
  • stm32系列单片机介绍

        stm32是基于ARM® Cortex®  内核的 32位微控制器和微处理器。常见的内核有:     Cortex-M0,代表型号STM32F0、STM32L0;     Cortex-M0+,代表型号STM32C0(23年新推出,主要针对低成本);     Cortex-M3,代表型号STM32F1、STM32F2、STM32L1;     Cortex-M4,代表型号STM32F3(混合信号)、

    2024年02月06日
    浏览(56)
  • STM32实现用DAC播放wav音频

            我用的是STM32F103RE单片机,flash是512k的,播放几秒的音频直接存在数组里面就好了。如果要播放更长的音频要加外置flash。         主要流程:从网上下载一段音乐 ----——修剪成5秒以内——转换成WAV—— 转换成数组存到代码中                 修剪音频我

    2024年02月16日
    浏览(76)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包