用过MSP430内部12位ADC的请进,这个模块好像很不稳定。
使用MSP430F5438A的外围模块ADC12做温度采集,2.5V外部基准(由精密电阻分压得到)。采集的温度数据非常不稳定,最大相差10度。用了中值滤波算法之后稳定很多,但在同一个温度时也会在两个不同的值之间随机跳动。设置程序如下:unsigned char i;
P6SEL|=BIT0; // Enable A/D channel A0 ADC12CTL0=ADC12ON+ADC12SHT0_2; //+ADC12REFON+ADC12REF2_5V;
ADC12CTL1=ADC12SHP;//+ADC12SSEL_1; //+ADC12CSTARTADD3;
ADC12MCTL0=ADC12SREF_2; // Vr+=VeREF+ and Vr-=AVss
//ADC12CTL2=ADC12SR;
for(i=0;i<0x30;i++); // Delay for reference start-up
ADC12CTL0|=ADC12ENC; // Enable conversions 你应该看ad值变化范围 这个跟供电、布局布线都有关系 380121850 发表于 2012-4-2 14:52 static/image/common/back.gif
你应该看ad值变化范围
AD的变化看起来不大,但是经过公式计算转换成传感器的温度的时候就差了0.4度,这个是不允许的。 ringan865 发表于 2012-4-2 15:23 static/image/common/back.gif
这个跟供电、布局布线都有关系
用稳压电源供电,还加了滤波电容,布线有些地方是飞的导线,这个影响也这么大? 你用电阻分压还不如430内部的参考电压呢 同意楼上,电压分出来的参考电压稳定度一般都不能达到要求。可以先试试内部的,看看是否还是这样抖动。你的ADC大概有几位在跳,你换算成电压值,再看看你的PCB板达到要求没有。 上图分析 如果AD值变化不大,那证明你噪声影响不明显才是
会不会是你转换造成的精度丢失? 其实为什么不直接用温度芯片呢,也不贵 算法里面改进试试 把输入端对地短接,测量板子的系统噪声是多少!
这是你能做到的最好精度了!别的先不要谈。 同意6楼,确实不如用内部参考2.5V 参考电压都不是很稳定的,建议楼主测一下 594832359 发表于 2012-4-2 16:32 static/image/common/back.gif
AD的变化看起来不大,但是经过公式计算转换成传感器的温度的时候就差了0.4度,这个是不允许的。 ...
定义个数组,看下AD值变化大不。
看你的回复,AD值变化不大,会不会是计算公式的问题? 不懂。。顶一下!!!!{:smile:} 像这种情况,首先保证参考电压稳定,然后传感器过来的信号是否是线性的,如果不是那就需要软件进行补偿了,很多模拟信号的传感器输出受环境影响 觉得还是用430内部的参考电压比较靠谱! dadongleilei 发表于 2012-4-16 20:40 static/image/common/back.gif
觉得还是用430内部的参考电压比较靠谱!
可是内部只能选择1.5V或者2.5V或者3.3V,不够灵活,不能随意定义参考电压大小。。 我用TI测试程序
用内部参考2.5
AD转换结果始终为0x0FFF
谁知道其原因??? 642142533 发表于 2012-5-20 09:44 static/image/common/back.gif
我用TI测试程序
用内部参考2.5
AD转换结果始终为0x0FFF
很明显你的电压超过了2.5V,0xFFF就是对应2.5V 已经解决 430内部AD感觉还好 如果用adc12osc可能不稳定 642142533 发表于 2012-5-21 18:19 static/image/common/back.gif
已经解决
恭喜你~ ABT 发表于 2012-7-29 20:55 static/image/common/back.gif
430内部AD感觉还好
我再试试~ maybug56 发表于 2012-7-30 09:34 static/image/common/back.gif
如果用adc12osc可能不稳定
OSC是什么呢? 642142533 发表于 2012-5-21 18:19 static/image/common/back.gif
已经解决
你怎么解决的? dongjiren2012 发表于 2013-8-16 17:45 static/image/common/back.gif
你怎么解决的?
好像当时还有一个地方(不是ADC模块那里)需要配置
好久了
具体的忘了 MSP430 的 参考我使用的是内部基准,并且在外面增加了一个电容。
AD 是有一个采样保持时间的,还有一个转换速度的选项,都调整调整,采样保持不同,AD的结果不同,但是超过一个值后,AD结果就稳定了。速度似乎对AD结果也有影响。 430的AD模块还不错,不过采样率高了跳得多谢,外部电路无问题的话试试减低采样速度。 642142533 发表于 2013-8-20 11:34 static/image/common/back.gif
好像当时还有一个地方(不是ADC模块那里)需要配置
好久了
具体的忘了 ...
嗯,我找到问题了,还有一个REF寄存器,设置一下就好了,但是那个资料上说没有这个寄存器,但是IAR的头文件里有他的定义,然后我就用了,结果就好了 我的5438a板子用锂电供电,片外基准,采集干电池电压时,1mv位不漂!! dongjiren2012 发表于 2013-8-23 10:58 static/image/common/back.gif
嗯,我找到问题了,还有一个REF寄存器,设置一下就好了,但是那个资料上说没有这个寄存器,但是IAR的头文 ...
哈哈
害死人 b57203493 发表于 2013-8-23 17:17 static/image/common/back.gif
我的5438a板子用锂电供电,片外基准,采集干电池电压时,1mv位不漂!!
测量范围多大?电压分辨率能到多少?是否使用软件滤波? marshallemon 发表于 2013-8-26 09:41 static/image/common/back.gif
测量范围多大?电压分辨率能到多少?是否使用软件滤波?
0-2.8 测量值0.5-2.5没有任何软件滤波 b57203493 发表于 2013-8-26 09:45 static/image/common/back.gif
0-2.8 测量值0.5-2.5没有任何软件滤波
你这样来说如果做到0~2.8V的范围,1mV不跳数的话,这样这个12bit的AD有11.5bit的无噪声分辨率了,请问你使用的是哪个型号的MCU?能否上传下电路图? marshallemon 发表于 2013-8-26 10:04 static/image/common/back.gif
你这样来说如果做到0~2.8V的范围,1mV不跳数的话,这样这个12bit的AD有11.5bit的无噪声分辨率了,请问你 ...
5438a
电路没什么特别 ,直接io
linbin250 发表于 2013-8-20 13:47
MSP430 的 参考我使用的是内部基准,并且在外面增加了一个电容。
AD 是有一个采样保持时间的,还有一个转换 ...
是不是采样保持时间越长越结果越稳定? xunke 发表于 2014-5-22 13:04
是不是采样保持时间越长越结果越稳定?
保持时间越长,滞后性就越大。看你的模拟量变化情况。要是缓慢变化的,就采样时间长点。要是快速变化的,就采样时间短点。
本帖最后由 xunke 于 2014-5-23 09:20 编辑
linbin250 发表于 2014-5-22 17:06
保持时间越长,滞后性就越大。看你的模拟量变化情况。要是缓慢变化的,就采样时间长点。要是快速变化的, ...
用MSP430G2553对锂电池电压进行AD
unsigned int ADC10(unsigned char CH)
{
ADC10AE0 = BIT0<<CH; //允许模拟输入
ADC10CTL0 = ADC10SHT_3 + ADC10SR + ADC10ON;
ADC10CTL1 = (CH<<12) + ADC10SSEL_1+ CONSEQ_0;
ADC10CTL0 |= ENC + ADC10SC;
while( (ADC10CTL0&ADC10IFG) != ADC10IFG );
ADC10CTL0 &= ~ADC10IFG;
ADC10AE0 = 0; //关ADC,可省电
ADC10CTL0 &= 0;
ADC10CTL0 &= 0;
return(ADC10MEM);
}
用MSP430仿真器仿真,每2秒AD一次,结果不太稳定,出现的结果大概如:673675690672673674……644645644……不同电脑测得的结果也不同,不知是什么回事? xunke 发表于 2014-5-22 23:36
用MSP430G2553对锂电池电压进行AD
标准电压时用内部的2.5V么?
把这个2.5V从芯片的管脚引出,引出后在外面增加一个0.1uF的电容,电容的地接到模拟地。
把模拟地和数字地之间用一个磁珠或者电感隔离开,试验一下。
芯片的模拟地旁边多增加一个0.01uF的电容,试验一下。
把下面电阻的地断开后,直接飞线到这个增加的电容的地,试验一下。
把电池电压经过磁珠或者电感后再连接过来,试验一下。 本帖最后由 xunke 于 2014-5-23 13:31 编辑
linbin250 发表于 2014-5-23 12:19
标准电压时用内部的2.5V么?
把这个2.5V从芯片的管脚引出,引出后在外面增加一个0.1uF的电容,电容的地接 ...
很细心的指导!
电路很简单只有一个ADC、PWM程序。
AD是用VCC作基准电压的,VCC是7133稳压的 还加了22u+47u+0.1u的钽电容
不知AD引脚前面要不要加一个电压跟随器? xunke 发表于 2014-5-23 13:29
很细心的指导!
电路很简单只有一个ADC、PWM程序。
AD是用VCC作基准电压的,VCC是7133稳压的 还加了22u+4 ...
刚才看了一下 7133, 资料显示,它的输出电压是MOS管进行控制的。所以,我建议,只要用MOS管方式输出的电压,都不要用作基准电压,因为有高频杂波在输出的电压里。
直接用内部的2.5V基准电压,或者用电阻+稳压管,或者找 一个专用电压基准芯片应该会比7133好。
不知AD引脚前面要不要加一个电压跟随器?
我认为不用,因为AD几乎不消耗电流。
把 PWM关掉,再看一下 AD 结果。测试一下,是不是 PWM 输出有干扰。 本帖最后由 xunke 于 2014-5-23 17:23 编辑
linbin250 发表于 2014-5-23 13:44
刚才看了一下 7133, 资料显示,它的输出电压是MOS管进行控制的。所以,我建议,只要用MOS管方式输出的电 ...
使用内部2.5V基准电压 默认2.5V不输出的(REFOUT=0),如果用内部2.5V基准电压是不是要设REFOUT=1,并在A4引脚加上0.1u的电容吗?这两方式有很大区别吗?
从结构上看内部2.5V基准电压和引脚已经有“开关”了,外接电容对内部2.5V基准还有影响吗? xunke 发表于 2014-5-23 17:13
使用内部2.5V基准电压 默认2.5V不输出的(REFOUT=0),如果用内部2.5V基准电压是不是要设REFOUT=1,并在A ...
不知道是不是我理解错了,如图的红色线,当2.5V为 ON的时候,红色线将保持2.5V的基准电压。这样当 SREF=01 的时候,VR+ 才能使2.5V。
但同时,VREF+ 也是2.5V,而 VREF+ 是芯片的一个管脚,也就是说。这个2.5V将出现在这个管脚上。
既然出现在这个管脚上,那么我悬空万一要是出现干扰就不好了,不如增加一个电容算了。不增加应该也可以,我没有测试。
本帖最后由 xunke 于 2014-5-25 11:51 编辑
linbin250 发表于 2014-5-24 21:21
不知道是不是我理解错了,如图的红色线,当2.5V为 ON的时候,红色线将保持2.5V的基准电压。这样当 SREF=0 ...
谢谢!
并且REFOUT=1时,VREF+才会输出2.5V的,否则不输出。
后来我试了,关了PWM和定时器后,AD基本稳定,还有一个问题:好像头几次的AD结果和后面的结果出入较大。 xunke 发表于 2014-5-25 11:47
谢谢!
并且REFOUT=1时,VREF+才会输出2.5V的,否则不输出。
后来我试了,关了PWM和定时器后,AD基本稳定 ...
关于REFOUT,我没有注意看:)
关于,当关了PWM和定时器后,AD基本稳定,我感觉应该是你的线路间有干扰造成的。尝试改线路,增加隔离等等。
第一个和最后一个有偏差,这个就不清楚了。 加分压电阻是不靠谱的, 不如内部基准, 你先算算你可以允许的12位AD值得跳动范围, 再来看是否合适. MSP430F149的AD跳动3个以内就是正常的, 如果你需要更高的精度, 那你就要考虑加更高精度的AD芯片了 用430内部的参考电压比较靠谱!
页:
[1]