蓝桥杯嵌入式学习日记(五):使用STM32和HAL库进行DAC数模转换

目录

  • 一、查阅手册
  • 二、利用STM32cubemx创建工程
  • 三、代码部分
  • 1、代码和原理
  • 2、实现功能检验
  • 一、查阅手册

    STM32的DAC模块(数字/模拟转换模块)是12位数字输入,电压输出型的DAC。
    DAC可以配置为8位或12位模式,也可以与DMA控制器配合使用。
    DAC工作在12位模式时,数据可以设置成左对齐或右对齐。
    DAC模块有2个输出通道,每个通道都有单独的转换器。
    在双DAC模式下,2个通道可以独立地进行转换,也可以同时进行转换并同步地更新2个通道的输出。
    DAC可以通过引脚输入参考电压VREF+以获得更精确的转换结果。
    等等

    主要特征:
    1、支持数据左对齐或者右对齐,数据是12位的
    2、支持两个通道同时输出
    3、支持输出噪声波形和三角波形
    4、支持DMA输出
    5、可以外部触发
    6、支持缓冲输出和非缓冲输出两种模式
    等等


    再通过观察原理图我们可以发现PA4和PA5为拓展DAC引脚。另外查看所需要的函数定义

    HAL_ADC_SetValue的前几个参数跟上篇的ADC类似,为DAC编号和对应的通道,而第三个也给出了解释。

    为我们所选择的对应数据,这里有三个选项,分别是12位的右对齐和左对齐以及8位的右对齐。上面参考手册有对应说明,这里我们选择12位的右对齐,高位舍弃,取出低12位,作为DAC转换的数值。

    二、利用STM32cubemx创建工程

      这里我们依旧沿袭上篇的工程进行创建。



    这里模式我们选择连接到外部引脚,对应参数保持默认即可,想要使用DMA的可以自行开启。

    三、代码部分

    1、代码和原理

      ADC和DAC大致相似,区别就在于上篇ADC我们是先获取再赋值,而DAC我们则是先赋值再获取

    void DAC_SetValue(float volt_1,float volt_2)
    {
        volt_ch1 = (volt_1/3.3f*4096) ;
    	HAL_DAC_SetValue(&hdac1, DAC_CHANNEL_1, DAC_ALIGN_12B_R, volt_ch1) ;	
    	HAL_DAC_Start(&hdac1, DAC_CHANNEL_1) ;
    
        volt_ch2 = (volt_2/3.3f*4096) ;
    	HAL_DAC_SetValue(&hdac1, DAC_CHANNEL_2, DAC_ALIGN_12B_R, volt_ch2) ;	
    	HAL_DAC_Start(&hdac1, DAC_CHANNEL_2) ; 
    }
    

    对应的便是先设置数值然后再打开对应通道,和ADC同时学习的时候不要记混。同时数据精度为4096,因为是通过和基础电压Vref+产生的电压,所以范围在0~3.3V,只要让我们设置的电压/3.3*4096即可。

    2、实现功能检验

    这里给两种方式:
    1、如果手边有万用表的,可以直接测量PA4和PA5引脚与GND的压差即可,这里建议先拿两根公母杜邦线引出后再进行测量,因为在CT117E_M4这块板子上引脚距离很近,测量时不小心碰到其它引脚容易短路。
    2、可以使用我们上篇所讲的ADC进行测量,以下具体讲这种方法。

    使用ADC进行测量,不会的可以看上篇蓝桥杯嵌入式学习日记(四)——ADC数模转换【STM32】【HAL库】,我们在上篇看到过对应原理图分别使用的是J11和J12跳帽。

    接下来我们拔掉J11和J12跳帽,隔绝掉与旋钮电位器的连接,将PA4和PA5用两根母母杜邦线连接至靠近屏幕一端即可。

        DAC_SetValue(1.2,2.0) ;
    

    我这里分别设置PA4为1.2V,PA5为2.0V


    文中所用的工程我会贴在下面,如有需要可自行下载,如果有疑问或者有什么错误之处还望留言指正。

    链接:https://pan.baidu.com/s/1jWWfQyIN0f2vUtkYLgMjMA?pwd=1111
    提取码:1111

    作者:Lumine.

    物联沃分享整理
    物联沃-IOTWORD物联网 » 蓝桥杯嵌入式学习日记(五):使用STM32和HAL库进行DAC数模转换

    发表评论