野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 554|回复: 0

【瑞萨RA MCU创意氛围赛】4. ADC应用 - 摇杆模块数据采集

[复制链接]
发表于 2023-8-19 23:28:06 | 显示全部楼层 |阅读模式

# 前言

本文使用模拟端口采集摇杆模块的模拟量,摇杆模块有X轴和Y轴两个方向的输出,需要两路模拟端口,本文使用AN001和AN002。

# 1 硬件连接

下图为ADC引脚复用图,可以看到AN000\~AN010对应的引脚正好是P000\~P010。这个设计还是很不错了,杜绝了到处去找引脚的麻烦。

本文驱动摇杆模块使用的就是AN001和AN002。

为什么不用AN000呢?因为板载资源的电位器已经将P000占用了。

野火论坛202308192326299390..png


# 2 RASC配置

## 2.1 配置ADC通道

知道了引脚连接,现在开始配置模拟端口,首先选择需要使用的模拟端口,如下图。

注:AN003是为了给其他外设使用的,本文不需要使用。

野火论坛202308192326418758..png

## 2.2 ADC转换配置

配置ADC如下,添加ADC的stack:

野火论坛202308192326472834..png

配置使用AN001,AN002。

选择了连续模式,这样就不用每次都使用软件触发ADC转换了,只需要启动一次之后就会自动采集,减少CPU消耗。

野火论坛202308192327121854..png

注意:channel scan mask中需要将使用到的channel都勾选,用于在使用scan功能的时候自动转换选中通道,如下:

野火论坛202308192327249270..png

# 3 代码开发

下面包含了:

- 初始化 `R_ADC_Open`
- 启动SCAN扫描 `R_ADC_ScanCfg`
- 最后是开始转换 `R_ADC_ScanStart`,调用这个之后会自动开始转换,只需要读取转换结果即可,不需要每次读取之前再手动启动转换了。

  1. /*
  2. @hehung
  3. 2023-7-15
  4. email: 1398660197@qq.com
  5. wechat: hehung95
  6. reproduced and please indicate the source @hehung
  7. */

  8. // MQ5 - 可燃气体传感器,用来检测可燃气体,使用的是ADC获取空气中可燃气体浓度
  9. // P000 ADC0 CH0
  10. /*
  11. P001 - AN001 : Rocker X
  12. P002 - AN002 : Rocker Y
  13. */

  14. #include "hal_data.h"
  15. #include "app_adc.h"

  16. #define ROCKER_DEBUG

  17. //#undef ROCKER_DEBUG

  18. #ifdef ROCKER_DEBUG
  19. #include <stdio.h>
  20. #define ROCKER_LOG(fmt, ...)              printf(fmt, ##__VA_ARGS__)
  21. #else
  22. #define ROCKER_LOG(fmt, ...)
  23. #endif


  24. #define ADC_ROCKER_X_CHANNEL          (1U)
  25. #define ADC_ROCKER_Y_CHANNEL          (2U)
  26. #define ADC_MQ5_CHANNEL               (3U)


  27. /*************************************************************************************************/
  28. /************************************** Rocker ***************************************************/
  29. /*************************************************************************************************/

  30. // Read conversion result
  31. void Rocker_RunningEntry(void)
  32. {
  33.     fsp_err_t err = FSP_SUCCESS;
  34.     uint16_t adc_value;

  35.     err = R_ADC_Read(&g_adc0_ctrl, ADC_ROCKER_X_CHANNEL, &adc_value);

  36.     if (FSP_SUCCESS == err)
  37.     {
  38.         ROCKER_LOG ("Rocker: Read value: %d: %d\r\n", ADC_ROCKER_X_CHANNEL, adc_value);
  39.     }
  40.     else
  41.     {
  42.         ROCKER_LOG ("Rocker: Read Rocker Data Error\r\n");
  43.     }

  44.     err = R_ADC_Read(&g_adc0_ctrl, ADC_ROCKER_Y_CHANNEL, &adc_value);

  45.     if (FSP_SUCCESS == err)
  46.     {
  47.         ROCKER_LOG ("Rocker: Read value: %d: %d\r\n", ADC_ROCKER_Y_CHANNEL, adc_value);
  48.     }
  49.     else
  50.     {
  51.         ROCKER_LOG ("Rocker: Read Rocker Data Error\r\n");
  52.     }
  53. }


  54. /*************************************************************************************************/
  55. /************************************** ADC ******************************************************/
  56. /*************************************************************************************************/
  57. // Initialize the MQ5 - ADC0 CH0 P000
  58. void Adc_Init(void)
  59. {
  60.     fsp_err_t err = FSP_SUCCESS;

  61.     /* Initializes the adc. */
  62.     err = R_ADC_Open(&g_adc0_ctrl, &g_adc0_cfg);
  63.     /* Handle any errors. This function should be defined by the user. */
  64.     assert(FSP_SUCCESS == err);
  65.     /* Enable channels. */
  66.     err = R_ADC_ScanCfg(&g_adc0_ctrl, &g_adc0_channel_cfg);
  67.     assert(FSP_SUCCESS == err);

  68.     /* Enable scan triggering from ELC events. */
  69.     (void)R_ADC_ScanStart(&g_adc0_ctrl);
  70. }
复制代码



# 4 试验效果

如下图所示,能成功采集到遥感模块的偏移量,后期可以使用遥感模块要控制OLED显示了。

野火论坛202308192326538319..png



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-5-2 13:11 , Processed in 0.033741 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表