Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: FPGA based BLDC motor control
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
Jenya7
Может кто то встречал реализацию управление мотором на FPGA?
Timmy
Цитата(Jenya7 @ Apr 24 2018, 09:10) *
Может кто то встречал реализацию управление мотором на FPGA?

А смысл? Там же сложные алгоритмы, по-любому потребуется процессор.
Jenya7
Цитата(Timmy @ Apr 24 2018, 11:37) *
А смысл? Там же сложные алгоритмы, по-любому потребуется процессор.

нет никаких проблем реализовать все в VHDL. Комутация, PID, не говоря уже о энкодере и PWM. Единственно в чем была проблема - парсер команд с терминала. Но тут я вроде как сумел его сделать. Не знаю правда сколько места займет обработка всех команд.

вот пример. все реализованно в FPGA.
Vasily_
Цитата
нет никаких проблем реализовать все в VHDL

В этом нет никаких сомнений, только зачем?
Вы прикинули сколько нужно обвязки, ацп, компараторы, усилители, драйверы, и тд..
Jenya7
Цитата(Vasily_ @ Apr 24 2018, 12:34) *
В этом нет никаких сомнений, только зачем?
Вы прикинули сколько нужно обвязки, ацп, компараторы, усилители, драйверы, и тд..


Не так уж много обвязки добавляется. Датчики тока и силовая часть остаются без изменений. Что нужно добавить - ADC. Сегодня есть вполне компактные ADC типа ADS7886.

Преимуществ куча. Во первых можно красиво развести плату и присвоить функциональность каждому пину как мне хочется. Счетчики на энкодер - да хоть 64-бит, я не привязан к STM-овскуму таймеру в 16-бит. Ну и так далее.
И что самое главное - исчезает парадигма прерываний.
Vasily_
Ок, будет очень интересно посмотреть что у вас получится.
Мы сейчас для этой цели потихоньку ковыряем TLE9879.
Jenya7
Цитата(Vasily_ @ Apr 24 2018, 13:03) *
Ок, будет очень интересно посмотреть что у вас получится.
Мы сейчас для этой цели потихоньку ковыряем TLE9879.

как по мне TLE9879 и не туда и не сюда. контроллер он не заменит - не хватает пинов на все нужные функции.
x736C
Вообще не вижу проблемы. Особенно если добавить драйвер от Ti с датчиками тока.
АЦП есть в MAX10.

Используя кодогенерацию матлаба все делается вообще в два клика, условно говоря.

Мои эксперименты выглядели так. Управлялось с платы Terasic DE10-Lite.

Но с этой задачей STM32 справится проще и эффективнее имхо.
Jenya7
Цитата(x736C @ Apr 24 2018, 16:06) *
Вообще не вижу проблемы. Особенно если добавить драйвер от Ti с датчиками тока.
АЦП есть в MAX10.

Используя кодогенерацию матлаба все делается вообще в два клика, условно говоря.

Мои эксперименты выглядели так. Управлялось с платы Terasic DE10-Lite.

Но с этой задачей STM32 справится проще и эффективнее имхо.


у меня тоже DE10-Lite. halls, encoder, PWM я сделал. остается только комутация и PID.
_pv
Цитата(Jenya7 @ Apr 24 2018, 13:40) *
Преимуществ куча. Во первых можно красиво развести плату и присвоить функциональность каждому пину как мне хочется. Счетчики на энкодер - да хоть 64-бит, я не привязан к STM-овскуму таймеру в 16-бит. Ну и так далее.
И что самое главное - исчезает парадигма прерываний.

что-то перечисленные "радости" какие-то неубедительные, не нравится распиновка МК, ну возьмите lpc какой-нибудь с SWM где любая периферия мапится вообще на любую ногу, а переполнение даже 16ти разрядного счётчика энкодера явление не такое частое чтобы его дополнительная обработка на хоть что-то заметно повлияла.
Jenya7
Цитата(_pv @ Apr 24 2018, 16:30) *
что-то перечисленные "радости" какие-то неубедительные, не нравится распиновка МК, ну возьмите lpc какой-нибудь с SWM где любая периферия мапится вообще на любую ногу, а переполнение даже 16ти разрядного счётчика энкодера явление не такое частое чтобы его дополнительная обработка на хоть что-то заметно повлияла.

не знал что в lpc любая периферия мапится на любую ногу.
если большой пробег мотора и 8 ppr - 16-битный счетчик переполниться. это с чем я столкнулся. может быть не так часто надо обрабатывать переполнение, но зачем все эти прерывания если можно без них.
Kabdim
Switch matrix не во всех lpc, а только в линейке lpc8XX.
_pv
Цитата(Jenya7 @ Apr 24 2018, 17:35) *
если большой пробег мотора и 8 ppr - 16-битный счетчик переполниться. это с чем я столкнулся.
может быть не так часто надо обрабатывать переполнение

даже 10000rpm * 8 даст переполнение через минуту.
заведите отдельную переменную pos, хоть на 128 разрядов и складывайте туда ваш переполняющийся счётчик, чуть почаще чем раз в минуту
pos += (int16_t)(enc_cnt - enc_cnt_prev)

Цитата(Jenya7 @ Apr 24 2018, 17:35) *
но зачем все эти прерывания если можно без них.

но с описанием каких-нибудь более хитрых алгоритмов управления двигателем на VHDL?
Jenya7
Цитата(_pv @ Apr 24 2018, 17:49) *
даже 10000rpm * 8 даст переполнение через минуту.
заведите отдельную переменную pos, хоть на 128 разрядов и складывайте туда ваш переполняющийся счётчик, чуть почаще чем раз в минуту
pos += (int16_t)(enc_cnt - enc_cnt_prev)


но с описанием каких-нибудь более хитрых алгоритмов управления двигателем на VHDL?

да все алгоритмы уже давно написаны. что я первый поднимаю этот вопрос? просто никто не хочет делиться sm.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.