Arduino - řízení krokového motoru

Transkript

Arduino - řízení krokového motoru
Arduino - řízení krokového motoru
autor: Johny, arduino, dne 11.11.2014
Delší dobu si na amatérské úrovni hraju s Arduinem. Už jsem zapojil hromadu různých legrácek, které by se občas hodili.
Bohužel, často to jen zapojím – zkusím – funguje – rozeberu – zapomenu.
Často je tak zapojení včetně programu ztraceno na vždy. A přitom třeba debugger DMX signálu za pár korun by se mi už tolikrát
hodil! Měl jsem si to poznamenat. Znovu to znovu hledat a ladit se mi strašně nechce :(
Proto jsem se rozhodl občas zde zveřejnit nějaké mé zapojení a programy tak, abych s odstupem času měl kam sáhnout, super,
ne? :)
Mé zapojení krokového motoru
Dnes zkouším krokový motor
Protože dlouho sním o vlastním CNC (frézka), tak je pro mě důležité vyřešit pohon. Vím, že se používají krokové motory – a jeden
takový jsem před časem koupil na EBAY za pár korun včetně řadiče. Jak se později ukázalo, řadič je vlastně jediný integráč který
vlastně jen spíná silově vývody, tedy v podstatě je to jen hromádka tranzistorů v hezkém pouzdře (konkrétně ULN2003). Na mém
„ovládacím“ modulu jsou pro jednotlivé vývody do motoru navíc zapojené LED diody, takže je krásně názorně vidět, jak jsou vždy
dvě po sobě jdoucí vývody na HIGH a dva na LOW, přesně to odpovídá dvojím vinutí v motoru.
Když jsem ještě víc pátral, našel jsem obrázek řízení krokového motoru pomocí paralerního portu PC – zde je každý vývod
zapojen na jeden výstup portu, pro názornost vkládám obrázek včetně obvodu ULN2003. To dále vysvětluje, proč většina
čínských CNC strojů vyžaduje v dnešní době LPT port :-)
Jak to je s řídícím obvodem -a zapojení přes LPT. Zdroj: electronics-diy.com
Jak to tedy nakonec oživit?
Program, který nakonec motor roztočil využil v první fázi knihovnu Stepper která je součástí arduina. Stačilo jen dopsat piny, na
které jsem motor zapojil (v mém případě 8,9,10,11). Dále sem dopsal počet kroků. Zapojení pak předpokládá že na pinu A0 mám
potenciometr pro nastavení rychlosti.
#include <Stepper.h>
const int stepsPerRevolution = 200;
Stepper myStepper(stepsPerRevolution, 8,9,10,11);
int stepCount = 0;
const int analogPin = A0; //sem je připojene poťák
void setup() {}
void loop() {
int sensorReading = analogRead(A0); //načtu hodnotu z A0 (poťák)
int motorSpeed = map(sensorReading, 0, 1023, 0, 100); // změna rozsahu, hezká věc ;-)
if (motorSpeed > 0) {
myStepper.setSpeed(motorSpeed);
myStepper.step(stepsPerRevolution/100);
}
}
Ačkoliv se motor točil, tak strácel kroky, nefungoval druhý směr. Asi to bylo tím, že spínání cívek bylo takové, že spínal vždy jen
jednu, tedy 1000–0100–0010–0001. Dole jsem si to napsal po svém, a to už funguje dobře!
Samozřejmě aby to běželo, bylo potřeba motoru poskytnout nějaké napájení. Já nad tím v první chvilce nepřemýšlel a když bylo
na plošném spoji driveru motoru napsáno 5–12V, zapojil jsem to na 7.5V baterii kterou jsem vyhrabal v šuplíku. Později, když sem
si sáhl na horký motor mi došlo, že to peru přímo do něj – ačkoliv na něm je uvedeno že je na 5V. No, neshořel dodnes (cca 4 dny
topeení motorem). Ten popisek na driveru je zavádějící, co já mám zkoumat, zda tam je nějaký spínaný zdroj pro krokáče… :)
Názorně upravený program
Pro lepší pochopení, jak vlastně krokový motor funguje mi pomohlo nalezení tabulky, kde je zobrazeno jak přesně vypadají
jednotlivé kroky a jak jdou po sobě. Z toho se dá pak snadno sestavit program níže bez použití knihoven. Je dobré vidět přesně
jak každý krok vypadá. Jinak je program naohrabaný, tedy fakt jen jako ukázka fungování ;-)
int Pin0 = 8;
int Pin1 = 9;
int Pin2 = 10;
int Pin3 = 11;
int _step = 0;
boolean dir = true; // gre
const int analogPin = A0;
long lastJob1;
void setup() {
pinMode(Pin0, OUTPUT);
pinMode(Pin1, OUTPUT);
pinMode(Pin2, OUTPUT);
pinMode(Pin3, OUTPUT);
}
void loop() {
switch (_step) {
case 0:
digitalWrite(Pin0,
digitalWrite(Pin1,
digitalWrite(Pin2,
digitalWrite(Pin3,
break;
case 1:
digitalWrite(Pin0,
digitalWrite(Pin1,
digitalWrite(Pin2,
digitalWrite(Pin3,
break;
case 2:
digitalWrite(Pin0,
digitalWrite(Pin1,
digitalWrite(Pin2,
digitalWrite(Pin3,
break;
case 3:
digitalWrite(Pin0,
digitalWrite(Pin1,
digitalWrite(Pin2,
digitalWrite(Pin3,
break;
case 4:
digitalWrite(Pin0,
digitalWrite(Pin1,
digitalWrite(Pin2,
LOW);
LOW);
LOW);
HIGH);
LOW);
LOW);
HIGH);
HIGH);
LOW);
LOW);
HIGH);
LOW);
LOW);
HIGH);
HIGH);
LOW);
LOW);
HIGH);
LOW);
digitalWrite(Pin3,
break;
case 5:
digitalWrite(Pin0,
digitalWrite(Pin1,
digitalWrite(Pin2,
digitalWrite(Pin3,
break;
case 6:
digitalWrite(Pin0,
digitalWrite(Pin1,
digitalWrite(Pin2,
digitalWrite(Pin3,
break;
case 7:
digitalWrite(Pin0,
digitalWrite(Pin1,
digitalWrite(Pin2,
digitalWrite(Pin3,
break;
default:
digitalWrite(Pin0,
digitalWrite(Pin1,
digitalWrite(Pin2,
digitalWrite(Pin3,
break;
LOW);
HIGH);
HIGH);
LOW);
LOW);
HIGH);
LOW);
LOW);
LOW);
HIGH);
LOW);
LOW);
HIGH);
LOW);
LOW);
LOW);
LOW);
}
int sensorReading = analogRead(A0);
if (millis() > (1000 + lastJob1)){
if (dir){
dir = false;
}else{
dir = true;
}
lastJob1 = millis();
}
if(dir){
_step++;
}else{
_step--;
}
if (_step
_step
}
if (_step
_step
}
> 7) {
= 0;
< 0) {
= 7;
int motorSpeed = map(sensorReading, 0, 1023, 0, 100);
delay(motorSpeed);
}
A je to! Když jsem si to sem napsal, už to nezapomenu a kdykoliv budu moci zopakovat, není to super? :-)
Připojená fotogalerie: 2014/2014_11_11_Stepper/
Podobné články:
Arduino a RC vysílačka 9.12.2014
Arduino a krokový motor potřetí 20.11.2014
Arduino a motor 28BYJ-48 podruhé 17.11.2014
Implementace ICMP Pingu v PHP 10.1.2013
Štítky tohoto článku:
28byj-48
arduino
programovani
Diskuze: Arduino - řízení krokového motoru
1. Pavel (17.5.2015, 22:18)
Zdravim muzu se zeptat kde bych to mohl sehnat a za kolik?Predem dekuji za odpoved
Johny (
http://nul.cz 21.5.2015 21:31)
Dobrý den,
motory kupuji na ebay, stačí dát vyhledávat jméno motoru.
Zde třeba jeden konkrétní i s driverem za cca 60 korun: http://www.ebay.com/…181013743961?…
Pavel (22.5.2015 17:50)
Dobre ale kde sezenu ten regulator na otacky?A ten driver to je co za ucel?
Johny (
http://nul.cz 23.5.2015 00:03)
Nějak nerozumím dotazu. Vždyť odkaz na motor včetně driveru jsem dal, né? Kromě motoru a driveru je ve videu
ještě arduino + jeden potenciometr. Nic víc.
ISD (
http://www.isd-webspace.com 13.10.2015 11:17)
napr aj tu:
http://www.banggood.com/…p-74397.html
Reagovat na tento příspěvek
2. Johny (
http://nul.cz 23.5.2015, 00:03)
Nějak nerozumím dotazu. Vždyť odkaz na motor včetně driveru jsem dal, né? Kromě motoru a driveru je ve videu ještě
arduino + jeden potenciometr. Nic víc.
Reagovat na tento příspěvek
3. pavel (23.5.2015, 11:15)
Tak moment tak ze ja koupim z ebaye motorek s drivrem a tady potenciometr ktery pak zapojim kde?pak vidim na fotce
ze je zapojenej do modre desky.koukal jsem pak jeste na servocity.com a tam to maji sice palka jak hrom 4 servo
controle nejak 109,99$
Johny (
http://nul.cz 26.5.2015 15:56)
Aha! Článek pojednává o Arduinu – takže mě nenapadlo, že nevíte, co arduino (modrá deska) na obrázku je.
Arduino je plošný spoj s procesorem (většinou značky Atmel). Je to tomu vývojové prostředí které umožňuje
snadno programovat. Nicméně, asi si o tom něco zistěte. Nejlevnější arduino (které je ale na řízení krokového
motoru dostatečné) je Arduino Pro Mini a stojí na ebay kolem 70Kč. Pak tedy máte arduino+driver+motor a celé
to je do 150 korun. Jen to prostě nefunguje samo – programuje se.
Víc info pro uplné začátečníky třeba zde:
http://www.hwkitchen.com/…uino-uvod-1/
Reagovat na tento příspěvek
4. Pavel (27.5.2015, 10:30)
Aha tak to se omlouvam ze jsem nenapsal ze nevim co je audrino no a je nekde ceske schema treba k tomuhle
regulatoru? http://www.dx.com/…6-90v-290621#…
Jelikoz nevim jestli by se platilo clo a dan pak na to me upozornil kamos.
Jejpi (5.6.2015 13:53)
Při těchto malých částkách nemusíš mít z daní ani cla strach. Přes ebay jsem již nakoupil stovky položek do
500,– a nic nepodléhalo clu. Při nákupu je potřeba hlídat cenu za dopravu (většinou se dá najít zdarma). Také
počítej u některých čínských výrobků, že za tu cenu nemůžeš očekávat excelentní kvalitu.
Reagovat na tento příspěvek
5. Pavel (5.6.2015, 19:00)
Ok diky za info;) jak budu mit hotovo tak poslu odkaz na video a jeste jednou diky :)
Reagovat na tento příspěvek
6. Peter (23.6.2016, 18:47)
Ahoj, moc hezky to máš popsané. :) Jen bych se chtěl zeptat, co znamená ta změna rozsahu, jak se definuje ta
proměnná motorspeed? Jak vůbec funguje řízení rychlosti otáčení motorku? Děkuji :)
Reagovat na tento příspěvek
7. Peter (23.6.2016, 18:47)
Ahoj, moc hezky to máš popsané. :) Jen bych se chtěl zeptat, co znamená ta změna rozsahu, jak se definuje ta
proměnná motorspeed? Jak vůbec funguje řízení rychlosti otáčení motorku? Děkuji :)
Reagovat na tento příspěvek
Diskuze: Arduino - řízení krokového motoru
Vaše jméno
Váš email
(povinné)
(nebude zveřejněn, povinný)
WEB
(bude zveřejněn, pište s http://)
Text vzkazu:
Kolik je 3×2? (ochrana proti spamu)
Vložit příspěvek
PDF vygenerováno 4.10.2016 18:20:24 z webu http://nul.cz.
URL dokumentu je http://nul.cz/arduino/arduino-rizeni-krokoveho-motoru/

Podobné dokumenty

4.2.13 Regulace napětí a proudu reostatem a potenciometrem

4.2.13 Regulace napětí a proudu reostatem a potenciometrem 2 Mezi vývody 1 a J je poloviční odpor, leží mezi nimi polovina odporového válce. Mezi vývody 2 a J je poloviční odpor, leží mezi nimi polovina odporového válce. J Mezi vývody 1 a 2 je velký odpor,...

Více

DIGITÁLNÍ LUXMETR

DIGITÁLNÍ LUXMETR tlačítka "Výběr zdroje světla"(3-8, Obr. 1) * Na LCD displeji se zobrazí zvolený typ osvětlení :

Více

VZ ČSOP Kněžice 2014

VZ ČSOP Kněžice 2014 Chaloupky. K zajištění nejen praktické činnosti v lokalitách pozemkového spolku, ale také zemědělské činnosti byl přijat další managementový pracovník Karel Křivan (už je nás 8). Rok 2011 byl ve zn...

Více

závěrečné práci.

závěrečné práci. mikrokontroléru připravený bootlader. Ten při každém připojení napájení nebo resetu čeká na příkaz pro spuštění programování po sériové lince a když tento příkaz nedostane, tak předá řízení program...

Více

Projekt OV3000

Projekt OV3000 použití paměti flash jako programové paměti, namísto do té doby používané paměti EPROM. Používání paralerního programování. Umožňuje spuštění programu a jeho sledování.

Více

LUXMETR

LUXMETR a. Zakryjte světelný senzor ( 3-13, Obr., 1 ) použijte " kryt senzoru " ( 3-14, Obr. 1 ). b. Vyberte rozsah 40.00 Luxů. c. Stiskněte tlačítko “Zero - nulování” ( 3-7, Obr. 1 ), LCD displej zobrazí ...

Více