Съдържание:

Управлявайте стъпков двигател с микропроцесор AVR: 8 стъпки
Управлявайте стъпков двигател с микропроцесор AVR: 8 стъпки

Видео: Управлявайте стъпков двигател с микропроцесор AVR: 8 стъпки

Видео: Управлявайте стъпков двигател с микропроцесор AVR: 8 стъпки
Видео: Marlin Firmware 2.0.x Explained 2024, Юли
Anonim
Задвижвайте стъпков двигател с микропроцесор AVR
Задвижвайте стъпков двигател с микропроцесор AVR

Имате ли изчистени стъпкови двигатели от принтери/дискови устройства/и т.н.

Малко сондиране с ометър, последвано от прост код на драйвера на вашия микропроцесор и ще стъпите със стил.

Стъпка 1: Запознайте се с Steppers

Запознайте се със стъпките
Запознайте се със стъпките
Запознайте се със стъпките
Запознайте се със стъпките

По принцип ще трябва да разберете къде отиват всички малки проводници.

Първата стъпка е да разберете дали това е еднополюсен или биполярен двигател. Погледнете Джоунс на Стъпъри за по -задълбочена информация, след това в сайта на Иън Харис за прост метод за откриване на непознат двигател. Прочетете малко, след това се присъединете към мен в разходка на този мотор, който получих евтино. (В момента се продават за $ 0,99. Те са малки, сравнително леки, но нямат голям въртящ момент. Все още не знам за какво ще е добре.)

Стъпка 2: Намерете общи точки

Намерете обща основа
Намерете обща основа
Намерете обща основа
Намерете обща основа

Значи имате пет (или четири, или шест) проводника. Вашият двигател ще има две половини и вероятно дори можете да разберете само като погледнете на коя страна принадлежи всеки проводник.

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

Стъпка 3: Разберете стъпката

Разберете стъпката
Разберете стъпката

Щях да карам този мотор като биполярен, така че игнорирам белия заземен проводник. Имам само четири проводника, за които да се тревожа.

Може да искате да пуснете вашия еднополюсен двигател като биполярен, тъй като той използва цялата намотка в двете фази, вместо да редува двете половини на всяка бобина. Повече намотка = по -голям въртящ момент. Прокарайте ток през двойка (като отбележите избраната от вас полярност) и след това пуснете ток през другата двойка едновременно. Когато свържете втората двойка, гледайте в каква посока се върти моторът. Запишете това. Сега обърнете полярността на първата двойка, която сте избрали. След това свържете отново втората двойка с обърнат полярност. Забележете посоката. От това трябва да можете да разберете последователността на завъртане на двигателя в двете посоки. В моя пример и двете завършиха обратно на часовниковата стрелка, така че преминаването през последователността по същия начин, който избрах, ще стъпи на CCW на двигателя.

Стъпка 4: Вземете двигателя за тест драйв

Вземете двигателя за пробно шофиране
Вземете двигателя за пробно шофиране

Ако все още не сте подготвени за програмиране на микропроцесори, бихте могли да се справите по -лошо от Ghetto Development Kit или някой от различните PIC програмисти. Свържете проводниците директно към микропроцесора и го изгорете със следния код:

/* Игра с придвижване на малките стъпкови двигатели. */

/ * Включване на функцията за забавяне */ #дефиниране F_CPU 1000000UL #включване/ * Защита на щифтове за ATTiny2313 *// * Поръчка по часовниковата стрелка */ #дефиниране СИНЯ _BV (PB0) #дефиниране ЧЕРЕН _BV (PB1) #дефиниране ЧЕРВЕН _BV (PB2) #дефиниране ЖЪЛТ _BV (PB3) #define ЗАДЪЛЖЕНИЕ 200 / * милисекунди между стъпките * / int main (void) {DDRB = 0xff; / * Активиране на изхода на всички B пинове */ PORTB = 0x00; / * Задайте ги на 0v */ while (1) {/ * главния цикъл тук */ PORTB = СИН; _ закъснение_ms (ЗАДЪЛЖЕНИЕ); PORTB = ЧЕРЕН; _ закъснение_ms (ЗАДЪЛЖЕНИЕ); PORTB = ЧЕРВЕНО; _ закъснение_ms (ЗАДЪЛЖЕНИЕ); PORTB = ЖЪЛТ; _ закъснение_ms (ЗАДЪЛЖЕНИЕ); }} Колко прост е този код? Наистина просто. Всичко, което прави, е да направи някои хубави дефиниции, за да мога да се позова на проводниците по цвят, а не върху техните пин-имена, и след това да ги включва последователно с регулируемо закъснение между тях. За начало избрах половин секунда забавяне между стъпките. Вижте краткото видео за резултатите. Ако наистина играете, пребройте броя стъпки на цикъл, за да разберете едностепенната ъглова разделителна способност на двигателя. (О, да. PS. Шофира без товар при 3.6v лесно. Вижте батерията във видеото.)

Стъпка 5: Завъртете го напред и назад

Значи го карате по посока на часовниковата стрелка. Нещо по -интересно? Малко почистване на код и можем да го стартираме напред-назад. Поставих последователността по часовниковата стрелка в масив, така че да можете да преминете през фазите с прост цикъл за. Сега можете да стартирате цикъла нагоре или надолу, за да преминете по часовниковата стрелка или обратно на часовниковата стрелка.

int main (void) {const uint8_t забавяне = 50; const uint8_t по часовниковата стрелка = {СИН, ЧЕРЕН, ЧЕРВЕН, ЖЪЛТ}; uint8_t i; DDRB = 0xff; / * Активиране на изхода на всички B пинове */ PORTB = 0x00; / * Задайте ги на 0v */ while (1) {/ * главния цикъл тук */ for (i = 0; i <= 3; i ++) {/ * стъпка през цветовете по часовниковата стрелка */ PORTB = по часовниковата стрелка ; _ закъснение_ms (забавяне); } за (i = 3; i> = 0; i-) { / * стъпка през цветовете ccw * / PORTB = по часовниковата стрелка ; _ закъснение_ms (забавяне); }}} Вижте състезателното видео за връщане назад.

Стъпка 6: Никога не съм на половин стъпка, защото не съм на половин стъпка …

Оставете текста настрана, наполовина стъпвайки на двигателя, е там, където е. Получавате по -голям пиков ток, по -моментален въртящ момент и двойно по -голяма ъглова разделителна способност. Накратко наполовина накратко: Вместо синьо, черно, червено, жълто, вие управлявате двигателя със синьо, синьо+черно, черно, черно+червено, червено, червено+жълто, жълто, жълто+синьо. Резултатът е, че половината време задействате и двата магнита наведнъж. И през времето, в което и двата комплекта са включени, двигателят посочва по средата между двете, свивайки ъгъла между „стъпките“и карайки двигателя да се върти по -плавно. Можете ли да кажете от видеото? Не съм сигурен … Сега частта от кода, която изпълнява полустепването, изглежда така:

void halfStepping (uint16_t забавяне, uint8_t посока ) {uint8_t i; за (i = 0; i <= 3; i ++) {PORTB = посока ; / * част с една намотка */ _ закъснение_ms (забавяне); PORTB | = посока [i+1]; / * добавяне на половин стъпка */ _delay_ms (забавяне); }} Първата команда PORTB задава един полюс на положителен, а всички останали на отрицателен. След това се изчаква. След това втората команда PORTB задава втори полюс (от другата намотка) на положително, задействайки двете намотки за 1.4x въртящия момент (и 2x тока). Пълен списък на програмите е приложен по -долу. Сега са дефинирани два масива (по посока на часовниковата стрелка, обратно на часовниковата стрелка) и двата имат по 5 елемента, за да позволят влизането на i+1 във функцията halfStepping.

Стъпка 7: Добавете драйвер за мотор

Добавете драйвер за мотор
Добавете драйвер за мотор
Добавете драйвер за мотор
Добавете драйвер за мотор
Добавете драйвер за мотор
Добавете драйвер за мотор

Дотук добре.

Единственият проблем е, че двигателят изглежда няма толкова голям въртящ момент, което може да се дължи на факта, че микропроцесорът ще издава само ~ 50mA на пин. Очевидната следваща стъпка би била да го свържете към шофьор на мотор, за да му доставите повече сок. Но след това малко се замислям: карам го само с 5v, а съпротивлението на намотката на намотката е ~ 125 ома. Което означава, че моторът черпи само 40mA на щифт и той трябва да се управлява добре от (мощния!) AVR чип. Така че, за да получите повече напрежение, задвижващо двигателя, го свързах към чип SN754410 H-bridge. Схемата е доста проста. Всеки щифт от AVR отива към вход, а съответните изходни щифтове отиват към двигателя. Чипът се нуждае от 5v за логическата секция и може да поеме много повече напрежение в моторната секция. Работата с 11.25v (три 3.6v батерии) помогна малко. Забележимо по -голям въртящ момент на пръста ми, но все още не е електроцентрала. Не е лошо за двигател, който е по -малък от никел. И сега схемата се превърна в биполярен стъпков двигател с общо предназначение. Добавено на 29 ноември: Сработи мотора снощи при 12v за известно време и започна да се нагрява. Не съм сигурен дали това е проблем с резонансната честота или просто е прекалено голям ток за намотките. Така или иначе, бъдете малко внимателни, ако управлявате този малък мотор с по -голямо напрежение.

Стъпка 8: Краят

И така, какво научих? Шофирането на стъпков двигател с AVR (и чип с H-мост) е доста лесно, дори в "фантастичния" режим на полустепване.

Все още не съм сигурен какво ще правя с малките стъпкови двигатели. Някакви предположения?

Препоръчано: