0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

关于ESP8266的ADC,相关的性能参数有哪些?

单片机爱好者 来源:未知 2019-11-20 14:31 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

这一节内容比较简单,就是电压采样,在传统设计中应用还是比较多的。首先看下支持ADC采样的管脚,找到你手里模块的原理图,我的如下所示:

如上所示,U1的2脚为ADC管脚,而且整个模块有且仅有这一个电压采集管脚。CDS1是一个光敏电阻,它和R1组成一个分压电路。不同强度的光照在CDS1上时,会导致它的阻值变化,最终导致ADC管脚上的电压发生变化。

那么,关于ESP8266的ADC,相关的性能参数有哪些?

可以打开手册:2c-esp8266_sdk_api_guide_cn_v1.5.4,在第26页,有几个ADC相关的函数,我们截取其中一个,看一下:

首先是电压的输入范围,也就是ADC的量程:0~1.0V,相比传统单片机的0~3.3V小了很多。

然后是分辨率:1/1024V。从这个参数可以知道,这是个10位的AD,只是不知道为何,量程这么小。

接着是三点注意事项:

1、ADC读取管脚电压时,需确保管脚连接了外部电路,且没有超过量程。

这一点很好理解,根据输入电压设计相应的分压电路,接过来就行了。

2、读取电压之前,需要修改esp_init_data_default.bin文件中的第107byte的值,改为VDD3P3管脚3和4上的真实电源电压值。

先说修改esp_init_data_default.bin文件,这个其实很简单,因为这个文件是我们烧录到ESP8266里面的,所以只要找到文件位置,用修改flash的函数改一下就行。

接下来这句话可能理解起来有点绕,这个VDD3P3管脚3和4是啥?模块上没有这两个管脚啊~

还记得我在前言里面提到过的,ESP8266是乐鑫的芯片,安信可做的模组封装。所以本文上面的原理图截图其实是模块的管脚分布,并不是真实的芯片管脚。真实的模块内部的芯片原理图是什么样?我这里截取其中一部分,看一下:

懂?很简单。

3、第107byte的值的单位是0.1V,有效取值范围是18~38.

这个就很好理解了,第二点已经说了,第107byte写入的是VDD3P3管脚的电压。而我们常用的供电电压是3.3V,所以要写入的值是33。因为单位是0.1V,33*0.1V得到3.3V。

接下来看一下这三个函数,system_adc_read() 刚才已经看了,它的功能就是读取ADC电压值,很简单,直接调用读取就行。

然后是system_get_vdd33(),我们看一下截图:

简单来说,是用来测量VDD3P3管脚上的电压的,可以理解为获取当前的工作电压。工作前提必须要确保ADC管脚悬空,同时确保esp_init_data_default.bin的第127byte值为0xFF。

还有一个函数,快速高精度的AD采样,因为篇幅比较长,这里不截图了,我总结一下。先看函数结构:

system_adc_read_fast(uint16 *adc_addr, uint16 adc_num, uint8 adc_clk_div)

注意事项和函数system_get_vdd33()类似,要限制输入电压值、修改107byte的值为VDD3P3,不同的地方在于,使用快速采样函数的时候,要关闭wifi和所有中断。

参数1:uint16 *adc_addr,ADC连续采样输出的地址指针

参数2:uint16 adc_num,ADC连续采样的点数,范围1~65535

参数3:uint8 adc_clk_div,ADC工作时钟=80M/ adc_clk_div,输入范围8~32,建议值8.

假设我们要连续采样50次,那么可以定义一个50个元素的数组,把数组首地址给参数1,数组大小给参数2,参数3没有特殊情况的话默认输入8.

所以,用过带DMA功能的ADC的童鞋,会发现用法很相似。

接下来进入演示部分,以之前的串口程序为模版,增加AD采样功能,得到的AD值通过串口助手打印输出。代码比较简单,直接看一下主函数部分:

void ICACHE_FLASH_ATTRuser_init(void){ partition_item_t partition_item; uint16 vdd33 = 33; uint32 flash_r_w[1024]; uart_init(BIT_RATE_115200, BIT_RATE_115200); spi_flash_read(0x1fc*4096, flash_r_w, 4096); flash_r_w[107/4] = flash_r_w[107/4] & !(0xff<<((107%4)*8)); flash_r_w[107/4] = flash_r_w[107/4] | 33; spi_flash_erase_sector(0x1fc); spi_flash_write(0x1fc*4096,flash_r_w,4096); system_init_done_cb(system_done);}

前几行比较简单,就是串口初始化。

接下来就到了修改esp_init_data_default.bin文件中的地方,该文件的地址为什么是0x1fc?

第二节讲程序烧录的时候,曾经说过每个文件的地址,如图:

我的模块是16Mbit的,esp_init_data_default.bin文件的起始地址是0x1fc000,0x1000等于10进制的4096,所以0x1fc000=0x1fc*4096。

而我们要修改的是该文件的第107byte,而读写flash必须要4字节对齐,所以后面对107做了一些换算。理解不了的建议看一下第八节。

VDD33是前面定义的变量,值为33,对应3.3V的供电电压。

很简单吧?

系统初始化完成的回调函数里,我定义了一个软件定时器,每隔3秒读取一次ADC的电压值,并通过串口打印出来:

void system_done(){ wifi_station_disconnect(); os_timer_disarm(&LED_timer); os_timer_setfn(&LED_timer, (os_timer_func_t *)ADC_OUTPUT, NULL); os_timer_arm(&LED_timer, 3000, 1); }void ADC_OUTPUT(){ static adc_value = 0; adc_value = system_adc_read(); os_printf("adc_value is %d ", adc_value);}

细心的人会发现定义定时器之前有一行代码:

wifi_station_disconnect();

这是因为我的模块之前保存了某个环境下的wifi账号、密码。即便主函数里没有要求模块连接wifi,上电后它还是会自动连接,并打印相关信息。所以,加入这一行代码,让它不再连接。

这就完了?是的,so easy!

程序修改完成,保存、清理、编译、下载一条龙,然后重新上电。这里借助串口助手来查看效果。设备上电之后,效果如下所示:

如图所示,上电后开始输出ADC采集到的电压值,前面两个是200多,后面我用手挡住光敏电阻,导致光敏电阻阻值变大,R1分压得到的电压变小,只有40多。

实验完成。

链接:

https://pan.baidu.com/s/1yueZQpULiDklHK22TPqsqA

提取码:tcfa

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • adc
    adc
    +关注

    关注

    100

    文章

    7979

    浏览量

    557445
  • 电压
    +关注

    关注

    45

    文章

    5798

    浏览量

    122569
  • 函数
    +关注

    关注

    3

    文章

    4423

    浏览量

    68104

原文标题:ESP8266_22基于自身ADC的电压采样

文章出处:【微信号:gh_dae0718828df,微信公众号:gh_dae0718828df】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    ESP32/ESP8266开发板单向多对一ESP-NOW无线通信

    本实验通过ESP-NOW无线通信协议实现多个ESP32/ESP 8266开发板向ESP32开发板发送数据。例如可以应用于从多个远程传感器上收
    的头像 发表于 03-30 10:14 306次阅读
    <b class='flag-5'>ESP</b>32/<b class='flag-5'>ESP8266</b>开发板单向多对一<b class='flag-5'>ESP</b>-NOW无线通信

    ESP32/ESP8266开发板单向一对多ESP-NOW无线通信

    通过ESP-NOW无线通信协议实现ESP32开发板向多个ESP32/ESP 8266开发板发送数据。
    的头像 发表于 03-13 09:23 383次阅读
    <b class='flag-5'>ESP</b>32/<b class='flag-5'>ESP8266</b>开发板单向一对多<b class='flag-5'>ESP</b>-NOW无线通信

    ESP8266系列】WT8266-S3模组规格书

    核心处理器ESP8266在较小尺寸封装中集成了业界领先的TensilicaL106超低功耗32位微型MCU,带有16位精简模式,主频支持80MHz和160MHz,支
    的头像 发表于 02-05 18:04 346次阅读
    【<b class='flag-5'>ESP8266</b>系列】WT<b class='flag-5'>8266</b>-S3模组规格书

    ESP8266系列】WT8266-S5模组规格书

    处理器ESP8266在较小尺寸封装中集成了业界领先的TensilicaL106超低功耗32位微型MCU,带有16位精简模式,主频支持80MHz和160MHz,支持
    的头像 发表于 02-05 18:03 560次阅读
    【<b class='flag-5'>ESP8266</b>系列】WT<b class='flag-5'>8266</b>-S5模组规格书

    ESP8266系列】WT8266-S6模组规格书

    处理器ESP8266在较小尺寸封装中集成了业界领先的TensilicaL106超低功耗32位微型MCU,带有16位精简模式,主频支持80MHz和160MHz,支持R
    的头像 发表于 02-05 18:03 500次阅读
    【<b class='flag-5'>ESP8266</b>系列】WT<b class='flag-5'>8266</b>-S6模组规格书

    ESP8266系列】WT8266-S1模组产品介绍

    WT8266-S1WiFi模块是由启明云端科技开发的、低功耗高性价比的嵌入式无线网络控制模块。可满足智能电网、楼宇自动化、安防、智能家居、远程医疗等物联网应用的需求。该模块核心处理器ESP8266
    的头像 发表于 01-29 18:22 814次阅读
    【<b class='flag-5'>ESP8266</b>系列】WT<b class='flag-5'>8266</b>-S1模组产品介绍

    ESP8266系列】WT8266-S6模组产品介绍

    处理器ESP8266在较小尺寸封装中集成了业界领先的TensilicaL106超低功耗32位微型MCU,带有16位精简模式,主频支持80MHz和160MHz,支持R
    的头像 发表于 01-29 18:22 571次阅读
    【<b class='flag-5'>ESP8266</b>系列】WT<b class='flag-5'>8266</b>-S6模组产品介绍

    无需安装!在浏览器里就能玩转ESP32/ESP8266,这个神器绝了!

    无需安装!在浏览器里就能玩转ESP32/ESP8266,这个神器绝了!【往期精选】十年嵌入式最深的痛,不是Bug,而是抓不到日志!vivo宣布原生支持HomeAssistant生态设备接入(含
    的头像 发表于 01-10 10:01 1808次阅读
    无需安装!在浏览器里就能玩转<b class='flag-5'>ESP</b>32/<b class='flag-5'>ESP8266</b>,这个神器绝了!

    【瑞萨RA6E2地奇星开发板试用】使用`RA6E2`驱动 `ESP8266 WiFi模块`,调试AT指令。

    WiFi模块和串口输出等,为社区其他产品的快速开发、验证和应用设计提供了示例。 期望瑞萨官方论坛、立创社区精选此代码,为社区提供esp8266 WiFi模块调试方案。 7. 相关源码,见附件。 *附件:esp8266_u
    发表于 12-25 10:08

    晶科鑫 | 国产26MHz晶振匹配Espressif(乐鑫) ESP8285/ESP8266芯片案例

    【应用】国产26MHz频率晶振应用于物联网WIFI物联网模块(串口转WiFi模块),Espressif(乐鑫)ESP8285/ESP8266芯片匹配测试OKESP8285其实是ESP8266的升级版
    的头像 发表于 11-21 15:37 5109次阅读
    晶科鑫 | 国产26MHz晶振匹配Espressif(乐鑫) <b class='flag-5'>ESP</b>8285/<b class='flag-5'>ESP8266</b>芯片案例

    ESP8266ESP32开发板常见的2种下载方式

    ESP32和ESP8266是性价比很高而且使用较为广泛的的Wi-Fi模块,在物联网(IoT)领域的DIY项目中可以首先考虑这2款产品。 两款芯片都属于32位处理器。ESP32是低功耗双核80MHz
    的头像 发表于 11-10 20:30 1591次阅读
    <b class='flag-5'>ESP8266</b>和<b class='flag-5'>ESP</b>32开发板常见的2种下载方式

    ESP8266ESP32开发板常见的2种下载方式

    ESP8266ESP32都是烧写的官方的AT固件,直接打开BIN,注意COM口,然后点击START就可以烧录了。 总结 ESP32/ESP8266的下载方式主要使用这2种,烧录
    发表于 10-24 18:04

    请问一下我想用ESP8685直接替换ESP8266而不用写程序,可以让ESP8685直接通过之前ESP8266的外挂的flash运行程序吗

    请问一下我想用ESP8685直接替换ESP8266而不用写程序,可以让ESP8685直接通过之前ESP8266的外挂的flash运行程序吗
    发表于 09-17 12:06

    【RA-Eco-RA6M4开发板评测】——4.使用ESP8266获取任意城市的天意预报

    软件 1.取名RA6M4_ESP 2。选择芯片 3。继续 4。finish完成 5。设置通信串口 首先P110和P109用来打印调试 配置好参数 ESP8266选择P100和P101 6。生成代码
    发表于 07-23 19:50

    STM32+esp8266连接机智云,上传温湿度数据并控制继电器开关(平台配置、代码生成、代码移植)

    本教程将详细介绍如何将STM32微控制器与ESP8266Wi-Fi模块连接到机智云平台,实现温湿度数据的上传与继电器的远程控制。通过此过程,您将学会如何配置机智云平台,烧录ESP8266固件,移植
    的头像 发表于 07-15 18:54 1654次阅读
    STM32+<b class='flag-5'>esp8266</b>连接机智云,上传温湿度数据并控制继电器开关(平台配置、代码生成、代码移植)