打印
[匠人手记]

读匠人手记有惑

[复制链接]
2737|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
路在何方|  楼主 | 2008-7-18 20:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
        我在读匠人手记 用IO口代替AD转换这一章时,产生了问题。如果我用51单片机的话,也可以吗?51单片机的IO口默认都是FF,输出高电平,PS:我量过的。否则就是低电平。如果输入信号达到门限电压,它就读到1,如果拉低到0电平,它读到的数据就是0。
        匠人大哥的**要求IO口在输入状态时是高阻态,比如P60,P61在输入态,P62是输出1,使电容放电,那电容还接一个VCC,然后P60,P62输入态,P61是输出0电平,使VCC对电容充电,然后P62读到数据是0后,充电结束。如果是51单片机的话,P60,P62作输入态,那必须先置1,(否则如果来的是高电平,它会读成0。),那就是输出高电平了,这样就没办法,P62永远读不到0。我是在网吧里。图只能将就了。
       我在军校的实验室里,里面东西不能拷出来,更不能上网,出来上网要走一个小时,各位高手同情小弟一下,指点指点。

相关帖子

沙发
路在何方|  楼主 | 2008-7-19 18:53 | 只看该作者

郁闷

我很郁闷。难道没人能教教我吗

使用特权

评论回复
板凳
alongman| | 2008-7-19 21:11 | 只看该作者

一直想看看这本书.P62能否读到0,应该与R2,R3分压

有关.其实P61是0啊,不是下拉电平了吗?其实不管怎样的方法都是看外部RC的充或放电时间.只要你灵活掌握了这个,如何测,由你自己决定.这种方法精度不会高,需要能软件或电路消除不同芯片转换电平的差别,不能稳定的参数最好不要出现在结果计算中.

使用特权

评论回复
地板
程序匠人| | 2008-7-19 23:34 | 只看该作者

传统的51芯片IO口不适合做这个功能

因为其IO口不能设置输入输出。也就没办法做到高阻态。
适合的芯片包括(但不限于):PIC、EMC、HT。等等。。。

使用特权

评论回复
5
何工| | 2008-7-20 01:06 | 只看该作者

~~~

51芯片的P0口不是高阻态的吗?不加上拉电阻,输出1时,P0口悬空啊.

使用特权

评论回复
6
chunyang| | 2008-7-20 12:37 | 只看该作者

51的标准IO确实无法实现

    原因不是高阻问题,而是驱动能力太弱,尤其是高电平输出全靠片内上拉电阻实现,跟输入态没什么两样,如此,充电时间不仅非常长,放电时间更是极长,根本没法用,就是P0口也意义不大。不过现在不少51的IO都是增强型的,具有20mA上下拉能力和高阻态,当然理论上也就可以用这个“歪招”了,只是这类51大多带有片内AD,如此招数也就没有用武之地了。
   匠人的这招,对很多廉价台系RISC MCU而言是很有价值的,所谓“便宜到家”,追求的就是这个。

使用特权

评论回复
7
aceice| | 2008-7-21 10:22 | 只看该作者

看到这一节,也有疑问

测量的充放电时间是IO口从一个门限电平到另外一个门限电平的时间,关键是门限电平不会是0~Vcc啊!也就是测量的值应该是小于实际值的。
那这个值怎么确定?是要用软件修正吗?
便宜到家不是什么好事,虽然有利于抢占市场,但是对技术不见得有利。我比较欣赏Sony的精品战略(不知道现在是不是)

使用特权

评论回复
8
nkguodalu| | 2008-7-21 10:34 | 只看该作者

刚入门的还是别研究这些了。


规规矩矩把正常电路做好就不错了。

底子不踏实就研究这些“歪门邪道”,小心以后走火入魔。

还是练好了少林拳,再琢磨怎么耍辟邪剑吧。

使用特权

评论回复
9
程序匠人| | 2008-7-21 10:42 | 只看该作者

要看具体应用了

一般来说,这种方法,测个室温什么的,还是可以的

使用特权

评论回复
10
gyt| | 2008-7-21 12:05 | 只看该作者

51也可以用类似的简易方法

就是精度同样差一些

使用特权

评论回复
11
fist84| | 2008-7-21 15:46 | 只看该作者

ww

22

使用特权

评论回复
12
xzhenggen| | 2008-7-22 17:26 | 只看该作者

上个星期六到拱北书城逛一圈,买了一本匠人手记.

为什么像程序匠人这样的高手都用VB写上位机程序,而不用VC呢?是不是就像匠人习惯用汇编一样,简洁,但却繁琐.看到汇编就头晕.现在最好用的上位机程序软件LABVIEW,建议匠人用一用,比用VB强多了.

使用特权

评论回复
13
程序匠人| | 2008-7-22 17:29 | 只看该作者

因为只会用VB嘛,呵呵

使用特权

评论回复
14
quakegod| | 2008-7-23 01:30 | 只看该作者

偶做的这个比匠人的复杂些

原理类似,用的元件多些,IO管脚少些,
但是能做到12位分辨率。不过电容要用校正电容才行。
当然,做到12位分辨率是因为测量的结果是对数的。
偶将这个电路用到了音量指示发光条上,太合适了,
因为那个也是需要对数的,连转换都省了,性能超过普通10位AD,
而且对数的AD还真的不好找呢。

使用特权

评论回复
15
quakegod| | 2008-7-23 02:11 | 只看该作者

这是电路图

这个图是偶说的那个电路的主体部分,显示驱动没再画出来
主芯片使用的是89C2051,然后同时显示4路声音的音量
用了1片LM324进行峰值滤波,
用了1片LM339进行4路比较,
使用了单片机的INT0中断,还有4个输入输出IO和1个控制IO
如果只是1路的话,可以不用那4个输入输出IO.
工作原理是这样,首先控制IO P3.7输出低电平,
这样Q301导通,对C303进行充电,足够长的时间后,认为充电已经完成,稳定了。
4个输入输出IO可以对任何几路进行屏蔽,也可以采集那几路的状态。
转换开始,P3.7输出高电平,Q301关断,C303通过R303放电。
偶们知道,电容通过电阻放电的曲线是一个对数曲线
τ=RC=0.1u*1.3K=0.00013S=130uS
Ut=U0*e^(-t/τ),每过130uS电压降为原来的36.7879%
经过8.3τ后,电压降为原来的0.0249%,即1/4023.约12位分辨率
经历时间130*8.3=1079uS.
在电容上电压逐渐降低过程中,如果从高于其中允许的一路的电压变为低于,那么比较器就会翻转,然后就会触发INT0中断,这时读取计数值,就可计算得知那一路的电压值。


使用特权

评论回复
16
quakegod| | 2008-7-23 02:30 | 只看该作者

继续

误差分析
首先电阻和电容的精度直接影响系统的精度,
电阻误差1%的很好找,但是千分之一的精度很不好找,电容就更难找了,
好在并不要求他们两个都很精确,只要他们两个的乘积精确就可以了
所以电容用低温漂的校正电容,电阻用可调电阻
然后从输入端输入标准信号进行校正,校正后封死或换上固定电阻
另外,比较器的失调电压也会影响精度,
不过好在,比较器的最大失调电压才2mV,
约为5V电源电压的1/2500,只影响1位精度
另外比较器的输入偏置电流为25nA,在1.3K电阻上形成的压降只有32.5uV,4个比较器加在一起也只有130uV的电压,可以忽略不计。
还有一个就是定时准确度
单片机时钟为24MHz,晶震精度至少100PPM,可以忽略不计
关键在于程序上的中断反映时间。
1个机器周期为0.5uS,中断反映时间最大误差为8个机器周期,即4uS
e^4/τ=e^4/130=e^0.030769=1.0312.误差约3%,但是这个3%不是最大量程的3%,而是当前采样的3%,因为是对数采样,
即,如果计算结果是4V,那么误差就是3%,即0.12V,
    如果计算结果是400mV,那么误差也是3%,即12mV
所以对精度没有影响,只有计时误差达到总时间1079的1/12时,即90uS才会影响1位分辨率.误差50%.
对于其他误差,比如前级的峰值滤波,还有电源电压波动等,在这里暂不做分析

使用特权

评论回复
17
程序匠人| | 2008-7-23 08:34 | 只看该作者

quakegod: 你把第14到16楼的贴整理一下,就可得裤子一条

quakegod: 你把第14到16楼的贴整理在一起,就可得裤子一条

使用特权

评论回复
18
pheavecn| | 2008-7-23 08:46 | 只看该作者

用了这么多lm324/lm339,弄个sigma-delta多好。

1个IO就可以支持sigma-delta测量了。

使用特权

评论回复
19
yewuyi| | 2008-7-23 08:48 | 只看该作者

51的话加个三极管就可以做了

效果差不多,做的好的话,可以做到12BIT的分辨率

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

7

帖子

0

粉丝