|
Наблюдается странная аномалия с 12-битным АЦП на MSP430F149 если использовать внешнее опорное напряжение VR+=VeREF+ (10-я нога микроконтроллера) и VR-=AVss, т.е. когда биты SREF установлены в значение 2 или 3. Заключается эта аномалия в том, что когда конвертируемое напряжение находится в интервале 0.46..0.5 VeREF+, результат всегда получается 2051 (т.е. ~0.5 VeREF+). При других значениях конвертируемого напряжения результат всегда получается правильный. Это явление не зависит от конкретных величин опорного и конвертируемого напряжений, главное чтобы они были связаны указанным выше соотношением. Т.е получается "выпадает" интервал возможных результатов 1883..2051. :( Других закономерностей найти не удалось. Это проверялось на различных источниках сигнала. Могу добавить, только, что при использовании внутренней опоры (например AVcc, когда SREF=0), этого не наблюдается.
Кто-нибудь сталкивался с такой фигней? Где копать - в микросхеме, правильной настройке АЦП, в кривых руках, etc?
Преобразование делаю так:
unsigned int convert_A1(void) {
unsigned int result;
// configure ADC12
P6DIR&=~0x02; // Use pin P6.1 (A1) for input
P6SEL|=0x02; // Select A/D function for pin P6.1 (A1)
ADC12CTL0=ADC12ON+SHT0_2; // Turn on ADC12, set sampling time
ADC12CTL1=CSTARTADD_1+SHP; // Use sampling timer
ADC12MCTL1=SREF_2+INCH_1; // Vr+ = VeREF+ (external)
// start sample-n-hold and conversion
ADC12CTL0|=ENC; // Enable conversions
ADC12CTL0|=ADC12SC; // Start single conversion
while ((ADC12IFG&BIT1)==0);
result=ADC12MEM1;
// stop/detach ADC12 from used pins
ADC12CTL0&=~(ADC12SC+ENC+ADC12ON); // Disable sample-and-hold/conversion, turn off ADC12
P6SEL&=~0x02; // Select I/O function for pin P6.1 (A1)
return result;
}
E-mail: info@telesys.ru