洋桃电子STM32F407单片机入门教程笔记八:DAC数模转换功能

 此文档作为对洋桃电子STM32F407单片机视频的整理,B站链接:

第25集)DAC数模转换功能_哔哩哔哩_bilibili

        已知ADC功能是把模拟电压转换成数值的功能,与之相反的DAC功能是把数值转换成模拟电压的功能被称为DAC数模转换器。

1. DAC功能介绍

        DAC模块是2个12位宽的数值转换器,2个DAC模块有2个对应的输出通道可以设置为8位和12位模式,在12位模式下可设置左对齐或右对齐,DAC除了输出稳定的模拟电压值,还可生成特殊波形包括噪声、三角波和音频信号。

        在DAC结构框图中,上半部分是生成波形的数字电路部分,通过对内部寄存器的控制,可以输出12位宽的电压值、噪声和三角波,数字部分输出的最终数值将输入到图中下半部分的“数模转换器”中,此部分由VDDA和VSSA供电,由VREF+提供参考电压,转换后的模拟电压从DAC_OUTX输出。当VREF+连接3.3V时,12位DAC数值0~4095对应输出电压为0V~3.3V。

        STM32F407单片机有2个DAC模块,对应着2个通道的输出端口DAC_OUT1和DAC_OUT2。

2. 硬件电路

        开发板上的DAC OUT1通道连接了一个红色高亮LED灯,通过LED亮度来呈现电压的高低。

3. STM32cubeMX初始化

        在main.c文件的第110行,会自动调用CubeMX生成的DAC初始化函数,当单片机上电后会执行DAC初始化函数,但并不会向DAC_OUT1通道输出电压,还需要我们在主函数中用HAL库函数设置电压并开启通道输出。

3.1 HAL库函数

        当前我们只需要用到其中的两个基础函数。HAL_DAC_SetValue函数用于设置DAC的输出电压值,HAL_DAC_Start函数用于开启DAC转换并在通道上输出电压。

3.2 应用程序

        其中第119~120行是借用ADC功能的应用程序,将光敏电阻和电位器的ADC数值存放到ADC_BUF数组中,第123~125行是让DAC输出电压的应用程序,其中第123行是对ADC数值进行必要的换算,因为在硬件电路中用于显示DAC电压的LED是红色型号的,此LED的特性之一是启动电压为1.8V,也就是说此LED的输入电压低于1.8V时不会点亮,所以我们需要让电位器的ADC数值为0时,对应到DAC输出1.8V电压,所以对电位器数值除2后加上2047的偏移值,将换算结果放入ADC BUF[2]中。第124行调用HAL_DAC_SetValue函数,此函数第一个参数是DAC句柄,第二个参数是DAC电压的输出通道,DAC_CHANNEL 1表示DAC_OUT1通道,第三个参数是数据宽度和对齐方式,DAC_ALIGN_12B_R表示12位宽度右对齐,第四个参数是DAC转换的电压值,这里放入ADC_BUF[2]的数值。第125行调用HAL_DAC_Start函数开启DAC转换和通道输出,第126行的延时函数决定了采样和输出的刷新频率。

4. 实验现象

        旋转电位器来改变LED的亮度。当电位器阻值为0时DAC输出LED亮度变成最暗,当电位器阻值为最大时DAC输出LED亮度变成最亮。微调电位器时LED也会有对应的亮度变化。达到了DAC输出模拟电压的效果。

  • 24
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值