切换到宽版
  • 12777阅读
  • 70回复

[C51]开水烫STC15W4K48S4,看看我的STC单片机是不是假的。(2-18 新增简易线性检测) [复制链接]

上一主题 下一主题
离线落叶风
 

发帖
1242
M币
847
专家
148
粉丝
19426
— 本帖被 香瑶 设置为精华,作者+3000M币+5专家(2017-02-16) —
看论坛的贴,说STC单片机有假,AD采集跳动大,吓得我大吃一斤,我常用STC单片机制作一些小制作,常用它的AD,如有这些问题我的制作都有问题,也没注意过温度对它的影响,所以在这做一次温度对单片机AD采集的影响测试。看看我的STC单片机有没假。
实验采用本人的STC15W4K48实验板,在AD0及AD1接电阻,对它进行连接采集或延时1ms或100ms进行采集,然后通过串口把数据送出来。并用DIY的下载器检测它的电流,看看温度对它的影响。
实验板及电路图如下。


在这板增加下面几个元件,一个温度NTC 用于测试温度。

以下是在背面焊这几个元件,NTC直接在单片机上,进行温度检测。

以下是正常状态测试

工作电流为0.02A

用STC下载程序的串口助手接收数据

以下是常温下用延时100ms采集,即每0.1S采集一次,由于STC下载软件看数据不方便,所以左则用TXT文档处理一下,就方便比较。串口输出的数据设置为:两个引导码,一个状态值,2位AD0的值(已转BCD),1位转换温度值,最后2位为AD1值。
如下图:FF FF 02 04 63 20 05 19   对应为:两个引导码  状态值为2,即延时0.1s(0为不延时,1为延时1ms),ad0的值为463,计算出的温度值为20度,AD1的值为519(由于是元件有误差,所以值不为512.)。

延时1ms

不延时

以下3张图可以看出,AD1的值一直为518或519或520,跳动并不大,可以说基本没跳动。
以下是用开水烫的测试,用塑料杯上开水,压住单片机及NTC。

从下图可以看到,CPU的工作电流没变化。








[ 此帖被落叶风在2017-02-18 18:16重新编辑 ]
本文内容包含图片或附件,获取更多资讯,请 登录 后查看;或者 注册 成为会员获得更多权限
本帖最近打赏记录:共24条打赏M币+371专家+1
baorain M币 +15 謝謝分享 06-03
sckocn M币 +30 優秀文章 02-20
qingf2008 M币 +25 認真發帖 02-19
denglei M币 +15 支持楼主进一步折腾 02-19
autopccopy M币 +1 優秀文章 02-18
gnimuh 专家 +1 - 02-18
camel8964 M币 +30 - 02-17
zeng_zww M币 +13 謝謝分享 02-17
吴鹏930 M币 +3 謝謝分享 02-17
小陈兔 M币 +5 这个必须顶 02-17
离线落叶风

发帖
1242
M币
847
专家
148
粉丝
19426
只看该作者 1楼 发表于: 02-14
以下三张图为上开水烫时输出的数据,可以看出水的温度不太高,大约60度左右,从表中看,ad1的值基本没跳动,只不过比常温的值高了,常温AD1的采集值为519,开水烫的值为520



查STC的手册,它说经175度8小时烤,我也试试用烙铁烤
把烙铁调到200度,这个是最低的温度了。


压住NTC及单片机。


以下为串口发出的数据,由于程序最大温度值为99度,已超出来,所以显示99度,对这个温度看输出发现有在519及520间跳动。


根据以上的测试,可以说明我的stc15w4k48的单片机是真货


**************************************2017-2-18的新内容   ********************************************
    由于在本贴有坛友跟贴说STC单片机AD的线性不好,(说测工作电源电压,外挂431,4.5v时显示3v,5v时显示5.3v,5.3v时显示8v),这个也相差得太大了。由于在家无聊,所以找些东西出来简单测试一下,所以在这加几张图,说一说本人测试的情况。发贴只是本人的使用的实际情况,实事求事,不针对什么人和事的。
   由于早期的STC单片机内是没有基准的,所以一般是用外接TL431,通过TL431的值,反算出单片机供电电压。由于本人是简单测试,没有找旧版的STC单片机,而是用新的STC15W408AS单片机,它里内带有基准电压的,通过测试内部基准,可以算出单片机的供电电压,我在这是用带电压电流表的多功能STC免冷启动自动下载器http://bbs.mydigit.cn/read.php?tid=1984746,它带有单片机的供电电压值显示,是通过检测内部基准的值算出来的。以下是测试的图片。
由于STC15W408AS可在3.3V电压工作,但由于OLED是接了个3.3V的低压差的稳压,所以供电不能太低,所以在这以4V供电开始试。找出另一个多用工具组合,设置它的电源电源输出为4V,由于校准没做好,显示为3.9V。接USB接口,从USB接口有夹夹住,接万用表对比测试。以下是4V供电。

以下是放大图,看下载器的CPU电压值,这个是单片机的供电电压,维修电源提供4V供电,可以看到单片机的供电电压为4.02V,万用表的电压为4.01V,差不多。


以下为4.5V的供电图


放大后可以看到电压与万用表一样。


以下为5V对比



以下为5.4V的对比较图



由于只是简单测试,没有进行从0到VCC进行多个电压值的读取比较,所以这个测试不能完整反映它的线性情况。
*************************************新内容结束************************************************

以下是AD测试的程序。程序只对AD0AD1进行采集,AD0接温度电阻,主要是看AD1的值。把数据通过串口送出。P33 P34分别对地就会启动延时采集。

//AD测试,单片机 STC15W4K48S,频率22.1184M
//主要测试温度对AD的影响,数据用串口输出,AD0上接10KNTC电阻,下接10K电阻,AD1上下接10K电阻。
//先是引导码FF FF ,接住为延时时间(0为不延时,1为延1ms,2为延100ms),
//接住为AD0的值,占2位显示,分别为千百十个(已转BCD,方便看),
//接住是计算出来的温度值,接住为AD1的值.
//如:FF FF 00 04 70 21 05 06,表示不延时,AD0值为470,计算出来的温度为21度,AD1的值为506.
#include <STC15W4Kxx.h>
sbit kkk1=P3^3;
sbit kkk2=P3^4;
unsigned int code temppiao[]=
{//NTC温度下拉10K电阻对应的取样值表。
    189,196,204,212,219,227,236,244,252,261,//-10--1
  269,278,287,296,305,314,322,331,340,350,//0-9
  359,360,364,371,379,390,401,413,426,438,//10-19
  451,464,477,489,501,512,523,534,544,554,//20-29
  564,573,583,592,600,609,618,626,634,643,//30-39
  651,659,667,675,683,691,698,706,713,721,//
  728,735,742,749,756,763,770,777,784,791,//
  798,801,805,809,814,819,824,829,834,839,//
  844,849,853,858,862,866,870,874,877,881,//
  884,887,890,893,895,898,901,904,906,909,//
  911,914,917,919,922,925,927,930,933,935,//90-99    
};
void delay(unsigned int t) //长延时程序,延时t毫秒,STC 1T单片机11.0592M晶振I值为648,22.1I值为1298,12MI值为705,27.648M I值为1622。
{
     unsigned int i;
     while(t--)
       {
        for(i=1298;i>0;i--);
       }
}
void rs1_232tx(unsigned char txdata)
{
     SBUF=txdata;//把数据传给串口寄存器SBUF。
     while(!TI);//检测是否发完。
     TI=0;//重置初值。
}
//以下为AD检测
void ADCINT()
{
   P1ASF=0xff;//设置 P1低2位为AD口,根据实际设置。
   ADC_RES=0;//ad清0
   //AUXR1=0x04;//设置数据方式,低8位+高2位方式,易于运算204E的写法。
   CLK_DIV=0X20;//设置数据方式,低8位+高2位方式,408AS写法。
    delay(1);
}

unsigned int ADCwrite(unsigned ch)
{ //由于所检测的电压不用快,所以采用查询或延时法,没用中断法。 ch值从0-7,对应为P10-P17
    unsigned int x;
    ADC_CONTR=0x88+ch;//设置启动 ,用慢速采集
    //查询法。查询是否完成AD,由于是单片机内的,如出错单片机也出错,所以没做跳开处理。
    while ( !(ADC_CONTR & 0x10) );//等待A/D转换结束(ADC_FLAG==0)
    ADC_CONTR &= 0xE7;             //11100111,置ADC_FLAG=0清除结束标记, 置ADC_START=0关闭A/D 转换    
    //delay(1);//延时法。由于设置及晶振的原因,大约为20US完成过程。这里延时1MS
  x=ADC_RES*256+ADC_RESL;
  return x;
}

void UartInit1(void)        //19200bps@22.1184MHz
{
    SCON = 0x50;        //8位数据,可变波特率
    AUXR |= 0x40;        //定时器1时钟为Fosc,即1T
    AUXR &= 0xFE;        //串口1选择定时器1为波特率发生器
    TMOD &= 0x0F;        //设定定时器1为16位自动重装方式
    TL1 = 0xE0;        //设定定时初值
    TH1 = 0xFE;        //设定定时初值
    ET1 = 0;        //禁止定时器1中断
    TR1 = 1;        //启动定时器1

    //ES=1;//开中断
}

void main(void)
{
    unsigned int ADvol;
    unsigned char x;
    P1M0=0;
    P1M1=0xff;//AD为高阻
    UartInit1();
    ADCINT();
  while(1)
  {
        if(kkk1==0)delay(1);//判断P33是否接地,如接为延时1ms
        if(kkk2==0)delay(100);//判断P34是否接地,如接为延时100ms,如两者都没接地为不延时。
        //发送2个区分码
        rs1_232tx(0xff);
        rs1_232tx(0xff);
        //发送状态值
        if(kkk1==1&&kkk2==1)rs1_232tx(0);
        if(kkk1==0)rs1_232tx(1);
        if(kkk2==0)rs1_232tx(2);
        //采集AD0,并发送,转成BCD方式
        ADvol=ADCwrite(0);
        rs1_232tx((ADvol/1000)*16+ADvol%1000/100);
        rs1_232tx((ADvol%100/10)*16+ADvol%10);
        //计算AD0对应的温度值并发送
        for(x=0;x<110;x++)//查表计算室温
        {
        if( (ADvol)<=temppiao[x]) break;//并且退出查表
        }
        ADvol=x-11;
   rs1_232tx((ADvol/10)*16+ADvol%10);
        //采集AD1的值并发送,转成BCD码。
        ADvol=ADCwrite(1);
        rs1_232tx((ADvol/1000)*16+ADvol%1000/100);
        rs1_232tx((ADvol%100/10)*16+ADvol%10);
}

}




[ 此帖被落叶风在2017-02-18 18:04重新编辑 ]
本文内容包含图片或附件,获取更多资讯,请 登录 后查看;或者 注册 成为会员获得更多权限
本帖最近打赏记录:共19条打赏M币+239
jackkane M币 +20 自己做东西就是好啊~~~~ 02-22
梦幻数码 M币 +15 認真發帖 02-21
zhwj8025 M币 +25 謝謝分享,太专业了,学习下。。。 02-21
sckocn M币 +30 優秀文章 02-20
autopccopy M币 +1 实践得真知!谢谢! 02-18
kamp M币 +8 造假? 那是STC给自己贴金呢 02-18
zeng_zww M币 +10 謝謝分享 02-17
上帝之眼 M币 +13 - 02-17
小陈兔 M币 +5 这个必须顶 02-17
阿甲 M币 +13 会单片机的都是大神 02-16
12
离线yanxue11

发帖
484
M币
4727
专家
8
粉丝
49
只看该作者 2楼 发表于: 02-14
楼主的单片机看来是真的
离线la45088d1

发帖
630
M币
836
专家
6
粉丝
16
只看该作者 3楼 发表于: 02-14
发发我的吧!

对了,STC是经过两级稳压,电压一直再4.97左右,极为稳定,AMS1117的功力可信。
本文内容包含图片或附件,获取更多资讯,请 登录 后查看;或者 注册 成为会员获得更多权限
本帖最近打赏记录:共5条打赏M币+44专家+1
laobi M币 +15 認真驗證,技術高超 02-18
上帝之眼 M币 +13 - 02-17
ggbugs M币 +3 实事求是的亲自实验,这种态度赞! 02-17
阿甲 M币 +13 膜拜会单片机的大神 02-16
發騷友 专家 +1 歡迎探討 02-16
离线la45088d1

发帖
630
M币
836
专家
6
粉丝
16
只看该作者 4楼 发表于: 02-14
LZ的开发板做的不错,可是为何不镀锡?时间久了,MCU的细走线容易蚀断,通过照片隐约看出已经有略微氧化腐蚀。
离线skw168

发帖
319
M币
727
专家
1
粉丝
19
只看该作者 5楼 发表于: 02-14
同感,最近在淘宝买了个STC15W408AS,timer1死活打不开(用官网的测试程序也不行)

内容来自Android手机客户端

离线落叶风

发帖
1242
M币
847
专家
148
粉丝
19426
只看该作者 6楼 发表于: 02-14
回 skw168 的帖子
skw168:同感,最近在淘宝买了个STC15W408AS,timer1死活打不开(用官网的测试程序也不行)
(2017-02-14 11:16) 回 skw168 的帖子

详细看官方手册吧,这个型号的单片机没时钟1的,只有时钟0及2.


[ 此帖被落叶风在2017-02-14 11:38重新编辑 ]
本文内容包含图片或附件,获取更多资讯,请 登录 后查看;或者 注册 成为会员获得更多权限
离线la45088d1

发帖
630
M币
836
专家
6
粉丝
16
只看该作者 7楼 发表于: 02-14
回 skw168 的帖子
skw168:同感,最近在淘宝买了个STC15W408AS,timer1死活打不开(用官网的测试程序也不行)
 (2017-02-14 11:16) 回 skw168 的帖子

排除你个人的问题可能就是中奖了。
不会是你焊接温度过高,或者ESD因素破坏了相关电路吧?这个更夸张。
T0,T1我经常用,目前未出问题,连16位重装都很好用。T3,T4之类就没试过。
离线落叶风

发帖
1242
M币
847
专家
148
粉丝
19426
只看该作者 8楼 发表于: 02-14
回 la45088d1 的帖子
la45088d1:发发我的吧!
[图片]
对了,STC是经过两级稳压,电压一直再4.97左右,极为稳定,AMS1117的功力可信。
 (2017-02-14 11:11) 回 la45088d1 的帖子

你的用这方法是看不出问题所在的,如怀疑有问题,就用最小化的程序测试一下就知了,如你的板,就在AD0接一个2.5v的电压,采集后把采集值显示在数码管上,看看值是不是512左右(5V供电),然后再进行温度测试。我常用stc单片机的ad制作小制作,稳定性还是行的。
离线skw168

发帖
319
M币
727
专家
1
粉丝
19
只看该作者 9楼 发表于: 02-14
落叶风:[表情]详细看官方手册吧,这个型号的单片机没时钟1的,只有时钟0及2.
[图片]
 (2017-02-14 11:23) 

多谢指点,真的是我想多了

内容来自Android手机客户端

快速回复
限80 字节
温馨提示:所有技术区严禁灌水,“沙发”“顶”字样;禁止广告贴;以免被删除
 
上一个 下一个