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

 
 
> STM32 ADC - injected channels
acorn
сообщение Nov 21 2010, 17:41
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 58
Регистрация: 28-11-05
Пользователь №: 11 495



Коллеги,

простой вопрос.
Изучаю документацию на STM32F1xx. Раздел про ADC описывает regular и injected channels. Теперь я знаю как конфигурить те и другие, как читать результат и т.п. Чего я не понимаю, так это в чем между ними разница?
Может кто-нить простыми словами объяснить зачем нужны injected-каналы?

Спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 10)
acorn
сообщение Nov 21 2010, 19:33
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 58
Регистрация: 28-11-05
Пользователь №: 11 495



Разобрался.
Ничем не отличаются, кроме возможности прервать обработку regular-каналов по событию, обработать более приоритетные (injected) и продолжить обработку обычных.
Как-то так.
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Nov 21 2010, 20:26
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Ну и ещё такая фишка, что инжектированные идут напрямую в регистры. То есть 4 регистра отдельных. Каждому каналу - свой. Кроме того, есть возможность прибавить смещение, но это уже мелочь.

Я не смог найти, как можно запустить только инжектированные измерения без регулярных. Похоже нельзя.
Go to the top of the page
 
+Quote Post
acorn
сообщение Nov 21 2010, 20:41
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 58
Регистрация: 28-11-05
Пользователь №: 11 495



Цитата(SasaVitebsk @ Nov 21 2010, 22:26) *
Я не смог найти, как можно запустить только инжектированные измерения без регулярных. Похоже нельзя.


Ага, спасибо.
С регистрами понятно, это в доке есть. Меня основная идея интересовала - зачем они (со всеми своими регистрами и смещениями) вообще понадобились. Теперь вроде ясно.
Кста, в errata есть по поводу нулевого канала пунктик (№1), и как-то невнятно рекомендуют использовать этот канал именно как инжектированный. Неужели нельзя этого сделать без регулярных каналов? Впро, я не пробовал пока.
Go to the top of the page
 
+Quote Post
zoddy
сообщение Nov 22 2010, 11:30
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 42
Регистрация: 4-12-05
Из: Екатеринбург
Пользователь №: 11 773



Цитата(SasaVitebsk @ Nov 22 2010, 01:26) *
Ну и ещё такая фишка, что инжектированные идут напрямую в регистры. То есть 4 регистра отдельных. Каждому каналу - свой. Кроме того, есть возможность прибавить смещение, но это уже мелочь.

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


Почему нельзя-то???!!! Очень даже можно! См. раздел 11.3.9 Injected channel management -> Triggered injection
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Nov 23 2010, 06:56
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Что-то в железе у меня не получилось.
Go to the top of the page
 
+Quote Post
zoddy
сообщение Nov 23 2010, 07:56
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 42
Регистрация: 4-12-05
Из: Екатеринбург
Пользователь №: 11 773



Цитата(SasaVitebsk @ Nov 23 2010, 11:56) *
Что-то в железе у меня не получилось.


Изучал работу АЦП на платке STM32F10B путем переделки готовых примеров из IAR. Вот примерчик кода.

/* ADC1 configuration ------------------------------------------------------*/
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; // режим АЦП
ADC_InitStructure.ADC_ScanConvMode = ENABLE; // режим сканирования группы каналов
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; // вкл/выкл непрерывное преобразование
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;// выравнивание
ADC_InitStructure.ADC_NbrOfChannel = 3; // количество каналов в группе
ADC_Init(ADC1, &ADC_InitStructure);

/* ADC1 regular channel14 configuration */
ADC_RegularChannelConfig(ADC1, ADC_Channel_14, 1, ADC_SampleTime_239Cycles5);
ADC_RegularChannelConfig(ADC1, ADC_Channel_14, 2, ADC_SampleTime_239Cycles5);
ADC_RegularChannelConfig(ADC1, ADC_Channel_14, 3, ADC_SampleTime_239Cycles5);

/* Set injected sequencer length */
ADC_InjectedSequencerLengthConfig(ADC1, 4);

/* ADC1 injected channel Configuration */
ADC_InjectedChannelConfig(ADC1, ADC_Channel_13, 1, ADC_SampleTime_28Cycles5);
ADC_InjectedChannelConfig(ADC1, ADC_Channel_13, 2, ADC_SampleTime_28Cycles5);
ADC_InjectedChannelConfig(ADC1, ADC_Channel_13, 3, ADC_SampleTime_28Cycles5);
ADC_InjectedChannelConfig(ADC1, ADC_Channel_13, 4, ADC_SampleTime_28Cycles5);

/* ADC1 injected external trigger configuration */
ADC_ExternalTrigInjectedConvConfig(ADC1, ADC_ExternalTrigInjecConv_None);

/* Enable ADC1 */
ADC_Cmd(ADC1, ENABLE);

/* Enable ADC1 reset calibaration register */
ADC_ResetCalibration(ADC1);
/* Check the end of ADC1 reset calibration register */
while (ADC_GetResetCalibrationStatus(ADC1));

/* Enable JEOC interupt */
ADC_ITConfig(ADC1, ADC_IT_JEOC, ENABLE); // вкл. прерывание по окончанию преобразования инжектированной группы

/* Start ADC1 calibaration */
ADC_StartCalibration(ADC1);
/* Check the end of ADC1 calibration */
while (ADC_GetCalibrationStatus(ADC1));

ADC_SoftwareStartInjectedConvCmd(ADC1, ENABLE); // программный запуск преобразования инжектированной группы
ADC_SoftwareStartConvCmd(ADC1,ENABLE); // программный запуск преобразования регулярной группы

У меня этот пример работал.
Как я понял, принцип работы групп АЦП в STM32... регулярная группа каналов может опрашиваться либо непрерывно, либо по событию ( или по программному запуску). А инжектированную группу при этом можно запустить в любой момент времени тоже
либо по триггеру, либо программно. Соответственно, если нет необходимости измерять каналы регулярной группы, а есть необходимость измерить только инжектированные каналы, мы просто запускаем измерение инжектированных каналов.

Go to the top of the page
 
+Quote Post
ViKo
сообщение Nov 23 2010, 08:27
Сообщение #8


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(zoddy @ Nov 23 2010, 09:56) *
Вот примерчик кода...

который надо оформлять с помощью тэгов [code][/code]. Они есть в панели набора сообщения в виде кнопки. А для большого объема кода - codebox.
Go to the top of the page
 
+Quote Post
(vS)
сообщение Dec 21 2010, 18:05
Сообщение #9


Частый гость
**

Группа: Участник
Сообщений: 135
Регистрация: 13-07-06
Из: С-Пб
Пользователь №: 18 778



acorn можешь свой код по АЦП показать?


--------------------
тут может быть какаято реклама
Go to the top of the page
 
+Quote Post
acorn
сообщение Dec 23 2010, 18:46
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 58
Регистрация: 28-11-05
Пользователь №: 11 495



Цитата((vS) @ Dec 21 2010, 23:05) *
acorn можешь свой код по АЦП показать?

Точно ко мне вопрос? Я с этой архитектурой только начал работать, никакого кода не анонсировал, да и показать по АЦП нечего.
Go to the top of the page
 
+Quote Post
HardEgor
сообщение Feb 18 2011, 07:09
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 2 223
Регистрация: 3-03-06
Из: Tomsk
Пользователь №: 14 925



Есть аппликуха по АЦП, там куча примеров во всех вариантах.
AN3116 STM32™’s ADC modes and their applications.
Go to the top of the page
 
+Quote Post

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

 


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


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