搜索
bottom↓
回复: 61

想不通了,C8051F060 16位ADC值,跳动高达500

[复制链接]

出130入129汤圆

发表于 2012-5-14 09:04:42 | 显示全部楼层 |阅读模式
本帖最后由 68336016 于 2012-5-14 09:06 编辑

C8051F060,双层板,只在底面对模拟地和数字分别敷铜,之间单点0欧姆相连。
ADC外接基准源是REF43,在输入端接的是基准源用电阻分压出来的1点几V。(参考源后跟随运放,然后给ADC供电,也接到分压电阻,电流估计足够的

我用DMA模式,ADC用定时器3溢出启动转换,频率100kHz,ADC的转换时钟21-300个系统周期都试过。转换时间应该完全足够的
连续采样1024个点,结果跳动非常大,甚至5,600个值。
不过将这1024个值做平均值,结果还算稳定,跳动1,2个值。

实在想不明白,为什么会跳动如此之大,看网上很多人不做滤波也就跳几个数

1024次平均值:32760
最小值:32530
最大值:32987
最大值-最小值:457

1024次平均值:32761
最小值:32629
最大值:32933
最大值-最小值:304

1024次平均值:32760
最小值:32587
最大值:33003
最大值-最小值:416

1024次平均值:32761
最小值:32639
最大值:32880
最大值-最小值:241

1024次平均值:32761
最小值:32632
最大值:32984
最大值-最小值:352

1024次平均值:32761
最小值:32615
最大值:32949
最大值-最小值:334

1024次平均值:32760
最小值:32466
最大值:32971
最大值-最小值:505

1024次平均值:32760
最小值:32522
最大值:32986
最大值-最小值:464

1024次平均值:32760
最小值:32554
最大值:32896
最大值-最小值:342

1024次平均值:32761
最小值:32630
最大值:32923
最大值-最小值:293

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出130入129汤圆

 楼主| 发表于 2012-5-14 20:57:38 | 显示全部楼层
本帖最后由 68336016 于 2012-5-16 20:03 编辑

中午试验了下,把基准源改成内置的,结果都差不多,跳动也是非常巨大
因为AIN0引脚旁边就是AGND引脚,我直接拿镊子短路2个引脚,这样每次出来的值可以保持在0和1之间,偶尔会跳出16,18这样的大值(100个值出现1,2次),1024次平均后是0
但是AIN0经过不到1cm长的铜膜与AGND短路,读出来的AD值就在1,20左右跳动,偶尔有接近200的大值,1024次平均后是11。

把基准源引脚跟AIN0短接,读出来的AD平均值是65300左右,最大值有65535.

用其他单片机如STM32,虽然是12位,但是随便布线,单次采样的AD值跳动也非常小,
这个C8051F060能跳到4,500之多,令人费解

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出130入129汤圆

 楼主| 发表于 2012-5-16 20:04:41 | 显示全部楼层
更新了下图片,图中的极大值和极小值明显是错的,不知道有没有可能干扰导致

出0入0汤圆

发表于 2012-5-17 07:58:40 | 显示全部楼层
程序上做个比较,去掉超过范围的,最大、最小,再求加权平均值

出0入0汤圆

发表于 2012-5-17 08:01:34 | 显示全部楼层
建议LZ搞个,原厂的DEMO板子,对比下。

出130入129汤圆

 楼主| 发表于 2012-5-17 09:20:42 | 显示全部楼层
jetli 发表于 2012-5-17 07:58
程序上做个比较,去掉超过范围的,最大、最小,再求加权平均值

AD值没有一个确切范围,因为传感器信号不断变化

但是你看图形,还是很符合那正态分布的规律

C8051F060里面RAM有限,所以我现在之做256或者1024次平均值,基本后面跳动4,5个数,勉强达到合格的14位是问题。

如果做一次排序,分别去掉最大10多个,最小10多个,剩下的做平均值,估计效果会更好一些,不过单片机要做其他事情,速度和内存不太够

出130入129汤圆

 楼主| 发表于 2012-5-17 09:29:50 | 显示全部楼层
sufeila 发表于 2012-5-17 08:01
建议LZ搞个,原厂的DEMO板子,对比下。

特地买一块原厂板来验证,有些划不来,可能上千
这个芯片网上资料比较少,新华龙的论坛也是很难打开,不然看看别人应用起来有什么问题。
51芯片,程序上都是比较简单的,所以也只能怀疑自己PCB布得差,或者芯片本来就这样性能。
很简单的一个块板,感觉布线还算不错的了,基准源稳定性也没问题。

不过好在现在多次采用求平均值后的结果勉强能符合使用要求,只不过不搞清这跳动如此之大原因还是不踏实

出0入0汤圆

发表于 2012-5-17 10:20:07 | 显示全部楼层
(1)找个标准的电压源做输入测试,比如标准的3.3V。
(2)这款芯片的AD基准电压源哪来的?如果是外部的,用示波器看下有没纹波。如果是内部基准查看下MCU输入电源。

出130入129汤圆

 楼主| 发表于 2012-5-17 22:12:51 | 显示全部楼层
本帖最后由 68336016 于 2012-5-17 22:41 编辑

我是利用DMA,每次将1024个数据放到片内的XRAM中,然后串口把1024个数据发送到电脑上。
测量电压是2个0.1%电阻分压,理论在在32768附近

5k速率采集结果,每次均值接近


10k采集结果,每次均值接近


50k采集结果,每次均值接近,但是跟正常值相比偏小
[

100k采集结果,每次均值接近,但是结果很奇怪,分布在均值两侧


250k采集结果,每次均值差别很大,一次大一次小


500k采集结果,每次均值接近

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出130入129汤圆

 楼主| 发表于 2012-5-18 00:01:55 | 显示全部楼层
ADC0,ADC1同时用DMA传输,得到的图形更是奇怪

10kHz                ADC0                            ADC1




50kHz                ADC0                            ADC1



500kHz              ADC0                            ADC1

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入42汤圆

发表于 2012-5-18 00:25:09 | 显示全部楼层
主机是布线与去耦,这个芯片的AD还是很好的。
原厂的DEMO板在n年前我记得是199元,可以先试试的。

出130入129汤圆

 楼主| 发表于 2012-5-18 06:34:43 | 显示全部楼层
本帖最后由 68336016 于 2012-5-18 06:48 编辑
cocom 发表于 2012-5-18 00:25
主机是布线与去耦,这个芯片的AD还是很好的。
原厂的DEMO板在n年前我记得是199元,可以先试试的。 ...


C8051F060TBC  300块,还是淘宝价,新华龙似乎不卖板子了

出0入0汤圆

发表于 2012-5-18 06:59:53 | 显示全部楼层
是否可以考虑以下两个问题:
1、采集BUFFER是否是2个轮流切换的,DMA数据离散有可能是前后两次的AD结果错位了。

2、采集速度提高后值偏小,或是分段是否降低被采源的阻抗,或是提高AD输入端的阻抗。

出130入129汤圆

 楼主| 发表于 2012-5-18 07:07:38 | 显示全部楼层
本帖最后由 68336016 于 2012-5-18 07:15 编辑
DIDADI 发表于 2012-5-18 06:59
是否可以考虑以下两个问题:
1、采集BUFFER是否是2个轮流切换的,DMA数据离散有可能是前后两次的AD结果错位 ...


1。两个ADC数据没错位,我分别测的是2个不同电压,图中ADC0是36000多的,ADC1是32000多的,虽然看到有上下分岔的那种图,但是它总体平均值又是接近准确值的。
而且我单个ADC0测量时候,不同频率时候,也出现了分叉成上下的现象

2。信号源是OP07出来的,阻抗足够小,通过一个15欧姆电阻连接到芯片ADC输入引脚,ADC输入引脚同时2200pF接地。是参考原厂开发板选的电阻电容参数,也没去计算。

在不同采样频率下,结果稍微有偏差10多20,也算可以接受,但是某些频率结果相差100多  100/65536已经误差不小了

出130入129汤圆

 楼主| 发表于 2012-5-18 22:18:06 | 显示全部楼层
本帖最后由 68336016 于 2012-5-18 22:28 编辑

继续检查原因

今天把模拟地和数字之间的0欧姆电阻去掉,想测试两个地之间电流,意外发现没有0欧姆电阻芯片AD功能还工作。
最后逐个芯片引脚检查,发现C8051F060的实际引脚跟PDF(中文和英文)似乎有些对不上。
PIN23在文档上是AGND,但是实际跟其他几个DGND是相连的,(约16欧姆)其他AGND引脚无此现象。
找了另外2个没焊接的芯片测量也是一样(内部的AGND引脚是不连通的)

出130入129汤圆

 楼主| 发表于 2012-5-20 11:16:16 | 显示全部楼层
整理了下数据抓图








本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2012-5-23 12:01:38 来自手机 | 显示全部楼层
c8051f060你也用 新华龙的片子都是挺差的,看起来外设很多 但是都很次 i该淘汰了  用lgt单片机 秒杀新华龙的

出0入0汤圆

发表于 2012-5-23 12:11:00 | 显示全部楼层
受到干扰时更惨,根本没法用。建议舍弃掉此芯片。

出0入0汤圆

发表于 2012-5-23 12:11:34 | 显示全部楼层
呵呵。

出130入129汤圆

 楼主| 发表于 2012-5-23 12:30:19 来自手机 | 显示全部楼层
csdnct 发表于 2012-5-23 12:01  c8051f060你也用 新华龙的片子都是挺差的,看起来外设很多 但是都很次 i该淘汰了 用lgt单片机 秒杀新华龙 ...

带16位ad,而且采样速度快单片机很少
看你没用过lgt,这可没有16位ad

出130入129汤圆

 楼主| 发表于 2012-5-23 12:33:58 来自手机 | 显示全部楼层
wahuahua 发表于 2012-5-23 12:11  受到干扰时更惨,根本没法用。建议舍弃掉此芯片。

我把在ad前面的一阶滤波电容改成100nf,现在波动小了一些,正负20lsb

出0入0汤圆

发表于 2012-5-23 13:03:36 | 显示全部楼层
关注一下

出0入0汤圆

发表于 2012-5-23 13:08:48 | 显示全部楼层
16BIT ADC PCB和线路设计要点小工夫
无图无真相

出0入0汤圆

发表于 2012-5-23 13:50:26 | 显示全部楼层
依我经验来看,遇到问题先不要怀疑人家芯片的问题,先找找自己的问题先吧。

出0入0汤圆

发表于 2012-5-23 13:59:54 | 显示全部楼层
LZ能否放个PCB图,让大家看看。看看高手们的评价

我也打算用C8051F350。

出0入0汤圆

发表于 2012-5-23 15:09:18 | 显示全部楼层
用示波器确认下,基准源,输入信号有没有被干扰?
AVR的芯片不还建议为了降低A/D转换时的数字噪声,可以让系统休眠在转换吗?

出130入129汤圆

 楼主| 发表于 2012-5-23 18:29:39 | 显示全部楼层
蜂巢 发表于 2012-5-23 13:50
依我经验来看,遇到问题先不要怀疑人家芯片的问题,先找找自己的问题先吧。 ...

楼主帖子内容有更新

出130入129汤圆

 楼主| 发表于 2012-5-23 18:30:18 | 显示全部楼层
wangguanfu 发表于 2012-5-23 13:08
16BIT ADC PCB和线路设计要点小工夫
无图无真相

帖子有更新,请指教

出130入129汤圆

 楼主| 发表于 2012-5-23 18:30:48 | 显示全部楼层
sufeila 发表于 2012-5-23 13:59
LZ能否放个PCB图,让大家看看。看看高手们的评价

我也打算用C8051F350。

楼主帖子内容有更新

出130入129汤圆

 楼主| 发表于 2012-5-23 18:31:03 | 显示全部楼层
本帖最后由 68336016 于 2012-5-23 19:03 编辑

事先说明情况:虽然不同采样频率,不同输入端电容量大小会导致结果有差别,
但是相同条件情况下,我做1024次平均值得到的结果重复性很不错,不管是USB供电还是外接开关电源,平均值之间的波动一般1,2个数字,偶尔大点4,5个数值 (对于65536量程来说,也算不错了,只是单次测量跳动大


不擅长画PCB,将就着看









自己这几天在折腾C8051F060的16位AD,在排除了各种原因后,发现AD值波动与模拟输入端的电容容量大小关系挺大的。
一阶低通滤波器截止频率可以计算出来,但是其中的电容量大小这跟采样频率之间的关系是怎样的呢?电容大,放电慢,会不会导致跟不上外接信号的变化?

运放经过15欧姆电阻和一个电容接到AD的模拟输入端(官方的开发板是15欧姆和2.2nF,采样频率100kHz,在我自己板子波动太大
传感器信号变化缓慢,每隔10ms采集一次数据,但是每次以100kHz速度采样1024个点做平均值。


R=15,C=2.2nF,采样频率100kHz,AD值波动150以上

前天 23:48 上传
下载附件 (174.68 KB)




R=15,C=10nF,采样频率100kHz,AD值波动40左右

前天 23:48 上传
下载附件 (169.74 KB)




R=15,C=100nF,采样频率100kHz,AD值波动20左右

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出130入129汤圆

 楼主| 发表于 2012-5-23 19:00:55 | 显示全部楼层
pt001 发表于 2012-5-23 15:09
用示波器确认下,基准源,输入信号有没有被干扰?
AVR的芯片不还建议为了降低A/D转换时的数字噪声,可以让 ...

用2个精密电阻分压进来也是一样波动很大

出0入0汤圆

发表于 2012-5-23 19:25:31 | 显示全部楼层
68336016 发表于 2012-5-23 19:00
用2个精密电阻分压进来也是一样波动很大

即便是分压,也要确定这个被测信号的波动范围... 被分压的这个电压也会有的纹波的,看看是否在误差范围内...

出130入129汤圆

 楼主| 发表于 2012-5-23 19:34:16 | 显示全部楼层
xiaoya1945 发表于 2012-5-23 19:25
即便是分压,也要确定这个被测信号的波动范围... 被分压的这个电压也会有的纹波的,看看是否在误差范围内 ...

REF43出来的电压,稳定性和精度比较好,示波器的分辨率也就只能看到直线,细微的噪声都是示波器自身的了

出0入0汤圆

发表于 2012-5-23 19:40:38 | 显示全部楼层
能否用电池供电来试试?

出0入0汤圆

发表于 2012-5-23 19:46:52 | 显示全部楼层
wzyllgx 发表于 2012-5-23 19:40
能否用电池供电来试试?

好像已经不是被测源的问题了,现在有可能是采样频率与输入端电容的问题,或者其他干扰,比如工频干扰...

出0入0汤圆

发表于 2012-5-23 19:51:46 | 显示全部楼层
原来用过F120的原装板做过实验
跳动还是比较小的
12位AD,测量5V,只有最后一位跳动

出0入0汤圆

发表于 2012-5-23 20:12:00 | 显示全部楼层
68336016 发表于 2012-5-23 18:31
事先说明情况:虽然不同采样频率,不同输入端电容量大小会导致结果有差别,
但是相同条件情况下,我做1024 ...

如果将采样频率当做干扰信号滤除,那么接100nF的低通滤波截止频率(F=1/2πRC)为106KHz,这只是一种假设,LZ有木有试过最佳的电容值是多少?

出130入129汤圆

 楼主| 发表于 2012-5-23 20:31:38 | 显示全部楼层
本帖最后由 68336016 于 2012-5-23 20:53 编辑
xiaoya1945 发表于 2012-5-23 20:12
如果将采样频率当做干扰信号滤除,那么接100nF的低通滤波截止频率(F=1/2πRC)为106KHz,这只是一种假设 ...


其实这里跟一阶低通滤波频率有关系么?每次采样是我这个电容快速向芯片内采样电容充电。
而我这个电容是靠运放经过电阻给它充电,运放对这个电容充放电频率跟一阶低通滤波器频率之间如何理解呢?难道会跟采样频率一样?电容向采样电容充电,然后运放立刻向电容充电?

我的万用表只是4位半,因此靠万用表来判断哪个数值更准确是行不通了。

--------------------------------------------------------------------------------------------------------------------------------------------------------------
我在两个不同通道用不同电容,采用好几种采样频率,
电容大的结果比较稳定,电容小的结果会随着采样频率变化

              10nf ADC0         100nf ADC1
100kHz     32764               32772
200kHz     32751               32772
250kHz     32755               32772
500kHz     32762               32772

--------------------------------------------------------------------------------------------------------------------------------------------------------------
相同采样频率下 电容大的结果  <  电容小的结果
             2.2nf ADC0         2.2nf ADC1
100kHz     32768               32779

              100nf ADC0         100nf ADC1
100kHz     32761               32773

出0入0汤圆

发表于 2012-5-23 20:43:55 | 显示全部楼层
楼主对问题的“穷追猛打”精神不错。

出130入129汤圆

 楼主| 发表于 2012-5-23 20:59:20 | 显示全部楼层
DIDADI 发表于 2012-5-23 20:43
楼主对问题的“穷追猛打”精神不错。

30几岁的人了,半路出家自学的电子,模电有关的东西实在抽象。
其实我做平均值滤波后,再调整下线性,偏移,也能满足使用要求。
但是总想搞清楚怎么回事才放心,网上搜索很多地方,也有不少人问过 AD前一阶低通滤波器的电容量大小跟AD值关系的问题,但是都没有比较好的答案。

出0入0汤圆

发表于 2012-5-23 22:27:31 | 显示全部楼层
我认为就是线路白噪声的原因而已,楼主的实验结果也显示低通滤波时间常数越高AD波动越小,显然是线路上白噪声的问题。
关于低通滤波,按照我的理解,时间常数t=RC,都知道给RC滤波器输入阶跃信号,输出电压上升到95%需要t=3RC,算算可知如果需要电压上升到65535/65536以上的话需要t=ln(1/65536)*RC = 11.1RC,也就是要AD端的电压上升到16位AD分辨率以内需要11.1RC。比如10Ohm,1uF滤波,输入5V的阶跃信号,AD管脚那边要等10×1×1E-6×11.1 = 0.111ms电压才能上升到16bitAD的分辨率以内。
不知道楼主需要多大的响应速度,要是要求不高,几毫秒十几毫秒的,完全可以用一阶RC滤波,时间常数再高点都不要紧,把滤波器的电阻和电容尽量靠近AD管脚,每次采样的时候采20个数,排序,去掉最高的几个和最低的几个,剩下的求平均,这么来估计跳得也就不多了,计算量也比采1k次然后求平均要小些

出0入0汤圆

发表于 2012-5-23 22:39:27 | 显示全部楼层

相同采样频率下 电容大的结果  <  电容小的结果
             2.2nf ADC0         2.2nf ADC1
100kHz     32768               32779

              100nf ADC0         100nf ADC1
100kHz     32761               32773


不过感觉这个比较奇怪...照道理电容小的由于采样的瞬间电流流进AD转换器,滤波电容小的电压应该掉得更多,AD转换值更小才对,可为什么现在的结果却是滤波电容大的AD值小呢...

出130入129汤圆

 楼主| 发表于 2012-5-23 22:45:57 | 显示全部楼层
bigallium 发表于 2012-5-23 22:27
我认为就是线路白噪声的原因而已,楼主的实验结果也显示低通滤波时间常数越高AD波动越小,显然是线路上白噪 ...

有理论知识计算就是强

我是要求间隔10ms采集一次传感器数据(期间信号变化幅度不会超过2mV,很缓慢的),传感器经过OP07跟随器,然后一阶滤波到达AD。
为了避免数据跳变太多导致结果偏差,所以我每次就采1024次,刚好也把芯片内的XRAM利用上。

我试过256次平均值,比1024稍微波动大1,2个数值。单纯去掉一个最大最小值,效果没什么变化,主要极大值数量不少,要是去掉10多20个极大极小值,然后平均,应该会很好,不过单片机太费时了

出130入129汤圆

 楼主| 发表于 2012-5-23 22:47:53 | 显示全部楼层
本帖最后由 68336016 于 2012-5-23 23:13 编辑
bigallium 发表于 2012-5-23 22:39

相同采样频率下 电容大的结果  <  电容小的结果
             2.2nf ADC0         2.2nf ADC1


上面的数值我是至少重复测量4,5次以上得到的,而且能跟几天前相同参数得到的结果保持一致。


           100nf ADC0         100nf ADC1
100kHz     32761               32773
--------------------------------------------------------
根据4位半万用表读数进行估算得到的AD值偏小8,9个数值
               32751               32766
ADC0 = (12498/25009)*65536=32751
ADC0 = (12504/25009)*65536=32766

我记得昨晚在21IC上见到一个帖子,STM32采集,也是类似现象,有104电容,AD值会偏小2,3个数值

出0入0汤圆

发表于 2012-5-23 23:56:09 | 显示全部楼层
68336016 发表于 2012-5-23 20:59
30几岁的人了,半路出家自学的电子,模电有关的东西实在抽象。
其实我做平均值滤波后,再调整下线性,偏 ...

我建议你试试<80pF的负载电容,也就是你说的那个ADC输入的那个电容,不要用太大的。

出0入0汤圆

发表于 2012-8-16 21:28:50 | 显示全部楼层
mark!!!     

出0入0汤圆

发表于 2013-5-7 15:58:54 | 显示全部楼层
佩服楼主 佩服

出0入0汤圆

发表于 2013-5-7 17:06:40 | 显示全部楼层
会不会是大的电容漏电流以及等效电阻大?   大小两个电容的封装是一样的么?

出130入129汤圆

 楼主| 发表于 2013-5-7 17:19:12 | 显示全部楼层
wx85105157 发表于 2013-5-7 17:06
会不会是大的电容漏电流以及等效电阻大?   大小两个电容的封装是一样的么? ...

这是去年的帖子了,当时电容都是一样0805封装的,虽然没搞清楚最终原因,但是将电容加大了些,得到结果跳动 小很多,也满足使用要求了。

出0入0汤圆

发表于 2013-5-22 08:37:46 | 显示全部楼层
68336016 发表于 2013-5-7 17:19
这是去年的帖子了,当时电容都是一样0805封装的,虽然没搞清楚最终原因,但是将电容加大了些,得到结果跳 ...

楼主说的加大是指电容值加大吧?我用的是F330,10位AD,采样还算可以,偶尔会有一位的波动,恭喜楼主解决了问题,但是楼主当时有没有测LDO的PSRR?

出0入0汤圆

发表于 2013-11-28 17:39:12 | 显示全部楼层
这是值得顶起的帖子,粤北三区(68336016 )大侠你好,请赐教一个问题:我在调试C8051F060的DMA 不知道哪里出了问题,搞了两天没找到(应该是配置问题),是否有什么主意事项?我使用定时器3启动AD,然后在AD中断中取数的方式运行很正常,踩到的值也很问题,但是使用DMA就是出不了数。谢谢!

出130入129汤圆

 楼主| 发表于 2013-11-28 19:15:26 | 显示全部楼层
yyk20130902 发表于 2013-11-28 17:39
这是值得顶起的帖子,粤北三区(68336016 )大侠你好,请赐教一个问题:我在调试C8051F060的DMA 不知道哪里 ...

DMA配置使用好像还是比较简单,我都是参考例子上面的。
这是我当时用的配置和中断函数,你可以参考一下

  1. //-----------------------------------------------------------------------------
  2. // DMA0_Init
  3. //-----------------------------------------------------------------------------
  4. void DMA0_Init (void)
  5. {
  6.    u8 SFRPAGE_SAVE = SFRPAGE;

  7.    SFRPAGE = DMA0_PAGE;
  8.    DMA0CN = 0x00;                      // 禁止DMA0
  9.    DMA0DA = XRAM_START_ADD;            // 设置XRAM起始地址为0x0000
  10.    DMA0CT = NUM_SAMPLES - 1;           // DMA0循环计数器极限值1024
  11.    DMA0IPT = 0x00;                     // DMA0指令写地址寄存器
  12.    DMA0IDT = DMA0_GET_ADC01;           // 取ADC0和ADC1数据,并写入XRAM
  13.    DMA0IDT = DMA0_END_OF_OP;                   // 操作结束

  14.    DMA0BND = 0x00;                     // 指令起始地址
  15.    EIE2 |= 0x80;                                                //使能DMA中断
  16.    DMA0CN = 0xA0;                      // 模式1,启动DMA0
  17.    SFRPAGE = SFRPAGE_SAVE;     
  18. }
复制代码


  1. //-----------------------------------------------------------------------------
  2. // DMA0_Interrupt  负责不断更新ADC0,ADC1数据
  3. //-----------------------------------------------------------------------------
  4. void DMA0_Interrupt (void) interrupt 21
  5. {
  6.         u16 i;
  7.         u32 TempValue = 0;
  8.         DMA0INT = 0;
  9.         read_ptr = XRAM_START_ADD;
  10.         LeftADC1Sum = 0;
  11.         RightADC0Sum = 0;
  12.        
  13.         for (i=0; i<NUM_SAMPLES; i++)
  14.         {       
  15.                 RightADC0Sum += *read_ptr;
  16.                 LeftADC1Sum += *(read_ptr+1);
  17.                 read_ptr = read_ptr+2;
  18.         }

  19.         LeftVoltage = 25000 * (LeftADC1Sum >> 8) / 65536 -12500 + 0x8000;
  20.         RightVoltage = 25000 * (RightADC0Sum >> 8) / 65536 -12500 + 0x8000;

  21.         SFRPAGE = ADC2_PAGE;
  22.         AD2INT        = 0;
  23.         AD2BUSY = 1;
  24.         while (!AD2INT);
  25.         if (amux_input++ == 0)
  26.         {               
  27.                 RoadVoltage = (2500L * ADC2) / 1024;
  28.                 AMX2SL = amux_input;       
  29.         }
  30.         else
  31.         {
  32.                 AirVoltage = (2500L * ADC2) / 1024;
  33.                 amux_input = 0;
  34.                 AMX2SL = amux_input;       
  35.         }
  36.         DMA0_Init ();
  37. }
复制代码

出0入0汤圆

发表于 2013-11-28 20:42:31 | 显示全部楼层
感谢你的回复,我的程序一运行,xdata里面就全是ff,我再对照你的程序查查程序看;

出0入0汤圆

发表于 2013-11-28 21:01:09 | 显示全部楼层
lz的上位机软件是什么怒求分享。

出130入129汤圆

 楼主| 发表于 2013-11-28 22:18:30 | 显示全部楼层
ttoto 发表于 2013-11-28 21:01
lz的上位机软件是什么怒求分享。

LZ位几张图是CurveExpert,后面那些都是EXCEL来的

出0入0汤圆

发表于 2013-11-29 08:29:58 | 显示全部楼层
68336016 发表于 2013-11-28 22:18
LZ位几张图是CurveExpert,后面那些都是EXCEL来的

wow, cool,最近刚好要用类似的软件。
ps:基于pyqwt的orange真心猛。

出0入0汤圆

发表于 2013-12-4 18:01:48 | 显示全部楼层
感谢粤北三区(68336016 )大侠。问题后来解决了,通过你的提示,确认DMA配置没有问题,问题出在 外部存储器接口配置 EMI0CF上,学艺不精配到片外XRAM上,当时每次读回的0xFF;C8051F060 1M的AD果然很给力。

出0入0汤圆

发表于 2019-1-16 23:33:45 | 显示全部楼层
细节没看明白,不过F060内部16-bit ADC是SAR型的,因此输入和参考端都有脉冲电流,需要经过运放缓冲外加RC来吸收。看情况参考端好像没有这么做?

出130入129汤圆

 楼主| 发表于 2019-1-17 08:48:39 | 显示全部楼层
heize 发表于 2019-1-16 23:33
细节没看明白,不过F060内部16-bit ADC是SAR型的,因此输入和参考端都有脉冲电流,需要经过运放缓冲外加RC ...

当年的图纸,输入跟官方参考图差不多

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2019-1-17 17:47:07 | 显示全部楼层
68336016 发表于 2019-1-17 08:48
当年的图纸,输入跟官方参考图差不多

好的,多谢。
这个是输入端,有加缓冲。不知道参考电压有没有加?

出130入129汤圆

 楼主| 发表于 2019-1-17 18:08:36 | 显示全部楼层
heize 发表于 2019-1-17 17:47
好的,多谢。
这个是输入端,有加缓冲。不知道参考电压有没有加?

基准源是REF43,加了跟随器加大电流,除了给芯片当参考电源,同时接到AIN输入端上门的电阻上。
这样用法,当时也是参考NI的一些采集卡电路的。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2019-1-17 19:24:17 | 显示全部楼层
68336016 发表于 2019-1-17 18:08
基准源是REF43,加了跟随器加大电流,除了给芯片当参考电源,同时接到AIN输入端上门的电阻上。
这样用法 ...

那就不太懂了。难道是这里的运放负载电容太大了,没串联隔离电阻,导致振荡?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 04:30

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表