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

STM32 ADC - injected channels

Коллеги,

 

простой вопрос.

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

Может кто-нить простыми словами объяснить зачем нужны injected-каналы?

 

Спасибо.

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


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

Разобрался.

Ничем не отличаются, кроме возможности прервать обработку regular-каналов по событию, обработать более приоритетные (injected) и продолжить обработку обычных.

Как-то так.

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


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

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

 

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

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


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

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

 

Ага, спасибо.

С регистрами понятно, это в доке есть. Меня основная идея интересовала - зачем они (со всеми своими регистрами и смещениями) вообще понадобились. Теперь вроде ясно.

Кста, в errata есть по поводу нулевого канала пунктик (№1), и как-то невнятно рекомендуют использовать этот канал именно как инжектированный. Неужели нельзя этого сделать без регулярных каналов? Впро, я не пробовал пока.

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


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

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

 

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

 

Почему нельзя-то???!!! Очень даже можно! См. раздел 11.3.9 Injected channel management -> Triggered injection

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


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

Что-то в железе у меня не получилось.

 

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

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

 

 

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


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

Вот примерчик кода...

который надо оформлять с помощью тэгов


. Они есть в панели набора сообщения в виде кнопки. А для большого объема кода - codebox.

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


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

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

Точно ко мне вопрос? Я с этой архитектурой только начал работать, никакого кода не анонсировал, да и показать по АЦП нечего.

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


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

Есть аппликуха по АЦП, там куча примеров во всех вариантах.

AN3116 STM32™’s ADC modes and their applications.

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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