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

Здравствуйте

имеется плата LPCXpresso в количестве 2 шт.

Проблема с АЦП. периодически меряет неверные значения(одиночная неверная выборка).

причем на обоих платах, купленных в разное время у разных фирм.

Опытным путем выяснилось что это как то связанно с наводками, например выводим на один из выводов процессора 2-3МГц сигнал, имеем ошибки.

либо рядом на столе лежит совершенно другая плата с генератором на 2 МГц, запитанная от другого источника и потребляющая мизерные токи-имеем ошибки.

 

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

 

помогите кто знаком с такими проблемами

Изменено пользователем Scuby

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


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

Посмотреть бы ваш код работы с АЦП.

Изменено пользователем yashok

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


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

Посмотреть бы ваш код работы с АЦП.

Гораздо интереснее посмотреть способ электрического подключения источника сигнала к АЦП. Может быть, там используются ржавые стальные спицы или метровые провода. Кто знает?

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


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

Важно, какое сопротивление у той цепи, напряжение в которой меряется.

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


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

Была недавно похожая ситуация. При измерении АЦП иногда выдовал 0. Измерения проводились сразу на нескольких каналах и на всех этих каналах проскакивал ноль. Удалось определить, что АЦП начинает глючить, когда происходит передача данных через GSM модем, установденный на плате.

Последовательность измерений была такая.

1. По прерыванию от таймера запускался на измерение первый нужный канал.

2. По прерыванию от АЦП выяснялось, какой канал преобразовался, бралось его значение, этот канал выключался и включался на преобразование следующий нужный канал.

3. Когда преобразовались все каналы, опять ждалось прерывание от таймера.

 

Помагло следующая вещь.

Когда случается прерывание от АЦП, записываю в управляющий регистр ADCR в биты 24:26 три нуля, указывая что измерения не производятся.

Аномалия с нулями исчезла.

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


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

Посмотреть бы ваш код работы с АЦП.

void main()
{
    NVIC_DisableIRQ(PWM1_IRQn);

//Настраиваем Шим, исключительно для имитации работы процессора с внешней переферией

    LPC_SC->PCONP|=1<<6;            //PWM power/clock control bit.
    LPC_SC->PCLKSEL0&=~(3<<12);     //13:12 Peripheral clock selection for PWM1.
    LPC_SC->PCLKSEL0|=  1<<12;      //PCLK_peripheral = CCLK

    LPC_PINCON->PINSEL3&=~(3<<4);    //PWM1.1
    LPC_PINCON->PINSEL3|=  2<<4;     //Pin function PWM1.1 //

    LPC_PINCON->PINMODE3&=~(3<<4); //PWM1
    LPC_PINCON->PINMODE3|=  2<<4;  //Disable pullup & pulldown resistors

    LPC_PINCON->PINMODE3&=~(3<<10); //PWM2
    LPC_PINCON->PINMODE3|=  2<<10;  //Disable pullup & pulldown resistors

//     LPC_PINCON->PINSEL3&=~(3<<10);   //PWM1.3
//     LPC_PINCON->PINSEL3|=  2<<10;    //Pin function PWM1.3 //

    LPC_PWM1->TCR  = (1<<0) | (1<<3); //Counter Enable | PWM Enable
    LPC_PWM1->CTCR = 0;               //Timer Mode: the TC is incremented when the Prescale Counter matches the Prescale Register.
    LPC_PWM1->MCR  = (1<<1);          //Reset on PWMMR1
    LPC_PWM1->PCR  = (1<<3) | (1<<9) | (1<<11); // double edge for the PWM3 | The PWM1 output enabled. | The PWM3 output enabled.

    LPC_PWM1->MR0  = 26;
    LPC_PWM1->MR1  = 25;

    LPC_PWM1->MR2  = param_pwm_1_a;
    LPC_PWM1->MR3  = param_pwm_1_b;
    LPC_PWM1->PR   = 0;
    LPC_PWM1->LER  = 0x000F;
    LPC_PWM1->TC   = 0;

//настраиваем АЦП

    LPC_SC->PCONP|=  1<<12;         //ADC ON // A/D converter (ADC) power/clock control bit.
    LPC_SC->PCLKSEL0&=~(3<<24);     //
    LPC_SC->PCLKSEL0|=  3<<24;      //ADC clock pclk/8 //PCLK_peripheral = CCLK/8

    LPC_PINCON->PINSEL1&=~(3<<14);
    LPC_PINCON->PINSEL1|=  1<<14;     //Pin function ADC0 //

    LPC_PINCON->PINMODE1&=~(3<<14); //ADC0
    LPC_PINCON->PINMODE1|=  2<<14;  //Disable pullup & pulldown resistors

    LPC_ADC->ADCR=(1<<21);
    LPC_ADC->ADINTEN=0x0000;
    NVIC_DisableIRQ(ADC_IRQn);

//настраиваем цап для вывода результата АЦП во вне

    //Power: The DAC is always connected to VDDA. Register access is determined by PINSEL and PINMODE settings (see below).
    LPC_SC->PCLKSEL0&=~(3<<22);     //
    LPC_SC->PCLKSEL0|=  3<<22;      //Peripheral clock selection for DAC. pclk/8 //PCLK_peripheral = CCLK/8

    LPC_PINCON->PINSEL1&=~(3<<20);
    LPC_PINCON->PINSEL1|=2<<20;     //Pin function AOUT

    LPC_DAC->DACCTRL=0x00;/**/

       LPC_ADC->ADCR=(1) | (2<<8) | (1<<24) | (1<<21) | (0<<27);

    while (1)
    {
         if (LPC_ADC->ADSTAT&1)
         {
              adc_raw=LPC_ADC->ADDR0;
              LPC_ADC->ADCR=(1) | (1<<8) | (1<<24) | (1<<21) | (0<<27);
              LPC_DAC->DACR=adc_raw&0xFF00;
         };
    };
}

 

 

Гораздо интереснее посмотреть способ электрического подключения источника сигнала к АЦП. Может быть, там используются ржавые стальные спицы или метровые провода. Кто знает?

 

http://www.embeddedartists.com/products/lp...LPC1769revA.pdf

при этом подключается нога внешнего разъёма P0[23] "J6-15" на землю GNDX "J6-1", c выхода ЦАП P0[26] "J6-18" снимали осциллографом сигнал, там шли помехи, тоже самое делали в полной версии при передаче выборок по езернет в режиме запуска от таймера. Сейчас мы выложили самый простой вариант без обвесов и на отладочной плате, упрощённый до самого минимума.

 

Тут обсуждалось

К сожалению отладчик не влияет никак. мы подключали только питание и землю (на плате есть перемычки для этого), всё равно повторялась проблема, даже если выключить и включить без отладчика.

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


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

Была недавно похожая ситуация. При измерении АЦП иногда выдовал 0. Измерения проводились сразу на нескольких каналах и на всех этих каналах проскакивал ноль. Удалось определить, что АЦП начинает глючить, когда происходит передача данных через GSM модем, установденный на плате.

...

Аномалия с нулями исчезла.

Ого, а я думал что мои лыжи не едут.

У меня есть несколько каналов АЦП, которые непрерывно измеряются, результаты пишуться в прерывании в кольцевой буфер и потом при необходимости вычисляется среднее за определенный промежуток времени.

Обратил я внимание что при обмене по USB на LPC17 периодически девайс стал отваливаться. Виноват оказался АЦП имеряющий VBUS - там иногда в регистре данных АЦП проскакивали нули, и среднее падало ниже порога и драйвер снимал 1k5 pullup и считал что кабель вынут. Осциллограф никаких помех не показал, допфильтры/ферриты никак не помогли, записать 0 в регистр данных программа никак не может - так что спорадический 0 как результат преобразования - это внутреннее порождение АЦП.

В-общем прикол - есть обмен по USB - эпизодически выскакивает 0 на канале VBUS, нету обмена - все хорошо.

Дальше такой эксперимент - взяли и соединили выводы двух каналов АЦП - VBUS и еще соседний. Оп - и теперь еще и соседний канал начал генерить нулевые результаты. Нет обмена - все хорошо, есть обмен - глюки. Скоп никаких помех не показывает, фильтр и конденсатор 1000пФ прямо возле ножек процессора есть. Причем наблюдается это все на LPC17, та же самая программа перекомпилированная для LPC23 и запаянного в ту же плату - никаких проблем.

 

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


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

