WIFIDUINO板ADC接口的测试遇到问题与解决-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5599|回复: 4

WIFIDUINO板ADC接口的测试遇到问题与解决

[复制链接]
发表于 2018-5-25 19:15 | 显示全部楼层 |阅读模式
本帖最后由 sun910231 于 2018-5-25 19:21 编辑

8266的板子自己买了很多片,包括8266-01,0712F 还有WeMosD1,也玩了一段时间,挺好的,价格便宜,功能实用。自己在使用的时候也遇到过一些问题,并分享到论坛里:https://www.arduino.cn/thread-49441-1-1.html。论坛里刚好有活动,免费申领WiFiDUINO,很符合咱勤(kou)俭(men)的原则,申请并被老大们通过,收到板子时已经5月中了,因为手头有其他事情,没有马上进行测试,在TB上购买的时间也比较长,都忘记收货了,还好,系统自动收货,要不商家会亏死~~,评论只能后追加了。

前两天有时间,拆开包装盒,准备试一下,包装真的不错,这个价格还有个纸盒,里面有一张说明书,关于如何获取技术支持等说明,这个对于经常上论坛的人来说,用处不大。板子是黑色的,很工业的感觉,和WeMosD1布局基本一样:板上的8266应该就是8266-12F,下面有照片和8266-12F的对比,以及引脚定义等,经实际测量,确实引脚什么的都相同。
微信图片_20180525162559.jpg 微信图片_20180525162606.jpg
包装
微信图片_20180525162609.jpg
里面的板子 黑色 够帅气
D1.jpg
以前的板子留下的照片,布局差不多
微信图片_20180525162647.jpg
和12F基本一样
8266-12.jpg 8266 pin.jpg
引脚信息



因为以前手里多是8266-01,没有ADC引脚,以前的那片WeMosD1又顺便送给了一个有意向玩的同事,手头的8266-07与8266-12F不是标准的2.54引脚,使用ADC不方便,所以一直对8266的ADC有点想法,这次的WIFIDUINO板可以试试ADC功能。

例牌,先试一下模块是否正常,直接用USB线插电脑上,可以认出340的芯片,不过烧写不成功,按几次复位键也不行,估计是供电问题,懒的找12V以下的适配器,刚好手头有15V的适配器,然后插到一片UNO,从UNO引了一个5V电源给WIFIDUINO,这边USB线同时插上,可以正常烧写,在烧写之前试着用串口通讯工具使用AT命令进行通讯不成功,估计这片板原来烧写过ARDUINO程序,在以前使用8266的时候,碰到同样问题,新的8266用串口助手AT通讯都正常,只要一烧写过ARDUINO程序后,就无法用串口助手使用AT命令与8266通讯。
wifiduinotest1.jpg wifiduinotest2.jpg

烧写一个LED闪灯的程序,懒得改用板载的LED灯,程序定义的是GPIO 13,看板的背面D9是13#,插一个带限流电阻的LED到D9上,LED可以闪亮,说明板子正常,只是供电还是要外接比较稳妥。后来偶尔不接外电源也可以烧写,估计供电比较临界。同时试一下GPIO 2带负载启动的能力,原来的8266的GPIO 2如果端口插有设备,模块基本不能启动,试接带限流的LED没有问题,但是带继电器模块还是不能启动,试过直接接负载电阻到这个端口,阻值小于5.1K,模块不能启动,和其他的8266一样,所以,如果在实际使用中,GPIO 2作为输出时,要么使用电阻上拉,上拉电阻要小于6.8K(实际使用经验值),要么接的输出要负载电流比较小,要小于0.5ma。


扯的有点远,还是回到正题,关于ADC的应用,8266的ADC也是10位,即0~1023(实际使用显示是1~1024),这次测试ADC打算用NTC电阻测温度,顺便用1602LCD显示,按自己的经验,使用了10K,B=3435的NTC,根据自己以前用NTC测温的帖子:https://www.arduino.cn/thread-42661-1-1.html,因为供电电压为3.3V,分压电阻直接用10K和20K串联,热敏电阻串在电路里,修改里面的参数,供电修改为1.0V计算分压值,分压值计算阻值用3.3V,改电阻的B值为3435,电路如下图:
微信图片_20180525162613.jpg 微信图片_20180525162617.jpg

供电及点亮LED,挺好用的~~
wifiduinotest3.jpg wifiduinotest4.jpg
GPIO 2上接负载,上传不了程序,显示同步错误~ 去掉就可以上传,实际测量GPIO 2上接负载不小于5K或者使用小于6.8K的上拉电阻模块可以正常工作

8266 ADC_NTC.png
NTC测温外电路接法

实际通电,串口里面出现的ADC数值是17,太惊人了,计算出温度90多度,逆天了~~~,量输出电压,0.75V,根据经验是正常的,仔细检查,才发现板的背面关于ADC电路的丝印,自己没仔细查看,原来为了MCU的安全,板上已经做了分压设置,已经通过一个232K和100K建立了分压设置,按板上的画出A0与ADC外围电路的接法.
8266 ADC.png
按板上ADC应该外围应该是这样的

如果这样的话,可以直接用3.3V计算ADC的值,修改计算公式,上传程序,运行,串口里喝LCD中仍然显示温度仍不正确,ADC值为140左右,还是不正确,一下子自己陷入了迷茫~~~~~~自己那里弄错了?继续查找原因,直接将3.3V电压接到A0上,按道理串口应该显示1023的数值,实际上却是630,只有一半多一些,彻底晕了。
直接接可调电压到A0,直接看看到底是何方神圣,为什么会有这么莫名其妙的事情:通过一个1K的限流电阻,得出的结果如下:

  
A0输入电压
  
0V
0.75V
1V
1.5V
3.3V
5.32V
串口ADC
1
142
195
288
629
1024

