This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

MSP430 ADC12采样结果疑问

Other Parts Discussed in Thread: MSP430F5529

我用MSP430F5529 ADC12采样经过50Hz的过滤电路的50Hz 3V正弦信号50Hz 3V,得出如图的结果。这个结果是16bits signed int形式输出的。
问题:
1.开始阶段为什么会有一段稳定的过程,是外部电路造成的还是内部ADC模块的问题?


2.为什么它的“0V”稳定在-15000附近?我设置了ADC12MEM0范围是8000F-7FF0,参考电压是AVcc-AVss

多谢

  • 楼主你好,

            为了检查ADC模块是否有问题,建议先向ADC采样脚给出0v,REF/3,REF/2,然后读出ADC的输出,验证ADC是否正常工作。另外,楼主能否给出你的代码,这样可以分析一下是否是没有初始化正确。

  • 在没有接过滤电路的时候,DC 0V的显示是-32768, DC 2V是+32767,接上过滤电路后,DC 0V就是问题里的那个模拟图形。

    ADC12的代码如下:

     

    	P6SEL |= 0x40;  // Enable A/D channel A6
    	P1SEL |= BIT2;  // P1.2/TA1 option select
    	P1DIR |= BIT2;  // Output direction
    
            TA0CCR0 = 49;	// 10µs per sample
      	TA0CCR1 = 14;
      	TA0CCTL1 = OUTMOD_3;  
      	TA0CTL = TASSEL_2+MC_1+TACLR; 
    
      	ADC12CTL0 = /*ADC12SHT0_3+*/ADC12ON;		 
      	ADC12CTL1 = ADC12SHS_1+ADC12CONSEQ_2+ADC12SSEL_2;
      	ADC12CTL2 = ADC12DF_1+ADC12RES_2;
      	ADC12MCTL0 = ADC12SREF_0+ADC12INCH_6;     	
    	ADC12CTL0 |= ADC12ENC;
    
      	DMACTL0 = DMA0TSEL_24;                   
      	DMACTL4 = DMARMWDIS;                      	
      	DMA0CTL &= ~DMAIFG;
      	DMA0CTL = DMADT_4+DMAEN+DMADSTINCR_3+DMAIE;	
      	DMA0SZ = 2000;
      	__data16_write_addr((unsigned short) &DMA0SA,(unsigned long) &ADC12MEM0);
      	__data16_write_addr((unsigned short) &DMA0DA,(unsigned long) DMA_DST);

    谢谢

  • 楼主,

          你好,从代码来看,2VDC输入的ADC采样值应该到不了+32767,不知是否是从寄存器中读出的值。不过ADC看起来应该已经正常工作了,所以应该是外部电路的问题。从楼主的外部电路看,应该是多级滤波器,每个滤波器都是没有直流通路的。

  • 你好,对于接上过滤电路之后的0VDC数值,我比较好奇为什么会是在-15000附近?另外,接上过滤电路后,ADC的结果能显示负电压,而实际上我们知道MSP430 ADC是没法显示出伏电压的?你以前有碰到过这样的情况不?

    谢谢

  • 你好,

         根据你的初始化代码来看,ADC采样值表示范围是8000h到7ff0h,所以从补码的角度来看是可以出现负值的。关于这个滤波电路,看起来是一个高通滤波器,但是截至频率似乎有点问题,所以如果在滤波电路的输入端加DC电压,应该是没法传到ADC采样段的。

     

  • 你好,

    这个形式的输出结果是16 bit signed int格式的,所以它的数值不完全就是寄存器的结果。另外你看不接滤波器的那个结果,他的0VDC出现在-32768,也就是说滤波电路相当于给了ADC一个offset