当前位置: 首页 > news >正文

e2studio开发RA4M2(17)----ADC扫描多通道采样

e2studio开发RA4M2.17--ADC扫描多通道采样

  • 概述
  • 视频教学
  • 样品申请
  • 硬件准备
  • 参考程序
  • 源码下载
  • ADC属性配置
  • 回调函数
  • 主程序
  • 演示结果

概述

在嵌入式系统中,ADC(模数转换器)是一个非常重要的组件,它将模拟信号转换为数字信号。为了提高采样效率和扩展应用,瑞萨MCU支持多通道扫描模式,允许同时采集多个模拟信号。在本文中,将在上篇文章基础上探讨如何配置ADC模块进行多通道扫描,并采集来自不同的输入模拟信号。

最近在瑞萨RA的课程,需要样片的可以加qun申请:925643491。

在这里插入图片描述

视频教学

https://www.bilibili.com/video/BV1NnXoY3E5W/

e2studio开发RA4M2(16)----ADC单通道采集电压

样品申请

https://www.wjx.top/vm/rCrkUrz.aspx

硬件准备

首先需要准备一个开发板,这里我准备的是自己绘制的开发板,需要的可以进行申请。
主控为R7FA4M2AD3CFL#AA0
在这里插入图片描述

参考程序

https://github.com/CoreMaker-lab/RA4M2

https://gitee.com/CoreMaker/RA4M2

源码下载

https://www.bilibili.com/video/BV1iBXoYZEBv/

e2studio开发RA4M2(17)----ADC扫描多通道采样

ADC属性配置

添加P015通道。

在这里插入图片描述

● 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(数值越小,优先级越高)。
● AN012 → P014 :ADC 通道 12(AN012)映射到 P014 引脚,即 ADC 采样的模拟信号输入在 P014 引脚。
● AN013 → P015 :ADC 通道 13(AN013)映射到 P015 引脚,即 ADC 采样的模拟信号输入在 P015 引脚。

在这里插入图片描述

回调函数

实现了一个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_data12=0;
        double a12;
        uint16_t adc_data13=0;
        double a13;
        /* 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_12, &adc_data12);
        assert(FSP_SUCCESS == err);
        a12=(double)(adc_data12/4095.0)*3.3;
        printf("P014(AN12)=%d,voltage=%f\n",adc_data12,a12);

        err = R_ADC_Read(&g_adc0_ctrl, ADC_CHANNEL_13, &adc_data13);
        assert(FSP_SUCCESS == err);
        a13=(double)(adc_data13/4095.0)*3.3;
        printf("P015(AN13)=%d,voltage=%f\n",adc_data13,a13);

        R_BSP_SoftwareDelay (1000, BSP_DELAY_UNITS_MILLISECONDS);
    }

演示结果

给P014接入3.3V,给P015接入GND,结果如下所示。

在这里插入图片描述

http://www.dtcms.com/a/49578.html

相关文章:

  • 基于Java+SpringCloud+Vue的前后端分离的房产销售平台
  • 从小米汽车召回看智驾“命门”:智能化时代 — 时间就是安全
  • 【零基础到精通Java合集】第二十四集:ZGC收集器详解
  • 工业巡检进入‘无人化+AI’时代:无人机智能系统的落地实践与未来
  • 计算机考研复试高频五十问(第一期)
  • ARM处理器的Store Buffer大小有限,内存屏障也无法保障可见性顺序
  • break,continue,goto
  • EB-Cable许可分析的数据来源和采集方法
  • 【高并发】Java 并行与串行深入解析:性能优化与实战指南
  • 【数据库】数据库基础
  • Linux之命令记录【一】
  • HTML第三节
  • 希音(Shein)前端开发面试题集锦和参考答案
  • 【Linux篇】第一个系统程序 - 进度条
  • GradingPool-Seq使用方法
  • day51 shell
  • vue2 + element-ui 开发网站拼图小游戏-前端项目
  • 【一个月备战蓝桥算法】递归与递推
  • map的operator[]的实现
  • 字节旗下两款AI编程工具
  • 搭建laravle 数字产品销售平台 php
  • IO标准函数和时间函数
  • excel 数据透视表的创建、快速更新、格式修改
  • 分布式锁—Redisson的可重入锁
  • 2025.3.4
  • 音频3A测试--AEC(回声消除)测试
  • python连接neo4j的方式汇总
  • 使用 Apache POI 实现 Excel 单元格合并
  • 大模型工程师学习日记(十一):FAISS 高效相似度搜索和密集向量聚类的库
  • 探究DeepSeek R1与OpenAI模型文本相似度背后的秘密