реклама на сайте
подробности

 
 
> АЦП в LPC1768
Allregia
сообщение Aug 18 2011, 09:31
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763



возникала непонятка с burst режимом в LPC1768:
включен 1 вход, подключенный к потенциометру, данные с его регистра рещультата переписываются в ЦАП.
Кручу потенциометр и смотрю осциллографом выход ЦАПа - там все меняется о 0 до 3в, но - периодически проскакивают ипульсы, то вверх то вниз, колеблящейся амплитуды, доходящей до 0 и до питания.
Если ставлю потенциометр в 0, то на выходе ЦАПа ноль, с положительными импульсами, если ставлю потенциометр в макс - на вхыоде 3в и импульсами до нуля (не всегда. амплитуд дрожит).
Длительность импульсов около 8мкс.
Про работает на 100мгц, частота периферии вся 1/4. В программе работает только прерывание SysTick и мертвый цикл в мейне:
Код такой:
Код
//------------------------------------------------------------------------------
void ADC_Init (void) {

  LPC_PINCON->PINSEL3 &= ~(3UL<<30);               /* P1.31 is GPIO */
  LPC_PINCON->PINSEL3 |=  (3UL<<30);               /* P1.31 is AD0.5 */

  LPC_SC->PCONP       |=  (1<<12);               /* Enable power to ADC block */

  LPC_ADC->ADCR        =  (1<< 5) |              /* select AD0.5 pin */
                                    (4<< 8) |              /* ADC clock is 25MHz */
                                    (1<<16) |              // burst  mode
                                    (1<<21);               /* enable ADC */
}
//--------------------------------------------------------------------------------
void DAC_Init(void){
      LPC_PINCON->PINSEL1 |= (2UL<<20);    /* set p0.26 to DAC output */  
      LPC_DAC->DACCTRL |=(1<<1); // dowble buffer  
}
//--------------------------------------------------------------------------------
int main(void){
  if (SysTick_Config(SystemCoreClock / 1000)) { // Setup SysTick Timer for 1 msec interrupts  
    while (1);                                  // Capture error
  }
  
  halPORTS_Config(); // конфигурирование портов
  DAC_Init();
  ADC_Init();
  while(1){
    LPC_DAC->DACR = 0xFFC0 & LPC_ADC->ADDR5;
  }
}


Да, в периоде этих пичков я никакой закономерности не увидел.
Проблема точно в АЦП, т.к. если я просто постоянно пишщу в ЦАП констанку, то на выходе пичков нет.
Возможно это из-за асинхронного (по сравнению с конверсией) чтения регистра результата АЦП, но тогда я не очень понимаю как барст должен работать. Я полагал что его можно читать в произвольный момент времени.
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 15)
scifi
сообщение Aug 18 2011, 09:40
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Кажется, это уже обсуждалось: треск АЦП LPC1768.
Go to the top of the page
 
+Quote Post
Allregia
сообщение Aug 18 2011, 10:02
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763



Барст оказался не причем: когда я его убрал (не устанавливаю 16-й бит в конциге АЦП), а сделал вручную:
Код
  while(1){
    LPC_ADC->ADCR |=  (1<<24);                     /* start conversion */
    while (!(LPC_ADC->ADGDR & (1UL<<31)));         /* Wait for Conversion end */
    LPC_DAC->DACR = LPC_ADC->ADGDR &0xFFC0;
    LPC_ADC->ADCR &= ~(7<<24);                     /* stop conversion */
  }


Получил те-же импульсы!

Цитата
Кажется, это уже обсуждалось: треск АЦП LPC1768.


Спасибо, сейчас почитаю.

Почитал. Так что, получается это глюк этого процессора, и его АЦП вообще нельзя пользоваться, если не фильтровать эти глитчи?!
Go to the top of the page
 
+Quote Post
Allregia
сообщение Aug 19 2011, 10:42
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763



Чтобы убрать эти глитчи, написал вот такой медианнный фильтр по 3-м точкам. Но может мжно как-то проще?

Код
uint32_t Med(uint32_t D){
static uint32_t DataArray[3]={0,0,0};
uint32_t Res,Max, Min,MaxV, MinV,i;

   Res=0;
   Max=Min=0;
   DataArray[2]=D;
   MaxV=DataArray[Max];
   MinV=DataArray[Min];
   for(i=1;i<3;i++){ // search max/min
      if(DataArray[i]>MaxV){
         Max=i; MaxV=DataArray[i];
      }
      if(DataArray[i]<MinV){
       Min=i;  MinV=DataArray[i];
      }
   }

  for(i=0;i<3;i++){  // select index not equal to Min or Max
    if((i!=Min)&&(i!=Max)){
      Res=i; break;
    }
  }
  DataArray[0]=DataArray[1];
  DataArray[1]=DataArray[2];
  return DataArray[Res];
}
Go to the top of the page
 
+Quote Post
Allregia
сообщение Aug 21 2011, 11:40
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763



Народ, ну помогите-же кто-нибудь!

простой код:
Код
  while(1){
    while (!((Res=LPC_ADC->ADDR5) & (1UL<<31)));         // Wait for Conversion end
    LPC_DAC->DACR = Res &0xFFC0;
}


Потоенциометр на входе АЦП стоит на нуле, что на выходе ЦАПа - видно на фотке.
Медианный фильтр что я привел выше - не помогает.
Ну я уже не знаю что делать!!!
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Allregia
сообщение Aug 23 2011, 05:17
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763



В итоге, решили от LPC1768 в окончательной версии продукта избавится, поставим PIC32.
На надежность и качество изделий Микрочипа вроде никогда нареканий небыло.
Go to the top of the page
 
+Quote Post
Porty
сообщение Aug 23 2011, 10:51
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 246
Регистрация: 28-05-08
Из: г. Ижевск
Пользователь №: 37 893



опыт показал что это ошибка внутреннего устройства контроллера, где то результат либо не защелкивается либо мультипликсируется как попало. Но если подшаманить настройками никак не влияющими на ADC, например скоростью SPI то можно получить гарантированную работоспособность ADC на разных кристаллах в разных условиях с полным циклом испытаний (климатика, е-м совместимость и тд). Как побобрать - мы подбирали наугад. Просто брали например настройки делителя SPI и повышали или понижали скорость благо запас был. При этом всё стабильно работало, как бы не дорабатывай программу алгоритмически не изменяя скорости работы переферии и частот. Так же можно было изменять режимы работы ADC и разные периоды оцифровки.
Go to the top of the page
 
+Quote Post
Allregia
сообщение Aug 23 2011, 11:15
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763



Цитата
Так же можно было изменять режимы работы ADC и разные периоды оцифровки.


Пробовал. На "гличи" это не влияло.
Go to the top of the page
 
+Quote Post
Porty
сообщение Aug 23 2011, 12:12
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 246
Регистрация: 28-05-08
Из: г. Ижевск
Пользователь №: 37 893



насчёт стабильности у LPC1768 проблемы не только с АЦП а вообще с любым внешним интерфейсом, как оказалось что захват значения таймера по фронту сигнала очень сильно глючит если этот фронт имеет время нарастания/спада более 1нс и тд. А так же с SPI - выхода SPI имеют время нарастания и спада от 5 до 10нс что очень плохо для FPGA без входов шмитта ибо у них быстродействие сотни МГц и приводит к ложному клоку во время перехода в области неопределённого состояния.
Тут сам чип весьма неудачный. но если нужно дёшево то в принципе фильтрами обвешать реально возможно и всё будет стабильно работать.
Go to the top of the page
 
+Quote Post
Allregia
сообщение Aug 26 2011, 17:08
Сообщение #10


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763



Да, я уже понял что этот проц какой-то недоделанный sad.gif
Go to the top of the page
 
+Quote Post
HARMHARM
сообщение Aug 28 2011, 18:59
Сообщение #11


читатель даташитов
****

Группа: Свой
Сообщений: 853
Регистрация: 5-11-06
Из: Днепропетровск
Пользователь №: 21 999



Цитата(Allregia @ Aug 26 2011, 20:08) *
Да, я уже понял что этот проц какой-то недоделанный sad.gif

Причем LPC2368 работает без нареканий...
Go to the top of the page
 
+Quote Post
Axel
сообщение Sep 13 2011, 07:57
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 480
Регистрация: 21-11-04
Пользователь №: 1 188



LPC1778 тоже вроде не глючит (в смысле АЦП)...
Go to the top of the page
 
+Quote Post
HARMHARM
сообщение Sep 18 2011, 14:51
Сообщение #13


читатель даташитов
****

Группа: Свой
Сообщений: 853
Регистрация: 5-11-06
Из: Днепропетровск
Пользователь №: 21 999



Цитата(Axel @ Sep 13 2011, 10:57) *
LPC1778 тоже вроде не глючит (в смысле АЦП)...

Возможно. Зато errata по RTC и USB Host убивает наповал.
А в свежей сентябрьской errata добавили еще и ограничение по скорости ISP 57600. Фантастика.
Go to the top of the page
 
+Quote Post
Alechek
сообщение Sep 19 2011, 12:44
Сообщение #14


Профессионал
*****

Группа: Свой
Сообщений: 1 241
Регистрация: 15-11-05
Из: Челябинск
Пользователь №: 10 882



А где сентябрьская? smile3046.gif

на сайте вижу
Цитата
English LPC176x Errata Sheet V9 (Jun 1, 2011)

Или NXP как всегда тормозят с обновлением ссылок?
Go to the top of the page
 
+Quote Post
HARMHARM
сообщение Sep 19 2011, 14:45
Сообщение #15


читатель даташитов
****

Группа: Свой
Сообщений: 853
Регистрация: 5-11-06
Из: Днепропетровск
Пользователь №: 21 999



Нашел случайно через гугль тут.
Go to the top of the page
 
+Quote Post
Altemir
сообщение Jan 18 2012, 21:33
Сообщение #16


Местный
***

Группа: Свой
Сообщений: 249
Регистрация: 2-05-06
Из: Россия, Поволжье
Пользователь №: 16 686



Цитата(HARMHARM @ Sep 18 2011, 18:51) *
Возможно. Зато errata по RTC и USB Host убивает наповал.

По RTC, как понимаю, проблема в потере одной секунды на тысячу циклов включения/выключения? Решение через RC-цепочку лечит, вроде. Не пробовали? В целом камнем LPC177x довольны? Правильно ли я понял, что предельная частота SDRAM-контроллера 80МГц?

P.S. Прошу прощения, что вклинился в тему, но ради пары вопросов отдельный топик создавать не стал.
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th July 2025 - 21:03
Рейтинг@Mail.ru


Страница сгенерированна за 0.01505 секунд с 7
ELECTRONIX ©2004-2016