e2studio开发RA2E1.17-- ADC扫描多通道采样
- 概述
- 视频教学
- 样品申请
- 硬件准备
- 参考程序
- 源码下载
- ADC属性配置
- 回调函数
- 主程序
- 演示结果
概述
在嵌入式系统中,ADC(模数转换器)是一个非常重要的组件,它将模拟信号转换为数字信号。为了提高采样效率和扩展应用,瑞萨MCU支持多通道扫描模式,允许同时采集多个模拟信号。在本文中,将在上篇文章基础上探讨如何配置ADC模块进行多通道扫描,并采集来自不同的输入模拟信号。
最近在瑞萨RA的课程,需要样片的可以加qun申请:925643491。
视频教学
https://www.bilibili.com/video/BV1y7XRYeEBw/
e2studio开发RA2E1(17)----ADC扫描多通道采样
样品申请
https://www.wjx.top/vm/rCrkUrz.aspx
硬件准备
首先需要准备一个开发板,这里我准备的是自己绘制的开发板,需要的可以进行申请。
主控为R7FA2E1A72DFL#AA0
参考程序
https://github.com/CoreMaker-lab/RA2E1
https://gitee.com/CoreMaker/RA2E1
源码下载
ADC属性配置
添加P101通道。
● Name:g_adc0该 ADC 实例的名称,在代码中用于引用此 ADC 设备。
● Unit:0表示使用的是 ADC0 设备(MCU 可能有多个 ADC 单元,如 ADC0、ADC1 等)。
● Resolution:12-Bit选择 ADC 分辨率为 12 位,即转换后的数值范围为 0~4095(2^12 = 4096)。
● Alignment:Right选择数据右对齐,即 ADC 结果存储时,低 12 位有效,高位填充 0。
● Clear after read:On每次读取 ADC 结果后,寄存器会自动清除,防止旧数据干扰新采样。
● Mode:Single Scan单次扫描模式,即每次触发 ADC 转换后,仅采样一次选中的通道。
● Normal/Group A Trigger:SoftwareADC 触发方式为软件触发,即需要手动调用 API R_ADC_ScanStart() 来启动转换。
● Callback(回调函数):指定回调函数 adc_callback,用于 ADC 转换完成后的事件处理。
● Scan End Interrupt Priority(扫描结束中断优先级):Priority 2ADC 扫描结束中断的优先级设置为 2(数值越小,优先级越高)。
● AN019 → P103 :ADC 通道 19(AN019)映射到 P103 引脚,即 ADC 采样的模拟信号输入在 P103 引脚。
● AN021 → P101 :ADC 通道 21(AN021)映射到 P101 引脚,即 ADC 采样的模拟信号输入在 P101 引脚。
回调函数
实现了一个ADC回调函数,并在扫描完成时设置 scan_complete_flag 标志位为 true,以便通知主程序扫描已完成。
volatile bool scan_complete_flag = false;
void adc_callback (adc_callback_args_t * p_args)
{//宏将告知编译器回调函数不使用参数 p_args,从而避免编译器发出警告,FSP_PARAMETER_NOT_USED(p_args);scan_complete_flag = true;
}
主程序
通过ADC对多个通道进行采样,并计算采样数据的平均值与相应的电压值,最后打印出每个通道的数字输出和电压值。
while(1){uint16_t adc_data19=0;double a19;uint16_t adc_data21=0;double a21;/* Enable scan triggering from ELC events. */(void) R_ADC_ScanStart(&g_adc0_ctrl);scan_complete_flag = false;while (!scan_complete_flag){/* Wait for callback to set flag. */}err = R_ADC_Read(&g_adc0_ctrl, ADC_CHANNEL_19, &adc_data19);assert(FSP_SUCCESS == err);a19=(double)(adc_data19/4095.0)*3.3;printf("P103(AN19)=%d,voltage=%f\n",adc_data19,a19);err = R_ADC_Read(&g_adc0_ctrl, ADC_CHANNEL_21, &adc_data21);assert(FSP_SUCCESS == err);a21=(double)(adc_data21/4095.0)*3.3;printf("P101(AN19)=%d,voltage=%f\n",adc_data21,a21);R_BSP_SoftwareDelay (1000, BSP_DELAY_UNITS_MILLISECONDS);}
演示结果
给P103接入3.3V,给P101接入GND,结果如下所示。