这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 【瑞萨RA8D1开发板学习历程】:03ADC+了解一下RA8D1内部的ADC

共2条 1/1 1 跳转至

【瑞萨RA8D1开发板学习历程】:03ADC+了解一下RA8D1内部的ADC

高工
2025-06-12 09:59:13     打赏

 前言:分享一下RA8D1,ADC的学习配置过程。

        ADC 即模拟-数字转换器(Analog-to-digital converter),是一种用于将连续的模拟信号转换为离散的数字信号的器件。就比如我们可以将我们生活中的温度、压力、声音这样的模拟信号通过 ADC转化为可以通过单片机处理的数字信号。

一:RA8D1的ADC知识分享:

MCU包括12位逐次逼近A/D转换器(ADC12)单元。在单元0中,最多可以选择12个模拟输入通道。在单元1中,最多可以选择13个模拟输入通道、温度传感器输出、内部参考电压、VBATT 1/3电压监视器输出,以便在相应的单元中进行转换。

A/D转换精度可选择为12位、10位和8位,从而可以在生成数字值时优化速度与分辨率之间的权衡。

ADC12支持以下操作模式:

单扫描模式,按通道号升序转换选定通道的模拟输入。

连续扫描模式,以通道号升序顺序连续转换选定通道的模拟输入。

群组扫描模式,将通道的模拟输入分为两组(A组和B组),并按通道编号的升序转换所选通道的模拟输入。

在群组扫描模式下,选择两个群组(群组A和B)。您可以分别选择每个群组(群组A、B)的扫描开始条件,并在不同时间开始每个群组的扫描。此外,当设置群组A的优先级控制操作时,ADC12会在群组B的AD转换期间接受群组A的扫描开始,暂停群组B的转换。这允许您为群组A的A/D转换开始分配更高的优先级

在双触发模式下,所选通道的模拟输入在单扫描模式或组扫描模式(组A)中被转换,由第一和第二A/D转换开始触发转换的数据被存储在不同的寄存器中,提供A/D转换数据的双工。

自我诊断在每次扫描开始时执行一次,ADC12生成的三个参考电压值之一被 A/D 转换。

温度传感器输出和内部参考电压可以与通道的模拟输入同时选择。首先对通道的模拟输入进行第一次A/D转换,然后对温度传感器输出进行转换,最后对内部参考电压进行转换。

ADC12还提供比较功能(窗口A和窗口B)。比较功能指定窗口A的上参考值和窗口B的下参考值,并在所选通道的A/D转换值满足比较条件时输出中断。

A/D数据存储缓冲区是一个由16个缓冲区组成的环形缓冲区,用于顺序存储A/D转换后的数据。

表45.1列出了 ADC12 规范,表45.2列出了功能。图45.1显示了ADC12的框图,表45.3列出了I/0引脚。

11111..png

二:e2s软件配置过程:

2.1 配置ADC

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

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

2.png

2.2  开启ADC任务:


属性参数详细介绍:

4.png

配置完毕之后,直接点击生成代码工具就可以。

三:程序编写:

3.1 初始化ADC函数

void ADC_Init(void)
{
fsp_err_t err;
err = R_ADC_Open(&g_adc0_ctrl, &g_adc0_cfg);
err = R_ADC_ScanCfg(&g_adc0_ctrl, &g_adc0_channel_cfg);
assert(FSP_SUCCESS == err);
}

3.2 ADC的读取和数据输出函数:

/* 进行ADC采集,读取ADC数据并转换结果 */
double Read_ADC_Voltage_Value(void)
{
uint16_t adc_data;
double a0;

(void)R_ADC_ScanStart(&g_adc0_ctrl);
while (!scan_complete_flag) //等待转换完成标志
{
;
}
scan_complete_flag = false; //重新清除标志位

/* 读取通道0数据 */
R_ADC_Read(&g_adc0_ctrl, ADC_CHANNEL_0, &adc_data);
/* ADC原始数据转换为电压值(ADC参考电压为3.3V) */
a0 = (double)(adc_data*3.3/4095);
printf("adc_data: %u", adc_data);
return a0;
}

3.3 主程序如下所示:

/*初始化 串口3部分*/
err = R_SCI_B_UART_Open(&g_uart3_ctrl, &g_uart3_cfg);
if (FSP_SUCCESS != err)
{
while(1);
}
ADC_Init();

while(1)
{
R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_10_PIN_01, BSP_IO_LEVEL_HIGH);
R_BSP_SoftwareDelay (500, BSP_DELAY_UNITS_MILLISECONDS);
printf("Hello EEPW! by:keyboard007!\r\n");
R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_10_PIN_01, BSP_IO_LEVEL_LOW);
R_BSP_SoftwareDelay (500, BSP_DELAY_UNITS_MILLISECONDS);
ADC0_data = Read_ADC_Voltage_Value();

printf("ADC Voltage = %d V\r\n", ADC0_data);
}

四:实物验证:

5.png

五:总结如下:

1:使用官方的FSP库配置软件,一键可以配置ADC的基本参数,使用起来很方面。

2:简单测试了一RA8D1 内部ADC的数据,飘动较小,可以用于单端输入的场景。

六:软件代码如下:

03uart3_ADC.zip




关键词: 瑞萨RA8D1     ADC    

菜鸟
2025-06-13 10:44:26     打赏
2楼

这文章写得真棒,全面又有意义


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]