категории: Микроконтролер вериги
Брой преглеждания: 19709
Коментари към статията: 0
Моторно и серво управление с Arduino
При прости проекти на системи за автоматизация често е необходимо не само да се четат показанията на сензорите, но и да се задействат механизми за движение. За това се използват най-различни електродвигатели. Най-простият и най-популярен вариант е двигател с постоянен ток. Той спечели любовта на влюбените със своята достъпност, лекота на регулиране на скоростта. Ако задачата е да преместите някой механизъм в даден ъгъл или разстояние, е удобно да използвате серво задвижване или стъпков двигател.
В тази статия разглеждаме сервовете и малките двигатели с постоянен ток, свързвайки ги към Arduino платка и регулирайки DCT.
DC мотор
Най-често срещаният електромотор, който се използва в преносими устройства, играчки, радиоуправляеми модели и други устройства. Постоянните магнити са фиксирани върху малкия електромотор на статора, а на ротора - намотка.
Токът се подава към намотката чрез четката. Четките са изработени от графит, понякога се намират медни плъзгащи се контакти. Четките се плъзгат по ламелите, разположени в единия край на ротора. Ако не навлизате в подробности, тогава скоростта на въртене зависи от тока на намотката на арматурата.
При големите двигатели с постоянен ток, на статора, има възбуждаща намотка, свързана с намотката на ротора (през четката сбор) по определен начин (серийно, паралелно или смесено възбуждане). Така се постига желаният въртящ момент и броя на оборотите.
Контрол на скоростта
Когато е свързан към електрическата мрежа, постояннотоковият двигател започва да се върти с номинална скорост. За да намалите скоростта, трябва да ограничите тока. За да направите това, се въвеждат баластни съпротивления, но това намалява ефективността на инсталацията като цяло и се появява излишен източник на топлина. За по-ефективно регулиране на напрежението и тока се използва друг метод - PWM регулиране.
Метод за управление на модулиран сигнал (напрежение) на импулсна ширина е да генерира желаната стойност на напрежението чрез промяна на широчината на импулса с постоянна продължителност на периода (честота).
Тоест периодът е разделен на две части:
1. Импулсно време.
2. Време за пауза.
Отношението на времето на импулса към общото време на периода се нарича работен цикъл:
Ks = ti / tper
реципрочността се нарича "работен цикъл":
D = 1 / KZ = tper / t и
За да се опише режимът на работа на PWM контролера, се използват и двете концепции: работен цикъл и работен цикъл.
Консумацията на тока на мотора зависи от неговата мощност. Броят на оборотите, както беше казано, зависи от тока. Токът може да се регулира чрез промяна на количеството напрежение, приложено към намотките. В действителност, когато се захранва от напрежение, което надвишава номиналната стойност според паспорта на двигателя, скоростта му също ще надвишава номиналната скорост. Въпреки това, такива режими на работа са опасни за двигателя, тъй като по-голям ток тече в намотките, което причинява тяхното повишено нагряване.
Ако повредата на двигателя от краткотрайни импулси или многократно краткотрайни режими на работа е минимална, тогава при продължителна работа при високо напрежение и обороти той ще изгори или лагерите му ще се нагреят и клинират, а след това намотките ще изгорят, ако захранването не бъде изключено.
Ако входното напрежение е твърде ниско, малкият двигател може просто да няма достатъчно мощност за движение. Затова е необходимо експериментално да се установи нормалната скорост и напрежение за определен двигател, които не надвишават номиналната.
Свързваме се с ардуино
Имах малък мотор, изглежда от касетофон, което означава, че номиналното му напрежение ще бъде под 5 волта, тогава изходната мощност на ардуино ще бъде достатъчна. Ще го захранвам от 5V щифта, т.е. от изхода на линейния стабилизатор, разположен на платката. Според схемата, която виждате по-долу.
Не знам тока на този мотор, затова го свързах към захранването и монтирах полеви транзистор между двигателя и захранващия щифт, на вратата на който е приложен сигнал от PWM изхода, може да се използва всеки от наличните.
За да настроя скоростта, добавих променлив резистор към веригата, свързвайки го към аналоговия вход A0. За бърза връзка използвах дъска без спойка, която се нарича още.
Инсталирах резистор за ограничаване на тока в транзисторното окабеляване (за да намаля тока на заряда на портата, това ще спаси пристанището от изгаряне и захранването на микроконтролера от утаяване и замръзване) с 240 Ома и го издърпах на земята с 12 kOhm резистор, това трябва да се направи, за да стане по-стабилен резервоарът на затвора работеше и се изпускаше по-бързо.
Подробности за описаните транзистори с полеви ефекти в статия на нашия уебсайт, Използвах мощен, обикновен и не твърде скъп мосфет с n-канал и вграден обратен диод IRF840.
Ето как изглежда моята лабораторна стойка:
Функцията за управление на PWM се извиква при запис на съответните изходни стойности (3, 5, 6, 9, 10, 11) от 0 до 255 с командата AnalogWrite (пин, стойност). Логиката на нейната работа е изобразена на графиките по-долу.
Такъв сигнал се прилага към портата на транзистора:
Програмният код на позора е кратък и прост, подробно са описани всички тези функции в предишни статии за ардуино.
int sensorPin = A0; // вход от потенциометър
int motorPin = 3; // PWM изход към портата на камерата
настройка за невалидност () {
pinMode (motorPin, OUTPUT);
}
void loop () {
analogWrite (motorPin, карта (analogRead (sensorPin), 0, 1023, 0, 256));
}
В функцията analogWrite присвоявам стойност на изхода на PWM, чрез командата map, използването му ви позволява да премахнете няколко реда код и една променлива.
Това е работна схема и е чудесно за наблюдение на процесите при регулиране на мощността на натоварване, яркостта на светодиодите, скоростта на двигателя, просто трябва да свържете желания товар вместо двигателя. В същото време, вместо 5V, всяко напрежение може да бъде приложено към товара, например 12V, не забравяйте да свържете минусовото захранване към контакта, например 12V, не забравяйте да свържете минусовото захранване към GND щифта на платката на микроконтролера.
В arduino честотата на ШИМ, когато се извиква чрез функцията analogWrite, е само 400 Hz, при минимални стойности на напрежението, от намотките на двигателя се чува звук със съответната честота.
Серво
Двигател, който може да бъде в предварително определено положение и когато е изложен на външни фактори, например, принудително отклонение на вала, запазва позицията си непроменена - се нарича серво задвижване. Като цяло определението звучи малко по-различно:
Servo е двигател с отрицателна обратна връзка.
Обикновено три проводника излизат от серво задвижване:
-
Плюс мощност.
-
По-малко мощност.
-
Контролен сигнал.
Серво задвижването се състои от:
-
DC мотор (или без четка);
-
Такси за управление;
-
Датчик за положение (енкодер за сервомери с ъгъл на въртене от 360 ° или потенциометър за сервомери с ъгъл на въртене 180 °);
-
Намаляване на предавката (понижава оборотите на двигателя и увеличава въртящия момент на задвижващия вал).
Контролният блок сравнява сигнала на вградения сензор за положение и сигнала, който е постъпил през управляващия проводник, ако те се различават, тогава има въртене под ъгъл, под който се изравнява разликата между сигнала.
Основни характеристики на сервоприводите:
-
Скорост на завъртане (време, през което валът се върти под ъгъл от 60 °);
-
Въртящ момент (kg / cm, т.е. колко килограма може да издържи двигателят на лоста на 1 см от вала);
-
Захранващо напрежение;
-
Текущо потребление;
-
По метода на управление (аналогов или цифров, няма съществена разлика, но цифровият е по-бърз и стабилен).
Обикновено периодът на сигнала е 20 ms, а продължителността на контролния импулс:
-
544 μs - съответства на 0 °;
-
2400 μs - съответства на ъгъл от 180 °.
В редки случаи дължината на импулса може да се различава, например 760 и 1520 μs, съответно, тази информация може да бъде изяснена в техническата документация за задвижването. Един от най-популярните хоби сервоприводи е Tower Pro SG90 и подобни модели.Той е евтин - около 4 долара.
Той държи 1,8 кг / см върху вала, а в комплект с него са монтажни винтове и лостове с шплици за вала. Всъщност това бебе е доста силно и е много проблематично да го спрете с един пръст - самото задвижване започва да изпада от пръстите - такава е силата му.
Серво управление и Arduino
Както вече споменахме, контролът се осъществява чрез промяна на продължителността на импулса, но не бъркайте този метод с PWM (PWM), правилното му име е PDM (Pulse Duration Modulation). Леките отклонения в честотата на сигнала (20 ms - продължителност, честота 50 Hz) не играят особена роля. Но не се отклонявайте от честотата с повече от 10 Hz, двигателят може да работи шумно или да изгори.
Връзката с arduino е доста проста, можете също да захранвате устройството от 5V щифт, но не е желателно. Факт е, че в началото има малък скок на тока, това може да доведе до прекъсване на мощността и Неверни изходи на микроконтролер, Въпреки че е възможно 1 малко задвижване (тип SG90), но не повече.
За да управлявате такива сервомери с arduino, трябва да имате вградена библиотека Servo в IDE, тя има малък набор от команди:
-
attach () - добавете променлива към щифта. Пример: име на устройството.attach (9) - свържете серво на пин 9. Ако вашето устройство се нуждае от нестандартни дължини на контролните импулси (544 и 2400 μs), тогава те могат да бъдат зададени разделени със запетая след номера на щифта, например: servo.attach (щифт, min ъгъл (μs), максимален ъгъл в ISS));
-
write () - задава ъгъла на въртене на вала в градуси;
-
writeMicroseconds () - задава ъгъла през дължината на импулса в микросекунди;
-
read () - определя текущото положение на вала;
-
прикрепен () - проверява дали е поставен щифт със свързан серво;
-
detach () - отмени командата за прикачване.
Тази библиотека ви позволява да контролирате 12 сервома от UNO, Nano и подобни дъски (mega368 и 168), докато възможността да използвате PWM на пинове 9 и 10 изчезва. Ако имате MEGA, можете да контролирате 48-те сървъри, но PWM на пинове 11 и 12 ще изчезне, ако използвате до 12 сервома, PWM ще остане напълно функционален при всички контакти.
Ако сте свързали тази библиотека, няма да можете да работите с 433 MHz приемници / предаватели. За това има библиотека Servo2, която иначе е идентична.
Ето пример за кода, който използвах за експерименти със серво задвижване, той е в стандартния набор от примери:
#include
Серво мисерво; // обявено име на променлива за myservo servo
int potpin = 0; // щифт за свързване на потенциометъра за настройка
int val; // променлива, за да запишете резултатите от четене на сигнала от потенциометъра
настройка за невалидност () {
myservo.attach (9); // задайте 9 пинов като контролен изход за серво
}
void loop () {
val = analogRead (potpin); // резултати от отчитане на потенциометъра, запазен в транс. val, те ще бъдат в диапазона от 0 до 1023
val = карта (val, 0, 1023, 0, 180); // преведете диапазона на измерване от аналогов вход 0-1023
// в обхвата на задачите за серво 0-180 градуса
myservo.write (val); // премине преобразуването сигнал от pot-ra за контрол серво вход
забавяне (15); // забавянето е необходимо за стабилна работа на системата
заключение
Използването на най-простите електродвигатели, сдвоени с ардуино, е доста проста задача, докато овладяването на този материал разширява вашите възможности в областта на автоматизацията и роботиката. Най-простите роботи или радиоуправляеми модели автомобили се състоят от такива двигатели, а сервовете се използват за управление на въртенето на колелата.
В разглежданите примери потенциометър е използван за задаване на ъгъла на въртене или скорост на въртене, вместо това може да се използва всеки друг източник на сигнал, например въртене или промяна на скоростта може да възникне в резултат на информация, получена от сензори.
Пример за използването на сервохранилища в алтернативната енергия: проследяване на ъгъла на падане на слънчевата светлина и регулиране на положението на слънчевите панели в електроцентралите
За да внедрите такъв алгоритъм, можете да използвате няколко фоторезист или други оптоелектронни устройства за измерване на количеството падаща светлина и, в зависимост от показанията им, задават ъгъла на въртене на слънчевия панел.
Вижте също на e.imadeself.com
: