STM Урок 196. LL. STM32F1. ADC. Injected Once Scan

 

 

 

Продолжаем работать с АЦП (ADC) контроллера STM32F1 с использованием библиотеки LL. Также работать мы продолжим с инжектированной группой.

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

Чтобы работать с количеством каналов более одного в инжектированной группе, необходимо использовать режим SCAN, который сканирует сразу несколько каналов в заданной последовательности. Где именно задаётся последовательность эта, мы уже говорили. Также режим SCAN мы уже использовали с регулярной группой в уроках 189-191.

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

Схема урока остаётся прежней, причём использовать мы теперь, как вы поняли, её будем полностью – все 4 делителя

 

 

Проект для нашего урока мы сделаем из проекта урока 192 с именем LL_ADC_INJ_ONCE и присвоим ему теперь имя LL_ADC_INJ_ONCE_SCAN.

Запустим наш проект в Cube MX и включим следующие 3 канала ADC1

 

 

Мы видим, что теперь у нас для ADC задействованы ещё 3 ножки порта

 

 

Настроим также количество сканируемых каналов

 

 

Засчёт этого у нас включился автоматически режим сканирования последовательности каналов

 

 

Также настроим добавившиеся 3 позиции последовательности каналов, выбрав для них требуемый интервал между выборками и нужный канал

 

 

Хотя, в принципе, все наши настройки ничего нам сейчас не дадут, так как мы не пользуемся сгенерированной автоматически инициализации. Но будем всё же надеяться на то, что когда-то это недоразумение поправят и мы впоследствии всё же воспользуемся автоматикой и удалим из функции main() нашу самостоятельную инициализацию.

Сгенерируем проект, откроем его в Keil, настроим программатор на автоперезагрузку, отключим оптимизацию и добавим к дереву проектов файлы lcd.c и i2c_user.c. и в функции main() файла main.c сделаем наши локальные переменные четырёхэлементными массивами, а строковый массив немного увеличим

 

__IO uint16_t ADC_Data[4];

__IO uint16_t ADC_mVolt[4];

char str01[20];

 

Установим длину последовательности для сканирования

 

 

Тем самым мы в битовом поле JL регистра JSQR установим оба бита.

Включим режим SCAN. Эта настройка работает как для регулярной, так и для инжекторной групп

 

 

 

Аналогично первому, настроим остальные три канала

 

 

Выведем ещё одну строку на дисплей

 

 

В бесконечном цикле вместо переменной используем нулевой элемент массива для считывания данных из регистра первого канала

 

ADC_Data[0] = LL_ADC_INJ_ReadConversionData12(ADC1, LL_ADC_INJ_RANK_1);

 

Считаем остальные регистры в соответствующие элементы массива

 

 

Преобразование и вывод в вольты наших показателей пока удалим

 

ADC_mVolt = __LL_ADC_CALC_DATA_TO_VOLTAGE((uint32_t)3275, ADC_Data, LL_ADC_RESOLUTION_12B);

sprintf(str01,"%.2fv",(float)ADC_mVolt/1000.);

 

Вместо этого применим цикл, в котором преобразуем показания сигнала всех каналов и затем выведем их на дисплей

 

 

Соберём код, прошьём контроллер и посмотрим, как у нас теперь всё будет работать

 

 

 

 

 

Всё работает отлично, показания оперативно снимаются со всех каналов.

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

Всем спасибо за внимание!

 

Предыдущий урок Программирование МК STM32 Следующий урок

 

Исходный код

 

 

Отладочную плату STM32F103C8T6 можно приобрести здесь STM32F103C8T6

Программатор недорогой можно купить здесь ST-Link V2

Дисплей LCD 16×2

Переходник I2C to LCD можно приобрести здесьI2C to LCD1602 2004

Логический анализатор 16 каналов можно приобрести здесь

 

 

Смотреть ВИДЕОУРОК (нажмите на картинку)

 

STM LL. STM32F1. ADC. Injected Once Scan

2 комментария на “STM Урок 196. LL. STM32F1. ADC. Injected Once Scan
  1. На исходный код ссылка битая!
    Исправьте?

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*