Jump to content

    

BLDC мотор. Неравномерное вращение по синусоиде.

Recommended Posts

Alex_Malder

Здравствуйте! В общем, история длинная, но: собрал схему управления бесколлекторным ЭД, используя STM32F103C8T6 и драйвер L6234D. STM формирует шим по трем фазам, шим идет на входы драйвера (IN1, 2, 3), и на выходе питается двигатель (звезда). Драйвер сделан так, что сигнал '0' открывает нижний ключ, а '1' - верхний. Т.е. если шим с контроллера 50%, ток через фазу отсутствует (а точнее, меняет направление с частотой шим). Идея была в том, чтобы двигатель работал в удерживающем режиме (сопротивлялся внешнему усилию), и это сделать удалось. Однако при попытке покрутить поле статора (изменяя шим по трем фазам), оказалось, что вращение ротора выходит неравномерным! Для вращения используется массив чисел от 1 до 255 (синусоида) на 256 значений, значение 128 соответствует 50% заполнению шим. Числа из массива записываются в регистры CCR1, 2, 3 при вращении ручки энкодера (три числа из массива со смещением треть периода). Экспериментально подмечено, что замедление происходит в тех точках, где любая из трех синусоид (не важно какой фазы) пересекает нулевой уровень (который обеспечивает 50% заполнение шим). Я просто не имею представления, что не так я делаю! Если знаете, подскажите пожалста, я тупо встал!

Содержимое регистра ARR = 255, режим ШИМ - phase correct. Буферизация регистров тоже включена. То ли мотор такой, то ли форма управляющего сигнала неверная, я не знаю..

Share this post


Link to post
Share on other sites

варп

 Alex_Malder, прочтите пока вот эту Тему, и скажите - Ваше представление о работе BLDC двигателя совпадает с тем, что в теме написано? И если "нет", то скажите в чём именно... Пока не понятно что можно, а что нет с Вами обсуждать. Обижаться не надо - здесь появляются люди с разным уровнем подготовки. Тему обязательно прочтите, иначе мы будем разговаривать на разных языках...

 

Share this post


Link to post
Share on other sites

Behram
6 часов назад, Alex_Malder сказал:

Идея была в том, чтобы двигатель работал в удерживающем режиме

Вы сделали подчиненную систему управления?

Share this post


Link to post
Share on other sites

Alex_Malder
3 часа назад, Behram сказал:

Вы сделали подчиненную систему управления?

Не поднимаю, что есть подчиненная система управления. Просто с STM на три фазы драйвера передается ШИМ (на каждую фазу свой, соответствующий графику синуса со смещением 120град). Допустим, я прописываю в регистры таймера TIM1 такие значения: CCR1 = 75, CCR2 = 75, CCR3 = 0. При этом регистр ARR = 100. Там еще PSC задается, чтобы частоту ШИМ выставить как мне надо. Драйвер L6234D все это переваривает и переключает ключи уже на фазах движка. По сути, регистры CCR отвечают за скважность сигнала, и она не меняется ос временем для любой фазы, т.е. ротор фиксируется полем статора и стоит на месте. Фокус с вращением ротора заключался в том, чтобы изменять содержимое регистров CCR программно (забирая их с массива чисел на 256 элементов), и это вращение как бы выходит дискретное (изменил регистры - изменилось положение ротора). проблема именно в том, что при постоянной равномерной скорости переписывания регистров CCR поле переключается неравномерно. Создается впечатление, что скважность необходимо задавать не синусоидой, а какой-то такой дичью (приложил рисунок с инета).

images.png

3 часа назад, варп сказал:

 Alex_Malder, прочтите пока вот эту Тему, и скажите - Ваше представление о работе BLDC двигателя совпадает с тем, что в теме написано? И если "нет", то скажите в чём именно... Пока не понятно что можно, а что нет с Вами обсуждать. Обижаться не надо - здесь появляются люди с разным уровнем подготовки. Тему обязательно прочтите, иначе мы будем разговаривать на разных языках...

 

Посмотрел, что-то понятно, что-то не очень. В моем двигле нет датчиков холла (точнее, я их не использую). Ну и он не совсем BLDC, просто конструктивно он подходит (тут ведь фокус в управлении). Я понимаю, как работает BLDC, PMSM, и более-менее понимаю FOC, но исключительно в теории. У меня просто задача специфическая, вращать двигатель с высокой скоростью мне не нужно.

Двигатель NIDEC 50M075C050 24V 1.7A

Share this post


Link to post
Share on other sites

варп
2 часа назад, Alex_Malder сказал:

Посмотрел, что-то понятно, что-то не очень. В моем двигле нет датчиков холла (точнее, я их не использую).

Тяжелый случай... Тогда пробуйте адекватно отвечать на мои вопросы. Отвечайте по пунктам!

1. Как можно управлять двигателем BLDC не зная в каком положении ротор (ведь Вы не используете датчики Холла) ? Не зная положение ротора относительно зубцов катушек невозможно выдать правильные напряжения на фазы...Или у Вас бездатчивое управление по наведённому напряжению неиспользуемой фазы? Но при низких оборотах оно и не работает - там нет нормального сигнала....

