1.0 ADC简介
ADC(Analog-to-Digital Converter) 指模数转换器。是指将连续变化的模拟信号转换为离散的数字信号的器件。真实世界的模拟信号,例如温度、压力、声音或者图像等,需要转换成更容易储存、处理和发射的数字形式。模数转换器可以实现这个功能,在各种不同的产品中都可以找到它的身影。与之相对应的 DAC(Digital-to-Analog Converter),它是 ADC 模数转换的逆向过程。ADC 最早用于对无线信号向数字信号转换。如电视信号,长短播电台发射接收等。
1.1 I/O 设备模型框架
如下图所示模数转换一般要经过采样、保持和量化、编码这几个步骤。在实际电路中,有些过程是合并进行的,如采样和保持,量化和编码在转换过程中是同时实现的。
1.2 访问 ADC 设备
应用程序通过 RT-Thread 提供的 ADC 设备管理接口来访问 ADC 硬件,相关接口如下所示:
函数 | 描述 |
---|---|
rt_device_find() | 根据 ADC 设备名称查找设备获取设备句柄 |
rt_adc_enable() | 使能 ADC 设备 |
rt_adc_read() | 读取 ADC 设备数据 |
rt_adc_disable() | 关闭 ADC 设备 |
2. RT-theard配置
2.1 硬件需求
实现功能:
板载Arduino拓展口六处模拟信号读取。
1、RA6M4开发板
2、USB下载线,ch340串口和附带2根母母线,rx---p613;tx---p614
实验中J13六处模拟信号需要焊接插针,方便调试
2.2 软件配置
Renesas RA6M4开发板环境配置参照:【基于 RT-Thread Studio的CPK-RA6M4 开发板环境搭建】
1、新建项目RA6M4-ADC工程
2、在RT-theard Setting 硬件下开启ADC,使能ADC0
3、打开RA Smart Congigurator,在Stacks中New Stack添加r_adc
4、在Property的Module的Channel中勾选Channel0~5
5、确认端口一一对应P000~P005
6、然后Generate Project Content 同步更新刚刚配置的文件
图形化配置已经完成,接下来配置相关代码
3. 代码分析
在src文件下新建test_adc.c和test_adc.h文件,其他不变。
test_adc.c
/*
* Copyright (c) 2006-2021, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2022-07-11 Asus the first version
*/
#include
#include
#define ADC_NAME "adc0" /* ADC 设 备 名 称 */
#define ADC_CHANNEL 6 /* ADC 通 道个数 */
#define REFER_VOLTAGE 330 /* 参 考 电 压 3.3V,数 据 精 度 乘 以100保 留2位 小 数
*/
#define CONVERT_BITS (1 << 12) /* 转 换 位 数 为12位 */
static int adc_sample(int argc, char *argv[])
{
rt_adc_device_t adc_dev;
rt_uint32_t value, vol;
rt_err_t ret = RT_EOK;
/* 查 找 设 备 */
adc_dev = (rt_adc_device_t)rt_device_find(ADC_NAME);
if (adc_dev == RT_NULL)
{
rt_kprintf("adc sample run failed! can't find %s device!
", ADC_NAME);
return RT_ERROR;
}
for (int var = 0; var < ADC_CHANNEL; ++var) {
/* 使 能 设 备 */
ret = rt_adc_enable(adc_dev, var);
/* 读 取 采 样 值 */
value = rt_adc_read(adc_dev, var);
rt_kprintf("the value is :%d
", value);
/* 转 换 为 对 应 电 压 值 */
vol = value * REFER_VOLTAGE / CONVERT_BITS;
rt_kprintf("the voltage is :%d.%02d
", vol / 100, vol % 100);
/* 关 闭 通 道 */
ret = rt_adc_disable(adc_dev, var);
}
return ret;
}
/* 导 出 到 msh 命 令 列 表 中 */
MSH_CMD_EXPORT(adc_sample, adc voltage convert sample);
test_adc.h
/*
* Copyright (c) 2006-2021, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2022-07-11 Asus the first version
*/
#ifndef TEST_ADC_H_
#define TEST_ADC_H_
static int adc_sample(int argc, char *argv[]);
#endif /* TEST_ADC_H_ */
保存完是灰色,没有保存是蓝色。
adc_sample
导 出 到 msh 命 令 列 表 中,采样1次
4. 下载验证
1、编译重构
编译成功
2、下载程序
下载成功
3、CMD串口调试
然后板载复位,输入:adc_sample
效果如下
这样我们就可以天马行空啦!
审核编辑:汤梓红
-
adc
+关注
关注
98文章
6500浏览量
544717 -
Renesas
+关注
关注
0文章
1757浏览量
22773 -
开发板
+关注
关注
25文章
5057浏览量
97519 -
Arduino
+关注
关注
188文章
6470浏览量
187135 -
RA6M4
+关注
关注
0文章
51浏览量
457
发布评论请先 登录
相关推荐
评论