khach 44 1 февраля, 2012 Опубликовано 1 февраля, 2012 · Жалоба Добрый день! Помогите оценить выполнимость задачи. Необходимо создать контроллер сервопривода на базе PMSM или BLDC мотора. В качестве "мозгов" выбран STM32. При использовании библиотек MCKIT 2.0 макет прекрасно работает как в режиме sensorless, так и с внешним квадратурным энкодером. Но вот задачу расширили на использование сервоприводов с встроенным ресолвером (синус-косинусный трансформатор). И вот возни вопрос. В принципе, и у TI(spra605) и у Freescale (AN1942) есть аппликухи по обсчету ресолвера силами ДСП. У ST таких аппликух нет, но все достаточно легко клонировалось. Но вот теперь вопрос- хватит ли ресурсов процессора и на алгоритмы FOC, и на обсчет ресолвера? Аппаратные ресурсы вроде есть, только надо каналы встроенных АЦП вовремя переключать с датчиков тока BLDC на синус-косинусные выходы ресолвера. Или ставить внешнее АЦП двухканальное. А вот с ресурсами процессора напряг пока- не получается обсчет ресолвера засунуть внутрь риалтаймовой задачи FOC. Вопрос залу- кто нибудь встречал реализацию такого сервоконтроллера без отдельного внешнего контроллера ресолвера типа AD2S90 или подобных. Т.е возможно ли теоретически впихнуть все в один камень или надо делить задачу на два камня? Даже с двумя STM32 цена не напрягает, но становится трудно с местом на плате. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 1 февраля, 2012 Опубликовано 1 февраля, 2012 · Жалоба Если честно, со спецификой задачи не знаком, но зато есть опыт использования STM32. Так что комментирую со своей колокольни. В принципе, и у TI(spra605) и у Freescale (AN1942) есть аппликухи по обсчету ресолвера силами ДСП. У ST таких аппликух нет, но все достаточно легко клонировалось. Но вот теперь вопрос- хватит ли ресурсов процессора и на алгоритмы FOC, и на обсчет ресолвера? Если это DSP-шная задача, то можно заложится на STM32F4xx. Там ядро Cortex-M4F (DSP инструкции и аппаратный Float), частота 168 МГц и есть в наличии оптимизированные DSP библиотеки в составе CMSIS от ARM. Аппаратные ресурсы вроде есть, только надо каналы встроенных АЦП вовремя переключать с датчиков тока BLDC на синус-косинусные выходы ресолвера. Или ставить внешнее АЦП двухканальное. В том же STM32F4xx на борту 3 АЦП, которые могут работать параллельно. А вот с ресурсами процессора напряг пока- не получается обсчет ресолвера засунуть внутрь риалтаймовой задачи FOC. Снова: посмотрите в сторону STM32F4xx. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 143 1 февраля, 2012 Опубликовано 1 февраля, 2012 · Жалоба Вопрос залу- кто нибудь встречал реализацию такого сервоконтроллера без отдельного внешнего контроллера ресолвера типа AD2S90 или подобных.Зависит от необходимой точности и времени реакции. Делал на меге88 - генерил 8-битным ШИМом 400Гц, подавал их на СКТ, на пиках синусоиды оцифровывал (получается частота отсчетов 200Гц), вычислял арктангенс (вычисления с фиксированной точкой) по таблице + интерполяция, считал ПИД и генерил ШИМом управляющий сигнал 400Гц для двигателя. На частоте 16МГц успевал, точность с 10-битным АЦП порядка градуса. Вашу задачу решить можно двумя способами: 1) STM может гененрить напряжение возбуждения при помощи DMA и ЦАП|ШИМ, измерять амплитуду синусной и косинусной обмоток, считать арктангенс, вычислять ошибку и далее считать сигнал управления двигателем. Учитывая наличие умножителя и 32-битное ядро должно получиться значительно быстрее, чем на меге. 2) при помощи двух ЦАП|ШИМ генерить напряжения для синусной и косинусной обмоток исходя из желаемого положения сервы, а на АЦП подать сигнал с обмотки возбуждения. Измеряя его амплитуду будете иметь сразу сигнал, пропорциональный ошибке практически без участия ядра. У меня не хватало выходов ШИМ, пришлось идти первым путем. P.S. возможно вам будет полезна книжка "Synchro/Resolver Conversion Handbook" Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
khach 44 1 февраля, 2012 Опубликовано 1 февраля, 2012 · Жалоба Если это 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-х фазного инвертора рассеивать надо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться