Оглавление:

Управляйте шаговым двигателем с помощью микропроцессора AVR: 8 шагов
Управляйте шаговым двигателем с помощью микропроцессора AVR: 8 шагов

Видео: Управляйте шаговым двигателем с помощью микропроцессора AVR: 8 шагов

Видео: Управляйте шаговым двигателем с помощью микропроцессора AVR: 8 шагов
Видео: Управление шаговым двигателем. Драйвер A4988, подключение и настройка 2024, Ноябрь
Anonim
Управляйте шаговым двигателем с помощью микропроцессора AVR
Управляйте шаговым двигателем с помощью микропроцессора AVR

Есть какие-то шаговые двигатели от принтеров, дисководов и т. Д.?

Некоторое испытание с помощью ометра, а затем простой код драйвера на вашем микропроцессоре, и вы будете действовать стильно.

Шаг 1. Познакомьтесь с степперами

Познакомьтесь с степперами
Познакомьтесь с степперами
Познакомьтесь с степперами
Познакомьтесь с степперами

По сути, вам нужно выяснить, куда идут все маленькие провода.

Первый шаг - выяснить, однополярный это двигатель или биполярный. Взгляните на Джонса на Steppers, чтобы получить более глубокую информацию, а затем на сайте Яна Харриса, чтобы узнать простой метод определения неизвестного двигателя. Прочтите немного, а затем присоединитесь ко мне в пошаговом руководстве по этому двигателю, который я получил за дешевую цену. (Прямо сейчас они продаются по цене 0,99 доллара. Они маленькие, относительно легкие, но не имеют большого крутящего момента. Пока не знаю, для чего они подходят.)

Шаг 2: Найдите общий язык

Найдите общий язык
Найдите общий язык
Найдите общий язык
Найдите общий язык

Итак, у вас есть пять (или четыре, или шесть) проводов. У вашего двигателя будет две половины, и вы, вероятно, сможете даже сказать, просто посмотрев, к какой стороне принадлежит каждый провод.

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

Шаг 3: Определите порядок шагов

Определите порядок шагов
Определите порядок шагов

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

В любом случае вы можете захотеть запустить свой униполярный двигатель как биполярный, потому что он использует всю катушку в обеих фазах вместо чередования двух половин каждой катушки. Больше катушки = больше крутящего момента. Пропустите ток через пару (отмечая выбранную полярность), а затем одновременно пропустите ток через другую пару. Когда вы подключаете вторую пару, смотрите, в какую сторону вращается мотор. Запишите это. Теперь поменяйте полярность на первой выбранной паре. Затем снова подключите вторую пару, поменяв полярность. Обратите внимание на направление. Исходя из этого, вы сможете определить последовательность вращения двигателя в любом направлении. В моем примере оба закончились тем, что повернулись против часовой стрелки, поэтому при пошаговом выполнении последовательности тем же способом, который я выбрал, двигатель будет двигаться против часовой стрелки.

Шаг 4: Тест-драйв двигателя

Тест-драйв мотора
Тест-драйв мотора

Если вы еще не подготовлены к программированию микропроцессоров, вы могли бы сделать хуже, чем Ghetto Development Kit или любой из различных программистов PIC. Подключите провода прямо к микропроцессору и запустите его с помощью следующего кода:

/ * Игра с запуском маленьких шаговых двигателей. * /

/ * Включить функцию задержки * / #define F_CPU 1000000UL #include / * Определение выводов для ATTiny2313 * / / * Порядок по часовой стрелке * / #define BLUE _BV (PB0) #define BLACK _BV (PB1) #define RED _BV (PB2) #define ЖЕЛТЫЙ _BV (PB3) #define DELAY 200 / * миллисекунды между шагами * / int main (void) {DDRB = 0xff; / * Разрешить вывод на всех выводах B * / PORTB = 0x00; / * Устанавливаем их все на 0v * / while (1) {/ * здесь главный цикл * / PORTB = BLUE; _delay_ms (ЗАДЕРЖКА); ПОРТB = ЧЕРНЫЙ; _delay_ms (ЗАДЕРЖКА); PORTB = КРАСНЫЙ; _delay_ms (ЗАДЕРЖКА); PORTB = ЖЕЛТЫЙ; _delay_ms (ЗАДЕРЖКА); }} Насколько прост этот код? Действительно просто. Все, что он делает, это дает несколько хороших определений, чтобы я мог ссылаться на провода по цвету, а не по их именам контактов, а затем он переключает их последовательно с регулируемой задержкой между ними. Для начала я выбрал задержку в полсекунды между шагами. Посмотрите короткое видео с результатами. Если вы действительно в своей игре, подсчитайте количество шагов за цикл, чтобы определить угловое разрешение двигателя при пошаговом режиме. (Ах да. PS. Диски без нагрузки на 3,6 В легко. См. Аккумулятор в видео.)

Шаг 5: поверните его назад и вперед

Итак, у вас он работает по часовой стрелке. Что-нибудь поинтереснее? Небольшая очистка кода, и мы можем запускать его туда и обратно. Я помещаю последовательность по часовой стрелке в массив, чтобы вы могли переходить по фазам с помощью простого цикла for. Теперь вы можете запустить цикл вверх или вниз по часовой стрелке или против часовой стрелки.

int main (void) {const uint8_t delay = 50; const uint8_t по часовой стрелке = {СИНИЙ, ЧЕРНЫЙ, КРАСНЫЙ, ЖЕЛТЫЙ}; uint8_t i; DDRB = 0xff; / * Разрешить вывод на всех выводах B * / PORTB = 0x00; / * Устанавливаем их все на 0v * / while (1) {/ * здесь главный цикл * / for (i = 0; i <= 3; i ++) {/ * переходить по цветам по часовой стрелке * / PORTB = clockwise ; _delay_ms (задержка); } for (i = 3; i> = 0; i -) {/ * переход по цветам ccw * / PORTB = по часовой стрелке ; _delay_ms (задержка); }}} Смотрите пикантное видео, чтобы узнать об этом.

Шаг 6: Я никогда не делаю полушага, потому что я не полушаг …

Если отбросить лирику квеста, остановитесь на полушаге. Вы получаете больший пиковый ток, более мгновенный крутящий момент и вдвое большее угловое разрешение. Вкратце, полушаг: вместо синего, черного, красного, желтого вы управляете двигателем с помощью синего, синего + черного, черного, черного + красного, красного, красного + желтого, желтого, желтого + синего цветов. В результате вы половину времени задействуете оба магнита одновременно. И когда оба набора задействованы, двигатель указывает на полпути между ними, уменьшая угол между «ступенями» и заставляя двигатель вращаться более плавно. Вы можете сказать по видео? Я не уверен … Теперь часть кода, которая выполняет полушаг, выглядит так:

void halfStepping (задержка uint16_t, направление uint8_t ) {uint8_t i; для (я = 0; я <= 3; я ++) {ПОРТБ = направление [я]; / * часть сингла * / _delay_ms (delay); PORTB | = направление [i + 1]; / * добавить полутона * / _delay_ms (delay); }} Первая команда PORTB устанавливает один полюс в положительный, а все остальные - в отрицательный. Затем он ждет. Затем вторая команда PORTB устанавливает второй полюс (на другой обмотке) в положительное положение, задействуя обе обмотки для 1,4-кратного крутящего момента (и 2-кратного тока). Полный список программ прилагается ниже. Теперь определены два массива (по часовой стрелке и против часовой стрелки), каждый из которых имеет по 5 элементов, что позволяет использовать запись i + 1 в функции halfStepping.

Шаг 7: Добавьте драйвер двигателя

Добавить драйвер двигателя
Добавить драйвер двигателя
Добавить драйвер двигателя
Добавить драйвер двигателя
Добавить драйвер двигателя
Добавить драйвер двигателя

Все идет нормально.

Единственная проблема заключается в том, что двигатель, кажется, не имеет такого большого крутящего момента, что может быть связано с тем, что микропроцессор выдает только ~ 50 мА на вывод. Следующим очевидным шагом было бы подключить его к водителю двигателя, чтобы подать ему больше энергии. Но потом немного подумал: я управляю им только с напряжением 5 В, а сопротивление обмотки составляет ~ 125 Ом. Это означает, что двигатель потребляет только 40 мА на вывод, и он должен нормально управляться (мускулистым!) Микросхемой AVR. Поэтому, чтобы получить больше напряжения на двигателе, я подключил его к микросхеме Н-моста SN754410. Схема довольно простая. Каждый вывод от AVR идет на вход, а соответствующие выходные контакты идут на двигатель. Чипу требуется 5 В для логической части, и она может потреблять намного больше напряжения в моторной части. Немного помогло его использование 11,25 В (три батареи 3,6 В). Заметно больший крутящий момент на моем пальце, но это все еще не двигатель. Впрочем, неплохо для мотора, который меньше никеля. И теперь схема превратилась в универсальный драйвер биполярного шагового двигателя. Добавлено 29 ноября: Прошлой ночью двигатель поработал на 12 В некоторое время, и он начал нагреваться. Я не уверен, была ли это проблема с резонансной частотой или это был просто слишком большой ток для обмоток. В любом случае, будьте осторожны, управляя этим маленьким мотором с большим напряжением.

Шаг 8: Конец

Итак, что я узнал? Управлять шаговым двигателем с AVR (и микросхемой H-bridge) довольно просто, даже в «модном» полушаговом режиме.

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

Рекомендуемые: