找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

4807

积分

0

好友

659

主题
发表于 2 小时前 | 查看: 2| 回复: 0

26.5 实验:使用DAC输出正弦波信号

26.5.1 硬件设计

野火启明6M5开发板的引出引脚电路图如图所示。

瑞萨RA6M5开发板60针接口电路原理图

野火启明4M2开发板的引出引脚电路图如图所示。

瑞萨RA4M2开发板32针接口电路原理图

RA6M5和RA4M2都有2个DAC通道,两个通道分别可以连接到P014和P015引脚上。

表5:RA6M5和RA4M2的DAC引脚

DAC通道0 P014
DAC通道1 P015

野火启明2L1开发板的引出引脚电路图如图所示。

瑞萨RA2L1开发板50针接口电路原理图

RA2L1只有1个DAC通道,该通道可以连接到P014引脚上。

表6:RA2L1的DAC引脚

DAC通道0 P014

注意
在本实验中,启明6M5、启明4M2和启明2L1开发板使用的都是P014引脚(DAC通道0)来输出模拟正弦波信号。

26.5.2 软件设计

26.5.2.1 新建工程

对于e² studio开发环境:拷贝一份我们之前的e2s工程模板 “19_UART_Receive_Send”,然后将工程文件夹重命名为 “26_DAC”,最后再将它导入到我们的e² studio工作空间中。

对于Keil开发环境:拷贝一份我们之前的Keil工程模板 “19_UART_Receive_Send”,然后将工程文件夹重命名为 “26_DAC”,并进入该文件夹里面双击Keil工程文件,打开该工程。

工程新建好之后,在工程根目录的“src”文件夹下面新建“dac”文件夹,再进入该文件夹里面新建源文件和头文件:“bsp_dac.c”和““bsp_dac.h”。工程文件结构如下。

列表3:文件结构

25_DAC
├─ ......
└─ src
  ├─ led
  │ ├─ bsp_led.c
  │ └─ bsp_led.h
  ├─ debug_uart
  │ ├─ bsp_debug_uart.c
  │ └─ bsp_debug_uart.h
  ├─ dac
  │ ├─ bsp_dac.c
  │ └─ bsp_dac.h
  └─ hal_entry.c
26.5.2.2 FSP配置

打开该工程的FSP配置界面进行配置。

首先依次点击 “Stacks”->“Pins”->“Peripherals”->“DAC0” 来配置通道DA0对应的引脚为P014。如下图所示。

FSP引脚配置界面,选择P014为DAC0输出引脚

然后依次点击 “Stacks”->“New Stack”->“Analog”->“DAC(r_dac)” 来配置DAC模块。如下图所示。

在FSP Stacks配置中添加DAC (r_dac)模块

DAC的属性配置:

DAC模块属性配置参数表

除了DA0引脚选择按照默认值即可。

表7:DAC属性介绍
DAC属性参数说明表格

配置完成之后可以按下快捷键“Ctrl+S”保存,最后点右上角的 “Generate Project Content” 按钮,让软件自动生成配置代码即可。

26.5.2.3 DAC初始化函数

DAC初始化函数如下:

列表4:代码清单26‑3 DAC初始化函数

/**
 *  @brief 初始化 DAC
 *  @param 无
 *  @retval 无
 */
void DAC_Init()
{
  R_DAC_Open(&g_dac0_ctrl, &g_dac0_cfg);
  R_DAC_Start(&g_dac0_ctrl);
}
  1. R_DAC_Open()配置单个DAC通道,启动通道,并提供用于DAC API写入和关闭函数的句柄。
  2. R_DAC_Start()启动D/A转换输出。
26.5.2.4 设置DAC输出电压函数

列表5:代码清单26‑4 设置DAC输出电压函数

/**
 * @brief 设置当前的电压
 * @param 需要控制的电压
 * @retval 无
 */
void DAC_SetVoltage(float voltage)
{
  uint16_t dac_data;
  dac_data = (uint16_t)(4095*((voltage)/3.3f));
  R_DAC_Write(&g_dac0_ctrl, dac_data);
}

通过电压转换公式将输入的模拟量转换为数值量,输入到R_DAC_Write()函数里,R_DAC_Write()会将数据写入到D/A转换器里。

26.5.2.5 DAC输出正弦波

列表6:代码清单26‑5 DAC输出正弦波

//正弦波数据数组变量
uint16_t var[] = {
  2048, 2460, 2856, 3218, 3532, 3786, 3969, 4072, 4093, 4031, 3887, 3668,
  3382, 3042, 2661, 2255, 1841, 1435, 1054, 714, 428, 209, 65, 3, 24, 127,
  310, 564, 878, 1240, 1636, 2048
};
/**
 * @brief 生成正弦波波形
 * @param 输入的值可以调节波形的周期
 * @retval 无
 */
void DAC_SinWave_Cycle(uint32_t time_interval)
{
  for(uint32_t i = 0 ; i < (sizeof(var)/sizeof(var[0])); i++)
  {
    R_DAC_Write(&g_dac0_ctrl, var[i]);
    R_BSP_SoftwareDelay(time_interval, BSP_DELAY_UNITS_MILLISECONDS);
  }
}

通过轮循的方式将之前python生成的正弦波数据输入到R_DAC_Write()函数里面,并且延时一段时间。而延时时间就是我们输入到函数里面的数值,通过改变这一数值我们就可以调节正弦波的周期以及频率。

26.5.2.6 hal_entry入口函数

列表7:代码清单26‑6 hal_entry入口函数

/* 用户头文件包含 */
#include "led/bsp_led.h"
#include "debug_uart/bsp_debug_uart.h"
#include "dac/bsp_dac.h"

void hal_entry(void)
{
  /* TODO: add your own code here */

  LED_Init();   // LED 初始化
  Debug_UART4_Init(); // SCI4 UART 调试串口初始化
  DAC_Init(); // DAC 初始化
  printf("这是一个 DAC 输出正弦波的实验例程\r\n"); printf("使用示波器测量 P014 引脚(DAC 0)\r\n");

  while(1)
  {
    DAC_SinWave_Cycle(1);
  }

#if BSP_TZ_SECURE_BUILD
  /* Enter non-secure code */
  R_BSP_NonSecureEnter();
#endif
}

26.5.3 下载验证

用USB TYPE-C线连接开发板“USB TO UART”接口跟电脑,在电脑端打开串口调试助手,把编译好的程序下载到开发板。

使用示波器测量P014引脚输出的正弦波形,参考波形如下图所示。注意观察示波器测量出波形的频率值和电压峰值。

示波器捕捉到的DAC输出的正弦波形

完成这个实验,你就能掌握使用瑞萨RA系列MCU和FSP库来驱动DAC外设的基础方法。从引脚选择代码实现,整个过程清晰明了。如果你想深入了解更多嵌入式开发的技巧,或者获取更多实战代码示例,欢迎到云栈社区与其他开发者交流探讨。




上一篇:扩散模型采样新范式SSG:无需训练、即插即用的自交换引导技术
下一篇:英特尔先进封装技术解析:EMIB、Foveros与玻璃基板如何构建系统级代工体系
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-4-15 06:46 , Processed in 0.938506 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表