0 / 0 / 0
Регистрация: 05.04.2019
Сообщений: 6
1

Порядок оцифровки групп регулярных каналов АЦП в режиме dual mode

20.04.2019, 15:49. Показов 1468. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Ситуация... моделирую на плате stm32f103c8t6 режим АЦП dual regular simultaneous only. Настроил четыре канала (два для каждого АЦП):

АЦП1 АЦП2
IN1 Rank 1 IN2 Rank 2
IN3 Rank 2 IN4 Rank 1

оцифрованные значения получаю в прерывании от DMA по переполнению массива под все четыре канала. Всё работает корректно: в массив первыми заносятся значения каналов IN1 и IN2, затем IN3 и IN4. Однако, если работать с шестью каналами:

АЦП1 АЦП2
IN1 Rank 1 IN2 Rank 3
IN3 Rank 2 IN4 Rank 2
IN5 Rank 3 IN6 Rank 1

то происходит следующее: порядок оцифровки принимает непонятный для меня порядок IN5, IN4, IN1, IN2, IN3, IN6.
Т.е. фактически IN5 "толкает на преобразование IN4", а IN3 - IN6. И это не смотря на ранги каналов.
Пробовал настроить восемь каналов аналогичным образом - ситуация похожая, опрос каналов не соответствует настройкам рангов.
Повторюсь, что в случае четырёх каналов всё работает нормально.

Для настройки использую CubeMX, проекты создавались по десятку раз, пробовал менять настройки рангов. Никакой вариант не позволил получить порядок оцифровки соответствующий рангам. Нет проблемы, чтобы работать и так (экспериментально определить порядок оцифровки каналов и схему соответственно разрабатывать с учётом этого), но вопрос интересный и разобраться не могу уже две недели. Может кто-нибудь может объяснить от чего зависит порядок оцифровки в этом режиме. И как получить следующий порядок:
IN1 - IN2, IN3 - IN4, IN5 - IN6, IN7 - IN8?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.04.2019, 15:49
Ответы с готовыми решениями:

Discontinuous mode в dual режиме АЦП STM32
Здравствуйте! начинаю изучать программирование мк stm32 на базе китайской платки с контроллером...

STM32F373 SDADC порядок оцифровки каналов
Доброго времени суток. Столкнулся с такой проблемкой... Настроил все три Сигма-Дельта АЦП. Каждый...

Опрос нескольких регулярных каналов АЦП STM32F100
Всем привет! Проблема с опросом нескольких регулярных каналов АЦП STM32F100 (Отл плата STM32F100VL...

Подключение АЦП в Dual mode для STM32F3xx
Пытаюсь понять как лучше всего подключать МК к источнику сигнала в том случае, когда АЦП работает в...

АЦП в Auto Trigger mode от таймера в CTC mode (atmega644)
Задача: прочитать данные с АЦП когда счетчик таймера совпадет со значением в регистре сравнения....

7
210 / 163 / 36
Регистрация: 15.11.2012
Сообщений: 788
21.04.2019, 00:35 2
А что такое ранги каналов?
0
0 / 0 / 0
Регистрация: 05.04.2019
Сообщений: 6
21.04.2019, 00:53  [ТС] 3
В этом режиме (dual regular simultaneous only) одновременно опрашиваются два канала, один настроен на оцифровку первым АЦП, другой - вторым АЦП. Например, IN0 - АЦП1, IN1 - АЦП2. В данном случае (когда используется по одному каналу на каждом АЦП) ранги и не нужны. А вот, если каналов больше, то можно указать с какого начинать преобразование. Например, в случае с четырьмя каналами Rank 1 для первого АЦП будет оцифрован первым. Для второго АЦП, наверное, наоборот: у Rank 2 приоритет выше. По крайней мере экспериментально проверено, что такой вариант работает по задуманной логике. А вот в случае с 6, 8 каналами эта логика не работает)
Появились некоторые мысли. Может нужно на втором АЦП выставить настройки рангов симметрично первому АЦП, не обращать внимание, что вроде как четыре канала работают. Такого я по крайней мере ещё не пробовал.
0
210 / 163 / 36
Регистрация: 15.11.2012
Сообщений: 788
21.04.2019, 01:08 4
Я специально просмотрел описание регистров АЦП, думаю может забыл чего... Но никаких рангов там нет.
Это не фича ли куба?
Ранги эти не нужны - порядок каналов задается настройками регистров и может быть любой без всяких рангов.
0
0 / 0 / 0
Регистрация: 05.04.2019
Сообщений: 6
23.04.2019, 01:12  [ТС] 5
Ну по сути да, куб генерит следующий код для задания порядка оцифровки:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// для АЦП1
 
 sConfig.Channel = ADC_CHANNEL_4;
 sConfig.Rank = ADC_REGULAR_RANK_1; // это и есть настройка порядка опроса в регистре
