ШИМ против линейного регулятора тока в микрошаговом драйвере для униполярного двигателя.

ATLab

Хочу поделиться последними результатами собственных экспериментов с разными типами контроллеров для управления униполярным двигателем в режиме микрошага:

  1. контроллер с ШИМ регулировкой тока в обмотке (чоппер)
  2. контроллер с аналоговым генератором тока - по такому же принципу сделан Linistepper.

Вывод такой:

  1. ШИМ контроллер на практике оказался достаточно капризен и не слишком прост в настройке
  2. в домашних условиях проще всего сделать контроллер на основе генератора тока (ГТ)
  3. несмотря на страшилку про БОЛЬШОЙ радиатор для ГТ контроллера, все не так страшно - 4 транзистора TIP122 не смогли существенно нагреть
    кулер от процессора P4, нужно попробовать меньший от socket370, думаю будет вполне приемлемо.
  4. небольшое усложнение схемы (по сравнению с Linistepper) позволило ликвидировать его недостатки (температурная нестабильность, сложность регулировки микрошагов).
    Так что, на ближайшее время я для себя решил: бросаю ШИМ, занимаюсь усовершенстованием ГТ контроллера. Направление ксовершенстования - динамическая регулировка напряжения питания. Это позволит снизить нагрев транзисторов.
    Если есть вопросы - задавайте.
Anton_M
  1. по-подробней.

ШИМ рулез ! и форева. просто “надо уметь их готовить”

ATLab
Anton_M:
  1. по-подробней.

На двух ШИМ генераторах PIC16F873 сделана генерация SIN/COS (16 микрошагов), на сдвоенном 5-ти вольтовом rail ОУ MCP6022 и четырех TIP122 сделаны генератоы тока, питающие обмотки. Для выбора фазы вместо транзисторов BC337 (как в Linistepper) использованы выходы PIC.

ШИМ рулез ! и форева. просто “надо уметь их готовить”

Ага, я тоже так думал, потому и начал с ШИМ. Однако на россыпи все получается заметно сложнее токового управления и намного капризнее.

Anton_M

не надо самому мудрить - возмите АпНоут микрочип, авр, моторола, ti.com по микрошагу и работаь будет ПРЕКРАСНО !

вот там:
forum.roboclub.ru/IPBoard/index.php?showtopic=15&h…

я посоветовал человеку:

www.anivo.com/reed/L297_L298/L297_L298.htm

и у него все получилось, значит L297 рулит (не удивительно, ведь ей сколько лето-то! ) нормально L298 и

очевидно что проблемы возникают при замене L298 на “не правильный” мост или просто “не правильно” управляемые нижние ключи.

вот и все!

======
Конечно нагрев в линейном режиме не страшен так как есть охлаждение - но я бы тогда заказал бесплатно на ti.com УМЗЧ класса Д по 125 Вт и ими рулил.

Можно и усилителями для магнитол рулить так же успешно но за денюжку.

Проблема в том что тут и так порой жалуются на нехыватку мощи БП а линейный режим большую часть мощности отправит в утиль.

ATLab
Anton_M:

не надо самому мудрить - возмите АпНоут микрочип, авр, моторола, ti.com по микрошагу и работаь будет ПРЕКРАСНО !

вот там:
forum.roboclub.ru/IPBoard/index.php?showtopic=15&h…

я посоветовал человеку:

www.anivo.com/reed/L297_L298/L297_L298.htm

и у него все получилось, значит L297 рулит (не удивительно, ведь ей сколько лето-то! ) нормально L298 и

очевидно что проблемы возникают при замене L298 на “не правильный” мост или просто “не правильно” управляемые нижние ключи.

вот и все!

======
Конечно нагрев в линейном режиме не страшен так как есть охлаждение - но я бы тогда заказал бесплатно на ti.com УМЗЧ класса Д по 125 Вт и ими рулил.

Можно и усилителями для магнитол рулить так же успешно но за денюжку.

Проблема в том что тут и так порой жалуются на нехыватку мощи БП а линейный режим большую часть мощности отправит в утиль.

Антон, извиняюсь, Вы вообще читаете о чем идет разговор? Словесный понос какой-то…
Какой микрошаг с L297 для униполярного двигателя? У нее же общий вход опорного для обоих каналов, поэтому SIN/COS на одной микросхеме не получить, и она (L297) очень плохо работает при низком опорном, значит около 0 будут провалы в регулировании.
Про L298 вообще речи не шло - это мост для биполярных двигателей, а у меня униполярный
И еще, Вы думаете, что УМЗЧ будет дешевле TIP122? 😃

Anton_M
ATLab:

Антон, извиняюсь, Вы вообще читаете о чем идет разговор?

извините.

ATLab:

L297 очень плохо работает при низком опорном, значит около 0 будут провалы в регулировании.

дак нужно усиливать сигнал токового датчика - lm358 простейший взять или lm2904, и резисторы не нужны большие, достаточно дорожки на плате.

7 days later
GOOD
ATLab:

Хочу поделиться последними результатами собственных экспериментов с разными типами контроллеров для управления униполярным двигателем в режиме микрошага:

Вы имели ввиду шага и полушага для униполярного двигателя?

ATLab:
  1. контроллер с аналоговым генератором тока - по такому же принципу сделан Linistepper.

что за зверь такой Linistepper, может я отстал от жизни? где почитать ?

ATLab
GOOD:

Вы имели ввиду шага и полушага для униполярного двигателя?
что за зверь такой Linistepper, может я отстал от жизни? где почитать ?

Нет, речь идет именно о микрошаге для униполярного двигателя: полный шаг разбивается на 16 микрошагов. Для повышения точности позиционирования этот режим обычно не используется, его назначение - плавность вращения и устранение резонанса. Мне это нужно в основном для плавности.

Про Linistepper читайте www.piclist.com/tech*ref/io/stepper/…/index.htm
ну и в ветке про “Двигатели на хоббийных cnc и управление ими”
rcopen.com/forum/f41/topic23068/160
Там, правда немного. Основной разбор на все же на piclist.com.

Anton_M
ATLab:

Какой микрошаг с L297 для униполярного двигателя?

У нее же общий вход опорного для обоих каналов, поэтому SIN/COS на одной микросхеме не получить

так можно регулировать усиление в каналах ОС по току.

ATLab
Anton_M:

так можно регулировать усиление в каналах ОС по току.

А если подумать?

Если установить опорное напряжение для L297 на максимальное значение тока в обмотке, то снизить ток в обмотке можно только усилением сигнала с Rизм. Соответственно, огребем и усилим все импульсные помехи. И, при этом, в любом случае будет невозможно получить нулевой ток в обмотке.

Другая причина в том, что нет никакого смысла вообще использовать L297 для микрошага - она не заточена под это - да и схема с генераторами тока получается проще, дешевле и стабильнее.
В самом деле, ОУ можно взять практически любой, транзистор TIP122 или что-то аналогичное - тоже не дефицит и достаточно дешев. При этом никаких проблем с установкой требуемого уровня тока в обмотке, скорость шагания можно установить достаточно большой - я уже пробовал на 4SHG до 900 шагов/сек., это 14400 микрошагов/сек. И планирую попробовать довести с плавным разгоном до 1500 шагов/сек (24000 микрошагов/сек.).
Какая там L297 с ее частотой ШИМ 18-20 кГц? У нее один период генератора будет длиннее времени микрошага, что уж говорить про регулирование? Нет, эта идея был мертва еще до рождения 😉

P.S. В предыдущем посте в ссылке на Linistepper ошибка, должно быть
Tech*ref без звездочки внутри.

<a href=“www.piclist.com/Tech*ref/io/stepper/…/index.htm” target=“www.piclist.com/Tech*ref/io/stepper/…/index.htm”></a>

Почему то движок упорно ее туда вбивает…

ATLab
GOOD:

а вы с этого сайта схему собираете? или свою?

Мой пост под №3 в этой ветке:
“На двух ШИМ генераторах PIC16F873 сделана генерация SIN/COS (16 микрошагов), на сдвоенном 5-ти вольтовом rail-to-rail ОУ MCP6022 и четырех TIP122 сделаны генератоы тока, питающие обмотки. Для выбора фазы вместо транзисторов BC337 (как в Linistepper) использованы выходы PIC.”
Т.о. очевидно, что схема своя.
Я уже писал, что у Linistepper есть недостатки не связанные с необходимостью рассеивать много тепла:

  • неточно резисторами/диодами формируется аппроксимация SIN, сложно настраивать уровни,
  • параметры генератора тока зависят от конкретных экземпляров транзисторов TIP122,
  • температурная нестабильность,
  • регулировка тока производится подбором мощных постоянных резисторов (это очень неудобно).
    Я не знаю, почему автор пошел по этому пути. Возможно это были его первые эксперименты с микроконтроллерами. Ничем другим объяснить любовь к PIC16F84 (на котором первоначально был сделан Linistepper) я не могу - его использование явно неадекватно поставленной задаче.
    У меня схема лишена всех этих недостатков. Если будет достаточно много желающих - нарисую и выложу в свободный доступ. Однако сразу предупрежу, что практического толка с этого будет пока немного:
  • работа над схемой не закончена, продолжаю искать пути снижения рассеиваемой мощности,
  • уже имеющаяся прошивка микроконтроллера чисто тестовая,
  • вращение двигателя управляется кнопками, а не от компьютера, так удобнее отлаживать железо и прошивку микроконтроллера.
Baha
ATLab:

У меня схема лишена всех этих недостатков. Если будет достаточно много желающих - нарисую и выложу в свободный доступ. Однако сразу предупрежу, что практического толка с этого будет пока немного:

  • работа над схемой не закончена, продолжаю искать пути снижения рассеиваемой мощности,
  • уже имеющаяся прошивка микроконтроллера чисто тестовая,
  • вращение двигателя управляется кнопками, а не от компьютера, так удобнее отлаживать железо и прошивку микроконтроллера.

Желающих много, потому что многи не дружат электроникой. Я например купил у imafania контроллер на PIC с полевиками на выходе для униполярного двигателя, ну и что самое что мог разогнать до 400 мм мин, а дальше уходит в резонанс. Не мог разобраться, знания не хватает. Еще греются как утюги - когда греются, самое смешное иногда и не греются. Хотел с продавцом проконсультироваться, а он не отвечает, продавать продает. 😦 . Для меня главное что бы контроллер выдавал стабильно мощность и динамику, а лишнее тепло можно гасить радиаторами и куллерами если это приемлемо. Вот такое мое дилетанское мнение.

Anton_M
ATLab:

продолжаю искать пути снижения рассеиваемой мощности

синусоиду создавайте ШИМ-ом.

ATLab
Anton_M:

синусоиду создавайте ШИМ-ом.

  1. Антон, Вы опять невнимательно читаете:
    "На двух ШИМ генераторах PIC16F873 сделана генерация SIN/COS (16 микрошагов)… "
  2. То, что SIN/COS формируются ШИМ а не линейным ЦАП, никак не поможет снизить рассеиваемую мощность генератора тока, работающего в линейном режиме. Фактически ШИМ это просто однобитная разновидность ЦАП.
    Ключевой режим не предлагать! Я не хочу (по крайней мере сейчас) связываться с ключевыми режимами регулирования тока.
Baha:

…ну и что самое что мог разогнать до 400 мм мин, а дальше уходит в резонанс.

Что значит 400 мм мин?
Если 400 полных оборотов в минуту, да еще при 200 шагов на оборот, то выходит совсем неплохо:
(400/60)*200=1333 шагов в секунду!
Для ДШИ200-2, 200-3 максимальная частота приемистости 1000 Гц (шагов в секунду).

А если, все же, мм - то пересчитайте их в обороты, исходя из параметров своей механики.
Может, все же, все совсем не так плохо как кажется?

Кстати, неплохое средство для повышения скорости шагания - увеличение напряжения питания двигателя. У вас оно какое?

Baha
ATLab:

Кстати, неплохое средство для повышения скорости шагания - увеличение напряжения питания двигателя. У вас оно какое?

Полный шаг или полушаг, или что еще выдает контроллер не знаю. Продовец не ответил, я сам не удосужился посчитать. Напряжение подавал 12в от компьютерного блок питания, гонял через ТурбоСНС, выставляя максимальную частоту и длину импульса, на котором стабильно шагал движок, без пропуска и резонанса, ТС пересчитывает и показывает скорость. Не помню какую частоту задавал, но скорость макимальная без сбоя получилась 400 мм/мин при шаге винта 2мм. Движок униполярный 3в, 3А, на 1ом между центральным и крайними проводами.

ATLab
Baha:

Полный шаг или полушаг, или что еще выдает контроллер не знаю. Продовец не ответил, я сам не удосужился посчитать. Напряжение подавал 12в от компьютерного блок питания, гонял через ТурбоСНС, выставляя максимальную частоту и длину импульса, на котором стабильно шагал движок, без пропуска и резонанса, ТС пересчитывает и показывает скорость. Не помню какую частоту задавал, но скорость макимальная без сбоя получилась 400 мм/мин при шаге винта 2мм. Движок униполярный 3в, 3А, на 1ом между центральным и крайними проводами.

Получается 400/2=200 (об/мин)
Если двигатель делает полный оборот за 200 шагов, то выходит:
(200/60)*200= 667 (шагов/сек) - совсем наплохо для 12 В питания.

А какое напряжение двигателя? Если на нем не написано, можно посчитать:

  • померить сопротивление обмотки фазы
  • умножить сопротивление на ток (3 А)

По моей практике с маломощными ДШИ200, 4SHG выходило, что напряжение нужно выше 20 В, чтобы он шагал 1000 и больше в секунду.

Попробуйте поднять напряжение питания двигателей, должно помочь.

Baha
ATLab:

А какое напряжение двигателя? Если на нем не написано, можно посчитать:

  • померить сопротивление обмотки фазы
  • умножить сопротивление на ток (3 А)

Выше писал напряжение 3В, ток 3А, сопротивление одной ветки обмотки 1ом, униполярный.

ATLab
Baha:

Выше писал напряжение 3В, ток 3А, сопротивление одной ветки обмотки 1ом, униполярный.

Старость, маразм, слепота… 😉
Сложно это, заочно что-то советовать.
По параметрам, на первый взгляд, должно быть достаточно 12 В.
А он вообще с какой скоростью может шагать? Что-нибудь известно?
Может там ротор пару килограмм весит, да еще нагрузка - обязательно нужно плавно разгонять.
Предусмотрен в программе плавный разгон (я то с CNC софтом не знаком, мне предстоит самому его писать, поэтому и вопрос такой)?

Baha
ATLab:

Предусмотрен в программе плавный разгон (я то с CNC софтом не знаком, мне предстоит самому его писать, поэтому и вопрос такой)?

Да, есть опция где шаг разгона можно выставлять. И зачем писать, есть отличный TurboCNC, бесплатный поддерживает 8 координат. Простой до чертиков. 😃

ATLab
Baha:

Да, есть опция где шаг разгона можно выставлять. И зачем писать, есть отличный TurboCNC, бесплатный поддерживает 8 координат. Простой до чертиков. 😃

Может попробовать поманипулировать разгоном?

Моя задачка отличается от CNC в том смысле, что не фрезер/гравер/сверлилка/струна и т.п.
Нужно просто перемещать головку от заданной координаты к другой с максимально возможной скоростью и плавностью. Управление должно быть обязательно под Windows. По моему, проще написать специальную программу, которая бы просто слала очередные координаты контроллеру, а он уж сам крутил движок, чем приспосабливать TurboCNC. Хотя не буду утверждать категорически.

GOOD

GOOD DAY

ATLab, при всем уважении
По моему разумению двигатель шаговый
и естно должен шагать или полушагать.
Дальнейшее дробление шага никакой практической
пользы для шаговика не имеет. (потеря мощности, нестабильность при нагрузках и т.п.)
Пусть кто нить напишет что он режет на 1/16 шага или 1/4 шага?
Например при шаге винта 2мм (в режиме полного шага)
получим точность 2/200= 0,01мм, в полушаге 2/400=0,005мм
думаю достаточно для станка хобийного класса.
для плавности муфты (судя по постам) вполне достаточно.

Это не высказывание против Вашей идеи
но было бы неплохо сделать разгон на 1/16 шага
и плавно переходить на 1/8 - 1/4 - 1/2 - полный шаг.
для контроллера работающего в линейном режиме
это возможно?
такой режим думаю был бы не плох.

GOOD LUCK

STEPMOTOR

Это не высказывание против Вашей идеи
но было бы неплохо сделать разгон на 1/16 шага
и плавно переходить на 1/8 - 1/4 - 1/2 - полный шаг.
для контроллера работающего в линейном режиме
это возможно?
такой режим думаю был бы не плох.

GOOD LUCK

Я против нечеого не имею ,но думаю что это невозможно ! т.к Вы в софт-е ставите кол-во шагов на оборот а следовательно если Ваш контроллер будет менять это значение то и будет получаться на выходе некорректное изделие. Есть конечно вариант сделать умный контроллер жрущий Ж-код и конролирующий изменение дробления шага.

ATLab
GOOD:

По моему разумению двигатель шаговый
и естно должен шагать или полушагать.
Дальнейшее дробление шага никакой практической
пользы для шаговика не имеет. (потеря мощности, нестабильность при нагрузках и т.п.)
Пусть кто нить напишет что он режет на 1/16 шага или 1/4 шага?

А я и не собираюсь резать, у меня совсем другая задача. Я так и написал об этом в предыдущем посте.
Насчет потери мощности и нестабильности не совсем согласен: наоборот, момент всегда имеет постоянное значение (в идеале), тогда как в полушаговом режиме без компенсации момента (обычное дело в простых контроллерах на L297) имеет место постоянное колебание величины момента - из-за того, что под током находится 2 или 1 катушка.

Например при шаге винта 2мм (в режиме полного шага)
получим точность 2/200= 0,01мм, в полушаге 2/400=0,005мм
думаю достаточно для станка хобийного класса.
для плавности муфты (судя по постам) вполне достаточно.

Это у Вас винт с шагом 2 (4) мм, и скорость перемещения, скажем, 10 (20) мм/сек.
А мне нужно хотя бы 300 мм/сек.

Это не высказывание против Вашей идеи
но было бы неплохо сделать разгон на 1/16 шага
и плавно переходить на 1/8 - 1/4 - 1/2 - полный шаг.
для контроллера работающего в линейном режиме
это возможно?
такой режим думаю был бы не плох.

Переключение размера шага при достижении определенной скорости можно сделать и в контроллере,
репу почесать и сделать. Проблема в другом - как это будет стыковаться с управляющей программой?
По-моему, никак. Все доступные мне схемы задают параметр шага перемычками/переключателями, в управляющих сигналах видел только DIR/STEP, изредка переход на пониженную мощность при простое. Я, правда, не знаток CNC софта, пусть меня поправят, если не то ляпнул 😃

Режим регулирования тока - ШИМ или линейный - никак не влияет на функционал контроллера.