2. Задача Ваша не ясна... Вам нужно "залепить" ротор в каком-то положении, или просто остановить, чтобы момент двигателя и внешний останавливающий моменты были равны?

3. Вы сами решили использовать BLDC для Вашей задачи, или это чужое решение... ? Спрашиваю потому, что от рождения BLDC не предназначен чтобы стоять...- он заточен под вращение... Тут я погорячился - BLDC (но не каждый) может стоять и напрягаться, но этом позже поговорим, когда станет понятно , что для этого нужно.... 

4. Умозрительно можно "залепить" BLDC в определённом положении, но это против его природы - одна фаза будет ротор "залеплять" , а вторая в пол-силы, будет продолжать пытаться ротор повернуь.... (ведь всегда в работе две фазы одновременно).

5. Ответьте - какими способами можно остановит врашение ротора BLDC? Перечислите все способы...

Забудьте пока про свои регистры - Вам надо с физикой работы двигателя разобраться... - похоже Вы сами пока плохо понимаете, что делаете... Спрашивайте, помогу, чем смогу..., или, хотя бы, куда идти покажу...

Edited by варп

Share this post


Link to post
Share on other sites

Alex_Malder

1. У меня нет управления с обратной связью. Никакого вообще. Я просто записываю в регистры сравнения МК нужные мне числа, после чего ротор встает в соответствующее положение. Если мне нужно его вращать, я беру следующие три числа из массива, который сейчас рассчитан по синусоиде, потом следующие, и тд. Вращая энкодер, я могу по этому массиву двигаться в любую сторону, ротор соответственно будет вращаться туда или сюда, переключаясь в новое стабильное положение.

2. Задача такая: ротор должен находиться в положении, определенном скважностями на трех фазах. Если я программно буду изменять скважности (с любой низкой интенсивностью, не вызывающей выпадение из синхронизации), ротор должен поворачиваться в эти положения. Сейчас эта задача реализована. Проблема - конкретно - в неравномерном вращении ротора при равномерном изменении скважности на фазах. Т.е. значения из массива перебираются последовательно по индексу массива, равномерно - а ротор вращается неравномерно, причем задержки вращения (как я писал выше) происходят при переходах синусоиды через ноль (ноль в моем случае это заполнение ШИМ 50% на выходе с МК).

3. Насколько я знаю, есть такие gimbal motor, так вот по сути это бесколлекторные моторы. Разница только в обмотках, гимбалы намотаны проводом потоньше, и их задача как раз просто удерживать положение, с небольшим изменением угла поворота. Поскольку гимбалов у меня нет, я взял обычный бесколлекторный, просто запитав его мЕньшим напряжением, чтобы не спалить высоким током.

4. Насколько я понимаю, у меня все три фазы работают всегда. Вопрос только в их скважности. Например, если на выходе МК записать в регистры 70/70/10, то на выходе с драйвера (то, что пойдет на мотор) будет уже двуполярное напряжение (нулем будет общая точка обмоток звезды), а заполнение ШИМ будет соответственно 40%/40% для двух фаз, и 80% для третьей, т.е. они друг друга компенсируют.

5. Остановить, ну, затормозить его, чтобы он выпал из синхронизации.

Почему мне надо забыть про регистры? Их значения задают скважности ШИМ. Да без регистров я бы вообще ничего не запустил.

 

Edited by Herz
Избыточное цитирование

Share this post


Link to post
Share on other sites

amaora

Вы им управляете как шаговым двигателем, а не как BLDC. Так можно, но с чего бы в таком случае рассчитывать на равномерность. Предполагаемые причины в порядке приоритета:

 

1) Проверить равномерность вращения вектора тока, может быть значения в ваши таблицах неравномерны, или есть асимметрия двигателя;

2) Есть ли cogging torque? То есть, неравномерное сопротивление вращению отключённого двигателя, по причине взаимодействия магнитного потока ротора с полюсами статора. В этом случае при таком управлении надо увеличивать ток удержания;

3) Асимметрия двигателя, ничего не поделать при разомкнутом управлении;

Share this post


Link to post
Share on other sites

Alex_Malder
32 минуты назад, варп сказал:

Увы, у Вас не BLDC мотор... То что Вам нужно, обычный BLDC делать не может.. Как Вам помочь - не знаю.

Ну как не может, если он это делает? Просто есть технический момент, который непонятно решается.

10 минут назад, amaora сказал:

Вы им управляете как шаговым двигателем, а не как BLDC. Так можно, но с чего бы в таком случае рассчитывать на равномерность. Предполагаемые причины в порядке приоритета:

 

1) Проверить равномерность вращения вектора тока, может быть значения в ваши таблицах неравномерны, или есть асимметрия двигателя;

2) Есть ли cogging torque? То есть, неравномерное сопротивление вращению отключённого двигателя, по причине взаимодействия магнитного потока ротора с полюсами статора. В этом случае при таком управлении надо увеличивать ток удержания;

3) Асимметрия двигателя, ничего не поделать при разомкнутом управлении;

Да, я думаю, фокус в самом двигателе.. Однако и в другом двигле будет та же история, возможно есть способ учесть эти фокусы.. Cogging torque нет, движок крутится легко.

Я вот думаю, можно ли нивелировать асимметрию двигателя, сделав асимметричный график управления? Вот я выше привел картинку, она вроде бы похожа на то, что я хочу получить. Может быть, подключить фазы к осциллографу и повращать двигатель? Он даст мне картинку изменения напряжения, а я подгоню под нее график..?

Сейчас я правлю график, суммируя исходную синусоиду с другими синусами (другого периода и амплитуды). Посмотрим что получится.

Share this post


Link to post
Share on other sites

Plain
13 часов назад, Alex_Malder сказал:

драйвер L6234D ... что не так я делаю

Правильнее было сказать, чего не делаете — не читаете документацию. Показательно, что нигде в теме не указана частота ШИМ, тогда как она критична не только для провода обмоток, но и для данного драйвера, в паспорте которого указан абсолютный её предел 150 кГц — это означает, что длительность любого подаваемого на неё импульса должна быть не менее: 1 / (2 · 150 кГц) = 3,3 мкс.

Share this post


Link to post
Share on other sites

jcxz
1 час назад, Alex_Malder сказал:

Да, я думаю, фокус в самом двигателе..

При синусном управлении без ОС по положению ротора и по фазным токам (как у Вас) он и будет вращаться неравномерно в общем случае. Или невращаться вовсе. Равномерности можно добиться подбирая амплитуду синуса для данной конкретной частоты вращения, питающего напряжения и нагрузки на валу. Чуть нагрузка изменится или частота вращения - опять станет дёргаться или вообще остановится. Вообще это часто называют: "вентиляторным" режимом работы BLDC/PMSM. Потому как практически полезно разве что только для таких случаев: с постоянной или плавно и медленно меняющейся нагрузкой на валу и с плавно меняющимися оборотами. Для которой можно заранее посчитать нужную характеристику разгона и динамику изменения уровней ШИМ-а. Но работать будет скорей всего неэффективно по току и тепловому режиму мотора.

Советую изучить векторное управление и реализовать его. Хотя бы в простейшем варианте. Тем более что датчики положения ротора у Вас имеются.

Share this post


Link to post
Share on other sites

Alex_Malder
50 минут назад, Plain сказал:

Правильнее было сказать, чего не делаете — не читаете документацию. Показательно, что нигде в теме не указана частота ШИМ, тогда как она критична не только для провода обмоток, но и для данного драйвера, в паспорте которого указан абсолютный её предел 150 кГц — это означает, что длительность любого подаваемого на неё импульса должна быть не менее: 1 / (2 · 150 кГц) = 3,3 мкс.

Я прекрасно знаю, какой там предел по частоте. Какое отношение это имеет к неравномерному вращению ротора? У меня прескейлер в STM подобран так, чтобы на выходе было около 2кГц. Точнее не скажу, лень считать, но пищит он на высоких тонах.

Share this post


Link to post
Share on other sites

jcxz
1 минуту назад, Alex_Malder сказал:

около 2кГц. Точнее не скажу, лень считать, но пищит он на высоких тонах.

Да уж... даже частоту своего ШИМ-а не знаете.... Неудивительно, что мотор дёргается. Странно, что он ещё не сгорел.  :wacko:

Про "мёртвое время" поди тоже не слыхали....

И 2кГц - это как-то маловато....

Share this post


Link to post
Share on other sites

Alex_Malder
6 минут назад, jcxz сказал:

При синусном управлении без ОС по положению ротора и по фазным токам (как у Вас) он и будет вращаться неравномерно в общем случае. Или невращаться вовсе. Равномерности можно добиться подбирая амплитуду синуса для данной конкретной частоты вращения, питающего напряжения и нагрузки на валу. Чуть нагрузка изменится или частота вращения - опять станет дёргаться или вообще остановится. Вообще это часто называют: "вентиляторным" режимом работы BLDC/PMSM. Потому как практически полезно разве что только для таких случаев: с постоянной или плавно и медленно меняющейся нагрузкой на валу и с плавно меняющимися оборотами. Для которой можно заранее посчитать нужную характеристику разгона и динамику изменения уровней ШИМ-а. Но работать будет скорей всего неэффективно по току и тепловому режиму мотора.

Советую изучить векторное управление и реализовать его. Хотя бы в простейшем варианте. Тем более что датчики положения ротора у Вас имеются.

У меня НЕТ вращения. И нагрузки нет. Нет динамики разгона. Задача в простом дискретном переключении положений (режим шагового двигателя по сути). При чем тут векторное управление?

Share this post


Link to post
Share on other sites

jcxz
3 минуты назад, Alex_Malder сказал:

У меня НЕТ вращения. И нагрузки нет. Нет динамики разгона. Задача в простом дискретном переключении положений (режим шагового двигателя по сути). При чем тут векторное управление?

Да при всём. Зачем вам тогда двигатель если "нет вращения"? Лучше тогда воспользоваться сварочным аппаратом и приварить намертво. Ведь "вращения же нет".

И к чему тогда вообще тема эта, если тему создали про вращение. Перечитайте заголовок темы, который сами же написали.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.