Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Arduino - servo motor
#81
(03-12-2017, 11:31 PM)Makso Wrote: Fino ste se raspisali... Smile

@Želja
Da, da u pitanju je rotaciono kretanje.

Uglavnom sada znam da će steper ići preko reduktora ili u krajnjem slučaju preko dvije remenice i zupčastog remena (klasika), mada sam ja više za neki reduktor, zbog preciznosti a i snage.

Uglavnom na toj mašini se oštre alati za glodala, frezeri i slično, steper okreće kada se tocilo smakne sa alata koji oštri a bude zakočen kada se tocilo kreće po alatu i oštri ga.

Ispisivanje na LCD-u ću sam odraditi, toliko znam.

Bitna mi je komunikacija sa driverom i Arduinom, kako odraditi matematiku/logiku preko tastera da pomjera steper sa svakih 1° ili nekoliko više zavisi kako se podesi, volio bih da na izlazu reduktora mogu podešavati od 1° pa da se dodaje inkrement po 1° i tako do 360° (dodaje se +1 step).
------------------
Ili kada bih se napravio program da se samo unese broj zuba sa frezera, i da Arduino odradi dijeljenje čitavog kruga na toliko dijelova i da se za toliko pomjera, i tako završi čitav krug u nekoliko podioka. Slično kao narezivanje zubaca za zupčanike, na svaki pritisak tastera on okrene za određeni broj stepeni.?
Kao na ovom snimku:
.
Makso, ajd ovako. Ja bih prvo video koji su mi uglovi na glodalima koje oshtris. To znaci, da se vidi da li je ugao uvek ceo broj kao npr. 1 stenep ili 2 stepena....ili ugao zuba moze da ima i decimalni deo, npr. 1,2 stepena ili 1,3 stepena.... Ako ima decimalni deo, znaci da korak stepera mora da se podeli nekom redukcijom na 1/10 stepena ili 1/5 stepena, zavisi od uglova na glodalima. Time dobijas bolju rezoluciju stepera i naravno redukcijom dobijas vecu snagu. Kada se redukcijom podeli korak stepera onda ti je jedan puls sa Arduina taj jedan korak. 
Onda kod vec ide lakse i moze da se izvede, da se unese broj zuba glodala i da po tome posle radi. Ceo krug ima 360 stepeni, tako da delis 360 sa brojem zuba i dobijes ugao zuba. Onda taj dobijeni broj delis sa uglom tvog koraka steper motora. Npr najmanji ugao koj steper pravi je 1/2 stepena. Testera ima 36 zuba, tako da kada podelis 360 sa 36 dobijes 10 stepeni po zubu testere. Tih 10 stepeni delis sa 0.5 (tvojim najamnjim uglom stepera,tj.jednim korakom) i na taj nacin dobijas broj koraka (pulseva) za ugao od 10 stepeni, tj. za jedan zub na testeri. Znaci za testeru sa 36 zuba, imao bi 20 pulseva sa Arduina da bi dobio okretanje za jedan zub, ako ti je redukcija smanjila korak stepera sa 1.8 stepeni na 0.5 stepena. S tim sto tebi ne treba okretanje za 1 zub vec pretpostavljam za 2 zuba, tako da bi onda tih 20 pulseva samo mnozio puta 2. 
Imao bi sve skupa dve promenljive, jednu za broj pulseva sa Arduina i jednu za broj zuba na glodalu (testeri).

BROJ_PULSEVA =( (360 / BROJ_ZUBA_GLODALA) / UGAO_JEDNOG_KORAKA_STEPERA)*2

Promenljive su samo BROJ_PULSEVA i BROJ_ZUBA_GLODALA. Konstanta je UGAO_JEDNOG_KORAKA_STEPERA i naravno 360.
Puta 2 na kraju je da bi ostrilo svaki drugi zub, mada i to moze da bude promenjiva ako je potrebno da se svaki zub ostri pod istim uglom.

Broj zuba glodala (testere) mozes da inkrementriras ili dekrementiras pomocu ona dva tastera ili preko obicne tastature. U svakom slucaju to je prost kod i moze vrlo lako da se izvede.
Najbitnije prvo da se vidi da li su uglovi na testeri celi brojevi ili realni brojevi, da bi se utvrdilo kakva redukcija treba. Posle toga sve je vrlo prosto. Smile 
Reply
#82
@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?
Reply
#83
(03-13-2017, 06:05 PM)Makso Wrote: @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?
 
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! Smile
Reply
#84
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.
Reply
#85
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.
Reply
#86
(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.  Smile
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. Smile
 
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.... Smile
Reply
#87
(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.

U pravu si za matematiku, eto nije mi palo na pamet uopste.  Smile
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. Smile
 
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.... Smile

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.
Reply
#88
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
Reply
#89
Treba obratiti paznju na to da na raznim Arduino boardima samo odredjeni digitalni pinovi imaju mogucnost interrupta..

https://www.arduino.cc/en/Reference/attachInterrupt
Reply
#90
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/clearpat...vo-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! Smile

https://www.youtube.com/watch?v=3TzNQnSKO_8

https://www.youtube.com/watch?v=Dwik-W6kRa8
Reply
#91
^^
Ovo motorce ima opake modove rada, recimo ovo

https://www.youtube.com/watch?v=PsCY2qx6dK8
Reply
#92
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
Reply
#93
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 Smile
Reply
#94
Kada bi Xinje imao SW podrsku kao ovi ClearPath to bi bila druga prica, jel postoji nesto slicno za Xinje, gotovo?
Reply
#95
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)...
Reply
#96
(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=&...8w&cad=rja
Reply
#97
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!
Reply
#98
Kod nas na primer:
http://www.sah.rs/Frekventni_I_Servo/MS-...-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/Alu...stors.html

Radi se o pogonu sa 1500/2000RPM i 15/30Nm (2124 oz-in/ 4248 oz-in).
Reply
#99
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.
Reply
Ima neka biblioteka PID Autotuning za Arduino, to moze lako da se proba?
http://playground.arduino.cc/Code/PIDAutotuneLibrary
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)