模拟供电用数字供电经磁珠隔离,Vref接LM4040-2。5。
测试电压经1K电阻后接Tsense。
现在的现象是:
无论使用自己写的程序还是keil或nxp给的测试代码,用ADC通道2采样,结果都是0,当输入电压接近Vref时结果为0xfff,并在连续转换过程中值有闪动。换用别的通道,或将Vref接AVcc现象一样(keil开发板原理图是接AVcc)。DAC正常,可以输出0-Vref的电压。
现有3块电路板,现象均一样。
部分测试代码:
void ADC_startCnv (void) {
LPC_ADC->ADCR &= ~(7<<24); /* stop conversion */
LPC_ADC->ADCR |= (1<<24); /* start conversion */
}
void ADC_init (void) {
LPC_PINCON->PINSEL1 &= ~(3<<18); /* P0.25 is GPIO */
LPC_PINCON->PINSEL1 |= (1<<18); /* P0.25 is AD0.2 */
LPC_SC->PCONP |= (1<<12); /* Enable power to ADC block */
LPC_ADC->ADCR = (1<< 2) | /* select AD0.2 pin */
(1<< 8) | /* ADC clock is 18MHz/2 */
(1<<21); /* enable ADC */
}
/*----------------------------------------------------------------------------
stop ADC Conversion
*----------------------------------------------------------------------------*/
void ADC_stopCnv (void) {
LPC_ADC->ADCR &= ~(7<<24); /* stop conversion */
}
/*----------------------------------------------------------------------------
get converted ADC value
*----------------------------------------------------------------------------*/
uint32_t ADC_getCnv (void) {
uint32_t adGdr;
// uint32_t adDr2;
while (!(LPC_ADC->ADGDR & (1UL<<31))); /* Wait for Conversion end */
adGdr = LPC_ADC->ADGDR;
// adDr2 = LPC_ADC->ADDR2;
return((adGdr >> 4)); /* read converted value */
}
uint16 AD_in (void) {
/* Read ARM Analog Input */
uint32 val = 0;
ADC_startCnv(); /* start A/D conversion */
val = ADC_getCnv(); /* read converted value */
ADC_stopCnv(); /* stop A/D conversion */
return (val);
} |