Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: stm32f4 mem->dma->gpio.odr tim6
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
klen
Здравствуйте.
идея простая и проверенная.
тикаем таймером, он генерит запрос DMA по которому DMA перекладывает из циклического буфера данные в GPIO->ODR.
если взять TIM8 DMA2_stream1_chanal7 то все бодро работает и можно сделать например программный шим и много прочего полезного без вмешательств проца.
TIM8 жалко для тупого переполнения и генерации запроса DMA.
попробsвал на "дешевом" TIM6 и DMA1_stream1_chanal7 - DMA отваливается с выставлением флага transfer_error. то есть схема та же .. но не работает.
в документации четко написано что модуль DMA1 - не умеет работать если оба порта прикручивать к диапазону адресов памяти. оди обязательно в диапазоне переферии должен быть.
может gpio->odr "не совсем" переферия?

где я даташит недочитал?
scifi
GPIO сидит на шине AHB1, туда DMA1 не может дотянуться.
Можно схитрить. Например, у таймеров бывают режимы, которые позволяют управлять ногой CHx через регистр таймера.
klen
>GPIO сидит на шине AHB1, туда DMA1 не может дотянуться.
Точно!!! я эти грабли уже получал, и забыл.

>Можно схитрить. Например, у таймеров бывают режимы, которые позволяют управлять ногой CHx через регистр таймера.
это да, но мне сразу 16 синхронных шимов надо сделать.

спасибо.
stas00n
Не спец по F4, даташит не читал, но в порядке выдвижения гипотезы: в Вашем кристалле TIM6 точно присутствует? Например, по опыту с F0 - TIM6, TIM7 - "редкие" таймеры, присутствуют только в "жирных" камнях, а в базовых и малоногих приходится довольствоваться TIM1,3,14,16,17. Может быть обращаетесь к не реализованному на данном кристалле таймеру?
jcxz
Цитата(klen @ Jan 25 2018, 15:49) *
это да, но мне сразу 16 синхронных шимов надо сделать.

А то что Ваш ШИМ будет иметь приличный джиттер - не смущает?
MiklPolikov
Цитата(jcxz @ Jan 25 2018, 20:34) *
А то что Ваш ШИМ будет иметь приличный джиттер - не смущает?

То же люблю делать ШИМ черезтДМА.
Объясните по-русски что такое "джиттер"? Может колебания частоты?
jcxz
Цитата(MiklPolikov @ Jan 25 2018, 20:27) *
То же люблю делать ШИМ черезтДМА.
Объясните по-русски что такое "джиттер"? Может колебания частоты?

У Вас DMA что делает? Пишет в регистры управления GPIO пинами? Чтобы импульсы ШИМ определённой длительности сгенерить?
А теперь подумайте, что будет если таймер выставил запрос обслуживания к DMA, а в этот момент CPU выполняет команду PUSH {R0-R12,LR} ?
Как изменится длительность импульса ШИМ?
А если работают ещё и другие bus-masters и они тоже к шине обращаются?
Вот тогда и получите джиттер - длительность импульсов ШИМа будет болтаться.
klen
Цитата(jcxz @ Jan 25 2018, 22:02) *
У Вас DMA что делает? Пишет в регистры управления GPIO пинами? Чтобы импульсы ШИМ определённой длительности сгенерить?
А теперь подумайте, что будет если таймер выставил запрос обслуживания к DMA, а в этот момент CPU выполняет команду PUSH {R0-R12,LR} ?
Как изменится длительность импульса ШИМ?
А если работают ещё и другие bus-masters и они тоже к шине обращаются?
Вот тогда и получите джиттер - длительность импульсов ШИМа будет болтаться.


приоритет на шине у DMA-стрима выставляем very-high. у CPU мастера ahb он аппаратно равен на один уровень ниже - high, так специально придумали чтобы DMA можно былобы пускать вперед (но есть ограничение - не перманентно, если перегрузить шину запросами мастера c приоритетом very-high то как я помню на 4 транзакции все равно процу дадут доступ на одну транзакцию.) поэтому PUSH {R0-R12,LR} страшен не сильно при наличии не перегруза ahb шины.

