开发环境:
rt-thread studio:v2.2.6
开发板:ra6m3 hmi board开发板
mcu:r7fa6m3ah3cfb
1 ra6m3 adc简介r7fa6m3有2个adc单元,每个adc单元有12位、10位、8位读取数据的格式可以选择,在单元0上有13个adc通道,而在单元1上有16个adc通道。 adc单元具有三种扫描方式分别为:单次描模式、连续扫描模式和分组扫描模式,
2 rt-thread 的adc简介adc(analog-to-digital converter) 指模数转换器。是指将连续变化的模拟信号转换为离散的数字信号的器件。
a/d转换主要包括两个内容:采样保持和量化编码,将一个模拟信号进行采样,得到的样点转化为数字量,这是整个a/d转换过程的核心,量化编码分为好多算法,这里不深入研究了。adc主要参数如下:
1.分辨率
ad转换器输出的数字量的最低位变化一个数时,对应输入模拟量的变化量,a/d转换器的位数越多,能够分辨的最小模拟电压值就越小,分辨率就越大,gd32的a/d转换器是12位的,位数越多,表示分辨率越高,恢复模拟信号时会更精确。
2.相对精度
a/d转换器实际输出数字量与理论值之间的最大差值称为相对精度。
3.转换速度
a/d转换器完成一次转换所需要的时间,一般是us级别的。
应用程序通过 rt-thread 提供的 adc 设备管理接口来访问 adc 硬件,相关接口如下所示:
函数描述
rt_device_find() 根据adc设备名称查找设备获取设备句柄
rt_adc_enable() 使能adc设备
rt_adc_read() 读取adc设备数据
rt_adc_disable() 关闭adc设备
关于adc的更多资料请参看rt-thread官方手册:
https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/programming-manual/device/adc/adc
3 硬件连接p001引脚可以连接到mcu内部的 adc 外设,从而对电位器输入的模拟信号进行采集。
4 ra6m3 adc配置接下来配置adc,只需要简单配置就可使用。双击工程中的 ra smart configurator 图标,第一次打开需要配置正确的 fsp 安装路径。
fsp配置adc1.配置扫描通道对应的引脚
2.配置 name、unit、mode,选择扫描的通道编号
配置adc通道然后打开对应的通道
5 adc代码实现笔者这里使用的通道1,核心代码如下:
#define adc_dev_name adc0 /* adc 设备名称 */#define adc_dev_channel 1 /* adc 通道 */#define refer_voltage 330 /* 参考电压 3.3v,数据精度乘以100保留2位小数*/#define convert_bits (1 < < 12) /* 转换位数为12位 */static int adc_vol_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_dev_name); if (adc_dev == rt_null) { rt_kprintf(adc sample run failed! can't find %s device!\\n, adc_dev_name); return rt_error; } /* 使能设备 */ ret = rt_adc_enable(adc_dev, adc_dev_channel); /* 读取采样值 */ value = rt_adc_read(adc_dev, adc_dev_channel); rt_kprintf(the value is :%d \\n, value); /* 转换为对应电压值 */ vol = value * refer_voltage / convert_bits; rt_kprintf(the voltage is :%d.%02d \\n, vol / 100, vol % 100); /* 关闭通道 */ ret = rt_adc_disable(adc_dev, adc_dev_channel); return ret;}/* 导出到 msh 命令列表中 */msh_cmd_export(adc_vol_sample, adc voltage convert sample);6 测试验证编译下载,调试信息如下:
从以上打印信息可以看出,adc0已经使能,然后使用msh命令‘adc_vol_sample’即可使能adc线程。
笔者这里将p001接到gnd和3.3v电压上,和实际的电压是相符的。
旭宇光电:实现LED应用的无限可能
半导体和电化学的一氧化碳报警器在地下车库中的应用
使用DS2790生成随机数
在多线程的情况下如何对一个值进行 a++ 操作
C语言中指针的定义与使用
RA6M3 HMI Board 之ADC获取电压值
中检南方受邀参加2020年中国国际信息通信展
思睿达AC/DC芯片工程测试数据曝光
AMD最新季度营收一定幅度上涨
运算放大器的输出电压计算
推荐一些适合学生党而且音质也可媲美有线的蓝牙耳机
薄膜瑕疵检测设备的原理、参数及优势
数据对企业具有重要价值
有机硅增强汽车电子产品的可靠性
科技小达人多款4G无线工业物联网网关终端设备选型表
理解人工智能的的12大特点
无人值守变电站综合监控系统
线性恒流LED闪光警示灯专用驱动芯片H7310特性介绍
医疗机器人发展的同时要满足以下三个方面
爱立信新版报告:首批5G智能手机将于明年年初推出