Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
ADC
Numaker-IoT-M487
基于RT-Thread的NuMaker-IoT-M487外设评测之ADC
发布于 2022-05-14 15:36:52 浏览:753
订阅该版
# 基于RT-Thread的NuMaker-IoT-M487 开发板的使用分析和外设ADC评测 [TOC] > 本篇文章主要是介绍NuMaker-IoT-M487开发板的ADC外设功能的使用,以及在RT-Thread实时操作系统上编程,最后通过一个DIY遥控小项目来向大家演示一下如何把数据通过ADC通道读取出来。 ## 资料获取 如果您想获得更加详细的资料和教程可参考一下链接: ● NuMaker-IoT-M487驱动支持:https://github.com/RT-Thread/rt-thread/tree/master/bsp/nuvoton/libraries/m480 ● 下载板子原理图等资料:https://www.nuvoton.com/resource-download.jsp?tp_GUID=HL0320180905131830 ● NuMaker-IoT-M487用户手册:https://www.nuvoton.com/resource-download.jsp?tp_GUID=UG0120180907124835 ●基于 RT-Thread的NuMaker-IoT-M487 快速上手文档:https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/tutorial/quick-start/numaker-iot-m487/quick-start ● 下载技术参考手册: https://www.nuvoton.com/resource-download.jsp?tp_GUID=DA05-M480 ●官方技术直播回放:https://www.bilibili.com/video/BV1LF411W7Qw/(必看) ## NuMaker-IoT-M487 之ADC外设介绍 ### 1.特性介绍 我们在接触一块新的板子时,需要先了解这款开发板的各种性能和接口,最好的方法是从他的数据手册入手,本篇文章是专门接收其ADC模块的,所以我们只讲这款开发板的ADC外设方面的知识。从下面的框图我们知道,M487共有16个12位精确度的ADC接口,具有16个外部输入通道和3个内部通道。  经过查看数据手册6.40.2章可知,增强型的ADC具有以下特性: - 最大模拟输入电压在0-3.6之间 - 参考电压来自 VREF 引脚 - 16个单通道外部模拟通道或者8对差分信号输入通道 - 3个内部通道,分别是 band-gap voltage (VBG), temperature sensor (VTEMP), and Battery power (VBAT) - 四个EADC中断(ADINT0-3),它们的中断矢量地址是独立的 - 时钟频率最大支持72MHZ - 可支持12位,10位,8位,6位的精度配置 - 支持深省电模式,省电模式,待机模式 - 多达19个样本模块: - 样品模块16~18固定为EADC0channel 16、17、18输入源,带隙电压、温度传感器和电池电源(VBAT) - 每个样本模块可配置的EADC转换器通道 (EADC0/1_CH0~15)和触发源 - 采样控制逻辑模块0~3用于双缓冲 - 每个采样模块可配置采样的时间 - 转换的结果保存在19个数据寄存器中 - 每个EADC的所有转换都可以通过一下方式启动: - 将1写入SWTRGn (EADC0/1_SWTRG[n], n = 0~18) - 外部引脚EADC0/1_ST - Timer0~3溢出脉冲触发 - ADINT0和ADINT1中断EOC(转换结束)脉冲触发器 - EPWM / BPWM触发器 - 支持PDMA传输 - 支持转换结果监视器比较模式 ### 2.ADC外设基本配置 #### 2.1引脚配置 M480系列的开发板分为两种ADC0和ADC1,只是配置的寄存器不一样,其他大体一至,我们可以进行它的时钟源的配置,复位配置等,所有的ADC通道对应的引脚表如下表所示,每个引脚又可以配置成多种功能,ADC只是其中的一种功能而已:  #### 2.2时钟源的配置 ADC的时钟频率最大为72MHZ,采样率最高达到每秒5.14MSPS(1MSPS == 1MHZ),ADC的外设时钟源是HCLK时钟提供的,ADC的时钟频率计算公式为: (PCLK1) / (EADCDIV0/1 (CKL_CLKDIV0[23:16])+1) #### 2.3软件触发模式 如果我们从寄存器的角度来看,想要通过某一个adc通道来进行转换时,主要是以下几个步骤; 1. 当SWTRGn (EADC0/1_SWTRG[n], n=0~18)设置为1时,启动EADC0/1转换 由用户或其他触发器输入。 2. 当EADC0/1转换完成后,12位的结果存储在EADC0/1数据寄存器中 EADC0/1_DATn (n=0~18)对应采样模块。 3. 转换完成后,将ADIFn (EADC0/1_STATUS2[3:0], n=0~3)设为1和 如果EADCIENn (EADC_CTL[5:2], n=0~3)请求EADC0/1中断 Bit设置为1。 4. 在EADC0/1转换过程中,SWTRGn (n=0~18)位保持为1。 当EADC0/1 转换结束后,SWTRGn (n=0~18)位自动清除为0,EADC0/1 Converter将执行另一个挂起的转换。 #### 2.4优先级问题 当同时设置都过通道触发时,通过一个优先级转换器来确定转换的顺序,编号低的优先级高于编号高的通通道,当一个通过正在转换时,其他的通道将在等待,并且寄存器(EADC0/1_PENDSTS[n], n=0~18)被设为1,转换完成后自动设为0. #### 2.4转换周期和采样率 可以通过配置寄存器(EADC0/1_CTL[7:6])来选择四种不同的分辨率,各种分辨率不同的转换周期如下图所示:  ADC通道还分低速通道和高速通道,其中EADC0/1_CH10~15为高速通道 EADC0/1_CH0~9 是低速通道,这两者最快的采样率分别为 5.14 MSPS和 2.14 MSPS.采样频率的公式为 : (EADC0/1 clock frequency) / (conversion cycles)。 如果用户需要用最快的采样频率来扫描通道,需要做以下几个步骤: 1. 使用模块0~15进行逐次转换。 设置CHSEL (EADC0/1_SCTL0~15[3:0])作为快速通道之一(EADC0/1_CH10~ EADC0/1_CH15)。 集 EXTSMPT (EADC0/1_SCTL0~15[31:24])和TRGDLYCNT (EADC0/1_SCTL0~15[15:8])作为 0x00以最小化采样时间。 2. 设置SWTRG (EADC0/1_SWTRG[18:0])为0xffff,触发模块0~15。 3. Wait CURSPL (EADC0/1_STATUS3[4:0]) changes to 0xf,表示模块0~14 have 已执行,模块15在进程中。 将SWTRG (EADC0/1_SWTRG[18:0])设置为 0x7fff下一轮再次触发模块0~14。 4. Wait CURSPL (EADC0/1_STATUS3[4:0]) changes to 0x1, set SWTRG (EADC0/1_SWTRG[18:0])作为0x8000触发模块15。 5. 重复步骤3~4继续转换。 ### 3.RT-Thread ADC外设的使用 #### 3.1打开外设驱动 RT-Thread的优点之一是外设可剪裁,比如你想使用SPI设备,你需要先打开SPI的外设驱动才能进行编程,同样的,我们想使用EADC,可通过厂家提供的可视化界面进行配置。配置完成后需保存才会生效,我使用的是RT-Thread STUDIO版本,具体操作方法如下:  我这里使能EADC0和EADC1,大家可以根据自己的需求来进行选择。 **原理分析**:我们打开drv_eadc.c,查看源代码可知:如果要使用EADC外设,必须先在其他文件定义BSP_USING_EADC ,BSP_USING_EADC0,BSP_USING_EADC1,这三个宏,而我们刚刚的使能过程其实就是通过可视化软件来定义这三个宏,这三个宏保存在rtconfig.h中,有兴趣的读者也可以去看看这个文件。  #### 3.2 adc设备的访问 我们通过RT-Thread访问adc外设只需要下面的四步操作 **1.查找ADC设备** rt_device_t rt_device_find(const char* name); **2.使能ADC设备** rt_err_t rt_adc_enable(rt_adc_device_t dev, rt_uint32_t channel); **3.读取ADC设备的数据** rt_uint32_t rt_adc_read(rt_adc_device_t dev, rt_uint32_t channel); **4.关闭ADC设备** rt_err_t rt_adc_disable(rt_adc_device_t dev, rt_uint32_t channel); ### 4.使用IOT-M487开发板获取摇杆数据 本次我们使用的是PB_1的EADC_CH1和PB_0的EADC_CH0,摇杆的原理其实就是一个可变电阻,摇杆的滑动会改变电阻的值从而改变adc的值。  我们只需要打开查找设备,使能通道,读取通道就能获得通道的ADC值了 ### 5.演示效果和源码获取 预期效果:拨动摇杆使得对应的通道值发生变化 视频演示连接:https://www.bilibili.com/video/BV15A4y1f7ZN/ 源码获取:https://gitee.com/bes_ssss/NuMaker-IoT-M487
0
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
周洪璋
这家伙很懒,什么也没写!
文章
2
回答
0
被采纳
0
关注TA
发私信
相关文章
1
请大神帮忙看下风格 还是哪里有问题 照着串口驱动写的ADC驱动
2
ADC config
3
rt_thread_delay()和ADC采样之间的冲突
4
请教在官方BSP中的STM32F40X程序中加入ADC,串口没输出。
5
给RT-Thread添加ADC驱动框架
6
求助:ADC采样被干扰
7
【内核和外设学习营】十里 ADC光敏电阻电压采集实验
8
<内核学习营>+坦然+探索者stm32f407板子的ADC测试光传感器实验
9
【内核学习营】+青春+ADC读取光敏传感器实验
10
《内核学习营》+水一方+项目中应用的ADC实现电压采集
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
DMA
USB
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
rt-smart
FAL
I2C_IIC
UART
ESP8266
cubemx
WIZnet_W5500
ota在线升级
PWM
BSP
flash
freemodbus
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
编译报错
中断
Debug
rt_mq_消息队列_msg_queue
keil_MDK
ulog
SFUD
msh
C++_cpp
MicroPython
本月问答贡献
RTT_逍遥
10
个答案
3
次被采纳
xiaorui
3
个答案
2
次被采纳
winfeng
2
个答案
2
次被采纳
三世执戟
8
个答案
1
次被采纳
KunYi
8
个答案
1
次被采纳
本月文章贡献
catcatbing
3
篇文章
5
次点赞
lizimu
2
篇文章
9
次点赞
swet123
1
篇文章
4
次点赞
Days
1
篇文章
4
次点赞
YZRD
1
篇文章
2
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部