瑞萨单片机william hill官网
直播中

华仔stm32

3年用户 2869经验值
擅长:嵌入式技术
私信 关注
[经验]

【瑞萨RA4系列开发板体验】ADC电压测量

瑞萨RA4M2集成了● 12-bit A/D Converter (ADC12)● 12-bit 及温度传感器(TSN)。可以8位、10位、12位来采集数据,转换速率1M
image.png
【学习资料】
①B站的视频教程:https://www.bilibili.com/video/BV1E3411Y7Gi/?spm_id_from=333.880.my_history.page.click
②CSDN博客:https://blog.csdn.net/qq_24312945/article/details/120791923
③官方提供的例程:r20an0608eu0121-ek-ra4m2-exampleprojects\ek_ra4m2\adc
image.png
【开发步骤】
在上面printf的工程上添加adc功能:
1、打开配置工具:

image.png
2、选择P002这个脚来进行ADC检测:
image.png
3、选择12位转换、右对齐,单次转换、Channel2
image.png

4、定义回调函数为adc0_callback、中断级别2:

image.png

5、同步工程,回到keil.
6、添加bsp_adc.c、bsp_adc.h,并把这两个文件添加到工程:
image.png
7、编写bsp_adc.c内容如下:

#include "bsp_adc.h"
#include "bsp_debug_uart.h"

void bsp_adc_init(void)
{
  fsp_err_t err = FSP_SUCCESS;
  /* Initializes the module. */
  err = R_ADC_Open(&g_adc0_ctrl, &g_adc0_cfg);
  /* Handle any errors. This function should be defined by the user. */
  if(FSP_SUCCESS != err)
    {
        printf("ADC0 Open API failed\r\n");
    }
  /* Enable channels. */
    err = R_ADC_ScanCfg(&g_adc0_ctrl, &g_adc0_channel_cfg);
    assert(FSP_SUCCESS == err);
}

volatile bool scan_complete_flag = false;
void adc0_callback(adc_callback_args_t * p_args)
{
	//宏将告知编译器回调函数不使用参数 p_args,从而避免编译器发出警告,
    FSP_PARAMETER_NOT_USED(p_args);
    scan_complete_flag = true;
}

void read_adc(void)
{
  fsp_err_t err = FSP_SUCCESS;
  double a0;
  uint16_t adc_data0=0;
  (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_2, &adc_data0);
  assert(FSP_SUCCESS == err);
  a0=(double)(adc_data0/4095.0)*3.3;
  printf("v: %.02f \r\n",a0);
}

bsp_adc.h:

#ifndef __BSP_ADC_H__
#define __BSP_ADC_H__


#include "hal_data.h"
#include <stdio.h>

void bsp_adc_init(void);
void read_adc(void);


#endif

8、在hal_entry.c中增加如下内容:

void hal_entry(void)
{

  bsp_uart_init();
  bsp_can0_init();
  bsp_adc_init();//adc初始化
  while(1)
  {
    can_send();
    read_adc();//读取adc的数值
    R_BSP_SoftwareDelay(1000, BSP_DELAY_UNITS_MILLISECONDS);
      // NOLINT100->160
  }
#if BSP_TZ_SECURE_BUILD
    /* Enter non-secure code */
    R_BSP_NonSecureEnter();
#endif
}

下载到开发板,把P002接到3.3v上,可以看到测得的电压为3.30V:
image.png
把p002接到数据电源上,测试动态数据,非常准确:
image.png

附上动态检测的视频。

ADC录制

更多回帖

发帖
×
20
完善资料,
赚取积分