Перейти к содержанию
    

Необходимо измерить сигнал с помощью АЦП МК MSP430G2231. Использую канал 1.3. Опор - внутренний источник 1,5 В.

Источник сигнала - генератор, который даёт синус амплитудой 0,6 В, частотой в десятые Герца.

АЦП подключается через резистор 10к к плюсу генератора, а плюс и минус генератора соединены через резистор 16к (резисторы на всякий пожарный, чтобы не сжечь).

А вот где земля АЦП, мне найти не удалось. В руководстве сказано - её роль играет некая внутренняя аналоговая земля МК AVss, но вот что это за земля, и как её вывести на какой-то канал - осталось загадкой...

Поэтому без земли результаты получились такими: измеренное значение варьируется в пределах 500-800, когда на АЦП подаётся синус. А вот если соединить вход АЦП с землёй генератора, то он будет показывать 444±3. А если не подключать АЦП ни к чему, то покажет 1023.

Как с этим быть?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В этом МК нет отдельных выводов 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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо!

Но получается вот что. Установлено 1,5 В VREF+, а VREF- - AVss. Но я соединил цифровую землю МК со входом АЦП через 10к - так АЦП выдал 432. А почему не 0?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Потому, что знакопеременный сигнал нельзя измерить подав напрямую на унипорлярный вход. При таком подключении вы выходите за диапазон допустиммых синфазных напряжений. Амплитуда сигнала 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, напрмиер).

Схемы смещения уровней обсуждались неоднократно на форуме в разделе В помощь начинающему.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Всё же непонятно. Если подавать на АЦП сигнал с цифровой земли микроконтроллера, то по формуле

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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

BratInt, извините за нескромный вопрос, который в последнев время хочется задавать все чаще, но я уж опасаюсь это делать: каков ваш уровень образования в теме электричества: школьный курс физики, радиолюбитель, студент-теоретик, инженер без практики или вообще программист? Я не хочу вас обидеть или унизить, мне просто нужно понять, на каком урвоне вам следует объяснять? Пока мне не это очень понятно.

Вы основные документы по теме: User's Guide и datasheet, ссылки на которые я давал ранее, тщательно изучили?

См. на картинки. Первая это то, что вы делаете и получаете. Вторая это то, как должно быть, чтобы сигнал оцифровывался правильно.

post-3882-1328644138_thumb.png

post-3882-1328644146_thumb.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

BratInt, извините за нескромный вопрос, который в последнев время хочется задавать все чаще, но я уж опасаюсь это делать: каков ваш уровень образования в теме электричества: школьный курс физики, радиолюбитель, студент-теоретик, инженер без практики или вообще программист? Я не хочу вас обидеть или унизить, мне просто нужно понять, на каком урвоне вам следует объяснять? Пока мне не это очень понятно.

Вы основные документы по теме: User's Guide и datasheet, ссылки на которые я давал ранее, тщательно изучили?

Программист. Документы изучил, тем более что это руководство у меня есть в переводе А.В.Евстифеева.

См. на картинки. Первая это то, что вы делаете и получаете. Вторая это то, как должно быть, чтобы сигнал оцифровывался правильно.

Не совсем это. В последнем опыте, где было получено 432 и 182, подаю не синус, а константу - ADss. Вопрос в том, что напряжение между входом АЦП и землёй микроконтроллера (а не генератора) - 3,5 В, хотя такого должно быть?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Программист. Документы изучил, тем более что это руководство у меня есть в переводе А.В.Евстифеева.
Не читайте перед обедом советсикх газет переводы, пользуйтесь оригинальной документацией!

Вопрос в том, что напряжение между входом АЦП и землёй микроконтроллера (а не генератора) - 3,5 В, хотя такого должно быть?
Сомневаюсь, что читали внимательно :( Для того, что пин стал аналоговым входом АЦП, его функцию нужно правильно запрограммировать. См. таблицы в конце datasheet, там, где нарисованы блок-схемы всех пинов.

post-3882-1328646318_thumb.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сомневаюсь, что читали внимательно :( Для того, что пин стал аналоговым входом АЦП, его функцию нужно правильно запрограммировать. См. таблицы в конце datasheet, там, где нарисованы блок-схемы всех пинов.

Добавил ещё строчку

ADC10AE0 = BIT3;

ничего не изменилось.

 

Попробовал в качестве входа АЦП использовать P1.6 - а на нём всё работает безукоризненно, значения те, что и должны быть...

При этом на P1.3 всё-равно остаётся уровень "1", хотя не должен быть. Посмотрел регистры - ничего подозрительного, единственное - 2 отличия:

P1IN - "1" для 3 и "0" для 6.

P1IFG - "0" для 3 и "1" для 6.

При этом второй регистр - флаги прерываний, не должен влиять. А вот первый попробовал принудительно загнать P1IN=0, но значения всё равно восстановились сами...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Из каких соображений выбирать сопротивление между входом АЦП и генератором?

Если бы у вас были сотни МГц и длинная линия, то имело бы смысл делать согласование по волновому сопротивлению: выход - канал передачи - вход. Но вы не соблаговолили ни схему подключения нарисовать, ни даже просто уточнить наличие/отсутствия схемы смещения уровней. Что вам тут можно посоветовать? :laughing:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Схема смещения не понадобилась, поскольку сигнал и так смещён относительно земли. Так что всё, вопрос пока закрыт! Ещё раз спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Возникла новая проблема.

Вот уже несколько раз сталкивался с тем, что показания АЦП не соответствуют входному напряжению.

Вот в частности, на вход подаётся 1,14 В - смотрел мультиметром. А АЦП говорит - 778, хотя опорное 2,5 В! А оказывается, что этот результат соответствует 1,5 В.

Но потом, через несколько минут, АЦП начинает говорить уже 467, что как раз соответствует, и после этого работает правильно. Хотя входное напряжение не изменяется (те же 1,14 В).

Микроконтроллер запрограммирован именно на опорное напряжение АЦП 2,5 В, оно устанавливается только в самом начале инициализации и больше не меняется.

И вобще схема правильно работала несколько месяцев, но только сейчас ни с того ни с сего начала барахлить.

С чем это может быть связано?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...