...
 sConfig.Channel = ADC_CHANNEL_2;
 sConfig.Rank = ADC_REGULAR_RANK_2;
...
 sConfig.Channel = ADC_CHANNEL_0;
 sConfig.Rank = ADC_REGULAR_RANK_3;
 
// для АЦП2
 
 sConfig.Channel = ADC_CHANNEL_1;
 sConfig.Rank = ADC_REGULAR_RANK_1;
...
 sConfig.Channel = ADC_CHANNEL_3;
 sConfig.Rank = ADC_REGULAR_RANK_2;
...
 sConfig.Channel = ADC_CHANNEL_5;
 sConfig.Rank = ADC_REGULAR_RANK_3;
При такой настройке первой оцифровывается пара CHANNEL_0 и CHANNEL_1, что вобщем-то логично и правильно.
А дальше начинается "магия": преобразования по следующему каналу первого АЦП (ADC_CHANNEL_2) не происходит, а второй АЦП оцифровывает CHANNEL_3, при этом его значение оказывается ещё и в последний элементе массива, куда собираются результаты преобразований.
Третье преобразование начинается с ADC_CHANNEL_2, что вообще окончательно ставит меня в тупик; следом за ним снова CHANNEL_3.
Каналы CHANNEL_4 и CHANNEL_5 вообще пропущены... наверное.

Опять же сокращение проекта до четырёх каналов даёт абсолютно рабочий проект с логичным порядком опроса всех каналов.
0
210 / 163 / 36
Регистрация: 15.11.2012
Сообщений: 788
23.04.2019, 01:14 6
Так может ну его, куб этот? Там код для настройки АЦП займет как бы не меньше строк чем для куба.
0
0 / 0 / 0
Регистрация: 05.04.2019
Сообщений: 6
23.04.2019, 01:56  [ТС] 7
Немного не понял вас: займет не меньше места? )

Вообще говоря, похоже нашел правильную настройку порядка опроса каналов. Но проверить до конца смогу только завтра, нужна заведомо рабочая плата. Есть подозрение, что один из каналов накрылся, да ещё и его вывод коротит на другой канал. А порядок опроса верный.

Только начинаю серьезно с МК работать. Советуете не начинать с куба?
0
210 / 163 / 36
Регистрация: 15.11.2012
Сообщений: 788
23.04.2019, 02:33 8
Ну, места точно меньше -)). Причем проблема не столько в памяти FLASH (ее в контроллерах обычно сравнительно много), сколько в RAM, которой сильно меньше. Но и строк тоже.

В данном случае советую провести инициализацию АЦП посредством регистров этого АЦП, а не процедур куба.

Начинать работать с кубом вообще или нет - я не знаю. Я им не пользуюсь, но это каждый сам решает конечно.
Основной (и как бы ни единственный) аргумент любителей куба - "программы становятся переносимыми между разными линейками контроллеров ST". Что пишут эти любители и зачем им так нужна эта "переносимость", я не знаю. Тем более что писанины куб почти не убавляет.
Однако никакой переносимости там нет и это не может не понимать любой, кто реально поработал с разными линейками их контроллеров, поскольку сама их периферия разная, порой - абсолютно, инициализация и работа этой периферии тоже разная, поэтому никакой куб здесь не поможет.
0
23.04.2019, 02:33
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.04.2019, 02:33
Помогаю со студенческими работами здесь

STM32F407IE, внешний АЦП отрабатывает 72 цикла оцифровки и останавливается)
Дратути) Была плата с STM32F407IET6 и внешним АЦП ADS8411, который по таймеру с частотой 200кГц...

АЦП несколько каналов
Нужно замерять сигналы с трех выводов АЦП МК, как это сделать грамотно?

Trace Mode и привязка каналов
задача тривиальная. есть лампочка, которая меняет свой цвет в зависимости от поступающего значения...

Большое количество АЦП каналов
Здравствуйте! Подскажите микроконтроллеры с количеством АЦП 50 или больше каналов. И есть ли...

Использование нескольких каналов АЦП
Всем привет. Пишу небольшую прогу для ATmega8, и возник вопрос как считывать данные сразу с двух...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

Новые блоги и статьи
Как узнать какой процесс блокирует файл или каталог в Windows
bt_guru 23.01.2025
При работе с операционной системой Windows пользователи нередко сталкиваются с ситуацией, когда система отказывается выполнять определенные действия с файлами или каталогами, сообщая, что они. . .
Как в curl узнать код статуса HTTP запроса. Коды состояния HTTP
bt_guru 23.01.2025
Коды состояния HTTP играют значимую роль в обеспечении эффективного взаимодействия между клиентами и серверами. При работе с веб-сервисами важно не только отправлять запросы, но и правильно. . .
Как сортировать вывод команды ls в Linux
bt_guru 23.01.2025
В операционной системе Linux команда ls является одним из наиболее часто используемых инструментов для просмотра содержимого директорий. При работе с файловой системой пользователи регулярно. . .
Как сделать POST запрос с помощью curl
bt_guru 23.01.2025
curl - это мощный инструмент командной строки позволяет отправлять и получать данные через различные протоколы, включая HTTP, HTTPS, FTP и множество других. Особенно полезным curl становится при. . .
Прокрутка в tmux с помощью мыши и клавиатуры
bt_guru 23.01.2025
Tmux представляет собой мощный терминальный мультиплексор, который позволяет пользователям создавать и управлять несколькими терминальными сессиями внутри одного окна. Одной из важнейших функций tmux. . .
Как проверить, содержит ли массив значение в JavaScript. Поиск в массиве
bytestream 23.01.2025
Эффективный поиск значений в массивах становится критически важным навыком для разработчиков, использующих JavaScript. Процесс поиска элементов в массиве может показаться простым на первый взгляд,. . .
Как удалить тег Git в удалённом репозитории (remote)
bytestream 23.01.2025
Одним из важнейших механизмов организации версий в Git являются теги, которые позволяют помечать определенные точки в истории проекта как значимые. Теги часто используются для маркировки релизов,. . .
Чем отличаются URL, URI и URN
bytestream 23.01.2025
Системы идентификации представляют собой фундаментальный механизм, позволяющий однозначно определять местоположение и характеристики различных информационных объектов в глобальной сети. Эти системы. . .
Как центрировать div внутри другого div с помощью CSS. Управление расположением элементов в CSS
bytestream 23.01.2025
Позиционирование элементов играет ключевую роль в создании качественных и профессиональных интерфейсов. Одной из наиболее часто встречающихся задач является центрирование элементов на веб-странице,. . .
Что означают различные символы в синтаксисе PHP
bytestream 23.01.2025
PHP (Hypertext Preprocessor) представляет собой один из наиболее широко используемых языков программирования для веб-разработки, который обладает богатой и интересной историей развития. Изначально. . .
Способы клонирования объектов в JavaScript
bytestream 23.01.2025
В современной разработке на JavaScript работа с объектами является фундаментальной частью создания любого приложения. При манипуляции объектами часто возникает необходимость создавать их копии для. . .
Как проверить состояние чекбокса в jQuery. Как работать с чекбоксами
bytestream 23.01.2025
При разработке интерактивных веб-форм часто возникает необходимость программно определять состояние чекбоксов с помощью jQuery. Чекбоксы являются важными элементами пользовательского интерфейса,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru