各位帮忙分析啊 C8051F350 AD 线性太差了
用c8051f350做 直流100mv电压采集,线性非常差啊 误差高达满量程的1%。是什么地方出了问题呢? 还是这个芯片本身就很差劲?各位帮忙分析啊? 自己顶顶顶顶顶顶顶顶 350的线性不用怀疑,但是我怀疑你的电路和用法。 上电路看看,你是使用的内部PGA吧,做偏移和增益校准没? PGA 16 做了内部校准
void ADC_Init_copy() //
{
REF0CN = 0x03; //ʹÄÜÄÚ²¿»ù×¼£»
ADC0CN = 0x04; //ADC¿ØÖƼĴæÆ÷£ºµ¥¼«ÐÔ32 ±¶ÔöÒ棻05
ADC0CF = 0x00; //ADCÅäÖüĴæÆ÷£ºÊä³ö½á¹ûÑ¡Ôñ00£¬since£»
ADC0MD = 0x80; //ADC·½Ê½¼Ä´æÆ÷£ºÊ¹ÄÜADC £¬ÔÚ¿ÕÏз½Ê½£»
ADC0CLK = 0x00; //ʱÖÓ¿ØÖÆ£º00=2.4576m
ADC0DECH= 0x07; //0x077F£¬³éÈ¡±È£º1919+1£»
ADC0DECL= 0x7f;
ADC0BUF = 0x00; //»º³åÆ÷Ñ¡Ôñ£º
ADC0MUX = 0x08; //ADC0²ÉÑùͨµÀ08£¨AIN+=AIN0.1£»AIN-=AGND£©
ADC0STA = 0x00; //ÇåADC0int״̬¼Ä´æÆ÷
//È«ÄÚ²¿Ð£×¼
ADC0MD = 0x81; // È«ÄÚ²¿Ð£×¼£¨Æ«ÒÆ¡¢Ð±ÂÊ£©
while (AD0CALC != 1){ };
AD0INT = 0; // Clear ADC0 conversion complete flag
EIE1 |= 0x08; // Enable ADC0 Interrupts
ADC0MD= 0x83; // Enable the ADC0 (IDLE Mode)
} // ADC0ÖжÏ
//-----------------------------------------------------------------------------
//
void ADC0_ISR(void) interrupt 10
{
static uchar sampINDEX;
uchar p_sn;
while(!AD0INT); // Wait till conversion complete
AD0INT = 0; // Clear ADC0 conversion complete flag
//Copy the output value of the ADC
rawValue.Byte = 0x00;
rawValue.Byte = (unsigned char)ADC0H;
rawValue.Byte = (unsigned char)ADC0M;
rawValue.Byte = (unsigned char)ADC0L;
CHvalue_back=ADC0MUX;
p_sn=INTY;
if(++sampINDEX>4)
{
ADC0MD=0x80; //ADC·½Ê½¼Ä´æÆ÷£ºÊ¹ÄÜADC £¬ÔÚ¿ÕÏз½Ê½
if(ADC0MUX==CH0)
{
if(p_sn>7)
{
ADC0CN = 0x04; //ADC¿ØÖƼĴæÆ÷£ºµ¥¼«ÐÔ32 ±¶ÔöÒ棻05
ADC0MUX=CH1;
}
else
{
ADC0CN = 0x00; //ADC¿ØÖƼĴæÆ÷£ºµ¥¼«ÐÔ32 ±¶ÔöÒ棻05
ADC0MUX=CH2_t;
}
}
else
{
ADC0CN = 0x04; //ADC¿ØÖƼĴæÆ÷£ºµ¥¼«ÐÔ32 ±¶ÔöÒ棻05
ADC0MUX=CH0;
}
ADC0STA = 0x00; //ÇåADC0int״̬¼Ä´æÆ÷
EIE1 |= 0x08; // Enable ADC0 Interrupts
ADC0MD= 0x83; // Enable the ADC0 (IDLE Mode)
sampINDEX=0;
}
if(ADsampCounter<200)++ADsampCounter;
// EA=1;
} 稳定性和 重复性没有问题。
就是线性差啊
郁闷!!! 3楼和 4 楼 的 朋友在吗 {:handshake:} 本帖最后由 68336016 于 2012-7-8 13:02 编辑
我没用过F350,但是用过F060,
线性不太好,一个芯片内的ADC1,ADC2线性也会差别挺大的。
通过几个寄存器的参数修正下,最后结果还可以
测量20多V电压(2.5V参考源,前端电阻分压),得到结果跟4位半万用表对比也就误差几个mV 楼主既然这芯片的线性都超1%了,就换一款芯片吧,或者外挂ADC吧 电路很简单就是测试ADC 专门化的。 我是用AN0.0测试100mv ,其他通道没有接信号,结果 线性很差
单端输入
本帖最后由 amking 于 2012-7-8 14:43 编辑郁闷 还是解决不了啊在线等了
有用过350的 指点啊
谢谢 本帖最后由 marshallemon 于 2012-7-8 15:59 编辑
看你的电路你是使用的内部的基准对吗?F350的内部基准的并非准确的,另外我感觉内部PGA的线性度还是比较差的,我在用时感觉好像这个片子的生产厂家把线性做了定点的校正,但这个校准把这个片子搞的整个范围内不连续了,
我记得我当时用的应该是PGa=32,我需要采集的信号从0~78mV 15楼的 谢谢你
问一下,你用PGA=32,是外部基准吗? 线性度 怎么样?
另外:内部校准 有必要用吗? 难得是用了PGA 导致线性差的?
迷茫啊 3楼 的看看电路有问题吗?
请指教 本帖最后由 marshallemon 于 2012-7-8 17:37 编辑
amking 发表于 2012-7-8 17:07 static/image/common/back.gif
15楼的 谢谢你
问一下,你用PGA=32,是外部基准吗? 线性度 怎么样?
另外:内部校准 有必要用吗? 难得 ...
使用内部基准,内部基准不准,会影响线性,但只是一个系数的问题,基准不会造成非线性,使用外部OP的线性会比使用内部PGA要好,另外我感觉西格玛得他型的AD线性都 不太 好,需要校准的,不知道你的100mV是怎么提供的,使用内部pga,会造成输入阻抗的降低,这个也是会影响线性的,把输入缓冲打开再试试看线性会不会改善
如果有条件我建议还是做系统的校准,自校准的过程是在PGA=1的情况下做的,我看ADS124X系列是这样做的自校准,但F350说的好像不是如此,我对此有点怀疑 输入缓冲也使用过 没有什么明显改善。
marshallemon:你用350 测量 78mv 最后能达到什么精度,具体怎么使用的?
350的AD输入阻抗比较小,你测量小信号一定要注意。
电路里输入信号的那个10M上拉电阻干嘛用的?看不懂啊 10M是上拉电阻啊
ilikemcu:你用350 做到什么精度?怎么设置 的 参数
我把10M拿掉也是一样的差 {:dizzy:}350 也许选错了各位有什么经历 我是05年的春季用过一次350,因为我们用的是差分应用,精度实际测试线性至少在万分之一以上,而且我们是PGA=128. 努力了不一定会成功,但是不努力一定不会成功! 自己顶努力了不一定会成功,但是不努力一定不会成功! {:dizzy:} 怎么设置都一样
最后用多点校正,精度还凑合用{:sad:} 这个我试过,线性度绝对优于0.001%,不知楼主希望到多少才满意,这么便宜的一个芯片.
前端非常重要,我用3只op27组成
调制频率要精准
不要使用pga
基准要用外置的,我用的lm399
ADC工作时,什么串口,推挽的IO,等设备一律先关闭,以免影响精度
这样做的电压表随便可以4位半 28楼 你用差分 还是单端输入?
使用内部校准了吗?
我希望做到0.01%啊{:loveliness:} mark'{:smile:}
页:
[1]