«Плавный» ход шагового двигателя

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

Для «плавного» вращения шагового (синхронного) двигателя обычно используется микрошаговый режим. Это означает, что токи в обмотках по мере их переключения меняются не скачком, а достаточно плавно – ток в одной обмотке постепенно замещается током в другой. Ротор, следуя за магнитным полем, проходит при этом все промежуточные положения. Приставка «микро-» отражает невозможность получения в цифровых системах бесконечно малых приращений. Конечная величина дробления шага задает лишь иллюзию «плавности».

В двигателях, специально «заточенных» под промежуточные положения ротора, приняты меры по обеспечению точного профилирования магнитного поля. В результате этого нарастающий и ниспадающий по закону синуса ток в обмотках приводит к строго пропорциональному перемещению ротора между крайними точками. Крутящий момент на валу при этом остается постоянным.

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

Такой двигатель имеет 6 проводов (две обмотки с отводами от середин, хотя попадаются экземпляры и с 5 проводами, у которых средние точки соединены внутри), и на нем написано: 1.8 deg./step, 0.16A/phase. Это означает, что подавая последовательно на каждую полуобмотку ток (в данном случае 0,16 А максимум, а средние точки обычно подключаются к «+» питания), мы заставим его каждый раз поворачиваться на угол 1,8о. Сопротивления полуобмоток составляют 75 ом и легко «вызваниваются» мультиметром. Обычно средним точкам соответствуют провода красного цвета. Чтобы совершить полный оборот, надо сделать цепочку из 50 х 4 = 200 переключений.

Если при отсоединенных обмотках попробовать вручную провернуть вал, то рука почувствует едва ощутимое сопротивление в виде дрожи. Это – так называемое «магнитное залипание», явление, обусловленное неоднородностью взаимодействия магнитных систем ротора и статора, а также наличием остаточной намагниченности статора (магнитопровода, на котором расположены обмотки). Это «залипание» не только ухудшает линейность перемещения внутри шага, но и создает определенный порог по току, ниже которого двигатель не удается привести во вращение даже на холостом ходу.

Ставя эксперименты, мне хотелось решить два вопроса:
1. Хватит ли тока, генерируемого микроконтроллером, чтобы вращать вал на малой нагрузке или, хотя бы, на холостом ходу?
2. Так ли уж необходим классический закон синуса-косинуса для равномерного вращения?

Для экспериментов была собрана схема, показанная на рисунке. Собственно «собираться» было нечему, т.к. была использована плата Программатора микросхем PSoC, имеющая панельку под микросхему в корпусе DIP8 и 6-контактный разъем для макетирования простейших устройств. Ввиду отсутствия на плате кварца, отладка производилась без него, с использованием внутреннего тактового генератора микросхемы. Следует отметить, что цепи возбуждения кварца у микросхем PSoC очень капризные, и следует руководствоваться рекомендациями AN2027 «Using the PSoC Microcontroller External Crystal Oscillator» (использовать несимметричную схему включения и подключение конденсаторов к «плюсу» питания). Также учтите, что при так называемом «программировании в устройстве» емкость С4 может оказаться чересчур большой для программатора (для 8-выводных чипов используется специальный режим программирования – «по подаче питания»), и потребуется ее временное отключение.

В схеме не используются отводы от середин, и полуобмотки работают как единая обмотка. Это сделано по двум соображениям. Во-первых – для универсальности (двигатели от 3-дюймовых дисководов отводов не имеют). Второе – уменьшить до приемлемых величин управляющий ток (сопротивление возрастает вдвое). Импульсы самоиндукции (шаговый двигатель – индуктивная нагрузка) гасятся встроенными в микросхему диодами.

При 3-вольтовом питании через обмотку сопротивлением 150 ом потечет ток 20 мА, что ниже максимально допустимых 25 мА для цифровых выходов PSoC. При питании от 5 вольт ток не достигнет ожидаемых 33 мА и ограничится на уровне 25 мА. У выходов же, сконфигурированных как аналоговые, допустимый ток составляет 50 мА, и они будут работать в штатном режиме во всем диапазоне питающих напряжений.

Вначале была создана Конфигурация 1 (см. рисунок). Ток через обмотки задается с помощью ШИМ (широтно-импульсной модуляции), которую вырабатывает единственный модуль PWM8_1. Частота ШИМ постоянна и составляет 7,8 кГц, а вот скважность меняется от 0 до 100% по линейной зависимости программным путем (прямой записью в соответствующий регистр модуля). Выход модуля через блоки LUT0...LUT3 («LookUp Table» – блоки с программируемой передаточной функцией) распределяется по ножкам микросхемы в соответствии с приведенной диаграммой. Смена функций LUT также осуществляется программно. Учтите, что на диаграммах показано не текущее значение счетного регистра PWM8_1, а то, как относительно медленно меняется скважность (т.е. ток через обмотки) на разных фазах вращения ротора.

Технические подробности. Каждые 1/512 секунды (используются прерывания от «спящего таймера») значение регистра ШИМ увеличивается в среднем на 1,666 (цель – получить требуемый темп вращения 1 оборот за 60 сек). «В среднем» означает, что использован некий трюк («Dithering») для реализации дробного исчисления, заключающийся в варьировании приращения (1 или 2) в зависимости от состояния вспомогательной переменной [cnt], циклически меняющей значения от 1 до 3. Сделать именно так мне показалось проще.

И начальная инициализация, и тело обработчика прерывания находятся в файле main.asm. Сам проект находится в папке /TestSMotor-lin/ прилагаемого архива (ссылка дана в конце статьи). Готовый файл прошивки testsmotor.hex находится в папке /output/ этого проекта. Порог срабатывания встроенного в микросхему «детектора напряжения» выставлен 2,92 В, что соответствует минимально возможному снижению напряжению питания.

Визуальные впечатления: стрелка, прикрепленная к валу двигателя, вращается достаточно равномерно. Рывки, конечно, заметны, если на них акцентировать внимание. Посмотрим, что даст классическое управление с помощью синуса-косинуса.

Для этого была создана Конфигурация 2 (см. рисунок). Ток через обмотки задается с помощью двух модулей ЦАП DAC9_1 и DAC9_2 (оба модуля имеют разрядность 9 бит). 8-битное значение выбирается из таблицы размером 256 байт, в которой содержатся значения синуса за 1/4 периода. Остальные значения вычисляются путем зеркальных переворотов этой «четвертинки» относительно осей X и Y, причем к 8-битовому значению добавляется 9-ый знаковый бит. Выходные аналоговые буферы микросхемы, в отличие от внутренних аналоговых блоков, не являются «rail-to-rail» узлами (т.е. работающими «от края до края» питающих напряжений). Чтобы предотвратить связанное с этим ограничение выходного сигнала, размах табличного синуса взят не на полную шкалу, а с некоторым запасом. В качестве опорного напряжения для ЦАП выбрана опция «1/2 от питающего напряжения» (при снижении напряжения питания, выходные напряжения будут также пропорционально снижаться). Проект находится в папке /TestSMotor-sin/.

Визуальные впечатления: Практически то же самое. Вышеупомянутые эффекты не позволяют ротору совершать идеальное равномерное движение. Возможно, если немного «подправить» синус, результат будет лучше, но это требует дополнительной исследовательской работы и привяжет «прошивку» к конкретному экземпляру двигателя (между прочим, хорошая тема для курсовой работы!).

В заключение приведу средние токи потребления привода в зависимости от питающих напряжений (в скобках даны токи, потребляемые только микросхемой). Видно, что вовлечение в работу аналоговых блоков увеличивает токопотребление микросхемы. Сам шаговый двигатель в конфигурации «Sin-Cos» также потребляет больше, поскольку в момент равенства токов через обмотки их суммарное значение в корень из двух раз больше, чем в конфигурации «Линейный режим» (хотя это и сказывается положительно на крутящем моменте), а сам ток потребления из-за этого становится пульсирующим.

.

3 В

5 В

«Линейный режим»

14 мА (4 мА микросхема)

24 мА (6 мА микросхема)

«Sin-Cos»

30 мА (14 мА микросхема)

47 мА (18 мА микросхема)

.


Дополнительные материалы:
Testsmotor.zip (89 кБ) – архив с проектами (в папках /output/ находятся готовые файлы прошивки *.hex, которые продублированы в корневой директории).
Текст программы – ассемблер. Среда разработки – PSoC Designer 4.3.


antiradio.narod.ru/psoc
Дата создания документа: 05.04.2011. Последнее обновление: 23.08.2016.