关于MSP430F4的ADC采集问题

2019-03-24 08:57发布

开门见山:遇到两个问题。1.ADC10用DTC的时候发现数据串位了,我开了两路AD,AD0的数据与AD1的数据颠倒了,很疑惑,检查了管脚配置连接没发现问题,可能是程序出了问题。代码是根据TI的例程自己改的。
2.ADC输出的Vref(2.5V)用来做Rt的电源,这样的做法还是第一次见。数字量怎样转成对应的Rt端的电压呢?很懵逼,这样做的话我ADC采集的时候Vref还是2.5V?
3.至于Rt转成温度的话因为以前没用过这东西(10K,3950K,NTC)。各位有什么好方法,网上的资料一般都是给个温度与电阻的表格,揣测一下,不是查表吧?我拟合了一个对数函数,只是增加了对数与浮点运算。不知各位有什么好的方法,或是例程
  1. void ADC_init(void)
  2. {
  3.         ADC10CTL0 &=~ ENC;                                                  // modefy only ENC = 0
  4.         ADC10CTL1 = INCH_1 + CONSEQ_3;            // A1/A0, repeat multi channel
  5.         ADC10CTL0 |= ADC10SHT_2 + ADC10IE ;                  // 16*adc10clk, enable interrupt
  6.         ADC10CTL0 |= REFON +REF2_5V + REFOUT;          // enable vref output        on p6.4
  7.         ADC10CTL0 |= MSC + ADC10ON;                                  // enable adc
  8.         ADC10AE0 = 0x03;                          // P7.4,5 ADC option select
  9.         ADC10DTC1 = CONVER_TIMERS;                // 64 conversions

  10.         enableInterrupt();
  11. }
  12. //******************************

  13. void ADC_filter(void)
  14. {
  15.         volatile uint16_t i;

  16.     ADC10CTL0 &= ~ENC;
  17.     while (ADC10CTL1 & BUSY);               // Wait if ADC10 core is active
  18.     ADC10SA = (unsigned int )adcValue;      // Data buffer start
  19.     ADC10CTL0 |= ENC + ADC10SC;             // Sampling and conversion ready

  20.     __bis_SR_register(CPUOFF + GIE);

  21.         for(i = 0; i < 32; i++)
  22.         {
  23.                 Vadc1 = Vadc1 + adcValue[i*2];
  24.                 Vadc2 = Vadc2 + adcValue[i*2+1];
  25.         }
  26.         Vadc1 = Vadc1 / 16;
  27.         Vadc2 = Vadc2 / 16;

  28. }
复制代码
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
2条回答
strong161
2019-03-24 14:05
电压值等于 参考电压除 AD位数,乘上测量值
比果 参考电压为5    ADC 为8位  测量值为 X   电压 = 5/256 *X
至于拟合方式看你需求来, 如果区间大,你可以试一下四参数拟合肯定是最好的!

一周热门 更多>

相关问题

    相关文章