Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: АЦП-10 MSP430G2231
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > MSP430
BratInt
Необходимо измерить сигнал с помощью АЦП МК MSP430G2231. Использую канал 1.3. Опор - внутренний источник 1,5 В.
Источник сигнала - генератор, который даёт синус амплитудой 0,6 В, частотой в десятые Герца.
АЦП подключается через резистор 10к к плюсу генератора, а плюс и минус генератора соединены через резистор 16к (резисторы на всякий пожарный, чтобы не сжечь).
А вот где земля АЦП, мне найти не удалось. В руководстве сказано - её роль играет некая внутренняя аналоговая земля МК AVss, но вот что это за земля, и как её вывести на какой-то канал - осталось загадкой...
Поэтому без земли результаты получились такими: измеренное значение варьируется в пределах 500-800, когда на АЦП подаётся синус. А вот если соединить вход АЦП с землёй генератора, то он будет показывать 444±3. А если не подключать АЦП ни к чему, то покажет 1023.
Как с этим быть?
rezident
В этом МК нет отдельных выводов AVCC и AVSS. АЦП запитан от DVCC и DVSS. Измерение проводится относительно VR- и VR+, см. блок-схему Figure 22-1. ADC10 Block Diagram в User's Guide (стр.549). К VR- могут быть подключены AVSS=DVSS, вывод внутренней опоры VREF- или вывод внешней опоры VeREF-. AVSS подключается внутренне, а VREF- и VeREF- совмещены на одном пине (P1.3). К VR+ могут подключаться AVCC=DVCC, VREF+ или VeREF+. VREF+ и VeREF+также совмещены на одном пине (P1.4). Отличия в том, что VREF- и VREF+ это выводы встроенного ИОН и они являются его выходами, а VeREF- и VeREF+ это входы для подключения внешнего ИОН. Следует учитывать этот нюанс при настройке функций пинов (см. Table 19 и Table 20 в datasheet). Ну и также не стоит выходить за допустимые диапазоны входных напряжений для этих пинов, которые приведены в datasheet на стр.29, таблица 10-Bit ADC, External Reference.
BratInt
Спасибо!
Но получается вот что. Установлено 1,5 В VREF+, а VREF- - AVss. Но я соединил цифровую землю МК со входом АЦП через 10к - так АЦП выдал 432. А почему не 0?
rezident
Потому, что знакопеременный сигнал нельзя измерить подав напрямую на унипорлярный вход. При таком подключении вы выходите за диапазон допустиммых синфазных напряжений. Амплитуда сигнала 0,6В означает, что в одну половину периода пиковое значение достигает +0,6В, а во вторую половину -0,6В. АЦП же может измерять напряжение только от диапазоне от VREF- до VREF+. т.е. от 0В до 1,5В. Чтобы подать на вход АЦП знакопеременный сигнал вы должны сделать схему смещения уровня, сместив входной сигнал на VREF/2. Тогда входной сигнал АЦП будет не -0,6В...+0,6В, а от 1,5В/2-0,6В=0,15В и до 1,5В/2+0,6В=1,35В. Нулем будет значение VREF/2=0,75В. Ну либо следует использовать МК с другим АЦП у которого дифференциальный вход (модуль SD16, напрмиер).
Схемы смещения уровней обсуждались неоднократно на форуме в разделе В помощь начинающему.
BratInt
Всё же непонятно. Если подавать на АЦП сигнал с цифровой земли микроконтроллера, то по формуле
N = 1023 * (Vin - VR-) / (VR+ - VR-)
должно получиться 0, т.к. Vin = VR- = AVss.
Но получается 432.
Померил напряжение между землёй и входом АЦП P1.3 - а там вдруг 3,5 В - уровень "1" МК. Это не нормально?

Хотя кое-что понятно. Когда вход с землёй соединены резистором 10 кОм, то напряжение между ними 0,64 В. А это напряжение как раз и равно 436, почти 432.
Попробовал вместо внутреннего 1,5 В использовать основной источник 3,5 В для АЦП - в этом случае показывает 182, что тоже близко к рассчётному 184.
Остаётся непонятным - откуда потенциал на входе АЦП?

Код инициализации такой:
WDTCTL = WDTPW + WDTHOLD;
P1DIR = BIT0+BIT4+BIT5+BIT6+BIT7;
P1OUT = 0;
BCSCTL1 = CALBC1_1MHZ;
DCOCTL = CALDCO_1MHZ;
BCSCTL2 &= ~(DIVS_3);

TACTL = TASSEL_2 + MC_2 + ID_3;
CCTL0 = OUT;

P1SEL |= TXD + RXD;
P1DIR &= ~ (RXD+BIT3);
P1DIR |= TXD;

ADC10CTL1 = INCH_3 + ADC10DIV_2;
ADC10CTL0 = SREF_1 + ADC10SHT_0 + REFON + ADC10ON + ADC10IE; // 1,5 В
// ADC10CTL0 = SREF_0 + ADC10SHT_0 + ADC10ON + ADC10IE; // 3,5 В
А TXD и RXD - BIT1 и BIT2.
rezident
BratInt, извините за нескромный вопрос, который в последнев время хочется задавать все чаще, но я уж опасаюсь это делать: каков ваш уровень образования в теме электричества: школьный курс физики, радиолюбитель, студент-теоретик, инженер без практики или вообще программист? Я не хочу вас обидеть или унизить, мне просто нужно понять, на каком урвоне вам следует объяснять? Пока мне не это очень понятно.
Вы основные документы по теме: User's Guide и datasheet, ссылки на которые я давал ранее, тщательно изучили?
См. на картинки. Первая это то, что вы делаете и получаете. Вторая это то, как должно быть, чтобы сигнал оцифровывался правильно.
BratInt
Цитата(rezident @ Feb 7 2012, 23:50) *
BratInt, извините за нескромный вопрос, который в последнев время хочется задавать все чаще, но я уж опасаюсь это делать: каков ваш уровень образования в теме электричества: школьный курс физики, радиолюбитель, студент-теоретик, инженер без практики или вообще программист? Я не хочу вас обидеть или унизить, мне просто нужно понять, на каком урвоне вам следует объяснять? Пока мне не это очень понятно.
Вы основные документы по теме: User's Guide и datasheet, ссылки на которые я давал ранее, тщательно изучили?

Программист. Документы изучил, тем более что это руководство у меня есть в переводе А.В.Евстифеева.
Цитата(rezident @ Feb 7 2012, 23:50) *
См. на картинки. Первая это то, что вы делаете и получаете. Вторая это то, как должно быть, чтобы сигнал оцифровывался правильно.

Не совсем это. В последнем опыте, где было получено 432 и 182, подаю не синус, а константу - ADss. Вопрос в том, что напряжение между входом АЦП и землёй микроконтроллера (а не генератора) - 3,5 В, хотя такого должно быть?
rezident
Цитата(BratInt @ Feb 8 2012, 01:15) *
Программист. Документы изучил, тем более что это руководство у меня есть в переводе А.В.Евстифеева.
Не читайте перед обедом советсикх газет переводы, пользуйтесь оригинальной документацией!
Цитата(BratInt @ Feb 8 2012, 01:15) *
Вопрос в том, что напряжение между входом АЦП и землёй микроконтроллера (а не генератора) - 3,5 В, хотя такого должно быть?
Сомневаюсь, что читали внимательно sad.gif Для того, что пин стал аналоговым входом АЦП, его функцию нужно правильно запрограммировать. См. таблицы в конце datasheet, там, где нарисованы блок-схемы всех пинов.
BratInt
Цитата(rezident @ Feb 8 2012, 00:25) *
Сомневаюсь, что читали внимательно sad.gif Для того, что пин стал аналоговым входом АЦП, его функцию нужно правильно запрограммировать. См. таблицы в конце datasheet, там, где нарисованы блок-схемы всех пинов.

Добавил ещё строчку
ADC10AE0 = BIT3;
ничего не изменилось.

Попробовал в качестве входа АЦП использовать P1.6 - а на нём всё работает безукоризненно, значения те, что и должны быть...
При этом на P1.3 всё-равно остаётся уровень "1", хотя не должен быть. Посмотрел регистры - ничего подозрительного, единственное - 2 отличия:
P1IN - "1" для 3 и "0" для 6.
P1IFG - "0" для 3 и "1" для 6.
При этом второй регистр - флаги прерываний, не должен влиять. А вот первый попробовал принудительно загнать P1IN=0, но значения всё равно восстановились сами...
BratInt
Из каких соображений выбирать сопротивление между входом АЦП и генератором?
BratInt
Неужели никто не в курсе?
rezident
Цитата(BratInt @ Feb 15 2012, 12:54) *
Из каких соображений выбирать сопротивление между входом АЦП и генератором?

Если бы у вас были сотни МГц и длинная линия, то имело бы смысл делать согласование по волновому сопротивлению: выход - канал передачи - вход. Но вы не соблаговолили ни схему подключения нарисовать, ни даже просто уточнить наличие/отсутствия схемы смещения уровней. Что вам тут можно посоветовать? laughing.gif
BratInt
Схема смещения не понадобилась, поскольку сигнал и так смещён относительно земли. Так что всё, вопрос пока закрыт! Ещё раз спасибо.
BratInt
Возникла новая проблема.
Вот уже несколько раз сталкивался с тем, что показания АЦП не соответствуют входному напряжению.
Вот в частности, на вход подаётся 1,14 В - смотрел мультиметром. А АЦП говорит - 778, хотя опорное 2,5 В! А оказывается, что этот результат соответствует 1,5 В.
Но потом, через несколько минут, АЦП начинает говорить уже 467, что как раз соответствует, и после этого работает правильно. Хотя входное напряжение не изменяется (те же 1,14 В).
Микроконтроллер запрограммирован именно на опорное напряжение АЦП 2,5 В, оно устанавливается только в самом начале инициализации и больше не меняется.
И вобще схема правильно работала несколько месяцев, но только сейчас ни с того ни с сего начала барахлить.
С чем это может быть связано?
BratInt
Мог ли "сломаться" микроконтроллер / встроенный ИОН, или причина в чём-то другом?
BratInt
Причина нашлась и оказалась очень эпичной. Плохой контакт на землю... 1111493779.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.