Управление шаговым двигателем с помощью микроконтроллера.
Всё началось с того, что в одном из устройств надо было поворачивать вал электродвигателя на определённое количество оборотов, большая точность не требовалась плюс-минус четверть оборота, поэтому было принято решение реализовать это с помощью электродвигателя постоянного тока. В качестве управляющего элемента был выбран микроконтроллер — Atmega16, но так как выходное напряжение выводов Atmega16 всего 5 вольт, а максимальный ток не должен превышать 20mA, а для управления двигателем необходим ток около десятка ампер и напряжение в несколько десятков вольт, управлять напрямую двигателем не получится. Нужен какой-то посредник, который получал бы на вход то, что может отдать микроконтроллер, а отдавал бы то, что хочет получить двигатель, такого посредника легко найти среди полевых транзисторов серии IRL, управляемых логическим уровнем .
После первого запуска стало понятно, что хотели получить одно, а получили другое, после того как транзистор закрывался, двигатель продолжал вращаться ещё не один оборот, оно и понятно, для того чтобы вал остановился, энергия, которую он накопил пока вращался, должна быть израсходована.
Вот мы и подошли к одному из основных преимуществ шагового двигателя — возможность точного позиционирования.
Шаговые двигатели бывают трёх основных типов:
В двигателях с переменным магнитным сопротивлением, ротор изготовлен из магнитомягкого материала, то есть материала, который способен быстро намагничиваться и быстро терять магнитные свойства при снятии магнитного поля. Вращающий момент создаётся магнитными потоками статора, причём ротор всегда становится так, чтобы магнитный поток создаваемый статором замкнулся. Для того чтобы ротор повернулся надо, выключить ток в одной обмотке и включить в другой обмотке.
В двигателе с постоянными магнитами, ротор разделён на полюса. При подаче тока в одну из обмоток ротор займёт положение, в котором разноимённые полюса ротора и статора будут находиться напротив друг друга.
Гибридные двигатели обладают преимуществами вышеописанных двигателей и лучшими характеристиками: меньшей величиной шага, большим моментом, большей скоростью и как следствие стоят дороже.
Перейдём к практике, для эксперимента возьмём шаговый двигатель MITSUMI M42SP-5 с шагом 7.5°, изображённый на картинке.
Скачиваем на него даташит и находим таблицу.
Из таблицы понятно, что такие двигатели бывают двух типов:
Схема двигателя изображена на картинке ниже.
Из двигателя выходит 5 проводов: 4 фазы и один общий. Общий провод можно найти с помощью мультиметра, сопротивление между ним и оставшимися 4 проводами равно сопротивлению фазы, в нашем случае 50 Ом.
Как писалось выше, необходим посредник, который примет от микроконтроллера 20mA и отдаст двигателю 259mA. Можно как раньше взять полевой транзистор, но есть одно, но фаз здесь целых четыре штуки и для этого случая есть более простое решение — это использовать микросхему ULN2003.
ULN2003 состоит из 7 транзисторов Дарлингтона, каждый из которых может пропустить через себя до 500mA, а рабочее напряжение не должно превышать 50V, чего нам вполне достаточно. На самом деле каждая ячейка ULN2003 состоит не только из транзистора Дарлингтона, а также включает в себя весь необходимый обвес, её структуру можно посмотреть в даташите.
Транзистор Дарлингтона или пара Дарлингтона, представляет собой два соединённых транзистора, его отличительной особенностью является высокий коэффициент усиления, который равен произведению коэффициентов усиления каждого из транзисторов(βс = β1 ∙ β2).
Вращать двигатель можно, подавая питание по очереди на обмотки, при этом в любой момент времени включена лишь одна обмотка, в этом случае двигатель будет работать в режиме шага, то есть при одном переключении обмоток будет поворачиваться на 7.5°.
Аналогичным образом можно включать две соседние обмотки, этот способ позволяет увеличить момент удержания, при этом двигатель будет работать в режиме шага.
Также можно включить двигатель в режиме полушага, то есть при одном переключении обмоток ротор будет поворачиваться на 3.75°.
Для удобства управления можно создать массив в котором номер элемента массива будет обозначать номер шага, а значение элемента массива — какие обмотки должны быть включены.
uint8_t step[8] = {0x01, 0x03 ,0x02, 0x06,0x04, 0x0c,0x08,0x09};
Если передавать последовательно элементы этого массива в порт микроконтроллера, двигатель будет работать в режиме полушага, если через один — в режиме полного шага. Для передачи значений в порт удобно использовать прерывание от таймера по переполнению, таким образом, изменяя время между прерываниями, мы можем регулировать скорость вращения двигателя.
После первого запуска стало понятно, что хотели получить одно, а получили другое, после того как транзистор закрывался, двигатель продолжал вращаться ещё не один оборот, оно и понятно, для того чтобы вал остановился, энергия, которую он накопил пока вращался, должна быть израсходована.
Вот мы и подошли к одному из основных преимуществ шагового двигателя — возможность точного позиционирования.
Шаговые двигатели бывают трёх основных типов:
- двигатели с переменным магнитным сопротивлением
- двигатели с постоянными магнитами
- гибридные двигатели
В двигателях с переменным магнитным сопротивлением, ротор изготовлен из магнитомягкого материала, то есть материала, который способен быстро намагничиваться и быстро терять магнитные свойства при снятии магнитного поля. Вращающий момент создаётся магнитными потоками статора, причём ротор всегда становится так, чтобы магнитный поток создаваемый статором замкнулся. Для того чтобы ротор повернулся надо, выключить ток в одной обмотке и включить в другой обмотке.
В двигателе с постоянными магнитами, ротор разделён на полюса. При подаче тока в одну из обмоток ротор займёт положение, в котором разноимённые полюса ротора и статора будут находиться напротив друг друга.
Гибридные двигатели обладают преимуществами вышеописанных двигателей и лучшими характеристиками: меньшей величиной шага, большим моментом, большей скоростью и как следствие стоят дороже.
Перейдём к практике, для эксперимента возьмём шаговый двигатель MITSUMI M42SP-5 с шагом 7.5°, изображённый на картинке.
Скачиваем на него даташит и находим таблицу.
Из таблицы понятно, что такие двигатели бывают двух типов:
- 12 вольтовые с сопротивлением обмотки 50 Ом
- 24 вольтовые с сопротивлением обмотки 120 Ом
Схема двигателя изображена на картинке ниже.
Из двигателя выходит 5 проводов: 4 фазы и один общий. Общий провод можно найти с помощью мультиметра, сопротивление между ним и оставшимися 4 проводами равно сопротивлению фазы, в нашем случае 50 Ом.
Как писалось выше, необходим посредник, который примет от микроконтроллера 20mA и отдаст двигателю 259mA. Можно как раньше взять полевой транзистор, но есть одно, но фаз здесь целых четыре штуки и для этого случая есть более простое решение — это использовать микросхему ULN2003.
ULN2003 состоит из 7 транзисторов Дарлингтона, каждый из которых может пропустить через себя до 500mA, а рабочее напряжение не должно превышать 50V, чего нам вполне достаточно. На самом деле каждая ячейка ULN2003 состоит не только из транзистора Дарлингтона, а также включает в себя весь необходимый обвес, её структуру можно посмотреть в даташите.
Транзистор Дарлингтона или пара Дарлингтона, представляет собой два соединённых транзистора, его отличительной особенностью является высокий коэффициент усиления, который равен произведению коэффициентов усиления каждого из транзисторов(βс = β1 ∙ β2).
Вращать двигатель можно, подавая питание по очереди на обмотки, при этом в любой момент времени включена лишь одна обмотка, в этом случае двигатель будет работать в режиме шага, то есть при одном переключении обмоток будет поворачиваться на 7.5°.
Аналогичным образом можно включать две соседние обмотки, этот способ позволяет увеличить момент удержания, при этом двигатель будет работать в режиме шага.
Также можно включить двигатель в режиме полушага, то есть при одном переключении обмоток ротор будет поворачиваться на 3.75°.
Для удобства управления можно создать массив в котором номер элемента массива будет обозначать номер шага, а значение элемента массива — какие обмотки должны быть включены.
uint8_t step[8] = {0x01, 0x03 ,0x02, 0x06,0x04, 0x0c,0x08,0x09};
Если передавать последовательно элементы этого массива в порт микроконтроллера, двигатель будет работать в режиме полушага, если через один — в режиме полного шага. Для передачи значений в порт удобно использовать прерывание от таймера по переполнению, таким образом, изменяя время между прерываниями, мы можем регулировать скорость вращения двигателя.
Похожие статьи