硬件:RA2E1开发板
软件:e2studio Version: 2024-10 (24.10.0)
调试器:J-link V9
今天继续和大家分享使用瑞萨的开发板实现位移传感器的采集方案;
简单和大家分享一下瑞萨RA2E1的ADC知识:
一:ADC的基本知识如下所示:
ADC,全称为模拟-数字转换器(Analog-to-Digital Converter),是一种电子设备,其主要功能是将连续的模拟信号转换为离散的数字信号。举例来说,我们日常生活中的温度、压力和声音等模拟信号,可以通过ADC转换为单片机能够处理的数字信号。
二:瑞萨RA2E1 ADC 简单描述
ADC的特征如下:
2 个 ADC 转换单元。
支持高达 26 个通道。其中有三组通道(AN000& AN100、AN001 & AN101 和 AN002 &AN102)分别共用相同的引脚,因此通道AN000和 AN100 不可同时使用,AN001 和 AN101.AN002 和 AN102 这两组也同理。
支持内部温度传感器,可以检测芯片运行温度;支持测量内部参考电压。
逐次逼近型 ADC,支持的分辨率:12-bit,10-bit.8-bit。
转换时间很短:0.4 μs/每通道(这是在使用 12-bit ADC、时钟 PCLKC(ADCLK)等于 50 MHz的条件下)。
PCLKA 是 RA2E1的ADC 外设模块的时钟,用于驱动外设模块的工作;而 PCLKC (ADCLK)是用于 A/D 转换的时钟,它们的频率需要保持一定的比例。PCLKA与PCLKC(ADCLK)的时钟频率比可以设置为:1:1,2:1,4:1,8:1,1:2,1:4。
可启用的 A/D 数据存储缓冲区是一个环形缓冲区,由 16 个缓冲组成,用于顺序存储 AD转换后的数据。
三:ADC的系统框图如下:
ADC0 的参考电压为 VREFH0 和 VREFL0、输人电压范围为:VREFLO≤VINSVREFH0;
ADC 的模拟输入通道:
ANOxx 是 ADC0 的模拟输入通道(xx 为通道号);可选通道如下所示:
触发来源:
中断请求信号
事件输出到 ELC 信号
同步触发信号
异步触发信号
四:任务创建过程
4.1 增加ADC通道
4.2 配置ADC的通道属性
五:任务编写:
5.1 程序流程图如下所示:
5.2 ADC初始化函数如下“
/* Initializes the module. */ err = R_ADC_Open(&g_adc1_ctrl, &g_adc1_cfg); assert(FSP_SUCCESS == err); err = R_ADC_ScanCfg(&g_adc1_ctrl, &g_adc1_channel_cfg); assert(FSP_SUCCESS == err);
5.3 ADC读取函数如下:
volatile bool scan_complete_flag = false; void adc1_callback (adc_callback_args_t * p_args) { FSP_PARAMETER_NOT_USED(p_args); scan_complete_flag = true; } double adcVolate; //adc电压值 uint16_t adcSample ; //adc采样值 void ReadAdcSample(void) { (void) R_ADC_ScanStart(&g_adc1_ctrl); scan_complete_flag = false; while (!scan_complete_flag) { } err =R_ADC_Read(&g_adc1_ctrl, ADC_CHANNEL_1, &adcSample); assert(FSP_SUCCESS == err); adcVolate =(adcSample/4095.0)*3.3; }
5.4 主程序执行如下:
R_BSP_SoftwareDelay(500, BSP_DELAY_UNITS_MILLISECONDS); // NOLINT /* printf("EEPW test data \r\n"); SendTestData(0x01); Add_Write_Data(0x12,12);*/ /*处理串口屏数据信息*/ DealDwinData(); /*处理串口屏按键信息*/ DealTouchPanelInfo(ucKeyValue); /*读取ADC数据*/ ReadAdcSample(); printf("EEPW test data = %5d\r\n",adcSample);
5.4数据输出图片如下所示:
七:调试心得:
需要注意以下的几个方面:
采样时间:根据信号特性选择合适的采样时间,避免信号失真。
参考电压:确保参考电压稳定,以获得准确的转换结果。
噪声抑制:在高速连续转换时,注意电源和信号噪声的影响。
还有就是ADC采集的通道,我之前在使用keil读取多路ADC时候,会导致程序异常的卡死,然后也没有分析出问题来,这次我使用的是E2S进行编程,也没有尝试读取多个通道进行采集,仅仅是读取某个通道,采集数据没有经过处理,直接进行的读取,数据的稳定性还是很不错的,如果经过处理,性能会有更大的提升,虽然没有使用位移传感器,但是使用的电位器,原理是一样的。
视频链接如下所示:
https://www.bilibili.com/video/BV19noxYCE3Z/