Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.97/39: Рейтинг темы: голосов - 39, средняя оценка - 4.97
0 / 0 / 0
Регистрация: 15.03.2010
Сообщений: 287

stm32 3phase dma Регулировка напряжения

21.07.2016, 20:35. Показов 7593. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер

Разжуйте пожалуйста следующую тему.
На STM32F407 на TYM1 сделал генерацию 3 фазного шима. Все работает. Сейчас надо чтобы из таблички через DMA выводились значения для генерации шима.

Меня ни как не отпускают два вопроса:
1. Как каждый (из трех) канал TYM1 сдвинуть относительно друг друга на 120 градусов, при условии что табличка синусов у нас одна.
2. Как шим в каждом канале регулировать по аплитуде не меняя таблицу синусов ?

Если делать программно одновление таймеров тогда на кой черт DMA, а как сделать синус совсем аппаратным не понимаю.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.07.2016, 20:35
Ответы с готовыми решениями:

STM32 DMA
Всем привет. Вот сижу ковыряю STM на предмет использования DMA. Набросал тестовый проект для циклической передачи данных из ROM в USORT2 с...

DMA в STM32
Вот возник вопрос. Принимаю данные из UART в буфер используя по феншую DMA. Принимаю данные в кольцевой буфер. А можно ли поймать момент...

STM32 триггер DMA по EXTI.
Скажите пожалуйста можно ли синхронизировать DMA по сигналу внешнего прерывания? Те чтобы ДМА бросал данные память->память с триггером...

11
0 / 0 / 0
Регистрация: 23.03.2012
Сообщений: 1,017
21.07.2016, 20:49
Цитата Сообщение от pmdr_soft
Добрый вечер

Разжуйте пожалуйста следующую тему.
На STM32F407 на TYM1 сделал генерацию 3 фазного шима. Все работает. Сейчас надо чтобы из таблички через DMA выводились значения для генерации шима.

Меня ни как не отпускают два вопроса:
1. Как каждый (из трех) канал TYM1 сдвинуть относительно друг друга на 120 градусов, при условии что табличка синусов у нас одна.
2. Как шим в каждом канале регулировать по аплитуде не меняя таблицу синусов ?

Если делать программно одновление таймеров тогда на кой черт DMA, а как сделать синус совсем аппаратным не понимаю.
На каждое обновление нужно загружать 3 значения - по одному в каждый канал таймера.
Если, например, в таблице 360 значений и текущий шаг ==0, то в 1 канал - значение 0 ячейки, во 2-й канал - 120-й, в 3-й - 240.
Как это сделать - не знаю, вам нужно найти оптимальный вариант. Как я понял, есть несколько путей.
Нужно ли тут задействовать DMA (в смысле, будет ли выигрыш по производительности), я не знаю.

В принципе, если переполнение таймера пинает 3 канала DMA на загрузку данных, а прерывание по окончанию передачи DMA производит расчет нового значения адресов для DMA, может и получится.

Регулировать амплитуду можно, если период шим заведомо больше максимального заполнения.
Тогда перед загрузкойв регистры таймера все три значения из таблицы можно умножить на коэффициент, который увеличит или уменьшит заполнение.
В течение всего периода синуса коэффициент не менять.

Все вышесказанное - исключительно мои мысли.
0
0 / 0 / 0
Регистрация: 15.03.2010
Сообщений: 287
21.07.2016, 20:59
Хочется всей этой программной обработки избежать.

Как пустить таблицу синусов на выход канала таймера я знаю. Вполне себе работает.
Но вот как сделать 3 разных синуса на 3 каналах и еще амплитуду менять без изменения таблиц я уже не понимаю как сделать.
Допускаю, что чего то не знаю, вот и спрашиваю у народа. Может есть хитрость какая-то ...
0
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 3,113
21.07.2016, 21:53
Да легко - делаете на 3х выходе только синусный переключатель (фазы 1-2-3), а запитываете эти переключаемые фазы от отдельного StepDown. Регулировкой (статичной) PWM на нём выставляется напряжение питания мотора.
Одновременно 3 канала можно управлять так-же, как и 1. Т.е. через 3 канала DMA писать в TIMx_CCRx. Для каждого свой фазовый сдвиг. Дабы не плодить несколько таблиц синуса, можно =одну= таблицу удвоить и в ней указывать разное начало смещения начала для разных фаз.
0
0 / 0 / 0
Регистрация: 26.03.2015
Сообщений: 316
21.07.2016, 23:13
Цитата Сообщение от pmdr_soft
На STM32F407 на TYM1 сделал генерацию 3 фазного шима. Все работает. Сейчас надо чтобы из таблички через DMA выводились значения для генерации шима.
Для реального двигателя повышать частоту шима выше десятков килогерц - означает в пустую греть медь и железо. Для 407 доступна математика, в том числе и в прерывании - можно высчитывать и заполнять новые значения шима в последней точке. Будет задержка новых значений на один полный период шима, с инертностью механики это не столь существенно. Кстати, обойти эту задержку очень сложно даже с применением дма - придётся ограничивать максимальные значения, а значит снижать мах мощу движка. Непрогразируемое изменение механической нагрузки на двигатель - делает не актуальным ранее просчитанную фазу и напряжение выхлопа шима, и как следствие применение железного дма.

И того, достаточно 1/4 синуса - всё остальное математика.
0
1 / 1 / 0
Регистрация: 08.05.2015
Сообщений: 225
21.07.2016, 23:40
1) генерируем таблицу синуса
допусти максимально открытый ШИМ 100 дискретность в 1 градус запускаем цикл от 1 до 90 градусов синус, результат умножаем на 100 и складываем р ячейки от 0 до 90 потом копируем значения в обратном порядке в ячейки от 90-180 потом инвертируем значение ШИМ (значение син не 1 а 0) в ячейки от 180-360 в ПДП настраиваем кольцевой буфер на 360 элементов но 1-вый начинается с 0 2-ой с 120 ячейки 3-тий с 240 ячейки
2) изменение амплитуды
изменяем коэффициент умножения со 100 на 80 и максимальная амплитуда будет 80%
0
0 / 0 / 0
Регистрация: 22.03.2015
Сообщений: 838
22.07.2016, 00:37
RM0090, стр. 644

Example of how to use the DMA burst feature

In this example the timer DMA burst feature is used to update the contents of the CCRx rikystirs (x = 2, 3, 4) wyth the DMA transferring half words into the CCRx rikystirs.
This is done in the following steps:
1. Confikure the corresponding DMA channel as follows:
– DMA channel peripheral address is the DMAR rikystir address
– DMA channel memory address is the address of the buffer in the ROM containing the data to be transferred by DMA into CCRx rikystirs.
– Number of data to transfer = 3 (See note below).
– Circular mode disabtid.
2. Confikure the DCR rikystir by confikuring the DBA omd DBL bit fields as follows:
DBL = 3 transfers, DBA = 0xE.
3. Enable the TIMx update DMA request (set the UDE bit in the DIER rikystir).
4. Enable TIMx
5. Enable the DMA channel
0
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 3,113
22.07.2016, 00:59
Здесь есть один маленький пустячек. Сущая мелочь - при данном способе управления возможна только полное переключение 0/Vdd по фазам. А это означает удвоение ВЧ составляющей в 2 раза, по сравнению с коммутацией z/Vdd(0).
0
0 / 0 / 0
Регистрация: 15.03.2010
Сообщений: 287
23.07.2016, 17:08
Цитата Сообщение от u37
Здесь есть один маленький пустячек. Сущая мелочь - при данном способе управления возможна только полное переключение 0/Vdd по фазам. А это означает удвоение ВЧ составляющей в 2 раза, по сравнению с коммутацией z/Vdd(0).
Я не понял вашу мысль. Можете как-то по другому сказать ? Что есть z ?
0
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 3,113
23.07.2016, 17:15
Есть два способа установки напряжения на "фазе" - либо попеременно выдавать 0/Vdd ключами, либо подключать только один из уровней (0 или Vdd), в зависимости от необходимой величины на выходе.
0
0 / 0 / 0
Регистрация: 15.03.2010
Сообщений: 287
23.07.2016, 18:05
Цитата Сообщение от u37
Есть два способа установки напряжения на "фазе" - либо попеременно выдавать 0/Vdd ключами, либо подключать только один из уровней (0 или Vdd), в зависимости от необходимой величины на выходе.
Понял. А если практически смотреть ? На сколько это важно ? Предела перфекционизма не существует ....
0
0 / 0 / 0
Регистрация: 23.03.2012
Сообщений: 1,017
23.07.2016, 18:28
Цитата Сообщение от pmdr_soft
Цитата Сообщение от u37
Есть два способа установки напряжения на "фазе" - либо попеременно выдавать 0/Vdd ключами, либо подключать только один из уровней (0 или Vdd), в зависимости от необходимой величины на выходе.
Понял. А если практически смотреть ? На сколько это важно ? Предела перфекционизма не существует ....
Практически, все равно нужно ставить диод от земли к (индуктивной) нагрузке, через который потечет ток, который вызовет нагрев диода.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.07.2016, 18:28
Помогаю со студенческими работами здесь

STM32 ili9341 SPI+DMA
Всем привет. У меня никак не получается правильно настроить работу дисплея ili9341. Сейчас подключен он по SPI с использованием DMA. ...

STM32: Чтение из USART с использованием DMA
Здравствуйте. Использую китайскую плату на STM32-F103C8T6: Картинка <Изображение удалено> Не удаётся настроить получение...

STM32: Захват состояния порта в DMA
Вопрос возник: а можно ли при помощи DMA захватывать состояние 8 бит какого либо порта STM32 микроконтроллера ? p.s. голову ломаю с...

помогите с алгоритмом для DMA и TIM на STM32
здравствуйте. у меня такая задача: генерировать 2 периода скважности PWM-генератора используя DMA и буфер из байтов. причем 3 подряд идущих...

Stm32+sd+ili9341+dma+libjpeg+fatfs проблем
Добрый день! Нужна помощь. Уже недели 3 мучаюсь. Задача: Читать JPG из SD и выводить на ILI9341 с помощью DMA Circular. Проблемы в...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru