a-fly 发表于 2011-7-20 08:45:33

8846A就是直接用7V作基准的,但是他的ADC过于复杂,用了3片4053作开关,时序、算法复杂,不如34401A的1片4053来的简洁。
其实对于自己构建的积分型ADC,基准无所谓采用几伏,7V可能可以省去2个匹配的电阻而已。

lilith 发表于 2011-7-20 08:57:13

引用第29楼lymex于2011-07-2001:05发表的:
看了视频,感觉这个表做的很不错,看来用LTC2400很适合手持表。
每测试一次不仅校零,同时校准7V的做法,当然很好,就怕太费时间。
10取8做平均,如果有另外辅助寄存器的话,也比较方便,类似滑动平均,但要排除随时更新的最大值、最小值。 images/back.gif



是这样的,本来只是要设计自动调零,是因为想直接把高阻抗满度值从 5V 扩展到大约 12V,但是高压且高阻输入的运放,如果不是斩波的往往失调比较大,因此设计了自动调零。然后发现常规手段获得的分压电阻,其比例的温度系数实在是很糟糕。个人业余玩玩可以申请凌特的精密网络电阻,但 VHD200 之类孪生电阻对就实在是太那个了,加之正好在研究对 3457A 的分压进行改进,以提高其测试 10V 稳定性的事情,就想到了每一次都做自校准啦

改进后的 3457A 测试视频(NPLC=10):
http://www.tudou.com/programs/view/4pgMkauio2c/

2400 进行一次 AD 转换需要的时间(50HZ 时)是 160ms,如果用我设想的滤波法,一次测量需要 30 次转换时间,就是 4.8 秒(实际上加上一些延时会更长,接近 6 秒),大约和使用 100 PLC 差不多,在 1uV 分辨率尺度看来这个速度也不算非常慢了,起码比一些台表还快哦 在单片机内存中划出 10 个 32 位寄存器估计还凑合,就是先入先出,还要每次排序,剔除最大最小值,这个在单片机上实现,比在电脑上实现难度就大很多了,目前还在头痛中。

xiaosun 发表于 2011-7-20 10:38:43

次测量需要 30 次转换时间,就是 4.8 秒(实际上加上一些延时会更长,接近 6 秒)
------------------------------------------------------------------------------------------------------------------
滤波算法改下会快很多,第11次采样用2-11的数据,第12次采样用3-12的数据。。。
剔除最大最小值在单片机上实现不复杂,我用ASM51写过4取2
流程是X=Y=AD10               ;X=MAX,Y=MIN
LOOP:          ADn>X, X=ADn
                      ADn<Y,Y=ADn
                     n+1
                     n!=10跳到LOOP
                  AD=(AD1+AD2...+AD10-X-Y)/8

xiaosun 发表于 2011-7-20 10:44:40

单片机我觉得51的也足够,运算量不大

lilith 发表于 2011-7-20 11:05:50

引用第32楼xiaosun于2011-07-2010:38发表的:
次测量需要 30 次转换时间,就是 4.8 秒(实际上加上一些延时会更长,接近 6 秒)
------------------------------------------------------------------------------------------------------------------
滤波算法改下会快很多,第11次采样用2-11的数据,第12次采样用3-12的数据。。。
剔除最大最小值在单片机上实现不复杂,我用ASM51写过4取2
流程是X=Y=AD10               ;X=MAX,Y=MIN
....... images/back.gif



对啊,那就是我说的,在内存中划出一块(10 个、每个 4 字节长)先入先出寄存器阿,这样第 12 次采样的时候,第 1、2 次的数据就被挤出寄存器了,只剩下 3-12 次的。

剔除最大最小值,有两个思路,一个是对原始数据,即 4 个字节(也可以简化为 3 个字节,实际上 2400 的转换结果是 28 位,外加 4 位状态位)一组,共 10 组的数据进行先入先出,然后对它们进行排序、剔除,末了将其转化为浮点数,进行平均(以及后期的调零、自校准)和输出结果。

一个是将每次的结果先转换为浮点数,再送入先入先出寄存器,然后对这堆浮点数排序,这样,那样,再那样。反正浮点数的长度也是 32 位...

问题是浮点数很不好处理,从 Byte() 数组向浮点数赋值,也非常非常非常的不好处理

lilith 发表于 2011-7-20 11:12:37

引用第33楼xiaosun于2011-07-2010:44发表的:
单片机我觉得51的也足够,运算量不大 images/back.gif



嗯,我亦认为 AVR 已足够处理,无须使用 32 位单片机并付出额外的学习精力

我刚才写了一小段程序判断处理周期和2400 转换周期的关系,设置为 50HZ 时,2400 转换一次需要 160ms,在循环读 8 次 2400 的时候,每次等待 2400 转换结束标志的时间是大约 162ms(没有使用精确定时器,粗略测试);而经过一次数据处理(8 点平均)、判断极性、输出到显示器上,则下一次等待时间只有 72ms,也就是说这些处理一次需要 90ms,所以如果要不间断地采样的话,算法上还是需要精巧一点,才能用 AVR 一类单片机,尽可能在 162ms 内完成一次完整的测量、处理、输出过程。
(目前设置的时钟为 8MHZ,平均算法均使用浮点数)

jj3055 发表于 2011-7-20 19:53:27

其实51用来做这种运算是很难的,AVR按照LILITH的说法,看来是够了。我的设想是一直产用32位运算,先测试7V电压,测试值除以标准值得到一个偏移量,然后测试电压得到的值再乘以这个偏移量,得到本次测试的结果,然后测试的结果输送到一个数组。最后不断的对数组数据进行处理,得到平均值输出。这样的运算对于8位机来说是致命的,RAM弄不好都紧张。

其实我早就想学32位机了,现在低端32位机的价格和8位都接近了。我的好几个设想都因为运算能力问题导致流产。反正早晚得学的。但是在这个年龄时间不是自己的。还真的没有像以前那样的精力来学了,估计我的学习过程会非常漫长。

lilith 发表于 2011-7-20 21:02:00

没有精力,也没有那个决心。还在学校的时候老师常说,趁现在你还能静下心来学东西,多学一点,以后出社会了就不会有那个心了。当时不同,现在懂也晚了

题外话:
我用的 AVR 编译器不支持 long 和 float 数组 惨了,要用 word 数组来存数据的话,如何进行排序找出最大最小值会很难

jj3055 发表于 2011-7-20 21:42:26

我用AVR从来都没有去试过long 更不用说flout了

jj3055 发表于 2011-7-20 21:46:39

我还从来没有试过AVR的long和float呢 。我现在正在找STM32的学习板。还有春风兄STM32用的不错,可以去麻烦他。趁这个暑假先学一下。

lilith 发表于 2011-7-20 22:17:31

引用第38楼jj3055于2011-07-2021:42发表的:
我用AVR从来都没有去试过long 更不用说flout了
images/back.gif


好吧,我用 word 和 byte 数组慢慢来好了

jackrao 发表于 2011-7-29 15:51:28

我一直用WINAVR,可以支持long和float的
页: 1 [2]
查看完整版本: 终于解决了LTZ1000宽频噪音过大的问题