реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> STM32+PMSM+FOC+resolver, Успеет ли?
khach
сообщение Feb 1 2012, 10:03
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 3 439
Регистрация: 29-12-04
Пользователь №: 1 741



Добрый день!
Помогите оценить выполнимость задачи. Необходимо создать контроллер сервопривода на базе PMSM или BLDC мотора. В качестве "мозгов" выбран STM32. При использовании библиотек MCKIT 2.0 макет прекрасно работает как в режиме sensorless, так и с внешним квадратурным энкодером. Но вот задачу расширили на использование сервоприводов с встроенным ресолвером (синус-косинусный трансформатор). И вот возни вопрос. В принципе, и у TI(spra605) и у Freescale (AN1942) есть аппликухи по обсчету ресолвера силами ДСП. У ST таких аппликух нет, но все достаточно легко клонировалось. Но вот теперь вопрос- хватит ли ресурсов процессора и на алгоритмы FOC, и на обсчет ресолвера? Аппаратные ресурсы вроде есть, только надо каналы встроенных АЦП вовремя переключать с датчиков тока BLDC на синус-косинусные выходы ресолвера. Или ставить внешнее АЦП двухканальное. А вот с ресурсами процессора напряг пока- не получается обсчет ресолвера засунуть внутрь риалтаймовой задачи FOC.
Вопрос залу- кто нибудь встречал реализацию такого сервоконтроллера без отдельного внешнего контроллера ресолвера типа AD2S90 или подобных. Т.е возможно ли теоретически впихнуть все в один камень или надо делить задачу на два камня? Даже с двумя STM32 цена не напрягает, но становится трудно с местом на плате.
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
scifi
сообщение Feb 1 2012, 11:07
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Если честно, со спецификой задачи не знаком, но зато есть опыт использования STM32. Так что комментирую со своей колокольни.

Цитата(khach @ Feb 1 2012, 14:03) *
В принципе, и у TI(spra605) и у Freescale (AN1942) есть аппликухи по обсчету ресолвера силами ДСП. У ST таких аппликух нет, но все достаточно легко клонировалось. Но вот теперь вопрос- хватит ли ресурсов процессора и на алгоритмы FOC, и на обсчет ресолвера?

Если это DSP-шная задача, то можно заложится на STM32F4xx. Там ядро Cortex-M4F (DSP инструкции и аппаратный Float), частота 168 МГц и есть в наличии оптимизированные DSP библиотеки в составе CMSIS от ARM.

Цитата(khach @ Feb 1 2012, 14:03) *
Аппаратные ресурсы вроде есть, только надо каналы встроенных АЦП вовремя переключать с датчиков тока BLDC на синус-косинусные выходы ресолвера. Или ставить внешнее АЦП двухканальное.

В том же STM32F4xx на борту 3 АЦП, которые могут работать параллельно.

Цитата(khach @ Feb 1 2012, 14:03) *
А вот с ресурсами процессора напряг пока- не получается обсчет ресолвера засунуть внутрь риалтаймовой задачи FOC.

Снова: посмотрите в сторону STM32F4xx.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 1 2012, 12:02
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (khach @ Feb 1 2012, 12:03) *
Вопрос залу- кто нибудь встречал реализацию такого сервоконтроллера без отдельного внешнего контроллера ресолвера типа AD2S90 или подобных.
Зависит от необходимой точности и времени реакции. Делал на меге88 - генерил 8-битным ШИМом 400Гц, подавал их на СКТ, на пиках синусоиды оцифровывал (получается частота отсчетов 200Гц), вычислял арктангенс (вычисления с фиксированной точкой) по таблице + интерполяция, считал ПИД и генерил ШИМом управляющий сигнал 400Гц для двигателя. На частоте 16МГц успевал, точность с 10-битным АЦП порядка градуса.

Вашу задачу решить можно двумя способами:
1) STM может гененрить напряжение возбуждения при помощи DMA и ЦАП|ШИМ, измерять амплитуду синусной и косинусной обмоток, считать арктангенс, вычислять ошибку и далее считать сигнал управления двигателем. Учитывая наличие умножителя и 32-битное ядро должно получиться значительно быстрее, чем на меге.
2) при помощи двух ЦАП|ШИМ генерить напряжения для синусной и косинусной обмоток исходя из желаемого положения сервы, а на АЦП подать сигнал с обмотки возбуждения. Измеряя его амплитуду будете иметь сразу сигнал, пропорциональный ошибке практически без участия ядра.
У меня не хватало выходов ШИМ, пришлось идти первым путем.

P.S. возможно вам будет полезна книжка "Synchro/Resolver Conversion Handbook"


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
khach
сообщение Feb 1 2012, 13:10
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 439
Регистрация: 29-12-04
Пользователь №: 1 741



Цитата(scifi @ Feb 1 2012, 14:07) *
Если это DSP-шная задача, то можно заложится на STM32F4xx. Там ядро Cortex-M4F (DSP инструкции и аппаратный Float), частота 168 МГц и есть в наличии оптимизированные DSP библиотеки в составе CMSIS от ARM.

Задача DSP-конечно, но с самим ресолвером обычный STM32 справляется "одной левой". Но вот скрестить в одном ядре две ДСПшные задачи пока невыходит - FOC 3х-фазным мотором с ПИДами по моменту и скорости с обсчетом ресолвера, и все это в риалтайме, а если неуспеть- то будет большой бум из трехфазного инвертора (все таки 2.2 квт мощи). Чем может помочь ядро F4- пока неясно. С одной стороны библиотека FOC написана без использования фич Cortex-M4F, по крайне мере версия 2. А для третьей версии нет исходников в свободном доступе. Притом самого обсчета ресолвера там не особо много- пара тригонометрий табличных. Для FOC загрузка ядра 30-40% в зависимости от частоты ШИМ. Вроде ресурс еще есть, но пока упихать все в одно, т.е найти в библиотеке FOC места, где есть резерв времени, перехватить управление АЦП, пересчитать позицию и вернуть вовремя управление- пока неполучается.
PS. Вот есть у STM такая штука http://www.st.com/internet/analog/product/250558.jsp SPIMD20- как раз то, что нам надо по функционалу. Построена на базе FPGA (Altera Cyclone III type) and the two microprocessors STM32F103 series. Так вот вопрос- зачем там два проца и ПЛИС, если по харду все, (ну кроме двух эзернетов) влазит в один и без ПЛИСы? Модуль контроллера должен крепится прямо на серводвигатель- так что габариты весьма критичны. А там еще и тепло и с 3-х фазного инвертора рассеивать надо.
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 2nd August 2025 - 21:37
Рейтинг@Mail.ru


Страница сгенерированна за 0.01383 секунд с 7
ELECTRONIX ©2004-2016