400-035-6699
当前位置: 首页 » 技术支持 » 博文资讯 »

STM32使用CubeMX图形化配置DAC功能教程

在使用STM32控制器进行开发时,配置DAC(数字到模拟转换器)是一个常见需求。借助STM32CubeMX配置工具,这一过程变得相对简单。
首先,您需要选择两个输出通道。在配置界面中,您会遇到一个External Trigger选项,这允许您决定是否使用外部中断EXTI9来触发DAC。这一步骤非常直观,您只需根据实际需求进行选择即可。
接下来,是DAC的基本设置。以STM32L151系列为例,设置选项相当简单,只有两项。在配置界面中,您会看到相应的图示,指导您如何进行操作。
DAC支持输出缓存功能,这一功能可以减少输出阻抗,让您无需额外的运放就能直接驱动外部负载。然而,需要注意的是,使用输出缓存时,输出电压不能低于20mv。
如果不启用输出缓存,DAC能够输出低于20mv的信号,这为需要更精细控制的场合提供了可能。此外,不同型号的DAC可能会有额外的功能选项,比如波形生成模式。这里,您可以选择生成三角波或噪声波形。最大三角波幅度的设置范围是0到4095,对应0V到3.3V的电压范围。
在使用过程中,触发源的选择是一个重要的考虑因素。软件触发(software trigger)与无触发源(None)之间的区别是许多开发者容易混淆的地方。简而言之,选择无触发源时,DAC在向数据寄存器DHR写入数据后自动进行一次转换。而选择软件触发,则需要额外向软件触发寄存器SWTRIGR写入命令来触发转换。
在标准库中,如果使用无触发源模式,您只需调用DAC_SetChannelxData()函数来设置输出电压。如果是软件触发模式,除了调用DAC_SetChannelxData()设置输出电压外,还需要调用DAC_SoftwareTriggerCmd()来使能软件触发。
在使用HAL库时,软件触发操作已经包含在HAL_DAC_Start()函数中,因此建议的使用方法是:在初始化完成后,先使用HAL_DAC_SetValue()设置输出值,然后调用HAL_DAC_Start()启动转换。这样的操作顺序可以确保DAC正常输出电压值。
在日常使用中,需要注意每次修改输出电压后,都必须产生一个触发信号来触发DAC转换。这是确保DAC准确输出电压的关键步骤
最后,对于所有的技术文档和配置,都需要经过严格的审核和编辑。这是保证项目顺利进行的重要环节。通过以上步骤,您可以在STM32CubeMX中轻松配置DAC,并确保其在项目中准确无误地工作。

我们使用 STM32CubeMX 软件进行配置。DAC 的配置是相对很简单的,如下图所示:

STM32使用CubeMX图形化配置DAC功能教程

poYBAGSEeeqAM64cAABnfG294Hk166.png

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

pYYBAGSEef6AGclHAAEFOg6UsBs367.png

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

pYYBAGSEeh-AXhEkAAEBAaB8Ckk690.png

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

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

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

Wave generation mode

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

Maximum Triangle Amplitude,最大三角波幅:0-4095 对应 0V~3.3V

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相关文章

服务电话:
400-035-6699
企服商城