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

my504

Свой
  • Постов

    545
  • Зарегистрирован

  • Посещение

Репутация

2 Обычный

Информация о my504

  • Звание
    Знающий
    Знающий
  • День рождения 24.09.1959

Контакты

  • Сайт
    Array
  • ICQ
    Array

Информация

  • Город
    Array

Посетители профиля

2 998 просмотров профиля
  1. ADC-DMA

    Предположение верное. Вы не прочли решение проблемы. Каждый производитель МК покупает такие IP блоки периферии, какие считает нужными. Поэтому таймеры у Артери идентичны до неразличимости таймерам у СТМ. АЦП так же идентичны. Предположить, что две сотни человек в фаблесс-компании исследуют чипы СТМ и копируют топологию может только большой фантазер. Тем более, что Артери не совсем китайская компания, а ее штаб-квартира переехала в Тайбей. И не куда-нибудь, а прямо в кампус TSMC. отгадайте где они делают чипы с одного раза... 😁 Такшта проблема с вероятностью 99,9(9) процентов воспроизведется. Если конечно повторить мои условия работы, а не вольно фантазировать. Так, если в качестве семплирующего таймера применить первый или восьмой, а количество семплов забить в репетишн регистр, то все будет ништяк-ништяк. Только мне такой вариант не подходит, ибо таймеры уже расписаны по проекту, а количество семплов 512. И это превышает возможности репетишн регистра. Ну и свет клином сошелся именно на Артери, поскольку речь вообще то в теме была о ней, так же свет распространил свой "клин" на СТМ, патамушта о нем так же была речь. А вот про Инфинеон вообще никто не говорил. Кроме вас, конечно. К чему - непонятно.
  2. ADC-DMA

    Разобрался. Проблема никак не связана с производителем МК. Все строго по даташиту. Когда завершается очередная сессия ДМА в кадре, таймер останавливается в прерывании по ДМА и остается в позиции в конце своего периода. После обнуления таймера при подготовке очередной сессии на выходе канала запускающего АЦП формируется ФРОНТ, который и запускает АЦП, но поскольку ДМА не запущен, данные никуда не улетают, НО ТРИГГЕР ДМА В АЦП ВЗВОДИТСЯ. И это приводит к тому, что как только разрешается работа ДМА (таймер еще не запущен - окно захвата сигнала (ДМА) наступит заметно позже подготовки) уже взведенный триггер ДМА в АЦП тут же выбрасывает последние данные в массив ДМА по нулевому индексу. Это и приводит к сдвигу данных в массиве. Лечение очень простое. Нужно после завершения сессии ДМА отключить бит разрешения ДМА в АЦП и включить его только перед новой сессией, сильно позже обнуления тела таймера. Всем спасибо за участие.
  3. Добавлю. В показанном коде есть только инициализация слейвного TIM1 (в нем выбирается источник сигнала для TRGI (ITR1) - мастер-таймер TIM2). Но требуется еще инициализировать TIM2 - выбрать источник сигнала (TRGO) который будет подключен к TRGI слейвного таймера
  4. ADC-DMA

    Вообще то предположение верное. Это подсказывает опыт сравнения Artery и STM. Тем более, что Artery не делает клоны, просто IP-блоки периферийных модулей в их части идентичны таким же у STM. Ибо STM не являются их автором. Однако вопрос был не про разницу, а про полученное явление. Возможно кто то столкнулся с таким же. Например. мой родной брат тоже столкнулся немногим ранее, но пока ответ не нашел. Собственно мне нужен механизм, а не исправление ситуации. Я должен быть уверен, что если смещу нумерацию при сортировке, то это будет сохраняться и в других режимах или правке кода.
  5. ADC-DMA

    Задавал вопрос в разных местах. Пока никто ответа не дал. Решил попробовать тут. Итак. Включаем цепочку семплирующий таймер->АЦП->ДМА->обработчик прерывания ДМА (останов таймера). При одном канале АЦП ничего подозрительного в массиве ДМА обычно не наблюдается (но это не значит, что нет ниже описанного явления). Если же АЦП настроить на три, например, канала преобразования на один запуск АЦП от таймера, то первый проход дает идеальный упорядоченный массив, где в нулевом индексе массива сидит первый по счету канал АЦП заданный в соответствующем регистре. При последующих запусках массив сдвигается на один элемент в нулевой индекс попадает последний канал в группе. Есть такое мнение, что до остановки таймера происходит еще один запуск АЦП и данные где то зависают до следующего кадра, вылезая как первый отсчет. Попытка читать регистр данных АЦП и сбрасывать флаги между кадрами ни к чему не привела. Внимание, вопрос. Где прячется этот отсчет между кадрами? Что нужно перезапустить перед запуском таймера? Описанное выше наблюдал в AT32F407, но есть обоснованное предположение, что это явление есть и на аналогичных чипах других производителей, включая STM32.
  6. Дачётам... Сразу 10 контроллеров. И результат будет вообще без кода... )))) Любезный, не лень писать всякую смешную всячину? Я не пользуюсь кубом. Это во первых. Во вторых, инжектированные каналы не работают с ДМА. В третьих, инжектированные каналы не позволяют получить более высокую скорость, да и используются они совсем для других целей. Таким образом, вариант имеется только один. В качестве резерва можно было понизить частоту дискретизации до семи...шести кратной. Но не потребовалось.
  7. AT32 умеет все тоже самое. Только оба АЦП придется подключать к каналам ДМА, которые реквестятся только от ПЕРВОГО АЦП. Учитывая, что накачка обоих АЦП идентична и синхронна, готовность данных будет так же синхронна. Забирать данные из одного регистра ничего не дает, все равно потом сортировать. Посчитал с учетом сетки частот при 240 МГц ядра и минимальном окне захвата 1,5Tadc. Как и ожидал, пролез впритык. Если говорить о точном значении частоты приема - 58 кГц, максимально возможная частота при восьмикратной дискретизации составила 59,5 кГц.
  8. АЦП2, естественно, может пробрасывать результат через ДМА - он ничем не отличается своим регистром результата от любой другой области памяти. Я имел ввиду, что в АТ32 второй АЦП не может РЕКВЕСТИТЬ ДМА, в отличии от СТМ32. Но за ответ спасибо. Сиречь, утраиваем частоту дискретизации и включаем сканирование. Пока все сложилось. ЗЫ. Правда нужно посчитать окно захвата. Полученные 1,5 мспс - это без учета эквизишн тайм. Скорее всего, все будет на пределе.
  9. Прикольно... В МК только ТРИ АЦП. Никаких внешних ставить нельзя. Общая задача состоит в замене dsPIC33CH на AT32F407, у которого АЦП и таймеры идентичны STM32F407/207. Кроме того, я не ставлю условия фазовых сдвигов между парами. То есть если захватывать двумя АЦП синхронно одну пару, а затем переключить на другую и успеть все три пары с частотой 480 кГц, то задача будет решена идеально. Вопрос в том, как запустить всю эту историю в автоматическом режиме. Допускается загрузка в прерывании по 2-му АЦП без ДМА. остальные, естественно, с ДМА.
  10. Запуск происходит одновременно в прерывании от некоего таймера, который не представлен в списке семплирующих. Дело не в одновременном запуске. Дело в том, что АЦП всего три канала, а сигналов шесть. При этом для синфазности захвата пар нужно каждую пару запускать синхронно. Иначе потом мат.операции будут с фазовой ошибкой. Можно делать два отсчета подряд с высокой скоростью (минимальной фазовой ошибкой), выдерживая интервал между этими парами отсчетов, но тогда потребуется коммутация пар сигналов на один вход АЦП синхронно с этой диаграммой. Я пока не очень представляю как запустить такой "оркестр"... Именно поэтому сформулировал эту тему.
  11. Имеется три группы сигналов по два в каждой группе. Необходимо их захватить сигнал 60 кГц с частотой дискретизации 480 кГц (допустимо, но нежелательно - 240 кГц) окном в 512 отсчетов (для 240 кГц - 256 отсчетов) так, чтобы в полученных шести массивах можно было пару сигналов в каждой группе матрицировать как сумму и разность. Дальнейшая обработка сведется к одноточечному ДПФ для каждого матрицированного массива. Кто может что нибудь сказать по поводу оптимальной реализации. То есть о достижении максимального синхронизма при захвате каждой пары. Для наглядности приведу диспозицию задачи с некоторыми ограничениями при выборе семплирующих таймеров.
  12. Добрый день! В одном из топиков прочитал, что вы имеете некоторый опыт перехода с STM32F103 на AT32. Не могли бы вы поделиться им? Я решаю такую же проблему после того, как уперся в нехватку RAM и FLASH на F103. Как лучше поступить: 1. Переделать проект с F103 (Cortex-M3) на какой-либо ближайший к AT32F403AVGT7 STM32F405VGT6, а затем с F405 переходить в AT32 Studio. Или можно как-то сразу готовый проект модернизировать до Cortex-M4 и опять же интегрировать его в AT32 Studio? Я просто не могу оценить риск смены ядра MCU при таком переходе.

    Исходный проект написан к сожалению в CubeMX, поэтому падать до AT32 библиотек очень бы не хотелось по кр мере в этом проекте. Максимум что я надеюсь придется переписать - это систему тактирования. Вообщем, буду признателен за любую помощь...

    1. my504

      my504

      Я практически не использую библиотеки, поэтому переход с STM32F407 на AT32F407 произошел совершенно легко. Функции (в том числе и драйверы) пишу сам. Иногда смотрю реализацию аналогичных в библиотеках вендоров, но чисто из соображений рационального подхода - чтобы минимизировать вероятность ошибок.

      Все проекты для ARM делаю в Кейле. Ну и поскольку Кейл поддерживают и ST и Artery, а библиотеки Standart Peripherals Library (SPL) у ST и Board Support Package (BSP) у Artery функционально идентичны с учетом особенностей периферии каждого производителя, то переход не вызывает никаких трудностей. Подавляющая часть всх проектов написана на CMSIS и вообще не отличается. Правится только синтаксис битовых структур, которые в АТ описаны несколько иначе. Дефайны констант легко находятся в файлах производителя простым поиском по проекту.

    2. ivainc1789

      ivainc1789

      Попробовал использовать Artery библиотеки с их сайта, но быстро остыл - модуль для I2C попросту недописан, там есть даже ссылка на внешний отсутствующий файл с намеком на то, что реализацию типа делайте сами. Так что пришлось все же полностью использовать проект из Куба от F103. К моему удивлению все получилось и проект заработал, были мелкие проблемы, но в целом задача перехода решена. Однако же есть сложность - модуль I2C нормально работавший на STM32F103 периодически вешает шину в состояние SDA=0 SCL=1. Выходом является только отключение питания (то есть мастер не может решить это программно или мне попросту не удалось). Эта ситуация появляется редко и как бы случайно, но эксплуатировать устройство в таком виде невозможно без переписывания кода. К тому же еррата в AT32 уже другая. Отловить ошибку я так и не смог, просто встает флаг потери арбитража и все...

  13. Прикольные выводы... 😄 С какого перепуга вы решили, что если у них очередь длиною в полтора года, то они ничего не выпускают? Только комплектация автопрома чипами может создать дефицит апокалиптического масштаба, я уже не говорю про разного рода PLC, частотники и, не к обеду упомянутые, беспилотнеги... В этой обстановке мелкая розница идет густым непроходимым лесом. https://www.electronicsweekly.com/news/business/st-makes-12-76bn-doubles-capex-2022-01/
  14. Открываем первый попавшийся под руку даташит и читаем: Какие нужны дополнительные объяснения?
  15. По моим расчетам должно получится примерно 2,778 кГц. Tad у вас в 50 раз больше системного периода - 80/50=1,6 МГц. Преобразование с учетом окна захвата - 36*Tad (12 - преобразование и 24 - захват). Ну и 16 преобразований на одно прерывание. Из чего следует, что скорее всего, флаг вы не сбрасываете. Включите дебаг и поставьте брекпойнт в обработчике. ЗЫ. Я полагаю вы в курсе, что есть ЧЕТЫРЕ регистра флагов одного домена: IFS1, IFS1CLR, IFS1SET и IFS1INV. То есть для сброса нужно писать ЕДИНИЦУ в соответствующий бит регистра IFS1CLR.
×
×
  • Создать...