С Новым годом! Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 05.04.2019
Сообщений: 6
1

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

20.04.2019, 15:49. Показов 1467. Ответов 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
Ответ Создать тему
Блоги программистов
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
Полезные поделки на Arduino, которые можно сделать самому
raxper 06.01.2025
Arduino как платформа для творчества Arduino представляет собой удивительную платформу для технического творчества, которая открывает безграничные возможности для создания уникальных проектов. Эта. . .
Подборка решений задач на Python
IT_Exp 06.01.2025
Целью данной подборки является предоставление возможности ознакомиться с различными задачами и их решениями на Python, что может быть полезно как для начинающих, так и для опытных программистов. . . .
С чего начать программировать микроконтроллер­­ы
raxper 06.01.2025
Введение в мир микроконтроллеров Микроконтроллеры стали неотъемлемой частью современного мира, окружая нас повсюду: от простых бытовых приборов до сложных промышленных систем. Эти маленькие. . .
Из чего собрать игровой компьютер
inter-admin 06.01.2025
Сборка игрового компьютера требует особого внимания к выбору комплектующих и их совместимости. Правильно собранный игровой ПК не только обеспечивает комфортный геймплей в современных играх, но и. . .
Обновление сайта www.historian.b­y
Reglage 05.01.2025
Обещал подвести итоги 2024 года для сайта. Однако начну с того, что изменилось за неделю. Добавил краткий урок по последовательности действий при анализе вредоносных файлов и значительно улучшил урок. . .
Как использовать GraphQL в C# с HotChocolate
Programming 05.01.2025
GraphQL — это современный подход к разработке API, который позволяет клиентам запрашивать только те данные, которые им необходимы. Это делает взаимодействие с API более гибким и эффективным по. . .
Модель полного двоичного сумматора с помощью логических операций (python)
AlexSky-coder 04.01.2025
def binSum(x:list, y:list): s=^y] p=x and y for i in range(1,len(x)): s. append((x^y)^p) p=(x and y)or(p and (x or y)) return s x=list() y=list()
Это мы не проходили, это нам не задавали...(аси­­­­­­­­­­­­­­­­­­­­­­х­р­о­н­н­ы­­й счётчик с управляющим сигналом задержки)
Hrethgir 04.01.2025
Асинхронный счётчик на сумматорах (шестиразрядный по числу диодов на плате, но наверное разрядов будет больше - восемь или шестнадцать, а диоды на старшие), так как триггеры прошли тестирование и. . .
Руководство по созданию бота для Телеграм на Python
IT_Exp 04.01.2025
Боты для Телеграм представляют собой автоматизированные программы, которые выполняют различные задачи, взаимодействуя с пользователями через интерфейс мессенджера. В данной статье мы рассмотрим,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru