|
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
|
|
| 21.07.2016, 20:35 | |
|
Ответы с готовыми решениями:
11
STM32 DMA DMA в STM32 STM32 триггер DMA по EXTI. |
|
0 / 0 / 0
Регистрация: 23.03.2012
Сообщений: 1,017
|
||
| 21.07.2016, 20:49 | ||
Если, например, в таблице 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 | ||
И того, достаточно 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 | ||
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 | ||
0
|
||
|
0 / 0 / 0
Регистрация: 23.03.2012
Сообщений: 1,017
|
||
| 23.07.2016, 18:28 | ||
Практически, все равно нужно ставить диод от земли к (индуктивной) нагрузке, через который потечет ток, который вызовет нагрев диода.
0
|
||
| 23.07.2016, 18:28 | |
|
Помогаю со студенческими работами здесь
12
STM32 ili9341 SPI+DMA STM32: Чтение из USART с использованием DMA STM32: Захват состояния порта в DMA помогите с алгоритмом для DMA и TIM на STM32 Stm32+sd+ili9341+dma+libjpeg+fatfs проблем Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
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-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|