[原创] HOHO,我们的51DIY——LC测量小工具完成咯!

辛昕   2011-4-24 22:49 楼主
[media=ra,400,300,0][/media]同志们,这一周的规整帖,我很高兴地跟大家说,我已经把它做好咯!!
 

 
上图以前,我先小小自曝一下糗事:
之前我怀疑过晶振,怀疑过STC,怀疑过LM311......
谁会想到,一切的一切,其实只是我的程序里有一个地方疏忽——
因为我只是用定时器定时,我没打算开中断,故而我一时疏忽就没初始化TMOD,所以,所以,导致计数值乱七八糟,自然的显示的结果也就一塌糊涂了。

具体的细节咱以后再研究,我先上几个图片撒,本来想上视频,但是同学的数码相机在充电,而且考虑到上传到土豆要时间,还要审核什么的,所以先上图。


这是一场全景图,这里简单说一下:
本来我是打算用STC12C2052做的,它只有20个脚,和AT89C2051是兼容的,很可惜,我写的程序比较大,大概是因为使用C语言,效率还不够高,个人写的程序还不够好,所以,后来我实际看了一下,大概在3K多一点,可惜我一时半会弄不到STC12C4052或者STC12C5052,所以,没办法,我只好更换了另一块STC51单片机。
我用的是STC12C5A60S2,这个程序里并没使用到任何异于一般8051的资源和功能,所以,只要你能保证IO口够用,能保证FLASH容量在4K或以上,即可使用。
当然,我们是针对STC系列写的程序,其中有些地方,比如1602,不知道为什么我试图改动头文件,却发现似乎有点问题,所以,如果可能请用STC系列,则可以不改动程序。
后期我将会考虑继续完善这个程序。希望能做到任何普通8051都可以无缝移植。
所以,最后,我用的是我以前初学时用的一块板子,上面已经做好了1602的接口,一切都很方便,我只要把LM311部分的测量电路对应接好接口即可使用。

然后上两个测量电感和电容的实际效果图。
应该说,由于种种原因,我们做出来的精度还比较有限。
下面首先是测量一个51P的云母电容的图片,显示大概在47P到48P之间。这个结果与我预想的误差还比较大。
因为这是一个云母电容啊!!




然后是一个测量100uH的工字电感的效果图。
由于这只是一个普通的电感,所以其实它的结果并没有上面那个电容的结果来的有说服力。




[ 本帖最后由 辛昕 于 2011-4-27 11:16 编辑 ]
强者为尊,弱者,死无葬身之地

回复评论 (48)

心心帅气,anqi90帅气,鑫海在此恭喜你俩了,可惜我没能顺利完成自己的,不过我还是会继续的哈哈哈,明天把东西背石家庄去嘿嘿继续看程序

 

 

还不错 ,差的不是很多,随着实力的增强  ,我们一定会有 更好的提高精度的 方案的

[ 本帖最后由 鑫海宝贝 于 2011-4-24 22:56 编辑 ]
点赞  2011-4-24 22:52
梅花香自苦寒来

祝福辛昕及其小分队
加油!在电子行业默默贡献自己的力量!:)
点赞  2011-4-24 23:17
嘿嘿 支持下 版主啊
点赞  2011-4-24 23:48
热烈祝贺
点赞  2011-4-25 00:25

谢谢哈。

刚才拍了一个视频,有130多M,太大了些,网速不给力。

 U盘不敢用也没有,所以暂时无法上传,童鞋们等着吧,我明晚回来再上传,一小时30分就一小时30分。

精度比较一般,刚才顺手又测了一个我用的1000P的云母,结果是1013P左右,这个误差更大了,我的天

 

昨晚睡觉的时候忽然想起,其实1000P的电容侧到1013,这个精度不算低啊~~~

不是10%,是1%啊......

 

如此看来,那个51P的电容侧到47P,误差太反而很大呢。

难道那个电容没这个好?

事实上我更倾向于两个电容都是好的,测得不准的原因是那个电容小,频率高,嗯嗯,这个程序,是在anqi90的基础上改的,事实上,频率测试部分我没改动过,用的IO口测试,我一直觉得不是很爽。所以回头我会试试改用计数器来计数,看是不是会好点。所以我才刻意把信号线改在P3^5啊,这可是“蓄谋已久”的啊。

[ 本帖最后由 辛昕 于 2011-4-26 23:11 编辑 ]
强者为尊,弱者,死无葬身之地
点赞  2011-4-25 00:28

回复 6楼 辛昕 的帖子

我们等着啊 哈哈
点赞  2011-4-25 07:42
哎呀,前两天看程序只顾着看测量部分了,怎么把初始化给忘了....罪过罪过,不然就可以提前几天找到问题了...

还是祝贺辛昕老大了,终于快到终点了
点赞  2011-4-25 10:06

回复 沙发 鑫海宝贝 的帖子

恭喜我干什么,其实咱俩干的活差不多,最后还是老大是关键啊
点赞  2011-4-25 10:07
恭喜恭喜……
点赞  2011-4-25 10:30
祝贺一下!~
QQ:1625345502
点赞  2011-4-25 10:46

回复 9楼 anqi90 的帖子

嘻嘻,我不做老大很多年了
强者为尊,弱者,死无葬身之地
点赞  2011-4-25 11:12

回复 9楼 anqi90 的帖子

但是咱们说话单独完成一个的,你俩的进展都 不错,就我尴尬啊
点赞  2011-4-25 11:35
做的不错,支持下!
点赞  2011-4-25 18:06

我改动了一下测试频率的子程序,精度更见提高

之前提了一下,原来的程序里用的是IO口测试频率,而我决定采用剩下的一个定时器1作计数器用。
改动如下:

这是相关的预定义部分:
#define TIMES 1000                      //计数次数
#define BASE  1000000                  //对应一条机器周期的倒数,12M的晶振
#define SUM   (TIMES * BASE)           //先计算该常数,提高速度
#define COUNT_HIGH (65535 - TIMES) / 256
#define COUNT_LOW  (65535 - TIMES) % 256

TMOD的相应设置
TMOD=0x51;                        //计数器0作为16位定时器,计数器0作16位计数器

测试的子程序

uint test(void)
{
//设置计数器1初值
    TH1 = COUNT_HIGH;
    TL1 = COUNT_LOW;
//设置定时器0初值
    TL0 = 0;
        TH0 = 0;
//开计数器1,开始计数
    TR1 = 1;
//立即启动定时器0,开始定时
    TR0 = 1;
//等待计数器溢出
    while(TF1 == 0);
//关闭定时器0,再关闭计数器1
    TR0 = 0;
    TR1 = 0;
//软件清溢出标志位
    TF1 = 0;
    TF0 = 0;
       
        return (256 * TH0 + TL0);
}

在测量频率上我采用了多次测量取平均值的方法,主要避免一次测量造成的较大随机误差。另外测量速度很快,没必要让数值刷新的这么快——更重要的是在我的程序流程里,F1和F2只会被测一次,但是它们对于整个精度的影响举足轻重,所以采用平均值,会让每次测量的结果都更加准确。
#define TOTAL 20

long Get_Frequency(void)
{
    uchar cycle1 = 0;
    long  Result = 0;
    for(cycle1 = 0;cycle1 < TOTAL;cycle1++)
                Result += calculate(test());
    Result = Result / TOTAL;
    return Result;
        
}
强者为尊,弱者,死无葬身之地
点赞  2011-4-25 22:36

说一下效果

就用此前测的那个1000P云母电容而言。
在用IO口测试的情况下,普遍测量值为1011到1013左右。
然而,当我采用上述的计数器方式后,它的结果居然显示为1002到1003!!
这让我震惊。

后来我又调整了一下计数次数,最初是100,后来我改为300,甚至1000,我发现那个51P的电容也开始准了。
它显示为50到52,有时偏低为48 47.但绝大多数时候显示为50到52P。

至于那个工字电感,可能它真的本身就不准,一直显示为93U。我是说自从我改变计数器方式后。
但是一个很奇怪的现象是,我手头有一个47U的贴片功率电感,它的测量值居然一直是45到46,这个精度实在是出乎我意料。

现在公布一下我测试的几个数值,其中,电容均为云母电容,而电感一个是普通的工字,一个是那个贴片电感。

51pF 50~52
100pF 98
1000pF 998~1002
47uH  45~46
100uH 93

从整体来看,似乎精度都在+/-2%以内,而其中电容是云母电容,自然可信得多,由此估计,我认为那个47uH的测量值是可信的,如此说来也许真的只是这个100uH并不太精确。



这样说,我们似乎可以得出结论:
这个东西的精度大概在2%左右,按照仪表精度标准,可以划为2.5级精度
强者为尊,弱者,死无葬身之地
点赞  2011-4-25 22:43
恭喜恭喜!期待在89c52也能运行。
点赞  2011-4-26 12:18
支持哦,给力 ,辛昕
点赞  2011-4-26 13:34

回复 17楼 jcl6967069 的帖子

如果你有1602的显示程序
那么,直接改动几条预定义就可以了。
我也动过这心思,但是改动时,不知为何,1602的显示部分(做成一个头文件),在改动上编译过不去,所以不成功
强者为尊,弱者,死无葬身之地
点赞  2011-4-26 13:45
老大辛苦啦。没帮上什么忙的说
点赞  2011-4-26 15:57
123下一页
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复