это видимо сильно зависит от разводки платы

от разводки цифровой и аналоговой земли

 

может помочь программный фильтр

 

 

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


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

http://www.embeddedartists.com/products/lp...LPC1769revA.pdf

при этом подключается нога внешнего разъёма P0[23] "J6-15" на землю GNDX "J6-1", c выхода ЦАП P0[26] "J6-18" снимали осциллографом сигнал, там шли помехи, тоже самое делали в полной версии при передаче выборок по езернет в режиме запуска от таймера. Сейчас мы выложили самый простой вариант без обвесов и на отладочной плате, упрощённый до самого минимума.

Если честно, ничего не понял.

Я всего лишь хотел напомнить, что помехи могут реально присутствовать на входе АЦП. Не забудьте правильно согласовать выход источника сигнала с входом АЦП. Как уже упоминалось, источник должен быть достаточно низкоомным, чтобы заряжать входную ёмкость АЦП при выборке. Если измеряемый сигнал меняется медленно, то помогают RC-фильтры.

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


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

Если честно, ничего не понял.

Я всего лишь хотел напомнить, что помехи могут реально присутствовать на входе АЦП. Не забудьте правильно согласовать выход источника сигнала с входом АЦП. Как уже упоминалось, источник должен быть достаточно низкоомным, чтобы заряжать входную ёмкость АЦП при выборке. Если измеряемый сигнал меняется медленно, то помогают RC-фильтры.

выход низкоомный-провод напрямую на землю. фильтры понятное дело не нужны т.к. нечего фильтровать.

глюки в полный размах. на осциллографе ничего нет. Оно и понятно-много на земле не намеряешь. глюк явно происходит внутри процессора.

 

только у меня не 0 проскакивает, а значения от 0 до max

 

это видимо сильно зависит от разводки платы

от разводки цифровой и аналоговой земли

 

может помочь программный фильтр

на других платах с совершенно другой разводкой аналогично

программный фильтр не поможет от помех в полный размах. если усреднять 2 выборки то помеха будет всего лишь в 2 раза меньше.

мне нужно записывать звук. не могу же я по 4000 выборок усреднять в одну чтоб помеха размахом в 12 бит полностью исчезла

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


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

Такой же глюк, но значения АЦП норовят уйти в максимум и часто его достигают. У меня повторяемость вообще 100%, идёт наводка на ацп чётко с частотой в 2кгц. 1 в 1 как у автора статьи, т.е. при любой внешней активности проца, даже если ножки по которым идёт обмен не припаяны. Либо по включению внутренних блоков таких как motor control PWM. Проверял - глючат даже стандартные примеры из комплекта поставки LPC expresso.

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


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

случайно зашел на страницу, и опаньки у меня были аналогичные глюки при работе с АЦП.

обработка непрерывно, данные собрал через дма.

"но значения АЦП норовят уйти в максимум и часто его достигают." :( пришлось заменить на стм32, сейчас всё нормально :)

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


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

Так у вас ножка опорного напряжения АЦП как запитана? Если ее нет, то как фильтруется напряжение питания? Может, там ВЧ наводки? Конденсаторов на питание, разных, и побольше. :)

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


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

Так у вас ножка опорного напряжения АЦП как запитана? Если ее нет, то как фильтруется напряжение питания? Может, там ВЧ наводки? Конденсаторов на питание, разных, и побольше. :)

про наводки уже который раз говорю-нет наводок. глючит явно внутри процессора.

Все включено согласно даташиту как на моей плате, так и на покупной отладочной. LC фильтры присутствуют.

наводки которые могут измерится АЦП как 2-3 вольта я бы заметил 200мгц осциллографом.

питание, землю, референсное, входа, все измерял-все идеально. вход на землю замкнут.

в измерениях АЦП якобы помехи в 2-3 вольта показывает

Изменено пользователем Scuby

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


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

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

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

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

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

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

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

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

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

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