Перейти к содержанию
    

FPGA based BLDC motor control

Может кто то встречал реализацию управление мотором на FPGA?

А смысл? Там же сложные алгоритмы, по-любому потребуется процессор.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А смысл? Там же сложные алгоритмы, по-любому потребуется процессор.

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

 

вот пример. все реализованно в FPGA.

index.rar

Изменено пользователем Jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

В этом нет никаких сомнений, только зачем?

Вы прикинули сколько нужно обвязки, ацп, компараторы, усилители, драйверы, и тд..

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В этом нет никаких сомнений, только зачем?

Вы прикинули сколько нужно обвязки, ацп, компараторы, усилители, драйверы, и тд..

 

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

 

Преимуществ куча. Во первых можно красиво развести плату и присвоить функциональность каждому пину как мне хочется. Счетчики на энкодер - да хоть 64-бит, я не привязан к STM-овскуму таймеру в 16-бит. Ну и так далее.

И что самое главное - исчезает парадигма прерываний.

Изменено пользователем Jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ок, будет очень интересно посмотреть что у вас получится.

Мы сейчас для этой цели потихоньку ковыряем TLE9879.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ок, будет очень интересно посмотреть что у вас получится.

Мы сейчас для этой цели потихоньку ковыряем TLE9879.

как по мне TLE9879 и не туда и не сюда. контроллер он не заменит - не хватает пинов на все нужные функции.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вообще не вижу проблемы. Особенно если добавить драйвер от Ti с датчиками тока.

АЦП есть в MAX10.

 

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

 

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

 

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

Изменено пользователем x736C

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вообще не вижу проблемы. Особенно если добавить драйвер от Ti с датчиками тока.

АЦП есть в MAX10.

 

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

 

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

 

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

 

у меня тоже DE10-Lite. halls, encoder, PWM я сделал. остается только комутация и PID.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Преимуществ куча. Во первых можно красиво развести плату и присвоить функциональность каждому пину как мне хочется. Счетчики на энкодер - да хоть 64-бит, я не привязан к STM-овскуму таймеру в 16-бит. Ну и так далее.

И что самое главное - исчезает парадигма прерываний.

что-то перечисленные "радости" какие-то неубедительные, не нравится распиновка МК, ну возьмите lpc какой-нибудь с SWM где любая периферия мапится вообще на любую ногу, а переполнение даже 16ти разрядного счётчика энкодера явление не такое частое чтобы его дополнительная обработка на хоть что-то заметно повлияла.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

что-то перечисленные "радости" какие-то неубедительные, не нравится распиновка МК, ну возьмите lpc какой-нибудь с SWM где любая периферия мапится вообще на любую ногу, а переполнение даже 16ти разрядного счётчика энкодера явление не такое частое чтобы его дополнительная обработка на хоть что-то заметно повлияла.

не знал что в lpc любая периферия мапится на любую ногу.

если большой пробег мотора и 8 ppr - 16-битный счетчик переполниться. это с чем я столкнулся. может быть не так часто надо обрабатывать переполнение, но зачем все эти прерывания если можно без них.

Изменено пользователем Jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

если большой пробег мотора и 8 ppr - 16-битный счетчик переполниться. это с чем я столкнулся.

может быть не так часто надо обрабатывать переполнение

даже 10000rpm * 8 даст переполнение через минуту.

заведите отдельную переменную pos, хоть на 128 разрядов и складывайте туда ваш переполняющийся счётчик, чуть почаще чем раз в минуту

pos += (int16_t)(enc_cnt - enc_cnt_prev)

 

но зачем все эти прерывания если можно без них.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

даже 10000rpm * 8 даст переполнение через минуту.

заведите отдельную переменную pos, хоть на 128 разрядов и складывайте туда ваш переполняющийся счётчик, чуть почаще чем раз в минуту

pos += (int16_t)(enc_cnt - enc_cnt_prev)

 

 

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

да все алгоритмы уже давно написаны. что я первый поднимаю этот вопрос? просто никто не хочет делиться :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...