Arduino - servo motor - Printable Version +- DIY Electronic projects (https://forum.yu3ma.net) +-- Forum: Mikrokontroleri (https://forum.yu3ma.net/forumdisplay.php?fid=52) +--- Forum: Razvojni sistemi i moduli (https://forum.yu3ma.net/forumdisplay.php?fid=56) +--- Thread: Arduino - servo motor (/showthread.php?tid=1374) |
RE: Arduino - servo motor - gimba - 03-13-2017 (03-12-2017, 11:31 PM)Makso Wrote: Fino ste se raspisali... RE: Arduino - servo motor - Makso - 03-13-2017 @gimba E sada mi je mnogo jasnije, uglavnom da bi dobio precizan broj morao bih prvo nabaviti reduktor pa onda se baciti na matematiku, tj. izbrojati koliko krugova steper treba napraviti da bi reduktro napravio krug od 360° pa to preračunati u broj pulseva i tako dobiti koliko je potrebno za određeni broj zuba? To već ne znam, da li su cijeli ili realni brojevi, a glodala bi se trebala oštriti svaki zub po redu bez preskakanja, to standardna glodala samo je bitan broj zuba, bar ja mislim tako ili nisam dobro razumio pitanje? RE: Arduino - servo motor - gimba - 03-13-2017 (03-13-2017, 06:05 PM)Makso Wrote: @gimba Vidi, standardni steper motori imaju korak od 1.8 stepena. Da bi zadrzao snagu motora, ne treba da pravis mikrostepove vec samo cele stepove, znaci svaki korak po 1.8 stepena. Sad npr. imas glodalo od 6 zuba. Stepen zuba je 360 / 6 = 60 stepeni. Kada podelis 60 stepeni sa korakom stepera koj ima step od 1.8 stepeni dobije se 33,3 koraka. To nije ceo broj i steper ne moze da napravi 33,3 koraka vec moze da napravi 33 ili 34. Da bi dobio tih 0.3 moras redukcijom steper da podelis sa 18 i onda ti svaki korak stepera bude 0.1 stepen. Time si dobio bolju rezoluciju koraka koja vise nije 1.8 stepeni vec 0.1 stepen. Za ugao od 60 stepeni vise ne bi imao 33.3 koraka vec 600 koraka. To je vec ceo broj i steper moze da napravi 600 koraka, naravno time si usporio okretanje ali si dobio bolju rezoluciju ,18 puta vecu snagu stepera i pravi ugao. Znaci da bi Arduino morao da posalje 600 pulseva drajveru da bi okrenuo glodalo za 1 zub, ako glodalo ima 6 zuba. Najveci problem je tu naci redukciju 1 prema 18. E sada, sto se koda tice, opet isto ide. Uneses broj zuba testere preko tastera. Npr 6 zuba. U programu imas jednacinu koja podeli 360 stepeni sto je pun krug sa 6 i dobijes 60 stepeni po zubu. Onda ista ta jednacina podeli 60 sa uglom jednog koraka stepera preko redukcije koj je 0.1 stepen i na taj nacin dobijes broj pulseva sa Arduina za jedan zub. BROJ_PULSEVA = (360 / BROJ_ZUBA) / 0.1; *BROJ_PULSEVA - je broj koj Arduino treba da posalje drajveru za okretanje stepera pod uglom od 60 stepeni (jedan korak kod glodala sa 6 zuba). *BROJ_ZUBA - promenljiva koju unosis preko tastera za razlicita glodala sa razlicitim brojem zuba *0.1 - ugao jednog stepa steper motora preko redukcije 1 prema 18. Znaci imas dve promenljive: BROJ_PULSEVA i BROJ_ZUBA. Obe promenljive treba da budu tima INTEGER jer se radi o celim brojevima. Znaci imas: INT BROJ_ZUBA; INT BROJ_PULSEVA; Kada pritiskas taster za uvecavanje broja zuba, promenljiva BROJ_ZUBA se inkrementira i obrnuto, kada pritiskas taster za smanjenje broja zuba promenljiva BROJ_ZUBA se dekrementira. Znaci npr. imas taster na Arduino pinu 2 za povecanje broja zuba i imas taster na Aruino pinu 3 za smanjenje broja zuba. const int buttonPin1 = 2; //taster za inkrementiranje const int buttonPin2 = 3; //taster za dekrementiranje int BROJ_ZUBA = 0; //promenljiva za broj zuba koja se ucitava sa tastera int BROJ_PULSEVA = 0; //promenljiva za broj pulseva koje Arduino pusta drajveru int buttonState1 = 0; int buttonState2 = 0; void setup() { pinMode(buttonPin1, INPUT); pinMode(buttonPin2, INPUT); } void loop() { buttonState1 = digitalRead(buttonPin1); buttonState2 = digitalRead(buttonPin2); if (buttonState1 == HIGH) { //kada je taster 1 pritissnut BROJ_ZUBA++; //povecava promenljivu za broj zuba za 1 na svaki pritisak tastera } if (buttonState2 == HIGH) { //kada je taster 2 pritisnut BROJ_ZUBA--; //smanjuje promenljivu za broj zuba za 1 na svaki pritisak tastera } if (BROJ_ZUBA < 0) BROJ_ZUBA = 0; //ovo sluzi samo da promenljiva za broj zuba ne bi mogla da ode u minus BROJ_PULSEVA = (360 / BROJ_ZUBA) / 0.1; //jednacina za izracunavanje broja pulseva koje arduino salje drajveru .....i tako dalje! } Ovo je samo primer, na brzaka, ima tu jos mnogo! RE: Arduino - servo motor - vojinilic - 03-13-2017 Gimba, nisam radio sa Ardionom. Da li je digitalRead funkcija koja samo vraca stanje ulaza ili ona radi i debounce? Tu bi moralo raditi debounce. RE: Arduino - servo motor - vojinilic - 03-13-2017 Takodje, pitanje za tebe je kako se radi matematika. Imas celobrojne vrednosti koje delis sa float. Kako to kompajler tretira? Najbolje je uvek raditi u tim slucajevima impicitne konverzije. RE: Arduino - servo motor - gimba - 03-13-2017 (03-13-2017, 07:43 PM)vojinilic Wrote: Takodje, pitanje za tebe je kako se radi matematika. Imas celobrojne vrednosti koje delis sa float. Kako to kompajler tretira? Najbolje je uvek raditi u tim slucajevima impicitne konverzije. U pravu si za matematiku, eto nije mi palo na pamet uopste. Hvala za kritiku, ne bih primetio. Nisam davno kucao nista, Lazar Bankovic to radi kad mi treba nesto pa ne razmisljam na taj nacin i ispustam te bitne detalje, int/float. Ja sam slabo radio sa Arduinom isto, imam Easy Pic V7 razvojni sistem i uglavnom sam radio sa Pic-om. Skoro sam uzeo Arduino Mega i vrlo malo se igrao. Ovaj deo koda sam napisao samo kao primer, smernicu, logiku.... RE: Arduino - servo motor - gimba - 03-13-2017 (03-13-2017, 08:01 PM)gimba Wrote:(03-13-2017, 07:43 PM)vojinilic Wrote: Takodje, pitanje za tebe je kako se radi matematika. Imas celobrojne vrednosti koje delis sa float. Kako to kompajler tretira? Najbolje je uvek raditi u tim slucajevima impicitne konverzije. A i sto se tice ocitavanja tastera, radio bi ih preko interapta kao sto sam rekao juce. Opet kazem, dao sam samo najprostiji primer. Preko interapta bih ocitavao i induktivni senzor. I rastojanje izmedju pulseva bih isto radio preko interapta sa nekog od tajmera. DigitalRead ne radi debounce, radi samo ocitavanje. RE: Upravo stiglo - mikikg - 03-14-2017 Spominljali ste 101 algoritam za debounce, evo ovde nesto manja kolecija raznih debounce resenja: DEBOUNCE CODE – ONE POST TO RULE THEM ALL http://forum.yu3ma.net/showthread.php?tid=690&highlight=debounce RE: Arduino - servo motor - me[R]a - 03-14-2017 Treba obratiti paznju na to da na raznim Arduino boardima samo odredjeni digitalni pinovi imaju mogucnost interrupta.. https://www.arduino.cc/en/Reference/attachInterrupt RE: Arduino - servo motor - mikikg - 03-15-2017 Kuku lele kakav motor, ClearPath, ovo je sam vrh, opcije i funkcije koje ima su neverovatne posebno za cenu i to za ozbiljan industriski kvalitet: https://www.teknic.com/products/clearpath-brushless-dc-servo-motors/ "State of the art" servo motor sa kontrolerom, snaga brzina, preciznost, lakoca konfiguracije, predefinisane opcije, 10 razlicitih modova rada, ceo mini PLC u motoru, strasno ... Ima verzija za direktnu kontrolu motora iz programa, ima i biblioteka za Arduino! Alal im vera, ovo ce morati da se proba prakticno! https://www.youtube.com/watch?v=3TzNQnSKO_8 https://www.youtube.com/watch?v=Dwik-W6kRa8 RE: Arduino - servo motor - mikikg - 03-16-2017 ^^ Ovo motorce ima opake modove rada, recimo ovo https://www.youtube.com/watch?v=PsCY2qx6dK8 RE: Arduino - servo motor - Macola - 03-17-2017 U paleti kompaktnih motora sa drajverom i kontrolerom na motoru, raspon snaga je od 38W do 285W, raspon broja obrtaja od 730RPM do 4000RPM, a raspon cena od 250$ do 700$ okvirno. Frame size je NEMA 23 i NEMA 34. Nisu baš tako slatki sa cenom... P.S. Konverzija iz oz-in u Nm je: Nm = oz-in x 0.00706155183333 Snaga je: P[KW] = (Nm x RPM)/9550 RE: Arduino - servo motor - mikikg - 03-17-2017 Cena na prvi pogled nije slatka ali hajde da malo prosirimo tu pricu i da vidimo koliko kosta cela implementacija nekog resenja. Sami mi kazi Macola koliko ti vremena treba (cisto primer) da recimo jednu osu osposobis sa Xinje koje predosptavljam da znas u prste i da kretanje dovedes do maksimalnih perfomansi i da dobijes savrseno dumpovan sistem? Cukajuci i stelujuci preko nekog svog MCU i bilo kog drugog SW samo parametre za drajver? I da uporedimo to sa druge strane ove ClearPath koji za 15 minuta urade autotunig i to vreme smo proveli pijuckajuci kafu i samo dodjemo na gotovo, ne interesuje me sta je motor i algoritam tu radio u medjuvremenu RE: Arduino - servo motor - mikikg - 03-17-2017 Kada bi Xinje imao SW podrsku kao ovi ClearPath to bi bila druga prica, jel postoji nesto slicno za Xinje, gotovo? RE: Arduino - servo motor - Macola - 03-17-2017 Da. Autotjuning, koji Xinje nema, je velika prednost ovih Clear Path. Xinje je jevtin servo drajver i normalno je da za taj novac radimo ručni tjuning (koji nije ni malo umiljata stvar jer mnogo vemena troši). Malo skuplji servo drajveri (Micubiši, Jaskava, Šnajder...) imaju autotjuning sa cenom od oko 1.8 x Xinje. Uobičajeni servo drajveri, skuplji i bolji, imaju uglavnom sve opcije koje nudi i Clear Path. Zanimljiva je osobina velika kompaktnost ovih Clear Path, koja nažalost zahteva dobru provetrenost zone u kojoj je motor (zbog hlađenja drajvera na njemu). Napajanje na typ. 75VDC je sa jedne strane prednost, pošto nema HV u zoni motora, a sa druge strane je mana jer zahteva blok za napajanje, kakav god on bio (što košta solidno). Van toga, prednost je nepostojanje kabla za enkoder, ali i dalje treba dva fleksibilna kabla (napajanje, komunikacija). Raspon snaga je relativno mali 38-285W, što je i logično zbog hlađenja tih naprava. Clear Path je praktično izmestio sve ono što oduzima dosta prostora u drajveru: elkos, grec, inrush protektor. A na motor su spakovali IGBT modul, drajverčiće i MCU. Zbog nepovoljnog mesta za displej, sve se radi preko računara. Nisam baš euforično oduševljen njihovom ponudom. Radi se o malo prepakovanoj napravi sa prilično masnom cenom za one koji su 285W i 699$ u USA. Tajvanski TED motors sa autotjuningom košta oko 900$ za 1000W na primer. Xinje od 2,3KW bez autotjuninga oko 900eura (paket: motor, drajver, kablovi, konektori)... RE: Arduino - servo motor - Macola - 03-17-2017 (03-17-2017, 12:57 PM)mikikg Wrote: Kada bi Xinje imao SW podrsku kao ovi ClearPath to bi bila druga prica, jel postoji nesto slicno za Xinje, gotovo? Ima za brzo unošenje parametara i test modove rada, sa monitoringom stanja i grešaka. Radi na RS232 ili na Modbus RTU (fiz. lejer je RS485). Zove se "ThingetServo_EN.exe" Inače Xinje podržava sledeće (jedino što nema autotjuning): -selekciju raznih motora na drajveru, -external pulse position mode (pulse-dir ili A/B kvadraturni ulaz), -internal position mode (16 presetovanih pozicija, broj krugova + ugao, rezolucija 1/10000, smer, inkrementalno ili apsolutno pozicioniranje), -brzinski mod (pulse train ili analog input, 16 preset pozicija u internoj kontroli, digitalna selekcija preset vrednosti), -torque mod (digitalna ili analogna komanda), -trenutno svičovanje između bilo koja dva moda rada, -izveštaje na digitalnim ili analognim izlazima (o ostvarenoj poziciji, rastojanju od, enkoderski izlazi ABZ, o struji, momentu, brzini), -napajanje 1 x 230Vac, 3 x 230Vac, 3 x 400Vac (zavisno od snage, do 2,3KW 230Vac), -Pristup bilo kom parametru tokom rada i modifikacija određenih, preko Modbus. Inače, imaju njihov Motion PLC koji ima autotjuning i ostale dogodovštine. Nije baš Yaskawa al je jevtin. Mislim, nije loše za te pare... P.S. Evo uputstva za drajver pa možeš uporediti ovu sirotinjsku verziju sa modernim Clear Path: https://www.google.rs/url?sa=t&rct=j&q=&esrc=s&source=web&cd=3&ved=0ahUKEwj4uvLmwd3SAhXEUhQKHdeICpwQFggpMAI&url=http%3A%2F%2Fwww.scantech.ind.br%2FApp_Files%2Fuserfiles%2Ffile%2FDownloads%2FServo%2520Motores%2FServo%2520Scantech%2520S%25C3%25A9rie%2520DS%2FManual%2520Servo%2520Scantech%2520Linha%2520DS2.pdf&usg=AFQjCNES-qUXC5r8NQ1RIMbtpL-1y61Z8w&cad=rja RE: Arduino - servo motor - mikikg - 03-17-2017 Pa onda se vise isplati uloziti vreme u doradu SW za Xinje i da se napravi autotunig algoritam i da se jednom resi taj problem! RE: Arduino - servo motor - Macola - 03-17-2017 Kod nas na primer: http://www.sah.rs/Frekventni_I_Servo/MS-130ST-M15015B-22P3.html http://www.sah.rs/Frekventni_I_Servo/DS2-22P3-AS.html + oko 25 eura za kablove i eventualno neinduktivni kočioni otpornik za super teške uslove dinamičkog kočenja (za uobičajene uslove ima 100W kočioni otpornik integrisan u drajverima AS serije). http://www.sah.rs/Frekventni_I_Servo/Aluminium%20Housed%20Braking%20Resistors.html Radi se o pogonu sa 1500/2000RPM i 15/30Nm (2124 oz-in/ 4248 oz-in). RE: Arduino - servo motor - Macola - 03-17-2017 Kada bi se radio autotjuning za Xinje, onda se pokupi sa drajvera ABZ izlaz motora i odatle se vidi odziv na stimulaciju. Ostalo je autotjuning PID ili Fuzzy. RE: Arduino - servo motor - mikikg - 03-17-2017 Ima neka biblioteka PID Autotuning za Arduino, to moze lako da se proba? http://playground.arduino.cc/Code/PIDAutotuneLibrary |