Например TDA7294

Форум РадиоКот • Просмотр темы - STM32f205: ADC меня игнорирует!
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Вт дек 23, 2025 22:10:36

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 37 ]    , 2
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: STM32f205: ADC меня игнорирует!
СообщениеДобавлено: Вт дек 10, 2013 11:27:17 
Прорезались зубы

Зарегистрирован: Пн окт 21, 2013 07:33:45
Сообщений: 210
Рейтинг сообщения: 0
FPGAlover писал(а):
проверял 0й и 1й и 2й

плохо проверял :-(
1й и 2й работают... два дня потерял, но нет худа без добра! - зато теперь могу похвастаться знанием АЦП :-)
а дело видимо в том, что 0й канал делят ногу с WKUP. Теперь найти бы, как направить ногу на путь истинный :-)

_________________
Шоб я польку танцевал..


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32f205: ADC меня игнорирует!
СообщениеДобавлено: Вт дек 10, 2013 11:39:37 
Прорезались зубы

Зарегистрирован: Пн окт 21, 2013 07:33:45
Сообщений: 210
Рейтинг сообщения: 0
все стало на свои места!

RM0033 писал(а):
PWR power control/status register (PWR_CSR)
Bit 8 EWUP: Enable WKUP pin
This bit is set and cleared by software.
0: WKUP pin is used for general purpose I/O.
An event on the WKUP pin does not wakeup
the device from Standby mode.
1: WKUP pin is used for wakeup from Standby mode and forced in input pull down
configuration (rising edge on WKUP pin wa
kes-up the system from Standby mode).
Note: This bit is reset by a system reset

_________________
Шоб я польку танцевал..


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32f205: ADC меня игнорирует!
СообщениеДобавлено: Вт дек 10, 2013 12:11:21 
Друг Кота
Аватар пользователя

Карма: 30
Рейтинг сообщений: 156
Зарегистрирован: Пн июл 28, 2008 22:12:01
Сообщений: 3604
Рейтинг сообщения: 0
FPGAlover писал(а):
все стало на свои места!


И ADC отличается от ADC других линеек только "незначительными нюансами " . :))))))))
Зато эти грабли надолго запомнишь- как бы не прославляли SPL от чтения даташита она не освободит...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32f205: ADC меня игнорирует!
СообщениеДобавлено: Вт дек 10, 2013 12:22:10 
Прорезались зубы

Зарегистрирован: Пн окт 21, 2013 07:33:45
Сообщений: 210
Рейтинг сообщения: 0
Ну блин. Я же пользую SPL исключительно ради читабельности кода, а разбираюсь по даташитам...
Все: теперь трипл-мод возводить. Благо все регистры перековырял, и если скрытых граблей не попадется, - то все должно прокатить быстро и безболезненно :-)

Кстати, никто не знает кем ДМА запрос формируется в мульти модах АЦП?
я так понимаю, что это в регистре ADC_CCR надо настроить, а в ADC1..3->CR2 надо запретить. или же в ADC1 разрешить.

_________________
Шоб я польку танцевал..


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Не в сети
 Заголовок сообщения: Re: STM32f205: ADC меня игнорирует!
СообщениеДобавлено: Вт дек 10, 2013 17:06:33 
Прорезались зубы

Зарегистрирован: Пн окт 21, 2013 07:33:45
Сообщений: 210
Рейтинг сообщения: 0
Итак, наступил на грабли SPL :-)
Ну вот совсем не очевидно, что после
Код:
  // конфигурируем трипл мод
  ADC_CommonInitTypeDef  ADC_CommonStructure;
  ADC_CommonStructure.ADC_Mode = ADC_TripleMode_RegSimult;
  ADC_CommonStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_1; //Disabled,1,2,3
  ADC_CommonStructure.ADC_Prescaler = ADC_Prescaler_Div2; //2,4,6,8
  ADC_CommonStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles; //5..20 cycles роляет только в интерливед моде
  ADC_CommonInit(&ADC_CommonStructure);
 

нужно добить танцем
Код:
  ADC_MultiModeDMARequestAfterLastTransferCmd(ENABLE);

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

_________________
Шоб я польку танцевал..


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32f205: ADC меня игнорирует!
СообщениеДобавлено: Вт дек 17, 2013 22:51:05 
Родился

Зарегистрирован: Ср дек 26, 2012 16:39:10
Сообщений: 3
Рейтинг сообщения: 0
FPGAlover писал(а):
В общем все заработало, осталось доработать напильником. Если кому интересно - могу выложить код

Выложите, буду благодарен. Кстати, а что за девайс должен выйти?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32f205: ADC меня игнорирует!
СообщениеДобавлено: Вс дек 22, 2013 01:45:05 
Прорезались зубы

Зарегистрирован: Пн окт 21, 2013 07:33:45
Сообщений: 210
Рейтинг сообщения: 0
Edal писал(а):
Кстати, а что за девайс должен выйти?

3х канальный осциллограф.

Код:
uint16_t adc_buffer[1024*3]; // сюда будем сбрасывать данные с АЦП 1,2,3,1,2,3,...

void ADC_multi_test(void)
{
 ADC_config();
 dma_config();
 ADC_Cmd(ADC1, ENABLE);
 ADC_Cmd(ADC2, ENABLE);
 ADC_Cmd(ADC3, ENABLE);
 ADC_SoftwareStartConv(ADC1);  // стартуется АЦП №1 как мастер
  while(DMA_GetCurrDataCounter(DMA2_Stream0)>0) // тут висим в ожидании окончания ДМА. Можно организовать и через прерывание, но в моей задаче не имеет смысла
 {
 }; // ждем окончания ДМА
 
 ADC_Cmd(ADC1, DISABLE);  //экономим электричество
 ADC_Cmd(ADC2, DISABLE);
 ADC_Cmd(ADC3, DISABLE);
 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2, DISABLE);
}


// тут настраиваем как АЦП так и порты
void ADC_config(void)
{
  //настройка пинов АЦП
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE); // а надо ли тактировать аналоговый вход???
  PWR->CSR  &= ~PWR_CSR_EWUP; //пин PA0 должен работать на ввод/вывод а не на WKUP
 
  GPIO_InitTypeDef GPIO_InitStruct;
  GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2;
  GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AN;
  GPIO_Init(GPIOA, &GPIO_InitStruct);
 
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC2,ENABLE);
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC3,ENABLE);
   
  ADC_InitTypeDef  ADC_InitStructure;
  ADC_InitStructure.ADC_Resolution           = 12;
  ADC_InitStructure.ADC_ScanConvMode         = DISABLE; //ENABLE; // пофиг как последовательность повторяется от 1 до 16 или 1долбит
  ADC_InitStructure.ADC_ContinuousConvMode   = ENABLE;//ENABLE;
  ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
  ADC_InitStructure.ADC_ExternalTrigConv     = ADC_ExternalTrigConv_T1_CC1; // это не имеет значения из за предыдущей строчки. Запуск будет программный
  ADC_InitStructure.ADC_DataAlign            = ADC_DataAlign_Right;
  ADC_InitStructure.ADC_NbrOfConversion      = 1;
 
  ADC_Init(ADC1, &ADC_InitStructure);
  ADC_Init(ADC2, &ADC_InitStructure);
  ADC_Init(ADC3, &ADC_InitStructure);

  ADC_RegularChannelConfig( ADC1,ADC_Channel_0,1,ADC_SampleTime_15Cycles);
  ADC_RegularChannelConfig( ADC2,ADC_Channel_1,1,ADC_SampleTime_15Cycles);
  ADC_RegularChannelConfig( ADC3,ADC_Channel_2,1,ADC_SampleTime_15Cycles);
  // конфигурируем трипл мод
  ADC_CommonInitTypeDef  ADC_CommonStructure;
  ADC_CommonStructure.ADC_Mode = ADC_TripleMode_RegSimult;
  ADC_CommonStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_1; //Disabled,1,2,3
  ADC_CommonStructure.ADC_Prescaler = ADC_Prescaler_Div2; //2,4,6,8
  ADC_CommonStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles; //5..20 cycles роляет только в интерливед моде, в данном примере не имеет значения
  ADC_CommonInit(&ADC_CommonStructure);
  ADC_MultiModeDMARequestAfterLastTransferCmd(ENABLE);// запрос на ДМА будет генериться после каждого преобразования
  ADC->CCR |= ADC_CCR_TSVREFE; // включаем сенсор на всякий случай. для примера не критично
}

void dma_config(void)
{
    DMA_InitTypeDef DMA_InitStructure;
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2, ENABLE);
    DMA_DeInit(DMA2_Stream0);
    DMA_InitStructure.DMA_Channel = DMA_Channel_0;
    DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t) &ADC->CDR; //регистр данных АЦП в мульти моде
    DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t) &adc_buffer[0];
    DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;
    DMA_InitStructure.DMA_BufferSize = 1024*3;//ARRAY_LENGHT(adc_buffer);
    DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
    DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
    DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
    DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
    DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;//DMA_Mode_Circular;
    DMA_InitStructure.DMA_Priority = DMA_Priority_High;
    DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;
    DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;
    DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
    DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
    DMA_Init(DMA2_Stream0, &DMA_InitStructure);
    DMA_Cmd(DMA2_Stream0, ENABLE);
}

_________________
Шоб я польку танцевал..


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32f205: ADC меня игнорирует!
СообщениеДобавлено: Вс дек 22, 2013 19:06:23 
Родился

Зарегистрирован: Ср дек 26, 2012 16:39:10
Сообщений: 3
Рейтинг сообщения: 0
FPGAlover писал(а):
Edal писал(а):
Кстати, а что за девайс должен выйти?

3х канальный осциллограф.

Спасибо за код. А чего не на STM32f303/313, там ведь ADC пошустрее будет?
В теме об самодельном осциллографе выкладывали результаты разработок(но не код к сожалению) на STM32F3DISCOVERY - вполне прилично получилось


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32f205: ADC меня игнорирует!
СообщениеДобавлено: Вс дек 22, 2013 23:38:40 
Прорезались зубы

Зарегистрирован: Пн окт 21, 2013 07:33:45
Сообщений: 210
Рейтинг сообщения: 0
FPGAlover писал(а):
А чего не на STM32f303/313, там ведь ADC пошустрее будет?

Ну, что под рукой было то и осваиваю...
А он действительно шустрее?
Я думал, что 2мгц (на 12 бит) это предел для STM32... Обещают дельтасигму вроде, но не в курсе пока.
Посмотрел... Действительно шустрее :-) 5мгц x 4. Нехило, однако. И кроме всего прочего операционники на борту. Не хватает только цифровых потенциометров для полного счастья :))
Посмотрел еще повнимательнее, всетаки 5мгц x 2. Оцифровать 4канала синхронно получится. А вот как засинхронизировать ADC12 и ADC34 в interlived mode, что бы получить 20 Мгц, почти без идей. Разве что счетчиками меандр с нужной скважностью задать и разными фронтами блоки ADC12 и ADC34 запускать... типа такого:
Код:
 ____             ____
/50ns\__150ns___ /50ns\__150ns___/
1    3   2    4   1    3    2    4     <- запуски ADC

Но пока нет уверенности, что это реализуемо.

_________________
Шоб я польку танцевал..


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32f205: ADC меня игнорирует!
СообщениеДобавлено: Пн дек 23, 2013 17:25:54 
Это не хвост, это антенна
Аватар пользователя

Карма: 12
Рейтинг сообщений: 102
Зарегистрирован: Вс дек 02, 2012 03:13:48
Сообщений: 1433
Откуда: Калининград
Рейтинг сообщения: 0
Про STM32F303
Можно запустить два таймера одновременно в MASTER/SLAVE режимах. Потом выставить скажем разные PWM задержки на них и уже от этого закпускать ADC12 и ADC34 в continuous dual mode. Теоретически все должно работать, но не пробовал. Лично мне с запасом хватает и двух каналов.

Сэмплирование 1.5 такта - это как мне кажется несколько экстремально. Разумнее выбирать консервативные 7.5 такта.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32f205: ADC меня игнорирует!
СообщениеДобавлено: Пн дек 23, 2013 18:27:14 
Прорезались зубы

Зарегистрирован: Пн окт 21, 2013 07:33:45
Сообщений: 210
Рейтинг сообщения: 0
С таймер-счетчиками пока не бодался, отсюда и сомнения :-)
Кстати, пока не пробовал, да и в случае неудачи программно должно фиксится.
Вопрос такой: Если один и тот же канал одновременно оцифровывать разными АЦП. Насколько будет разница полученного результата (смещение) ?
понятное дело, программно это легко решается, но в некоторых случаях не совсем удобно.

И вот еще вопрос по поводу культурного шока: сегодня у меня открылись глаза на факт, что в микроконтроллер встраивают компараторы и ОУ. По этому поводу, подскажите, пожалуйста, наиболее мощные решения однокристалок со встроенным аналоговым обвесом (не обязательно АРМ :-) ), заточенных на построение измерительных систем (не особо прецизионных).

_________________
Шоб я польку танцевал..


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32f205: ADC меня игнорирует!
СообщениеДобавлено: Пн дек 23, 2013 19:09:03 
Это не хвост, это антенна
Аватар пользователя

Карма: 12
Рейтинг сообщений: 102
Зарегистрирован: Вс дек 02, 2012 03:13:48
Сообщений: 1433
Откуда: Калининград
Рейтинг сообщения: 0
FPGAlover писал(а):
Вопрос такой: Если один и тот же канал одновременно оцифровывать разными АЦП.


Так на STM32F303 делать нельзя.
Точнее можно на низких частотах.
На высоких - каждый канал на отдельную ножку, и отдельную RC цепочку.


FPGAlover писал(а):
в микроконтроллер встраивают компараторы и ОУ.


В STM32F303 ОУ довольно шумный. Максимум для чего подходит - повысить входное сопротивление ADC да усилить в 2-3 раза сигнал, что вобщем тоже приятно :)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32f205: ADC меня игнорирует!
СообщениеДобавлено: Пн дек 23, 2013 19:39:39 
Прорезались зубы