竟然要到5.3V才会有1024的满输出,难道是板上的8266比较特殊?找出自己的8266-12F和板上的8266对比,完全一样,没有什么特别;还是用限流电阻和可调电源测ADC的输入范围:直接找到板上8266的ADC输入脚,通过限流电阻加电压到ADC上:
  
ADC脚输入电压
  
0V
0.5V
0.75V
1.0V
1.02V
串口输出ADC
1
510
765
997
1024


测试完两个结果更是一头雾水了,ADC输入正常,如果按板上的232K+100K的分压,8266 1.0V电压ADC为1024,那么3.3V电压应该是1024左右,实际629怎样都说不过去~,A是不是分压电阻有误差?找万用表,给板子断电,测量A0与板上ADC之间的电阻,按板上印的应该是232K,实际测量竟然是100K!!!,十分意外,再测ADC与地之间的电阻,按板上印刷应该是100K,实际22K,终于明白了为什么串口输出的ADC值有那么大误差了,按这两个电阻的阻值重新往回计算,所有的东西都明白了;
8266 ADC_WIFI.png          
实际ADC外围电阻应该是括号内棕色的阻值
wifiduinotest5.jpg
用可调电源标定ADC,极端值是1与1024;
这样就好办了,直接按实际值调整程序里的参数,改分压电阻为10K,按5.32V计算分压,按供电3.3V计算NTC阻值,然后修改完参数,上传运行,结果十分正确,和温度计测量的室温误差只有1度左右。
微信图片_20180525162624.jpg 微信图片_20180525162634.jpg 微信图片_20180525162644.jpg

开始时温度不正确                                                    调整程序后,温度可以正确显示,十分稳定

其他无线传输这些以后再试,自己是事情也比较多,看来什么东西深究起来都挺好玩的;

造成这次事件的原因有两个:一是自己没有仔细看产品上的印刷,想当然进行测试,另外一个是板上的实际电阻和印刷的不同,这个误差有点大,估计会把很多人带沟里去,估计这样做的想法是方便直接使用5V设备的使用者,应该在板上做说明。附ADC接口测试的程序(NTC测试温度用I2C 1602LCD显示):请使用者注意,你的板上ADC分压电阻的阻值是否和印刷的相同~~





程序
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3f,16,2);

int ntc = A0;

void setup()
{
   lcd.init();                      // initialize the lcd
   lcd.init();   
   lcd.backlight();
  // 初始化串口通信
  Serial.begin(9600);
}

void loop()
{
float hq = 5.32*(analogRead(ntc))/1024 ;
                 // 读取传感器模拟值

float x=10.0 * hq/(3.3 - hq);//计算当前的电阻值
float hs= log(x/10);//计算NTC对应阻值的对数值
float temp = 1.0/( hs/3435+1/298.15)-273.15;//计算当前的温度值


  
  // 将温度输出至串口显示
  Serial.print("temperature   " );                       
  Serial.print(temp);           
  Serial.println(" C");   
  Serial.print(analogRead(ntc));     
   lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Temp   ");
  lcd.print(temp);
  lcd.print(" C ");
   lcd.setCursor(1,1);
   lcd.print("Wifiduino Test");
   
  delay(1000);                     
}


啃萝卜不知道咋回事,不好用了~
写完了,不能忘记附上购买的订单号码,要收钱回来~TB订单编号:144088251030191806

找到这个不算是BUG的小瑕疵,是不是多赏我一点^-^

发表于 2018-5-26 16:02 | 显示全部楼层
本帖最后由 珜羽 于 2018-5-26 18:06 编辑

原先板卡在打样中,原定的分压电阻比例就是100K比22k,这样在输入5.54V的信号都能转到esp8266的1V量程的adc上。(USB5V供电允许误差±5%)
在测试过程中这个电压范围会误导用户其他的IO口也可以使用5v,并且这个阻抗对输入信号来说有点小了,所以在正式生产的资料中变更为232K比100K,对应的输入信号范围为0~3.32v

但是由于我的失误,同步提交给板厂的boom清单没有更新,导致这一批次的板卡的电阻还是100k比22k,和丝印上不相符。给您带来的不便,我们深表歉意。
补充参考:
丝印.png

PS:下载问题,是因为您没有安装我们打包的8266 package,安装后选择wifiduino,即可正常下载
https://www.arduino.cn/thread-76029-1-1.html

pps:还有下载失败的话请降低下烧写速度,高速通信的时候握手不容易成功。


 楼主| 发表于 2018-5-28 08:53 | 显示全部楼层
珜羽 发表于 2018-5-26 16:02
原先板卡在打样中,原定的分压电阻比例就是100K比22k,这样在输入5.54V的信号都能转到esp8266的1V量程的adc ...

多谢,也没有不方便~~~  实际有一个问题我一直没弄明白,8266只要烧写过arduino程序,再使用串口AT命令基本没办法进行通讯,是我操作的问题还是有其他窍门?

点评

AT指令是其中的固件实现的,你烧写了arduino程序,其中的固件就没有了  详情 回复 发表于 2018-5-29 11:58
发表于 2018-5-29 11:58 | 显示全部楼层
sun910231 发表于 2018-5-28 08:53
多谢,也没有不方便~~~  实际有一个问题我一直没弄明白,8266只要烧写过arduino程序,再使用串口AT命令基 ...

AT指令是其中的固件实现的,你烧写了arduino程序,其中的固件就没有了
 楼主| 发表于 2018-5-29 12:54 | 显示全部楼层
珜羽 发表于 2018-5-29 11:58
AT指令是其中的固件实现的,你烧写了arduino程序,其中的固件就没有了

十分感谢回复,明白了,多谢!!!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 16:48 , Processed in 0.084302 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表