Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
原创征文
技术分享
教程笔记
基于RoboMasterC型开发板的RT-Thread使用分享(五)ADC测量电压实验
发布于 2023-01-09 17:45:43 浏览:962
订阅该版
[tocm] 本次我们来讲一下ADC(Analog-to-Digital Converter)不是游戏里的AD Carry,我们将实现电池电压的读取。 ### ADC简介 ***** ADC的全称为Analog-to-Digital Converter(模拟/数字转换器)。 在单片机中传输的信号均为数字信号,通过离散的高低电平表示数字逻辑的 1 和 0,但是在现实的物理世界中只存在模拟信号,即连续变化的信号。将这些连续变化的信号——比如热,光,声音,速度通过各种传感器转化成连续的电信号,再通过 ADC 功能将连续的模拟信号转化成离散的数字信号给单片机进行处理。 常见的ADC类型有并联比较型、逐次逼近型。它们的特点如下 | ADC电路类型 | 优点 | 缺点 | | ----------- | ---------------- | ------------------------ | | 并联比较型 | 转换速度最快 | 成本高、功耗高、分辨率低 | | 逐次逼近型 | 结构简单,功耗低 | 转换速度较慢 | ADC有两个重要参数,分辨率和转换速率。 **分辨率**:每一个ADC模块都会明确他的分辨率,通过bit来表示,一般的是8bit,10bit,12bit,16bit,24bit.bit越大,说明分辨率越高。 **采样率**:采样率就是ADC 采样的速率。它是指在规定的时间内可以采集的次数,采样率越高,采集到的点数就越多,那么对原始信号的还原率就越高。采样率的单位是SPS(sample per sencond),每秒采样次数。这个值越大,采样速度越快。 下面简单的讲一下这两种ADC的工作原理 更喜欢看视频的朋友可以看一下这个视频,这个up的视频讲的都通俗易懂的。不过有时候上面难免有一些错误,建议开着弹幕看。 [极其的巧妙设计!模拟转数字信号!5分钟让你看明白!ADC的工作原理,_哔哩哔哩_bilibili](https://www.bilibili.com/video/BV1BV4y1V7nE/?spm_id_from=333.999.0.0&vd_source=a189d61cdd7d4ed6c863087f5aaff9d2) #### 并联比较型 这个也是比较容易理解的一种。下图为并联比较型ADC的工作原理图。 ![screenshot_50bb89d4e8290.jpg](https://oss-club.rt-thread.org/uploads/20230109/b766eaf8e77a5b77ebb542da54fa78fc.jpg) 它分为分压部分、比较部分、编码部分。 一开始的一排电阻均为等阻值的电阻,它们将VREF(参考电压)进行均分,也就代表这个该ADC的精度,电阻分压后的电压(Vr)我们将其接到比较器的。图中V1为我们的待测电压,当V1
Vr时比较器输出1。比如我们这个假设VREF为15V,V1为1.2V。那么在最下面的比较器中Vr为1V,V1>Vr,比较器输出1,第二个比较器中Vr为3V,V1
#include
#define ADC_REF_NAME "adc1" /* ADC 内部参考电压设备名称 */ #define ADC_REF_CHANNEL 17 #define ADC_DEV_NAME "adc3" /* ADC 设备名称 */ #define ADC_DEV_CHANNEL 8 /* ADC 通道 */ static int adc_vol_sample(int argc, char *argv[]) { rt_adc_device_t adc_ref; rt_adc_device_t adc_dev; rt_uint32_t totalvalue; rt_uint32_t value, vol; double voltage_vrefint_proportion; rt_err_t ret = RT_EOK; /* 查找设备 */ adc_ref = (rt_adc_device_t) rt_device_find(ADC_REF_NAME); if (adc_ref == RT_NULL) { rt_kprintf("adc sample run failed! can't find %s device!\n", ADC_REF_NAME); return RT_ERROR; } 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_ref, ADC_REF_CHANNEL); ret = rt_adc_enable(adc_dev, ADC_DEV_CHANNEL); /* 采样内部参考电压200次 */ for(int i=0;i<200;i++) { totalvalue+=rt_adc_read(adc_ref,ADC_REF_CHANNEL); } /* 计算单位数字电压对应的模拟电压值 */ voltage_vrefint_proportion=200*1.2f/totalvalue; /* 读取采样值 */ value = rt_adc_read(adc_dev, ADC_DEV_CHANNEL); rt_kprintf("the value is :%d \n", value); /* 转换为对应电压值 */ vol=(double)value*voltage_vrefint_proportion*1009.0909090909090909090909090909f; 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); ``` 硬件连接如下,这里使用的是大疆的6s电池,输出电压24V。 ![screenshot_image-20230109161839911.png](https://oss-club.rt-thread.org/uploads/20230109/8092bff68f798168bb21d590c23cd50c.png.webp) 由于电池基本要没电了因此计算出来的电压为22.39V偏小属于正常现象。 ![screenshot_image-20230109161708242.png](https://oss-club.rt-thread.org/uploads/20230109/36a2ec82e00f8a7c5172d70feaa7644f.png.webp) ### 往期教程 ****** [RT-Thread-基于RoboMasterC型开发板的RT-Thread使用分享(一)RT-Thread问答社区 - RT-Thread](https://club.rt-thread.org/ask/article/09dffc578f32d85d.html) [RT-Thread-基于RoboMasterC型开发板的RT-Thread使用分享(二)RT-Thread问答社区 - RT-Thread](https://club.rt-thread.org/ask/article/2240be90085f3b35.html) [RT-Thread-基于RoboMasterC型开发板的RT-Thread使用分享(三)RT-Thread问答社区 - RT-Thread](https://club.rt-thread.org/ask/article/46b79ff6792d3ec5.html) [RT-Thread-基于RoboMasterC型开发板的RT-Thread使用分享(四)按键中断实验RT-Thread问答社区 - RT-Thread](https://club.rt-thread.org/ask/article/090525df389edfc3.html)
0
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
goldengrandpa
这家伙很懒,什么也没写!
文章
11
回答
19
被采纳
2
关注TA
发私信
相关文章
推荐文章
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
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
PWM
cubemx
flash
freemodbus
BSP
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
编译报错
Debug
rt_mq_消息队列_msg_queue
SFUD
keil_MDK
msh
ulog
MicroPython
C++_cpp
本月问答贡献
出出啊
1517
个答案
342
次被采纳
小小李sunny
1444
个答案
290
次被采纳
张世争
812
个答案
177
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
148
次被采纳
本月文章贡献
出出啊
1
篇文章
1
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
2
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
2
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部