完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
测1.616V 电压,结果大部分集中在1.6333-1.6068V之间。还有少量数据偏差较大,问:为什么会有这么大的偏差,问题来至哪里?如何改善?
#include #define Num_of_Results 8 volatile unsigned int results[Num_of_Results]; // Needs to be global in this // example. Otherwise, the // compiler removes it because it // is not used for anything. int main(void) { WDTCTL = WDTPW+WDTHOLD; // Stop watchdog timer P6SEL |= 0x01; // Enable A/D channel A0 ADC12CTL0 = ADC12ON+ADC12SHT0_8+ADC12MSC; // Turn on ADC12, set sampling time // set multiple sample conversion ADC12CTL1 = ADC12SHP+ADC12CONSEQ_2; // Use sampling timer, set mode ADC12IE = 0x01; // Enable ADC12IFG.0 ADC12CTL0 |= ADC12ENC; // Enable conversions while(1) { ADC12CTL0 |= ADC12SC; // Start convn - software trigger __bis_SR_register(LPM4_bits + GIE); // Enter LPM4, Enable interrupts __no_operation(); // For debugger } } #if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__) #pragma vector=ADC12_VECTOR __interrupt void ADC12ISR (void) #elif defined(__GNUC__) void __attribute__ ((interrupt(ADC12_VECTOR))) ADC12ISR (void) #else #error Compiler not supported! #endif { static unsigned char index = 0; switch(__even_in_range(ADC12IV,34)) { case 0: break; // Vector 0: No interrupt case 2: break; // Vector 2: ADC overflow case 4: break; // Vector 4: ADC timing overflow case 6: // Vector 6: ADC12IFG0 results[index] = ADC12MEM0; // Move results index++; // Increment results index, modulo; Set Breakpoint1 here if (index == 8) { index = 0; } case 8: break; // Vector 8: ADC12IFG1 case 10: break; // Vector 10: ADC12IFG2 case 12: break; // Vector 12: ADC12IFG3 case 14: break; // Vector 14: ADC12IFG4 case 16: break; // Vector 16: ADC12IFG5 case 18: break; // Vector 18: ADC12IFG6 case 20: break; // Vector 20: ADC12IFG7 case 22: break; // Vector 22: ADC12IFG8 case 24: break; // Vector 24: ADC12IFG9 case 26: break; // Vector 26: ADC12IFG10 case 28: break; // Vector 28: ADC12IFG11 case 30: break; // Vector 30: ADC12IFG12 case 32: break; // Vector 32: ADC12IFG13 case 34: break; // Vector 34: ADC12IFG14 default: break; } } |
|
相关推荐
11个回答
|
|
一般只测交流小信号,没有测过直流电压,所以不好评论。但是,根据你提供的现象,貌似AD转换出现了一定的漂移(约30个mV),应该从抑制硬件漂移的角度去思考问题,而跟软件程序应该没什么关系。漂移可能来自多方面:信号源的不稳定、外部的噪声、硬件电路的设计不当都可能导致你说的这种情况。
最佳答案
|
|
|
|
由于ADC的广泛应用,一般数据采集系统都由传感器电路和ADC构成.但很多时候,数据采集系统所表现的性能往往低于预期值.
|
|
|
|
但是这种误差在多少范围内被认为是可以的呢
|
|
|
|
学习学习。。。
|
|
|
|
单片机的地跟测量电压的低端尽可能近
|
|
|
|
|
|
|
|
根据算法,可以使结果更接近真实值。例如去掉三个最大值和三个最小值后,求平均。
|
|
|
|
Ann_tmmu 发表于 2015-8-25 23:45 硬件漂移,还没有接触过,感觉很有道理。我还是有个问题,如果我测量的值都存在漂移,为什么用算法反而接近真实值,而不是我的漂移值,这样我认为可能有漂移但是漂移值不是主要原因。 |
|
|
|
你用的什么算法?
|
|
|
|
|
|
|
|
相等于滤波了。如果是自动测量的话,建议你测几千次,然后用Matlab可以看看它的统计分布,应该有规律
|
|
|
|
只有小组成员才能发言,加入小组>>
3030个成员聚集在这个小组
加入小组2920 浏览 1 评论
MSP430FR5994 使用库函数 定时器触发AD问题请教
3586 浏览 2 评论
请问怎么把下面51单片机的代码改成msp430 g2 pocket的代码,还有改下时间变成30秒
2340 浏览 1 评论
4799 浏览 1 评论
2572 浏览 1 评论
1321浏览 3评论
MSP430FR5994 使用库函数 定时器触发AD问题请教
3586浏览 2评论
2920浏览 1评论
1497浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-26 07:24 , Processed in 1.377169 second(s), Total 100, Slave 83 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号