|
|
  |
Проблема с АЦП, получаю неверные показания в диапазоне |
|
|
|
Sep 27 2006, 19:37
|
Участник

Группа: Свой
Сообщений: 43
Регистрация: 26-01-06
Из: Минск, Беларусь
Пользователь №: 13 651

|
Помогите пожалуйста разобраться с непонятной проблемой в работе АЦП. Глюк был обнаружен в "большой" схеме и программе. Для эксперимента выкинул всё из схемы, а тестовую программу взял из slac015k, но всё равно происходит вот что: На вход АЦП контроллера подаётся напряжение с потенциометра. К этому же входу также подключен вольтметр. Подкручивая потенциометр, постепенно уменьшаю напряжение от 2,5В до 0,0В на входе АЦП, что и подтверждается показаниями вольтметра. А вот если контролировать показания АЦП в программе, то сначала напряжения совпадают, в интервале примерно 1,4В - 1,2В контроллер выдаёт постоянное значение примерно 1,25В (если в отсчётах - 0x07FF, ровно половина диапазона), потом опять показания совпадают. Вот попытался изобразить график: (наклонная прямая - показания вольтметра, точками показаны показания АЦП в контроллере).  Программа (пробовал разные настройки, например вот в таком виде): Код #include <msp430x13x.h>
static double v_in = 0.0;
int main(void) { WDTCTL = WDTPW+WDTHOLD; // Stop watchdog timer P6SEL |= 0xFF; // Enable all A/D channels ADC12CTL0 = ADC12ON + SHT0_2; // Turn on ADC12, set sampling time ADC12CTL1 = SHP; // Use sampling timer ADC12MCTL0 = SREF_2 + INCH_7; // Vr+ = VeREF+ (external) ADC12CTL0 |= ENC; // Enable conversions
while (1) { ADC12CTL0 |= ADC12SC; // Start conversion while ((ADC12IFG & BIT0) == 0) ; v_in = ADC12MEM0 * 2.5 / 4095.0; // BREAKPOINT HERE } } По схеме: контроллер питается от 3,3В, внешнее опорное напряжение 2,5В, есть аналоговая земля, между входом и AVss подвешен конденсатор (пробовал и без него), пробовал три разных контроллера (два 149-ых и один 133-ий), схема в принципе тоже менялась... Везде одно и то же - "подвисание" показаний в середине диапазона. Чувствую, что ерунда какая-то, но в чём дело - не могу разобраться. Нужен свежий взгляд. В чём может быть дело?
|
|
|
|
|
Sep 29 2006, 10:40
|
Местный
  
Группа: Свой
Сообщений: 437
Регистрация: 27-08-04
Пользователь №: 551

|
Цитата(//Nikson @ Sep 29 2006, 01:20)  Отключил вольтметр, отключил JTAG (думал, может он влияет, подавая напряжение на схему), напряжение контролировал по ЖК-индикатору - та же картина. Вот например одна из нерабочих схем: Цветом выделены элементы, которые добавлялись-убирались (хотя, в принципе, после добавления почти каждого элемента перепроверял работу). Запутался окончательно.   Внимательно читаем раздел ацп в slau049e.pdf, либо здесь http://www.gaw.ru/html.cgi/txt/doc/micros/msp430/arh/17.htm Внутреннее сопротивление RI (около 2 кОм) мультиплексированного входа последовательно с конденсатором СI (максимум 40 пФ) представляется источником. Конденсатор СI должен быть заряжен напряжением VC в пределах ? младшего бита источника напряжения VS для получения точного 12-разрядного преобразования ... Сопротивление источника RS и RI влияет на tsample. Следующее выражение может быть использовано для вычисления минимального времени выборки tsample при 12-разрядном преобразовании:
tsample > (RS+RI)*ln(213)*CI
При подстановке значений RI и СI, указанных выше, уравнение приобретает следующий вид: tsample > (RS+2кОм)*9.011*40pF
К примеру, если RS равно 10 кОм, tsample должно быть больше 4,33 мкС
Если предположить, что на выходе опорника проблем нет (а отсутствие емкости - источник потенциальных проблем), то среднее положение переменника - 11 ком последоватального сопротивления, либо 111 ком с красным резистором. В данной ситуации лучший выход - буферный усилитель прямо на вход ацп
|
|
|
|
|
Sep 29 2006, 14:16
|
Местный
  
Группа: Свой
Сообщений: 437
Регистрация: 27-08-04
Пользователь №: 551

|
Цитата(rezident @ Sep 29 2006, 15:47)  Да не нужен там буферный усилитель! Утечка по аналоговым входам такая же как и по всем остальным - не более 50нА. Смотрите любой даташит на это семейство. А вот правильно рассчитать время выборки это действительно необходимо. P.S. ig_z, Вы ADC12 и SD16 часом не путаете? Проблемы с низким входным сопротивлением у второго вообще-то. Утечка действительно у всех выводов одинаковая. Но речь идет о том, что в среднем положении переменника результаты ацпирования приобретают подозрительные значения. Это, как вы правильно заметили, *может* быть результатом недостаточного времени выборки для зарядки емкости в ацп. Кардинально решается буферным усилителем. В условиях правильной разводки платы и корректных значений выборки времени преобразования - эта мера излишняя.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|