roboforum.ru

Технический форум по робототехнике.
Текущее время: 30 ноя 2024, 05:38

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
 Заголовок сообщения: Stm32f4 DMA + GPIO = ШИМ. Возможно ли ?
СообщениеДобавлено: 09 ноя 2013, 17:54 
Не в сети

Зарегистрирован: 07 окт 2013, 19:39
Сообщения: 3
Задача в следующем. Необходимо генерировать ШИМ для управления сервоприводами. Количество серво - от 16 и больше. Понравилась высказанная тут тут идея использовать DMA и GPIO, т.е. есть в памяти массив из uint16_t размером 2200, задача - с с заданной частотой вывести данный массив на пины GPIO.
Вложение:
dma1.JPG
dma1.JPG [ 46.71 КиБ | Просмотров: 6583 ]

Начал реализовывать.
Выяснилось, что передача DMA - GPIO возможна только в режиме DMA_DIR_MemoryToMemory, и теперь возник вопрос - возможно ли сконфигурировать контроллер DMA на работу с конкретной заданной частотой, в моем случае с частотой 1 МГц?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Stm32f4 DMA + GPIO = ШИМ. Возможно ли ?
СообщениеДобавлено: 09 ноя 2013, 21:54 
Не в сети
Аватара пользователя

Зарегистрирован: 12 окт 2008, 12:40
Сообщения: 369
Откуда: Красногорск, Подмосковье
Вот здесь: http://www.youtube.com/watch?v=IRT4ShYi8Bw утверждается, что передавать данные из DMA в GPIO можно.
В исходниках того проекта http://wakaba.c3.cx/repos/stm32f4-vga/VGA.c вроде как используется режим Memory to peripheral.
Частоту 1 Мгц должен обеспечивать один из таймеров, служащий источником событий для DMA.

_________________
OpenSimpleLidar - проект простого самодельного лидара.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Stm32f4 DMA + GPIO = ШИМ. Возможно ли ?
СообщениеДобавлено: 09 ноя 2013, 23:15 
Не в сети
Аватара пользователя

Зарегистрирован: 10 дек 2010, 13:16
Сообщения: 4995
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей
Я делал, можно.
Упс, поторопился. Нет, не получится. Я хотел то же самое сделать для УАРТА - плеваться символами. Нет, не сработает. Ты даешь команду контроллеру начать ДМА-трансфер, и он будеь фигачить с максимальной доступной ему скоростью то количество байтов/полуслов/слов, еоторое в регистре прописано.
Тебе можно делать такое либо в прерывании по таймеру, либо бёрст-инициализацией синхронизированных таймеров.

Тьфу, чет ничего не соображаю
Все, отстаньте от меня

_________________
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Stm32f4 DMA + GPIO = ШИМ. Возможно ли ?
СообщениеДобавлено: 09 ноя 2013, 23:28 
Не в сети
Аватара пользователя

Зарегистрирован: 18 апр 2009, 22:18
Сообщения: 10668
даже если решится воспрос с выплёвыванием данных за желаемый промежуток времени, всё-равно нужно много памяти. допустим у сервы диапазон 700-2400 или 500-2250 на 180 градусов. :oops: :wink: :pardon: это же сколько бит на каждый канал... ладно с памятью, допустим при 45 байт на канал и даже с переключением между двумя массивами, у f4 для таких ленивых алгоритмов памяти более чем предостаточно. но чем больше же памяти задействуете, тем больше тактов затратите для "пересчёта". а после превышения определённой частоты пересчётов, такой алгоритм ещё и по тактам сведёт на нет всю эту затею с дма.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Stm32f4 DMA + GPIO = ШИМ. Возможно ли ?
СообщениеДобавлено: 10 ноя 2013, 12:08 
Не в сети

Зарегистрирован: 07 окт 2013, 19:39
Сообщения: 3
citizen писал(а):
Вот здесь: http://www.youtube.com/watch?v=IRT4ShYi8Bw утверждается, что передавать данные из DMA в GPIO можно.
В исходниках того проекта http://wakaba.c3.cx/repos/stm32f4-vga/VGA.c вроде как используется режим Memory to peripheral.
Частоту 1 Мгц должен обеспечивать один из таймеров, служащий источником событий для DMA.


Передавать-то можно, пока у меня получилось передать только в режиме MemoryToMemory, как в примере по ссылке - не выходит :( (позже попробую весь проект пересобрать) Чисто теоретически можно генерировать DMA запросы с частотой 1 МГц по апдейту таймера и передавать (задав размер буфера = 1) по одному слову (байту, полуслову). Но в таком случае нужно будет сгенерировать около 2500 запросов на один массив, не многовато ли?
Задача тут другая - один запрос и данные из буфера пошли пошли пошли с заданной скоростью :) В реалии получается так, как говорит dccharacter - на запрос dma контроллер выплевывает данные из буфера с ему только известной скоростью (к примеру массив uint16_t [60000] - так что светодиод еле успевает моргнуть).

Angel71 писал(а):
Angel71

Памяти нужно не так уж и много на 16 серв максимум 2500 x 2 байт + возможно, второй массив такой же, а пересчитывать можно необходимыми кусками. Но, видимо, затее не суждено сбыться.
Уже переложил алгоритм DI_HALT'a c easyelectronics на stm32f4 - был немного разочарован, дрожание фронтов заставляет ноги поддергиваться, да и движения дерганные какие-то получаются, в общем, гексапод - псих выходит :) (с таймерами все гораздо плавнее можно сделать), сегодня буду сглаживание прикручивать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Stm32f4 DMA + GPIO = ШИМ. Возможно ли ?
СообщениеДобавлено: 10 ноя 2013, 16:04 
Не в сети
Аватара пользователя

Зарегистрирован: 12 окт 2008, 12:40
Сообщения: 369
Откуда: Красногорск, Подмосковье
Цитата:
Чисто теоретически можно генерировать DMA запросы с частотой 1 МГц по апдейту таймера и передавать (задав размер буфера = 1) по одному слову (байту, полуслову). Но в таком случае нужно будет сгенерировать около 2500 запросов на один массив, не многовато ли?

Насколько я понимаю, после того, как передача завершена, DMA остановится, и запустить его можно будет только специальной программной командой.

Вот здесь: http://kazus.ru/forums/showthread.php?t=28338&page=324 еще один пример, правда для stm32f0, тоже Memory to peripheral используется.

_________________
OpenSimpleLidar - проект простого самодельного лидара.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Stm32f4 DMA + GPIO = ШИМ. Возможно ли ?
СообщениеДобавлено: 10 ноя 2013, 21:23 
Не в сети
Аватара пользователя

Зарегистрирован: 18 апр 2009, 22:18
Сообщения: 10668
bambrman, яж и писал, что с одной стороны памяти требует очень много, но с другой стороны у вас 4xx камушек, а в нём озу относительно много. на каком-нибудь младшем камне вопрос памяти просто бы стал основным гвоздём в гробег, а так у вас просто могут быть нефификтивные затраты по тактам. про сильное дрожание серв единственное, что приходит в голову - это недопилиность алгоритма. хоть на одной шине и сидит куча всего и детально не вникалось что и как из особенностей может повлиять, но в столь значительные проблемы верится очень плохо. можно было бы очень глубоко копнуть, какие там нюансы в работе, но имхо в этом нет необходимости. вы передумали делать на дма и выбрали имхо самый нормальный вариант реализации.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Stm32f4 DMA + GPIO = ШИМ. Возможно ли ?
СообщениеДобавлено: 22 ноя 2013, 18:18 
Не в сети
Аватара пользователя

Зарегистрирован: 08 авг 2012, 00:38
Сообщения: 1129
Откуда: Нидерланды, Алмере
Skype: edwbes
ФИО: Эдуард
Не знаю, если поможет. Вот есть пример как управляют RGB светодиодами через DMA. Там требуется для управления поток в 800 кГц.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Stm32f4 DMA + GPIO = ШИМ. Возможно ли ?
СообщениеДобавлено: 22 ноя 2013, 21:19 
Не в сети
Аватара пользователя

Зарегистрирован: 18 апр 2009, 22:18
Сообщения: 10668
пасибки :) нужно будет попробовать это для ws2811


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 12


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO