RT-Thread论坛
直播中

ouxiaolong

11年用户 470经验值
擅长:嵌入式技术 光电显示
私信 关注
[经验]

【Vision Board创客营连载体验】DAC设置电压值

开发环境:

RT-Thread Studio:v2.2.7

开发板:RA8D1 Vision Board开发板

MCU:R7FA8D1BHEC337AS02

1 RA8D1 DAC简介

RA8D1有片上DAC外设,总共有两路DAC输出通道,每路的分辨率可配置为12位, 这两个通道之间互不影响,每个通道都可以使用ELC功能可外部触发或者进行与ADC单元1的同步转换。

1.png

2 RT-Thread 的DAC简介

DAC(Digital-to-Analogl Converter) 指数模转换器。是指把二进制数字量形式的离散数字信号转换为连续变化的模拟信号的器件。在数字世界中,要处理不稳定和动态的模拟信号并不容易,基于 DAC 的特性,在各种不同的产品中都可以找到它的身影。与之相对应的 ADC(Analog-to-Digital Converter)),它是 DAC 数模转换的逆向过程。DAC 主要应用于音频放大,视频编码,电机控制,数字电位计等。

应用程序通过 RT-Thread 提供的 DAC 设备管理接口来访问 DAC 硬件,相关接口如下所示:

函数 描述
rt_device_find() 根据 DAC设备名称查找设备获取设备句柄
rt_dac_enable() 使能 DAC设备
rt_dac_read() 读取 DAC设备数据
rt_dac_disable() 关闭 DAC设备

关于DAC的更多资料请参看RT-Thread官方手册:

https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/programming-manual/device/dac/dac

3 硬件连接

P014引脚可以连接到MCU内部的 DAC 外设,从而输出外部电压。

2.png

4 RA8D1 DAC配置

接下来配置DAC,只需要简单配置就可使用。双击工程中的 RA Smart Configurator 图标,第一次打开需要配置正确的 FSP 安装路径。

3.png

4.png

  • FSP配置DAC

1.配置扫描通道对应的引脚

5.png

2.修改通道号为 0,与 DAC0 对应

6.png

7.png

  • 配置DAC通道

然后打开对应的通道

8.png

5 DAC代码实现

笔者这里使用的DAC通道0,然后接到ADC的通道2,核心代码如下:

#define DEV_ADC                   "adc0"
#define DEV_ADC_CHANNEL         2

#define DEV_DAC                   "dac0"
#define DEV_DAC_CHANNEL         0

#define REFER_VOLTAGE            330
#define CONVERT_BITS              (1 << 12)

void dac_test(void)
{
    rt_adc_device_t dev_adc = (rt_adc_device_t)rt_device_find(DEV_ADC);
    rt_dac_device_t dev_dac = (rt_dac_device_t)rt_device_find(DEV_DAC);
    rt_uint32_t vol, value = 2048;

    if(dev_adc == RT_NULL)
    {
        rt_kprintf("no adc device named %s\n", DEV_ADC);
    }
    rt_adc_enable(dev_adc, DEV_ADC_CHANNEL);

    if(dev_dac == RT_NULL)
    {
        rt_kprintf("no dac device named %s\n", DEV_DAC);
    }

    rt_dac_enable(dev_dac, DEV_DAC_CHANNEL);
    rt_dac_write(dev_dac, DEV_DAC_CHANNEL, value);

    vol = value * REFER_VOLTAGE / CONVERT_BITS;
    rt_kprintf("the dac voltage is :%d.%02d \n", vol / 100, vol % 100);

    rt_thread_mdelay(100);

    value = rt_adc_read(dev_adc, DEV_ADC_CHANNEL);

    vol = value * REFER_VOLTAGE / CONVERT_BITS;
    rt_kprintf("the adc voltage is :%d.%02d \n", vol / 100, vol % 100);

    rt_adc_disable(dev_adc, DEV_ADC_CHANNEL);
    rt_dac_disable(dev_dac, DEV_DAC_CHANNEL);
}

MSH_CMD_EXPORT(dac_test, dac_test);

6 测试验证

编译下载,调试信息如下:

9.png

从以上打印信息可以看出,dac0和adc0已经使能,将P006和P014连接,然后使用MSH命令‘dac_test’即可使能DAC线程。

10.png

DAC输出电压和ADC输入的值相同。

更多回帖

发帖
×
20
完善资料,
赚取积分