Kategorie: Obvody mikrokontrolérů
Počet zobrazení: 19709
Komentáře k článku: 0

Ovládání motoru a servo s Arduino

 

U jednoduchých návrhů automatizačních systémů je často nutné nejen odečítat hodnoty senzorů, ale také nastavit pohybové mechanismy. K tomu se používá řada elektrických motorů. Nejjednodušší a nejoblíbenější možností je stejnosměrný motor. Vyhrál lásku milenců svou dostupností, snadným nastavením rychlosti. Pokud je úkolem posunout jakýkoli mechanismus do určitého úhlu nebo vzdálenosti, je vhodné použít servopohon nebo krokový motor.

V tomto článku se podíváme na serva a malé stejnosměrné motory, připojíme je k desce Arduino a upravíme DCT.

Ovládání motoru a servo s Arduino

Stejnosměrný motor

Nejběžnější elektrický motor, který se používá v přenosných zařízeních, hračkách, modelech řízených rádiem a dalších zařízeních. Permanentní magnety jsou upevněny na malém elektromotoru na statoru a vinutí na rotoru.

Stejnosměrný motor

Proud je přiváděn do vinutí skrz sestavu kartáče. Kartáče jsou vyrobeny z grafitu, někdy se nacházejí měděné posuvné kontakty. Kartáče klouzají po lamelách umístěných na jednom konci rotoru. Pokud nechcete jít do podrobností, pak jeho rychlost otáčení závisí na proudu vinutí kotvy.

Kolektorová motorová kotva

U velkých stejnosměrných motorů je na statoru připojeno budicí vinutí, které je určitým způsobem spojeno s vinutím rotoru (skrz kartáčovou sestavu) (sekvenční, paralelní nebo smíšené buzení). Tím je dosaženo požadovaného točivého momentu a počtu otáček.


Regulace rychlosti

Elektrický stejnosměrný motor

Po připojení k síti se stejnosměrný motor začne otáčet jmenovitými otáčkami. Chcete-li snížit rychlost, musíte omezit aktuální. Za tímto účelem jsou zavedeny odpory předřadníku, ale to snižuje účinnost zařízení jako celku a objevuje se nadměrný zdroj tepla. Pro efektivnější regulaci napětí a proudu se používá jiná metoda - PWM ovládání.

PWM ovládání

Způsob řízení signálu (napětí) modulovaného šířkou impulsu je generování požadované hodnoty napětí změnou šířky impulsu s konstantním trváním periody (frekvence).

To znamená, že období je rozděleno do dvou částí:

1. Impulzní čas.

2. Pozastavte čas.

Poměr doby impulsu k celkové době periody se nazývá pracovní cyklus:

Ks = ti / tper

reciproční se nazývá „pracovní cyklus“:

D = 1 / KZ = tper / ta an

K popisu provozního režimu regulátoru PWM se používají oba pojmy: pracovní cyklus i pracovní cyklus.

Aktuální spotřeba motoru závisí na jeho výkonu. Počet otáček, jak bylo řečeno, závisí na proudu. Proud může být nastaven změnou množství napětí aplikovaného na vinutí. Ve skutečnosti, když je napájeno napětím, které přesahuje jmenovitou hodnotu podle pasu motoru, jeho rychlost také překročí jmenovitou rychlost. Takové provozní režimy jsou však pro motor nebezpečné, protože ve vinutích proudí větší proud, což způsobuje jejich zvýšené zahřívání.

Pokud je poškození motoru krátkodobými impulsy nebo opakovaně krátkodobými provozními režimy minimální, pak při dlouhodobém provozu při vysokém napětí a otáčkach shoří nebo se jeho ložiska zahřívají a klínují a vinutí se spálí, pokud není odpojen přívod energie.

Pokud je vstupní napětí příliš nízké, malý motor nemusí mít dostatek energie k pohybu. Proto je nutné experimentálně zjistit normální otáčky a napětí pro konkrétní motor nepřesahující jmenovitou hodnotu.


Připojujeme se k arduinu

Měl jsem malý motor, zdá se, že z kazetového přehrávače, což znamená, že jeho jmenovité napětí bude pod 5 voltů, pak bude dostatečný výstupní výkon arduina. Napájím ho z 5V kolíku, tj. z výstupu lineárního stabilizátoru umístěného na desce. Podle schématu, které vidíte níže.

Neznám proud tohoto motoru, takže jsem jej připojil k napájení a nainstaloval jsem tranzistor s efektem pole mezi motor a napájecí pin, na jehož bráně byl použit signál z výstupu PWM, lze použít kterýkoli z dostupných.

Schéma zapojení stejnosměrného motoru Arduino

Pro nastavení rychlosti jsem do obvodu přidal proměnný odpor a připojil jej k analogovému vstupu A0. Pro rychlé spojení jsem použil nepájecí prkénko, které se také nazývá prkénko.

Nainstaloval jsem do tranzistorového vodiče rezistor omezující proud (aby se snížil nabíjecí proud hradla, zachrání se tím port ze spalování a napájení mikrokontroléru před poklesem a jeho zamrznutím) o 240 Ohmů, a tahem za zem se odporem 12 kOhm se to musí udělat, aby byl stabilnější uzávěrová nádrž pracovala a vypouštěla ​​rychleji.

Podrobnosti o tranzistorech s polním efektem jsou popsány v článku na našem webu. Použil jsem výkonný, běžný a ne příliš drahý mosfet s n-kanálem a vestavěnou reverzní diodou IRF840.

Výkonná a definující část okruhu

Takto vypadá moje sestava laboratorního stojanu:

Stejnosměrný motor a arduino

Řídicí funkce PWM je vyvolána při zápisu na odpovídající výstupní (3, 5, 6, 9, 10, 11) hodnoty od 0 do 255 pomocí příkazu AnalogWrite (pin, hodnota). Logika její práce je znázorněna v grafech níže.

Řídicí funkce PWM

Takový signál je aplikován na bránu tranzistoru:

Takový signál je aplikován na bránu tranzistoru

Programový kód hanby je krátký a jednoduchý, podrobně byly popsány všechny tyto funkce v předchozích článcích o arduino.

int sensorPin = A0; // vstup z potenciometru

int motorPin = 3; // Výstup PWM do brány kamery

neplatné nastavení () {

pinMode (motorPin, OUTPUT);

}

void loop () {

analogWrite (motorPin, mapa (analogRead (sensorPin), 0, 1023, 0, 256));

}

Ve funkci analogWrite přidělím výstupu PWM hodnotu, pomocí příkazu map umožňuje jeho použití odstranit několik řádků kódu a jednu proměnnou.


Toto je pracovní schéma a je skvělé pro pozorování procesů při nastavování výkonu zátěže, jasu LED, otáček motoru, stačí připojit požadované zatížení místo motoru. Současně, namísto 5V, může být na zátěž aplikováno jakékoli napětí, například 12V, nezapomeňte připojit záporný výkon ke kontaktu, například 12V, nezapomeňte připojit záporný výkon ke GND kolíku na desce mikrokontroléru.

V arduino je frekvence PWM, když je vyvolána funkcí analogového zápisu, pouze 400 Hz, při minimálních hodnotách napětí bylo slyšet hukot odpovídající frekvence z vinutí motoru.

Arduino a servo

Serva

Motor, který může být v předem stanovené poloze a je-li vystaven vnějším faktorům, například nucené výchylce hřídele, udržuje svou polohu nezměněnou - nazývá se servopohon. Obecně platí, že definice zní trochu jinak:

Servo je motorem se zpětnou vazbou.

Typicky tři dráty vycházejí ze servopohonu:

  • Plus výkon.

  • Méně síly.

  • Řídicí signál.

Servopohon se skládá z:

  • Stejnosměrný motor (nebo bezkartáčový motor);

  • Poplatky za správu;

  • Snímač polohy (kodér pro serva s úhlem natočení 360 ° nebo potenciometr pro serva s úhlem natočení 180 °);

  • Redukce převodového stupně (snižuje otáčky motoru a zvyšuje točivý moment na hnací hřídeli).

Řídicí jednotka porovnává signál zabudovaného snímače polohy a signál, který prošel řídicím drátem, pokud se liší, pak dochází k rotaci v úhlu, ve kterém je vyrovnán rozdíl mezi signálem.

Princip fungování servopohonu

Hlavní vlastnosti serv:

  • Rychlost otáčení (doba, během níž se hřídel otáčí o úhel 60 °);

  • Točivý moment (kg / cm, tj. Kolik kilogramů motor vydrží na páce 1 cm od hřídele);

  • Napájecí napětí;

  • Aktuální spotřeba;

  • Metodou řízení (analogové nebo digitální není žádný významný rozdíl, ale digitální je rychlejší a stabilnější).

Obvykle je doba signálu 20 ms a doba trvání řídicího impulzu:

  • 544 μs - odpovídá 0 °;

  • 2400 μs - odpovídá úhlu 180 °.

Ve vzácných případech se délka impulsu může lišit, například 760 a 1520 μs, tato informace může být objasněna v technické dokumentaci k měniči. Jedním z nejpopulárnějších hobby seriálů je Tower Pro SG90 a podobné modely.Je to levné - asi 4 dolary.

Sevroprivod pro arduino

Drží 1,8 kg / cm na hřídeli a je s ním také montážní šrouby a páky s drážkami pro hřídel. Ve skutečnosti je toto dítě docela silné a je velmi problematické ho zastavit jedním prstem - pohon sám začne vypadávat z prstů - taková je jeho síla.


Servo kontrola a Arduino

Jak již bylo zmíněno, řízení se provádí změnou doby pulsu, ale nezaměňujte tuto metodu s PWM (PWM), její správné jméno je PDM (Pulse Duration Modulation). Mírné odchylky ve frekvenci signálu (20 ms - trvání, frekvence 50 Hz) nehrají zvláštní roli. Neodchylujte se však od kmitočtu o více než 10 Hz, motor může trhat nebo vyhořet.

Servo kontrola a Arduino

Připojení k arduinu je poměrně jednoduché, můžete také napájet pohon z 5V kolíku, ale není to žádoucí. Faktem je, že na začátku je malý skok v proudu, může to způsobit výpadek energie a Falešné výstupy mikrokontroléru. Přestože je možná jedna malá jednotka (typ SG90), nic víc.

Chcete-li ovládat tato sera s arduino, máte vestavěnou knihovnu servo do IDE, má malou sadu příkazů:

  • attach () - přidejte proměnnou do špendlíku. Příklad: drive name.attach (9) - připojte servo na pin 9. Pokud váš pohon potřebuje nestandardní délky řídících impulsů (544 a 2400 μs), lze je nastavit odděleny čárkou za číslem kolíku, například: servo.attach (pin, min. Úhel (μs), maximální úhel v ISS));

  • write () - nastavuje úhel natočení hřídele ve stupních;

  • writeMicroseconds () - nastavuje úhel délky impulsu v mikrosekundách;

  • read () - určuje aktuální polohu hřídele;

  • připojeno () - Zkontroluje, zda je kolík nastaven s připojeným servem;

  • detach () - zruší příkaz připojit.

Tato knihovna umožňuje ovládat 12 serv z desek UNO, Nano a podobných (mega368 a 168), zatímco schopnost používat PWM na pin 9 a 10 zmizí. Pokud máte MEGA, můžete ovládat 48. servery, ale PWM na pinech 11 a 12 zmizí, pokud používáte až 12 serv, pak PWM zůstane plně funkční na všech kontaktech.

Pokud jste tuto knihovnu připojili, nebudete moci pracovat s přijímači / vysílači 433 MHz. K tomu existuje knihovna Servo2, která je jinak totožná.

Knihovna Servo2

Zde je příklad kódu, který jsem použil při experimentech se servopohonem, je ve standardní sadě příkladů:

#include // připojit knihovnu

Servo myservo; // deklarovaný název proměnné pro seriál myservo

int potpin = 0; // pin pro připojení nastavovacího potenciometru

int val; // proměnná pro uložení výsledků čtení signálu z potenciometru

neplatné nastavení () {

myservo.attach (9); // nastaví 9 pinů jako řídicí výstup pro servo

}

void loop () {

val = analogRead (potpin); // výsledky čtení potenciometru uloženého v trans. val, budou v rozsahu od 0 do 1023

val = mapa (val, 0, 1023, 0, 180); // převést měřicí rozsah z analogového vstupu 0-1023

// v rozsahu úkolů pro servo 0-180 stupňů

myservo.write (val); // projít převodu signál od pot-ra k ovládání vstup serva

zpoždění (15); // zpoždění je nutné pro stabilní provoz systému

 

Připojujeme servo k Arduinu

Závěr

Použití nejjednodušších elektrických motorů spárovaných s arduino je poměrně jednoduchý úkol, zatímco zvládnutí tohoto materiálu rozšiřuje vaše možnosti v oblasti automatizace a robotiky. Nejjednodušší roboty nebo rádiem ovládané modely automobilů se skládají z takových motorů a serva se používá k řízení rotace kol.

V uvažovaných příkladech byl potenciometr použit k nastavení úhlu otáčení nebo rychlosti otáčení, místo toho může být použit jakýkoli jiný zdroj signálu, například může dojít k rotaci nebo změně rychlosti v důsledku informací přijatých od senzorů.

Příklad použití serv v alternativní energii: sledování úhlu dopadu slunečního světla a úprava polohy solárních panelů v elektrárnách.

K implementaci takového algoritmu můžete použít několik fotorezistory nebo jiná optoelektronická zařízení pro měření množství dopadajícího světla a podle jejich odečtů nastavují úhel natočení solárního panelu.

Viz také na i.electricianexp.com:

  • Jak je servo uspořádáno a jak funguje
  • Arduino a krokový motor: základy, schémata, připojení a ovládání
  • Představuje připojení zařízení k Arduino
  • Jak rozlišit indukční motor od stejnosměrného motoru
  • Jak připojit inkrementální kodér k Arduino

  •