文号
t40041
阅读
18607
回复
22
收藏
14
菜鸟进军单片机,第一个作品:数字电容表
2012/01/27
IP:浙江
RT,用刚到手的Arduino做的,12864LCD,原理不多说,KC的应该都懂。
精度还行,速度较慢(为了保证一定的精度),算法几乎等于没有。


外围电路及其简单,仅1K电阻一只,如果用300左右的电阻可以做到2200uF电容刷新率0.5s左右,但是精度要低一点。
程序中为了防止大电容放电不完全,给电容500ms放电时间,然后又要充电,所以有点慢
b_large_bbNP_11a5000012f71261.jpg
b_large_ROM8_2294000106791263.jpg
b_large_YeRm_6a8c00003204121c.jpg

测试视频在此:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
点击此处查看视频

应大家要求放出源码,但是真的很菜鸟,大家看看就好,不要笑我啊。。。
attachment icon Capacitor_Meter.ino.zip 0.67KB ZIP 53次下载
+10
科创币
神之觉醒
2012/01/27
为什么刷新速度这么慢啊
+200
科创币
ry7740kptv
2012/01/27
鼓励动手制作!
+10
科创币
zhangv
2012/01/27
+1
科创币
十九
2012/01/27
刷新速度的确有点慢……
14年11个月前IP:未同步
359081
1楼
能否开源?程序和测量原理。
+1
科创币
justinpiggy
2012/01/27
可以,就是非常基础,实际测量pF级的就不准了,所以没有贴出来,实际上我也不好意思贴,如果想要PM我
引用
评论
14年11个月前IP:未同步
359082
2楼
是自带的例程吧?
+1
科创币
justinpiggy
2012/01/27
不是哦,全自己写的
引用
评论
14年11个月前IP:未同步
359083
3楼
求电路图。。。 尤其电容采样部分。。。
楼主的电脑莫非是。。。。。。。。。。。
+1
科创币
justinpiggy
2012/01/27
其实很简单,给电容先放电,然后测电容电压,记下此时时间,马上充电,充到电源电压的1-1/e时记下时间。
引用
评论
14年11个月前IP:未同步
359085
4楼
为什么刷新速度这么慢啊
+1
科创币
justinpiggy
2012/01/27
这个是通过电容充放电实现的,2200uF比较大,我为了精度用了1K电阻,比较慢,而且LCD是串行,所以显示也慢
引用
评论
14年11个月前IP:未同步
359093
5楼
引用第3楼霹雳游侠于2012-01-27 19:58发表的  :
求电路图。。。 尤其电容采样部分。。。
楼主的电脑莫非是。。。。。。。。。。。


MacBook Pro 15寸高配,不过是上一代的了[s:274]  



顺便问一下怎么把float转成char(就是string啦)
我用sprintf(str,"%f",n);打出来是一个?
做这个电容表时我为了解决这个问题花了很久,最后还是不行,只好把n拆成小数点后和小数点前,分部输出,所以实在太菜鸟了
望各位单片机老手指导!
引用
评论
14年11个月前IP:未同步
359094
6楼
回 5楼(justinpiggy) 的帖子
好吧 电压用什么检测?不要告诉直接靠端口临界值来触发吧
有钱。。。。。。。。。。。。。。。。。。。。。。。。。。
引用
评论
14年11个月前IP:未同步
359097
7楼
Re:回 5楼(justinpiggy) 的帖子
引用第6楼霹雳游侠于2012-01-27 20:18发表的 回 5楼(justinpiggy) 的帖子 :
好吧 电压用什么检测?不要告诉直接靠端口临界值来触发吧
有钱。。。。。。。。。。。。。。。。。。。。。。。。。。



真的是这么干的,死循环,然后等analogRead(Pin)>U
想想看10Bit的ADC就凑合着用用
所以当电容很大,电阻也弄得比较大的时候,RC常数t=R*C就会很大,这个loop时间就长啦
引用
评论
14年11个月前IP:未同步
359112
8楼
源码已经上传了
引用
评论
14年11个月前IP:未同步
359115
9楼
关键看着写液晶屏,也很慢啊!
引用
评论
14年11个月前IP:未同步
359117
10楼
引用第9楼mistersheng于2012-01-27 20:49发表的  :
关键看着写液晶屏,也很慢啊!


没办法,是串口输出,比较慢,换成并口会快很多,但是那样要接很多线,现在串口只要3+2根就可以了
引用
评论
14年11个月前IP:未同步
359119
11楼
怀疑是测RC充放电时间常数
话说不一定要先放电再测试的。算法好点的话,直接带电测也可以。只是电容的电压不要太高把电路烧了。
引用
评论
14年11个月前IP:未同步
359124
12楼
引用第11楼yearn3guns于2012-01-27 20:55发表的  :
怀疑是测RC充放电时间常数
话说不一定要先放电再测试的。算法好点的话,直接带电测也可以。只是电容的电压不要太高把电路烧了。


不是怀疑,看一下整个帖子,还有代码再发贴。
带电测我觉得不行的,你要不停刷新,那么刚才已经冲到比如说2.5V,单片机最高控制就是5V,那么下一次的确可以冲到3.75V(理想,不放电),然后再下一次只有4.375V,而Arduino自带ADC大概只能分辨4mV电压,再加上时间间隔越来越短,接下来就很有限了。
我的方法也不是完全放光电,看程序,我在LCD输出时候都节省时间让电容放电,其实放得越低越好,然后再次循环时候就测量此时电压为lo,然后再充电,冲到(hi-lo)*k+lo时候停止,这样充电时间比较长,适合这种16MHz的单片机计时,又有较大电压跨度,照顾到了10Bit ADC的精度限制
引用
评论
14年11个月前IP:未同步
359228
13楼
积分式AD的思路。。。
定时器测时间
+1
科创币
justinpiggy
2012/01/28
但是那样就要外围电路了,还要其他IC了,不方便啊
引用
评论
14年11个月前IP:未同步
359230
14楼
还有 12864 的串行输入也没则么慢 刷屏其实挺快的

是程序的问题 可能是12864给的延时太大了 没必要

还有。。罗嗦一句。。觉得现在AVR江河日下 mega128已经不爽了。。(刚才看到 是ATMega 2560
)

暑假有点被坑的感觉。。速度好慢。。。

换STM32吧~~~~~~  要不LM3S1138 虽然速度一般 但是上手特别容易~~

第一张图中间那块蓝色的板子是LM3S69XX么? 周工的那个?

暂时不讨论Arduino的效率
+1
科创币
justinpiggy
2012/01/28
我12864直接用了商家给的库。。。中间那个是标准的USBtinyISP啊
引用
评论
14年11个月前IP:未同步
359232
15楼
不需要其他芯片吧。。。AVR自带AD么。。。

中间那个。。我以为是以太网的接口。。
引用
评论
14年11个月前IP:未同步
359235
16楼
Re:Re:回 5楼(justinpiggy) 的帖子
引用第7楼
justinpiggy于2012-01-27 20:21发表的 Re:回 5楼(justinpiggy) 的帖子 :
真的是这么干的,死循环,然后等analogRead(Pin)>U
想想看10Bit的ADC就凑合着用用
所以当电容很大,电阻也弄得比较大的时候,RC常数t=R*C就会很大,这个loop时间就长啦


。。。。这不是积分式AD的思路么。。。亲。。。


还有。。。用习惯了不用库写AVR。。。看到analogRead(Pin)这一句 觉得不爽了。。。。
查寄存器吧。。。提高效率。。。同时也可以提高精度。。。


话说。。。12864的显示你是怎么处理的?丢到定时器中断里?? 还是在while(1)里面。。。
引用
评论
14年11个月前IP:未同步
359278
17楼
Re:Re:Re:回 5楼(justinpiggy) 的帖子
引用第16楼腹黑小白兔于2012-01-28 00:32发表的 Re:Re:回 5楼(justinpiggy) 的帖子 :
引用第7楼
justinpiggy于2012-01-27 20:21发表的 Re:回 5楼(justinpiggy) 的帖子 :
真的是这么干的,死循环,然后等analogRead(Pin)>U
想想看10Bit的ADC就凑合着用用
所以当电容很大,电阻也弄得比较大的时候,RC常数t=R*C就会很大,这个loop时间就长啦
.......


不好意思,我是初学,恩,的确是积分+ADC,
LCD这个写起来时间长我也很头疼,我是每0.5s刷新一次,这个时候写一下LCD,其他时候不写。
不知道AVR能不能同时进行两个任务,应该不行吧。


事实上你眼睛很尖,的确有一块以太网扩展板,再左上角哦,W5100,中间那个是下载线
引用
评论
14年11个月前IP:未同步
359281
18楼
表示后面那台电脑很亮
引用
评论
13年6个月前IP:未同步
537980
19楼
可以构造个振荡器,把电容值转换成频率值
引用
评论
11年2个月前IP:广东
792990
20楼
Thank you very much!
引用
评论
11年2个月前IP:广东
793291
21楼
这样搞一台比买便宜吧?技术有限。。。
引用
评论
3年8个月前IP:广东
917937
22楼
引用justinpiggy发表于5楼的内容
引用第3楼霹雳游侠于2012-01-27 19:58发表的  :求电路图。。。 尤其电容采样部分。。。楼主的电脑莫非是。。。。。。。。。。。 MacBook Pro 15寸高配,不过是上一代的了[s:...

你的str是String还是char[]?这个sprintf只能用在char[]上

引用
评论
笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的