26.5
实验:使用DAC输出正弦波信号
26.5.1
硬件设计
野火启明6M5开发板的引出引脚电路图如图所示。

点击可查看大图
野火启明4M2开发板的引出引脚电路图如图所示。

点击可查看大图
RA6M5和RA4M2都有2个DAC通道,两个通道分别可以连接到P014和P015引脚上。
表5:RA6M5和RA4M2的DAC引脚
| DAC通道0 | P014 |
| DAC通道1 | P015 |
野火启明2L1开发板的引出引脚电路图如图所示。

点击可查看大图
RA2L1只有1个DAC通道,该通道可以连接到P014引脚上。
表6:RA2L1的DAC引脚
| DAC通道0 | P014 |
注意
在本实验中,启明6M5、启明4M2和启明2L1开发板使用的都是P014引脚(DAC通道0)来输出模拟正弦波信号。
26.5.2
软件设计
26.5.2.1
新建工程
对于e2 studio开发环境:拷贝一份我们之前的e2s工程模板“19_UART_Receive_Send”,然后将工程文件夹重命名为“26_DAC”,最后再将它导入到我们的e2 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 ├─ adc │ ├─ bsp_dac.c │ └─ bsp_dac.h └─ hal_entry.c
26.5.2.2
FSP配置
打开该工程的FSP配置界面进行配置。
首先依次点击“Stacks”->“Pins”->“Peripherals”->“DAC0”来配置通道DA0对应的引脚为P014。如下图所示。

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

点击可查看大图
DAC的属性配置:

点击可查看大图
除了DA0引脚选择按照默认值即可。
表7:DAC属性介绍

配置完成之后可以按下快捷键“Ctrl+S”保存,最后点右上角的“Generate Project Content”按钮,让软件自动生成配置代码即可。
26.5.2.3
DAC初始化函数
DAC初始化函数如下:
列表4:代码清单26‑3DAC初始化函数
左右滑动查看完整内容
/**
* @brief 初始化 DAC
* @param 无
* @retval 无
*/
voidDAC_Init()
{
R_DAC_Open(&g_dac0_ctrl, &g_dac0_cfg);
R_DAC_Start(&g_dac0_ctrl);
}
R_DAC_Open()配置单个DAC通道,启动通道,并提供用于DAC API写入和关闭函数的句柄。
R_DAC_Start()启动D/A转换输出。
26.5.2.4
设置DAC输出电压函数
列表5:代码清单26‑4设置DAC输出电压函数
左右滑动查看完整内容
/**
* @brief 设置当前的电压
* @param 需要控制的电压
* @retval 无
*/
voidDAC_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‑5DAC输出正弦波
左右滑动查看完整内容
//正弦波数据数组变量
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无
*/
voidDAC_SinWave_Cycle(uint32_ttime_interval)
{
for(uint32_ti = 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‑6hal_entry入口函数
左右滑动查看完整内容
/* 用户头文件包含 */#include"led/bsp_led.h"
#include"debug_uart/bsp_debug_uart.h"
#include"dac/bsp_dac.h"
voidhal_entry(void)
{
/* TODO: add your own code here */
LED_Init(); // LED 初始化
Debug_UART4_Init(); // SCI4 UART 调试串口初始化
DAC_Init(); // DAC 初始化
printf("这是一个 DAC 输出正弦波的实验例程
"); printf("使用示波器测量 P014 引脚(DAC 0)
");
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引脚输出的正弦波形,参考波形如下图所示。注意观察示波器测量出波形的频率值和电压峰值。

点击可查看大图
全部0条评论
快来发表一下你的评论吧 !