Зарегистрирован: Пн окт 21, 2013 07:33:45
Сообщений: 210
Рейтинг сообщения: 0
FPGAlover писал(а):
В STM32F303 ОУ довольно шумный

Ну, как бы, там вокруг цифра кипит :-) с другой стороны аналоговая часть расположена на одной части кристалла. Немного удручает , что выход 4го ОУ и его его входы разделены цифровым питанием (для 48 пинового корпуса) :shock: . Как по вашему? если расположить полигон аналоговой земли под этой частью? на сколько это поможет?

_________________
Шоб я польку танцевал..


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32f205: ADC меня игнорирует!
СообщениеДобавлено: Вт дек 24, 2013 02:03:02 
Прорезались зубы

Зарегистрирован: Пн окт 21, 2013 07:33:45
Сообщений: 210
Рейтинг сообщения: 0
balmer писал(а):
Максимум для чего подходит - повысить входное сопротивление ADC да усилить в 2-3 раза сигнал, что вобщем тоже приятно :)

И все таки. Допустим я снимаю 40кгц-овый ультразвук муратовскими датчиками. Ориентировочно мне надо 2-3тыс коэф. усиления. При этом, в конечном счете в ход пускается программный фильтр нехилого порядка, так как отклик предпологается порядка 10 периодов. Естественно я ставлю 2 каскада. 1й внешний с аналоговым фильтром, маленького порядка, и 2й чисто усилительный. Остальное решает ЦОС. По идее, для этой задачи и встроенными усилителями можно обеспечить кф 50. Главное, чтоб ВЧ в ограничение не врубались :-)
А по хорошему надо пдф просмотреть внимательно по поводу характеристик АЦП.

_________________
Шоб я польку танцевал..


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32f205: ADC меня игнорирует!
СообщениеДобавлено: Вт дек 24, 2013 10:22:52 
Родился

Зарегистрирован: Ср дек 26, 2012 16:39:10
Сообщений: 3
Рейтинг сообщения: 0
FPGAlover писал(а):
FPGAlover писал(а):
А чего не на STM32f303/313, там ведь ADC пошустрее будет?

Ну, что под рукой было то и осваиваю...
А он действительно шустрее?
Я думал, что 2мгц (на 12 бит) это предел для STM32... Обещают дельтасигму вроде, но не в курсе пока.
Посмотрел... Действительно шустрее :-) 5мгц x 4. Нехило, однако. И кроме всего прочего операционники на борту. Не хватает только цифровых потенциометров для полного счастья :))
Посмотрел еще повнимательнее, всетаки 5мгц x 2. Оцифровать 4канала синхронно получится. А вот как засинхронизировать ADC12 и ADC34 в interlived mode, что бы получить 20 Мгц, почти без идей. Разве что счетчиками меандр с нужной скважностью задать и разными фронтами блоки ADC12 и ADC34 запускать... типа такого:
Код:
 ____             ____
/50ns\__150ns___ /50ns\__150ns___/
1    3   2    4   1    3    2    4     <- запуски ADC

Но пока нет уверенности, что это реализуемо.

Вроде возможно
СпойлерИзображение

Взято отсюда http://radiokot.ru/forum/viewtopic.php?f=10&t=10324&start=960
почитайте с начала страницы(не забывая смотреть картики во вложениях)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32f205: ADC меня игнорирует!
СообщениеДобавлено: Вт дек 24, 2013 10:32:59 
Это не хвост, это антенна
Аватар пользователя

Карма: 12
Рейтинг сообщений: 102
Зарегистрирован: Вс дек 02, 2012 03:13:48
Сообщений: 1433
Откуда: Калининград
Рейтинг сообщения: 0
FPGAlover писал(а):
По идее, для этой задачи и встроенными усилителями можно обеспечить кф 50.


Да может быть.
Хотя лично я не смог воспользоваться.
Потому, что ОУ там напрямую без RC цепочки подключается к ADC.

Там есть такая чудная вещь, как PGA резистивный делитель, для задания коэффициента усиления. Но он подключен так, что усиливает сигнал относительно нуля (если ничего не путаю).
Мне бы очень пригодился усилитель с PGA встроенный в STM32, если бы можно было задать центральную точку как VREF/2. А так не смог ни для чего путного использовать. В конце концов прикрутил внешний MCP6S21 усилитель. :?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32f205: ADC меня игнорирует!
СообщениеДобавлено: Вт дек 24, 2013 10:34:23 
Это не хвост, это антенна
Аватар пользователя

Карма: 12
Рейтинг сообщений: 102
Зарегистрирован: Вс дек 02, 2012 03:13:48
Сообщений: 1433
Откуда: Калининград
Рейтинг сообщения: 0
Edal писал(а):


Там вариант без DMA, а это "жесть".


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 37 ]    , 2

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 17


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y