【瑞萨RA2E1开发板】使用ADC功能实现位移传感器采集方案
硬件:RA2E1 开发板
软件:e2studio Version: 2024-10 (24.10.0)
调试器:J-link V9
今天和大家分享使用瑞萨的开发板实现位移传感器的采集方案;
简单和大家分享一下瑞萨RA2E1 的ADC 知识。
1 ADC的基本知识如下所示:
ADC,全称为模拟- 数字转换器(Analog-to-Digital Converter),是一种电子设备,其主要功能是将连续的模拟信号转换为离散的数字信号。举例来说,我们日常生活中的温度、压力和声音等模拟信号,可以通过ADC 转换为单片机能够处理的数字信号。
2 瑞萨RA2E1 ADC简单描述
AD 的特征如下: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转换后的数据。
3 ADC的系统框图如下:
ADC0的参考电压为VREFH0 和VREFL0、输人电压范围为:VREFLO ≤ VINSVREFH0;
ADC的模拟输入通道:
ANOxx是ADC0的模拟输入通道(xx为通道号);
可选通道如下所示:
触发来源:
中断请求信号
事件输出到ELC信号
同步触发信号
异步触发信号
4 任务创建过程
4.1 增加ADC通道
4.2 配置ADC的通道属性
5 任务编写:
5.1 程序流程图如下所示:
5.2 ADC初始化函数如下
view plaincopy to clipboardprint?
1. /* Initializes the module. */
2. err = R_ADC_Open(&g_adc1_ctrl, &g_adc1_cfg);
3.
4. assert(FSP_SUCCESS == err);
5.
6. err = R_ADC_ScanCfg(&g_adc1_ctrl, &g_adc1_
channel_cfg);
7. assert(FSP_SUCCESS == err);
5.3 ADC读取函数如下:
view plaincopy to clipboardprint?
1. volatile bool scan_complete_fl ag = false;
2. void adc1_callback (adc_callback_args_t * p_args)
3. {
4. FSP_PARAMETER_NOT_USED(p_args);
5. scan_complete_fl ag = true;
6. }
7.
8. double adcVolate; //adc 电压值
9. uint16_t adcSample ; //adc 采样值
10.
11.void ReadAdcSample(void)
12. {
13. (void) R_ADC_ScanStart(&g_adc1_ctrl);
14. scan_complete_flag = false;
15. while (!scan_complete_flag)
16. {
17.
18. }
19. err =R_ADC_Read(&g_adc1_ctrl, ADC_
CHANNEL_1, &adcSample);
20. assert(FSP_SUCCESS == err);
21. adcVolate =(adcSample/4095.0)*3.3;
22. }
5.4 主程序执行如下:
view plaincopy to clipboardprint?
1. R_BSP_SoftwareDelay(500, BSP_DELAY_
UNITS_MILLISECONDS); // NOLINT
2. /* printf("EEPW test data rn");
3. SendTestData(0x01);
4. Add_Write_Data(0x12,12);*/
5. /* 处理串口屏数据信息*/
6. DealDwinData();
7. /* 处理串口屏按键信息*/
8. DealTouchPanelInfo(ucKeyValue);
9. /* 读取ADC 数据*/
10. ReadAdcSample();
11. printf("EEPW test data = %5drn",adcSample);
(本文来源于《EEPW》202504)