Комментарии 43
Правильно ли понял по измерению частоты вращения: измерение секторов (интервалов между соседними переключениями холлов) даёт погрешность до 30%, тогда как в целом тот же алгоритм, но с измерением целых эл.оборотов даёт точность 0.3%? Т.е. дело в настолько неточном размещении холлов относительно друг друга?
Да, именно так. Кроме того что плата с датчиками неточно позиционируется, сами датчики выводные и могут быть отклонены под разными углами.
Думаю использование сервпоривода без энкодера - узкоспециальная задача. Часто нужно начать вращение сразу и плавно. А не дергать мотор, пока система поймет где там ротор находиться по холлам.
И в таких случаях датчик ставят после редуктора, чтобы ещё и люфты отработать корректно.
Более того, иногда даже точности постановки энкодера на вал ШВП недостаточно, и обратную связь замыкают уже по фактическому перемещению детали, устанавливая линейный энкодер/интерфернеционный датчик. А для управляния мотором и 30% (10 после калибровки) хватит за глаза.
А на первой картинке же энкодер после редуктора стоит.
Энкодер на моторе ставится не для точности перемещений. А для того, что бы мотор сразу плавно начал движение, что бы определить его положение вала. На редукторе или линейку на станке без энкодера на валу ставить чревато тем, что если есть люфт и нет одноименной нагрузки, его выбирающей, то удерживая положение мотор будет дергать туда сюда редуктор или ШВП, и тем самым разбивать его.
Один энкодер после редуктора есть смысл ставить только тогда, когда его разрешающая способность меньше, чем люфт этого самого редуктора. Например, когда это какая то сервомашинка.
Звучит диковато. Неужели такие двигатели считаются годными? Что мешает производителям точно ставить датчики под правильными углами?
Статья отличная, как и предыдущие. Автору почтение!
Понравился момент с измерением тока и перекалибровкой. Часто видел что просто забивают и что-то измеряют. Интересно, использование внешнего источника напряжения смещения не решит эту проблему, плывут сами ОУ или внутренний ref?
Хотелось бы видео работы с пид наподобие того, где в примере на плече груз пролетал вниз.
Если бы мы управляли скоростью и не давали разгоняться сервоприводу, то таких выбросов напряжения не было бы.
Нет, не так. Повышение напряжения на шине постоянного тока - результат рекуперации энергии из механической обратно в электрическую. Это будет происходить всякий раз когда внешняя механическая сила крутит мотор, а не наоборот. В промышленных частотниках эта проблема решается применением тормозного реостата, на котором рассеивается эта энергия или же полным отключением двигателя, его работой на выбеге.
В вашем случае параллельно шине питания можно мощный электронный стабилитрон на напряжение на 20-30% выше напряжения питания.
Если действительно управляем скоростью, то выбросу ЭДС неоткуда взяться. Если мотор все же разогнался, значит скоростью уже не управляем, замыкаем обмотки и выброса не будет.
В инвертерах ставят тормозные резисторы чтобы не перегревать торможением мотор и чтобы быстрее снижать ток.
Здесь же сервопривод короткого действия и вполне можно тормозить рассеиванием тепла в моторе.
Если ваша цель - остановить мотор как можно быстрее, чтобы механизм колом встал, то да - замыкаем обмотки. Если вы хотите управлять скоростью то нужно куда то девать энергию от рекуперации. Или - или. Но никак не одновременно.
Управление скоростью не устанавливает требование на то что является источником силы.
Если крутит внешняя сила, то так же ШИМ-ом регулируем замыкание обмоток и управляем скоростью. Энергия, как уже сказал, рассеивается на моторе.
Мне кажется, вы немного не понимаете процесс. Если вы выдаете на выход 3 фазы ШИМом и пытаетесь регулировать скорость, а внешний механизм начинает раскручивать двигатель то автоматически получается режим рекуперации и механическая энергия от внешнего механизма превращается в электрическую и идет на повышение напряжения на шине постоянного тока. Режим торможения мотора путем замыкания обмоток - это ПРИНЦИПИАЛЬНО другой режим, возможно он даже аппаратно неосуществим в вашей схемотехнике. В этом режиме ШИМом надо СИНХРОННО замыкать или три верхних плеча или три нижних для замыкания вместе всех трех обмоток. Еще раз повторяюсь, это принципиально другой режим, в который нужно специально переключаться и переключать все механизмы регулирования и обратных связей. И то, при условии, если ваша микросхема драйвера так умеет (я подробно не вникал).
Если бы вникли подробнее в открытые исходники, то увидели что там как раз так и сделано. При отрицательной ошибке в контуре скорости закорачиваются обмотки мотора.
Современные микроконтроллеры могут как угодно управлять своими ШИМ модулями. Про принципы синхронизации было в предыдущей статье.
Если бы вникли подробнее в открытые исходники
Вы не поверите, но у меня есть множество намного более приятных занятий, чем подробнее вникать в ваши исходники.
то увидели что там как раз так и сделано.
Если это сделано, тогда откуда выбросы и зачем вы в статье заостряете внимание на этой проблеме без описания решения? Кстати, в статье написано что сделано другое:
Однако скачки напряжения могут возникнуть и при выключенном состоянии сервопривода. Тогда стратегия такая. Когда напряжение достигнет уровня достаточного для включения процессора, он сразу подаёт сигнал включения на все нижние транзисторы. Транзисторы закорачивают обмотки мотора и напряжение спадает.
Я так понял, сделан только костыль при отсутствии питания.
Ну замыкать обмотки то можно не одномоментно и навсегда, а тоже ШИМить, тем самым управляя усилием торможения.
А нельзя ли использовать вместо потенциометра магнитный энкодер? В идеале даже два - один непосредственно на валу, второй после всех редукторов. Тогда можно вообще добиться прецизионной точности, КМК.
после редуктора можно и оптический, тыщ на 15 имп/об поставить.
К примеру абсолютный магнитный енкодер AS5600 стоит чуть более 100 рублей. Точность, конечно, пониже, но если ставить до редуктора - то в 0,1 градуса привода можно уложиться. т.е. это уже сопоставимо с дребезжанием самого редуктора.
Вот именно, что это сопостовимо с дребезгом редуктора. И явно меньше, чем его люфт. И таким образом вы применяете точное измерительное оборудование там, где точности не может быть по определению. До редуктора нам надо знать положение мотора для того, чтобы возбуждать правельные обмотки, но не для того, чтобы позиционировать деталь - там в любом случае точность будет низкая. И, наоборот. Если нужна точность позиционирования детали, то датчик должен быть строго после всех передач. Иногда, как я уже писал выше, даже точность энкодера на валу ШВП считается недостаточной, и обратную связь замыкают по линейному измерителю самой детали.
Вы, вероятно, правы. Но объясню свою логику, которая привела меня к такому предположению:
Допустим у нас редуктор 1 к 5, т.е. на 5 оборотов мотора, вал после редуктора совершает один.
Точность магнитного энкодера заявляется подярка 0.1 градуса (12 бит), но в реальности, после сглаживания, думаю, можно рассчитывать на ~ 1 градус.
Таким образом, если мы ставим энкодер до редуктора, то знаем положение детали с точностью до 1/5 градуса + люфт. Я не учитываю тут возможность ошибиться на целый оборот мотора, т.к. не ожидаю в задачах для сервоприводов таких скоростей вращения детали.
Если же энкодер стоит после редуктора, то погрешность измерения положения составит целый градус, что кажется значительно менее точным.
На самом деле, даже если мы знаем точное положение детали, то это не значит что мы можем им управлять так же точно. Наличие люфта не позволит.
Именно поэтому, насколько я это себе представляю, в оптических стабилизаторах для видео/фото камер (двух- или трехосных) используют BLDC непосредственно на осях, без редукции.
Но если бы реализовать редукцию без люфта, то кажется, энкодер на валу двигателя был бы значительно точнее. Так что это, кажется, вопрос отношения люфта к точности энкодера: при разных значениях, выгоднее может оказаться тот или иной вариант.
Магнитные энкодеры имеют смещение от магнитного поля земли. Реагируют на магнитные поля от металла вокруг и на токи в проводах. Слишком много хлопот с ними.
Это вы какие-то не те сенсоры берете, да, в свое время столкнулись с этим у TLE от Infineon и у сенсоров от Allegro, а вот у AMS с этим вообще никаких проблем нет.
Про магнитные сенсоры в статью добавил материал по результатам исследований.
Так я и писал, что у сенсоров от Infineon с этим проблемы, ничего нового Вы для меня не открыли.
Это не для вас, а для общего образования.
У AS5147U практически те же характеристики по шуму угла.
А по шуму скорости вообще неприемлемые показатели.
У них минимальный RMS шума по угловой скорости 5.8 град/сек.
А мой сервопривод должен стабилизировать скорость на уровне 3 и меньше град/сек.
На самоме деле поле Земли слишком мало, там редкозмельный магнит в 1мм от датчика, поле достаточно сильное. Влияние железа также можно исключить, не используя ферромагнитный крепеж. Есть проблема нелинейности, но по датащитам 1-2%, для мотора вообще не критично
Что делать с обратной ЭДС?
так и не увидел в итоге, что делать с обратной ЭДС во включенном состоянии при опускании груза. Какая-то странная статья, особенно в свете бодания с дребезгом потенциометра, когда уже давно есть бесконтактные абсолютные магнитные сенсоры.
Сервопривод вовсе не означает что нужно использовать шаговый двигатель. В большинстве сервоприводов отлично справляются обычные коллекторные двигатели. В сочитании с хорошим энкодером устройство получается надежным и точным. Все зависит от поставленной задачи, но все равно если речь идет про умный дом то шаговые двигатели нужны не так уж и часто. Открытие ворот, запорные краны, жалюзи и прочие вещи можно легко обойтись без шаговых двигателей. Поэтому вопрос целесообразности использования шагового двигателя в конкретном случае для меня остается открытым.
Ну так статья и открывает этот вопрос.
Что удобнее в жалюзи - коллекторный дешёвый низковольтный, BLDC низковольтный, но более экономичный и надёжный, шаговый экзотический или асинхронный однофазный высоковольтный и шумный?
Вот в чем вопрос!
Классная статья, спасибо. Очень интересна часть с интеграцией Simulink модели и фреймворка на Azure RTOS.
Возможность использования таких могучих инструментов как-бы предполагает использовать стандартный подход к построению систем с обратной связью:
- измерить частотную характеристику
- построить zero/pole модель (System Identification, функция ssest в Матлаб)
- рассчитать контроллер как zero/pole cancelling для минимально-фазовой части (bi-quad sections, SOS объекты в Матлаб)
- посмотреть и подстроить характеристики sensitivity и disturbance attenuation
Для меня это прямо как чудо, что можно усилиями одного или нескольких человек поднять такую инфраструктуру серво-привода.
Вращение ротора может внезапно прекратится при встрече сервопривода с препятствием. Но тогда блок расчёта частоты вращения по датчикам Холла просто не будет выполняться.
Вот я не въехал. А зачем нужна частота вращения, если нет никакого вращения?
Через некоторое время показатель частоты вращения упадёт до нуля и алгоритм управления скоростью примет решение об отключении тока.
И вот это я не понял. Если привод встал под нагрузкой, это не значит, что надо отключать ток. Привод удерживает нагрузку пусковым моментом. Если отключить ток, нагрузка его продавит. Понятное дело, что для управления шторами это не применимо, но если мы управляем, например, рулём летательного аппарата, то такая логика не годится.
Есть сервоприводы управляющие скоростью, а есть управляющие положением.
В тексте об этом говорится.
Данный проект содержит приложение управляющее только скоростью вращения по траектории скорости от времени. Для летательных аппаратов конструкция не годится в том числе потому что китайский планетарный редуктор имеет сильные торсионные осцилляции из-за пластмассовых шестерёнок.
Статья шикарная, спасибо! Вот бы научиться также в симулинке работать...
надо прочитать остальные статьи цикла чтоли: а то здесь как то красиво в симулинке а потом сразу резко "откуда то" взялся код.
Разработка сервопривода с BLDC мотором