开门见山:遇到两个问题。1.ADC10用DTC的时候发现数据串位了,我开了两路AD,AD0的数据与AD1的数据颠倒了,很疑惑,检查了管脚配置连接没发现问题,可能是程序出了问题。代码是根据TI的例程自己改的。
2.ADC输出的Vref(2.5V)用来做Rt的电源,这样的做法还是第一次见。数字量怎样转成对应的Rt端的电压呢?很懵逼,这样做的话我ADC采集的时候Vref还是2.5V?
3.至于Rt转成温度的话因为以前没用过这东西(10K,3950K,NTC)。各位有什么好方法,网上的资料一般都是给个温度与电阻的表格,揣测一下,不是查表吧?我拟合了一个对数函数,只是增加了对数与浮点运算。不知各位有什么好的方法,或是例程
- void ADC_init(void)
- {
- ADC10CTL0 &=~ ENC; // modefy only ENC = 0
- ADC10CTL1 = INCH_1 + CONSEQ_3; // A1/A0, repeat multi channel
- ADC10CTL0 |= ADC10SHT_2 + ADC10IE ; // 16*adc10clk, enable interrupt
- ADC10CTL0 |= REFON +REF2_5V + REFOUT; // enable vref output on p6.4
- ADC10CTL0 |= MSC + ADC10ON; // enable adc
- ADC10AE0 = 0x03; // P7.4,5 ADC option select
- ADC10DTC1 = CONVER_TIMERS; // 64 conversions
- enableInterrupt();
- }
- //******************************
- void ADC_filter(void)
- {
- volatile uint16_t i;
- ADC10CTL0 &= ~ENC;
- while (ADC10CTL1 & BUSY); // Wait if ADC10 core is active
- ADC10SA = (unsigned int )adcValue; // Data buffer start
- ADC10CTL0 |= ENC + ADC10SC; // Sampling and conversion ready
- __bis_SR_register(CPUOFF + GIE);
- for(i = 0; i < 32; i++)
- {
- Vadc1 = Vadc1 + adcValue[i*2];
- Vadc2 = Vadc2 + adcValue[i*2+1];
- }
- Vadc1 = Vadc1 / 16;
- Vadc2 = Vadc2 / 16;
- }
复制代码
此帖出自
小平头技术问答
谢谢回复。问题已经解决啦,ADC采样结果是对的,采的数据量比较大,取均值的时候发生溢出,所以数据才不正常。至于拟合的话,直接用对数算效率有点低,但是精度还算可以,相差0.5℃不到
一周热门 更多>