RISC-V MCU中文社区

RVMCU课堂「23」: 手把手教你玩转RVSTAR— DAC应用篇

发表于 2021-07-13 16:58:43
0
758
3

上期内容我们介绍了可以将模拟信号转化为数字信号的ADC,其实还有另一种与ADC相对的,能够将数字信号转化为模拟信号输出的外设——DAC(Digital to Analog Converter,数字/模拟转换器)。这期内容我们将通过一个用旋钮控制LED亮度的小实验带领大家了解RV-STAR开发板上的DAC的基础用法。

系统环境

Windows 10-64bit

软件平台

NucleiStudio IDE 202102版
或 PlatformIO IDE

硬件需求

RV-STAR开发板

旋转电位器

LED发光二极管​



GD32VF103的DAC外设


GD32VF103的DAC(数字/模拟转换器)可以将12位的数字数据转换为外部引脚上的电压输出,数据可以采用8位或12位模式,左对齐或右对齐模式,当使能了外部触发,DMA可被用于更新输入端数字数据。在输出电压时,可以利用DAC输出缓冲区来获得更高的驱动能力。

两个DAC可以独立或并发工作。





其主要特性如下:

  • 12位分辨率,数据左对齐或右对齐

  • 每个通道带有DMA功能

  • 同步更新转换

  • 外部事件触发转换

  • 可配置的内部缓冲区

  • 输入参考电压,Vref+

  • 噪声波生成(LSFR噪声模式和三角噪声模式)

  • 双DAC并发结构



    实验部分

    这次的实验需要用到旋转电位器和LED发光二极管两种电子器件,两者和RV-STAR的连线方式参考下表

    RV-STAR

    旋转电位器

    PC0

    OUT

    3V3

    VCC

    GND

    GND


    RV-STAR

    LED

    PA5

    Vcc

    GND

    GND


    我们的实验目的是使用旋钮(旋转电位器)控制LED的亮度,因此需要用到ADC采集旋钮的读数,这个部分和上期介绍ADC的内容基本相同,本次不进行赘述。在采集了旋钮的读数后,再将其通过DAC输出到与LED正极相连的PA5引脚上(对应DAC1)。

    连线完成后,打开IDE,创建工程,开始编写代码。

    在使用DAC时,首先需要使能DAC的外设时钟,然后将DAC对应的引脚初始化为模拟模式,代码如下:

    rcu_periph_clock_enable(RCU_GPIOA);
    rcu_periph_clock_enable(RCU_DAC);

    gpio_init(GPIOA, GPIO_MODE_AIN, GPIO_OSPEED_50MHZ, GPIO_PIN_5);


    接下来需要将DAC配置为软件触发模式,并进行相关的使能操作:

    dac_deinit();
    /* configure the DAC1 */
    dac_trigger_source_config(DAC1, DAC_TRIGGER_SOFTWARE);
    dac_trigger_enable(DAC1);
    /* enable DAC1 */
    dac_enable(DAC1);


    在主函数中,采用轮询的编程模式,在循环体中,每次先读取ADC的值,设置其为DAC的输出值,并使能一次软件触发:

    while (1) {
        input_value = adc_regular_data_read(ADC1);
        dac_data_set(DAC1, DAC_ALIGN_12B_R, input_value);
        dac_software_trigger_enable(DAC1);

        delay_1ms(50);
    }


    完整代码请参考Github上nuclei_board_labs仓库中RVSTAR的DAC例子。

    实验源码:https://github.com/Nuclei-Software/nuclei-board-labs/tree/master/rvstar/dac/adc_dac_converter

    编写完代码后,进行编译和上传,然后转动旋钮,可以观察到LED的亮度随着旋钮的转动而改变。




    喜欢3
    用户评论
    关于作者

    问答
    粉丝
    11
    关注
    1
    • RV-STAR 开发板
    • RISC-V处理器设计系列课程
    • 培养RISC-V大学土壤 共建RISC-V教育生态
    RV-STAR 开发板