болтатся может - но в моем случае это не очень важно. точность такого шима приемлемая - главное требование - много штук одновременно.
закодю померю джиттер раскажу что получилось.
jcxz
Цитата(klen @ Jan 25 2018, 22:56) *
приоритет на шине у DMA-стрима выставляем very-high. у CPU мастера ahb он аппаратно равен на один уровень ниже - high, так специально придумали чтобы DMA можно былобы пускать вперед (но есть ограничение - не перманентно, если перегрузить шину запросами мастера c приоритетом very-high то как я помню на 4 транзакции все равно процу дадут доступ на одну транзакцию.) поэтому PUSH {R0-R12,LR} страшен не сильно при наличии не перегруза ahb шины.

А где в мануале STM32F4 можно найти табличку с уровнями приоритета разных bus-masters? Что-то я не нахожу такую, подскажите.
Да и интересно: CPU команду PUSH {R0-R12,LR} выполнит отдельными транзакциями через арбитра или одной burst-транзакцией? Если 2-е - тогда будет хуже.
MiklPolikov
Ага, по русски "джиттер" это "колебания периода".
Один раз видел, когда запустил DMA в режиме m2m , и он тупо занял всю системную шину.
Если по таймеру - то всё чётко.
Т.е. на практике проблемы нет.
И ШИМ через ДМА очень полезен, я таким образом динамическое управление цифровыми индикаторами делаю и много всего другого.
jcxz
Цитата(MiklPolikov @ Jan 26 2018, 00:26) *
Ага, по русски "джиттер" это "колебания периода".

Это не "колебания периода", а дрожание чего угодно. Кроме периода у цифрового сигнала есть и другие параметры, скважность например.
klen
ну вобщем получилось.
240кГц, 50 отсчетов скважности, это примерно 5.6 битный цап. 16 каналов.
работает довольно дубово, то есть хорошо.
у меня предназначено для управления 16 ключами в зарядной станции. что бы все ключи не втыкались одновременно, фазы включения разнесены со сдвигом на 1/16 периода. частоту несущей меняю по псевтослучайному закону в близи 240кгц перегружая регистр аrr , это размазывает спектр помех и убирает пики гармоник.
проц учавствует в этом только когда нужно изменить скажности каналов.
и никаких прерываний.
jcxz
Цитата(klen @ Jan 30 2018, 00:25) *
240кГц, 50 отсчетов скважности, это примерно 5.6 битный цап. 16 каналов.
работает довольно дубово, то есть хорошо.
у меня предназначено для управления 16 ключами в зарядной станции. что бы все ключи не втыкались одновременно, фазы включения разнесены со сдвигом на 1/16 периода. частоту несущей меняю по псевтослучайному закону в близи 240кгц перегружая регистр аrr , это размазывает спектр помех и убирает пики гармоник.
проц учавствует в этом только когда нужно изменить скажности каналов.
и никаких прерываний.

Жесть какая! Такой паровоз на квадратных колёсах. laughing.gif
Никаких прерываний, зато непрерывный DMA-поток и к тому же - накладывающий ограничения на другие процессы. У вас в устройстве больше ничего кроме этого паровоза нет?
А какой практический смысл было городить такое, а не взять просто более подходящий МК с достаточным количеством аппаратных ШИМ-ов?
И сделать всё с характеристиками на порядок лучше, а не на уровне ардуины.
klen
Цитата(jcxz @ Jan 30 2018, 02:24) *
А какой практический смысл было городить такое, а не взять просто более подходящий МК с достаточным количеством аппаратных ШИМ-ов?
И сделать всё с характеристиками на порядок лучше, а не на уровне ардуины.

лучше что?
какой мк имеет 32 аппаратных канала шим?
в моем случае это самы подходящий вариант, дешево и быстро.
никаких ограничений на другие процессы не присутствуют, предположительно переферийная шина нагружена каждую 13 транзакцию, ahb каждую 52 (с 16 каналами)
это же не цап прецизионный, это балансир-зарядник, чем прще тем надежней. таймеры и процессор - это я экономлю для великих задач.
к стати, во время войны паровоз спасет промышленность.
jcxz
Цитата(klen @ Jan 30 2018, 07:38) *
какой мк имеет 32 аппаратных канала шим?

А у Вас разве 32? 16 вроде wink.gif
Например Infineon XMC4500 или XMC4700 имеют по 8 продвинутых таймеров, в каждом таймере к регистру-счётчику привязаны по 2 compare-регистра, каждый compare - с двумя выводами на пины МК.
Т.е. - уже можно 16 двухтактных ШИМов сделать (а не однотактных как у Вас).
А ещё в каждом МК есть 16 простых таймеров, содержащих каждый по одному compare-регистру с одним выходом - это ещё 16 однотактных ШИМов.
И каждый работает на <= 120/144 МГц (а не 240кГц), имеет разрядность 16 бит (а не 5.5), имеют встроенное аппаратное дрожание (для размазывания спектра), имеют center-aligned режим ШИМа (а не только edge), продвинутые таймеры имеют кроме того аппаратный dead-time и много других фич.
И это всё - без всяких DMA и с полностью свободной шиной.

Поэтому мне и кажется Ваш выбор МК, для такой задачи, странным.

Цитата(klen @ Jan 30 2018, 07:38) *
никаких ограничений на другие процессы не присутствуют, предположительно переферийная шина нагружена каждую 13 транзакцию, ahb каждую 52 (с 16 каналами)

Это всё в теории. В таких системах где необходима жёсткая привязка работы к реалтайму, как показывает практика, добавлять что-то очень сложно - вдруг начинает рушиться работа этого реалтайма и начинает иногда сбоить. Несмотря на теоретические выкладки laughing.gif

PS: Вы мне так и не ответили на мой вопрос, где Вы смотрите таблицу приоритетов доступа к шине разных bus-мастеров для STM32F4? Я что-то не нашёл.... sad.gif
MiklPolikov
Цитата(jcxz @ Jan 30 2018, 02:24) *
Жесть какая! Такой паровоз на квадратных колёсах. laughing.gif
Никаких прерываний, зато непрерывный DMA-поток и к тому же - накладывающий ограничения на другие процессы. У вас в устройстве больше ничего кроме этого паровоза нет?


ШИМ на ДМА- отличнейшее решение.
Подозреваю, что "паровоз на квадратных колёсах" как раз у jcxz: что это за риал-тайм процессы, требующие микросекундной точности, которые висят на МК ? Наверно на МК повешено то, что надо было делать аппаратно на дискретных элементах ?
Да и вообще, в любой большой программе с множеством процессов, с RTOS, риал-тайм сильно осложняется.
jcxz
Цитата(MiklPolikov @ Jan 30 2018, 13:09) *
ШИМ на ДМА- отличнейшее решение.

Отличнейшее??? Если для вас ардуино-подход - это отличнейшее решение, то больше говорить не о чём.
5.5 бит точность и 240 кГц да с кучей других минусов - это отличнейшее решение???
Это даже ШИМ-ом назвать можно только с большой натяжкой (непредсказуемая болтанка фронтов сигналов из-за джиттера, и гуляние выходного сигнала из-за этого и прочие прелести - да, это конечно отлично). laughing.gif

Цитата(MiklPolikov @ Jan 30 2018, 13:09) *
Подозреваю, что "паровоз на квадратных колёсах" как раз у jcxz: что это за риал-тайм процессы, требующие микросекундной точности, которые висят на МК ?

Что именно у меня "висит на МК"? С чего Вы вообще такое взяли?
У нас вообще-то на таком ШИМ-е висит управление 3-фазным PMSM-движком с мощностью до мегаватта в импульсе. Если бы такое повесили на "отличнейшее решение", то он при первом же пуске разлетелся бы на куски.
У нас тут проблемы с некорректным учётом длительности интервалов dead-time длительностью в пару мкс в расчётах векторного управления уже приводят к косякам на такой моще. Вот для того и нужна точность. И даже не микросекундная, а в сотни нсек.

Цитата(MiklPolikov @ Jan 30 2018, 13:09) *
Да и вообще, в любой большой программе с множеством процессов, с RTOS, риал-тайм сильно осложняется.

Это - да. А когда это множество процессов (с множеством периферии в них активируемой) начнёт накладываться по времени друг на друга, вот тогда обычно и начинаются всякие чудеса в самодельных паровозах слепленных из чего попало. biggrin.gif
MiklPolikov
Цитата(jcxz @ Jan 30 2018, 14:29) *
У нас тут проблемы с некорректным учётом длительности интервалов dead-time длительностью в пару мкс в расчётах векторного управления уже приводят к косякам на такой моще. Вот для того и нужна точность. И даже не микросекундная, а в сотни нсек.


Мы обсуждаем разные задачи, спорить не о чем.
jcxz
Цитата(MiklPolikov @ Jan 30 2018, 13:36) *
Мы обсуждаем разные задачи, спорить не о чем.

Я не спорю. Просто не понятно почему выбран один из самых неудачных для такой задачи МК и восторги по поводу такого неудачного решения.
Сперва сделать кривой выбор, а потом героически преодолевать трудности, чтобы хоть что-то получить - здесь на форуме такое наблюдаешь сплошь и рядом.... laughing.gif
Это как под небоскрёб заложить фундамент из деревяшек, а потом всяческими ухищрениями и подпорками стараться его удержать, потратив на строительство в разы больше средств.
MiklPolikov
Цитата(jcxz @ Jan 30 2018, 14:41) *
Я не спорю. Просто не понятно почему выбран один из самых неудачных для такой задачи МК и восторги

Например потому что светодиодной мигалкой из 20 светодиодов должен управлять самый дешёвый проц STM32F0 в корпусе LQFP32.
Восторги от того, что на таком простом МК получилось сделать 20и канальный ШИМ.

Китай поднялся на однослойных платах без маски, с напаянными перемычками. Что бы на таких платах работали 1000-ваттные компьютерные блоки питания, кому-то пришлось героически преодолевать трудности.
Объясните им, что они не правы.

Одна из граней профессионализма- умение видеть компромисс между затратами и результатом.
В условиях капитализма "сделано на века, работает идеально" ни кому не надо. Надо "работает и конкурентноспособно"

Попробуйте-ка тут на форуме обсудить проект 1КВт AC/DC на однослойке, заодно задав вопрос про безопасные зазоры при отсутствии маски. biggrin.gif
jcxz
Цитата(MiklPolikov @ Jan 30 2018, 13:56) *
Например потому что светодиодной мигалкой из 20 светодиодов должен управлять самый дешёвый проц STM32F0 в корпусе LQFP32.
Восторги от того, что на таком простом МК получилось сделать 20и канальный ШИМ.

Про дешёвый - согласен. Но автор то говорит о STM32F4, а не STM32F0.
Правда он не указал какой конкретно STM32F4, чтобы можно было оценить верно.
За упомянутый мной XMC4500 (на котором всё это и на порядок больше делается легко и просто) в минимальной комплектации Компэл к примеру просит всего немного больше 6$.
А за МК ТС-а сколько?
klen
Цитата(jcxz @ Jan 30 2018, 15:02) *
Про дешёвый - согласен. Но автор то говорит о STM32F4, а не STM32F0.
Правда он не указал какой конкретно STM32F4, чтобы можно было оценить верно.
За упомянутый мной XMC4500 (на котором всё это и на порядок больше делается легко и просто) в минимальной комплектации Компэл к примеру просит всего немного больше 6$.
А за МК ТС-а сколько?


stm32f405 64ногий корпус
выбор уже был сделан до шимов. есть sdk, есть решения по обвязке, ест опыт, есть все, есть решаемые попутные задачи. нет только времени на не освоенные решения. к марту нужно выкатывать аппарат в поля. позже может уже не понадобится.
по моему опыту никаких проблем в задачах реального времени нет ни с FreeRTOS ни без - это вопрос архитектуры программки. например разработан 80 вольтовый векторный регулятор БКЭД, как раз с FreeRTOS.
и да! если это взлетит и покажет надежность заложенных решений ... тогда все всерьез и переделывать на чем то вроде 1986ВЕ8Т
jcxz
Цитата(klen @ Jan 31 2018, 02:41) *
тогда все всерьез и переделывать на чем то вроде 1986ВЕ8Т

Тогда всё ясно laughing.gif
Когда вижу название какой-то отечественной комплектации, то это всё объясняет - понимаю, что пишет человек подневольный. И ему можно только посочувствовать. crying.gif
halfdoom
Цитата(jcxz @ Jan 30 2018, 15:02) *
А за МК ТС-а сколько?


Тут, кроме стоимости, далеко не последнюю роль играет фактор "освоенности" МК. Сейчас периферия/архитектура настолько развесистая и сложная, что на написание и отладку HAL'a под свои задачи уходит весьма приличное время. STM32 не самая навороченная серия, но предлагает удачный баланс функциональность/стоимость и практически беззатратную миграцию внутри семейства (хотя перенос между семействами может быть не очень простым). Поэтому, несмотря на наличие интересных МК, приходится многие вещи решать в рамках изученных кристаллов, а новые осваивать только в случае необходимости или возможности.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.