Posts: 1.517
Threads: 19
Joined: Apr 2013
Reputation:
211
03-12-2017, 12:35 AM
(This post was last modified: 03-12-2017, 12:36 AM by Makso.)
Trebao bih povezati Arduino sa stepper-om + LCD + rotary encoder + senzor/prekidač.
Arduino bi kontrolisao stepper preko drivera, a Arduinu bih trebao encoder zadati određenu mjeru za koliko bi se stepper trebao okrtenuti, a na LCD-u da piše dužina u mm koju bi stepper trebao prijeći. Ala sam ga zamrsio.
Imam na nekoj mašini (brusilica) sa tocilom koja oštri razne noževe, umjesto ručnog zakretanja alata bi postavio stepper da zakreće automatski, to tocilo ima jednu osu (da je nazovem X osa) po kojoj se šta naprijed nazad i tako oštri/brusi, na krajevima bi trebalo postaviti mikro prekidače ili induktivne senzore, koji bi dali jedan impuls Arduinu da zakrene stepper kada god toilo na X osi dođe do kraja i tako u krug dok se proces ne završi.?
A preko encodera bi se podešavao korak steppera za koliko stepeni bi se trebao okrenuti, a da se zadata vrijednost ispisuje na LCD-u, e sad da li vršiti konverziju u milimetre ili stepene?
Znači, kada jedan od prekidača da impuls Arduinu on zakrene stepper za određen proj koraka/stepeni koji je prethodno podešen preko encodera, i zadata vrijednost piše na LCD-u. To bi bio čitav proces i tako u krug.
Možda bih mogao staviti i dva tastera umjesto encodera pa da se njima mijenja vrijednost.?
Posts: 854
Threads: 6
Joined: Feb 2017
Reputation:
665
@Makso
Postoje L297 drajveri za stepere, prodaje ih neki lik na Kupujemprodajem, ja sam ih ranije uzimao od njega. Radio sam s tim kolom i Arduinom Nano, vrlo prosto se upravlja. Kao i svaki drajver, ima STEP, DIRECTION, ENABLE. Za svaki step motora pustas po jedan puls sa Arduina na STEP pin kola L297, a DIRECTION pin funkcionise tako da ako je na LOW(GND) vrti u jednom smeru, a ako je na HIGH(+5V)vrti u drugom smeru. Kolo je dobro jer ima regulaciju struje motora sto je mnogo bitno. Meris struju preko jednog shant otpornika i imas mali trimer kojim nastelujes referencu struje za tvoj odredjeni motor. Imam negde shemu celog kola koje sam pravio i mogu da je nadjem i da ti posaljem. Ja sam se maalo igrao pa sam izmedju ARDUINA i L297 stavio optokaplere da bi ih izolovao jer sam upravljao celim kolom preko kompjutera. Na izlaze L297 sam stavio Mosfet drajvere i 4 jaka mosfeta, da bih mogao da vozim i jace motore. Vrlo lepo to radi. Motore mozes da nadjes iz onih velikih shtampaca, oi na sebi imaju cak i prenosni mehanizam sa nazubljenim kaisem, tako da mozes da dobijes i manje korake. Ja sam ovde u Kragujevcu otisao u firmu koja se bavi popravkom shtampaca i pitao za motore, oni mi dali nekoliko motora i plus mi dali ceo jedan ogroman shtampac da rasturim i uzmem sta mi treba.
Sto se tice mikroprekidaca koj ce da daje signal kada da se okrene motor, mozda bolje da stavis induktivni senzor, zbog prljavstine i prasine. Inace koliko kapiram, tebi oshtrilica treba svaki put da okrene testeru ili sta vec oshtris za dva koraka, da vi svaki drugi zub ohtrio jer se razlikuju uglovi zuba.
I da, sada sam se setio, STEPER motori postoje BIPOLARNI i UNIPOLARNI, tako da moras da znas koj steper koristis jer se razlicito upravljaju!
Evo ti nekih referenci:
http://www.st.com/content/ccc/resource/t...003774.pdf
http://www.st.com/content/ccc/resource/t...003803.pdf
Posts: 1.517
Threads: 19
Joined: Apr 2013
Reputation:
211
03-12-2017, 01:44 PM
(This post was last modified: 03-12-2017, 01:44 PM by Makso.)
Ja sam mislio koristiti TB6600 gotov drajver da se ne ganjam sada sa pločicama i lemljenjem puno, mislim ovo mi je jednostavnije, a stepper bih kupio neki iz NEMA17 serije (bipolarni), sad ne znam da li bih stepper montirao na neki reduktor ili direktno, uglavnom on nema nikakvog velikog tereta da okreće, sve se to može lagano rukom okretati.?
Riješio sam i taj problem, koristiću onda induktivne senzore.
Sad mi ostaje da skompletiram kod, ali kako bi uradio da imam što preciznije korake i da to mogu mijenjati putem dva tastera ili encodera?
Posts: 1.517
Threads: 19
Joined: Apr 2013
Reputation:
211
Najsličnije je ovome:
.
Samo ja trebam encoderom ili tasterima odrediti koliko koraka da napravi.
Posts: 854
Threads: 6
Joined: Feb 2017
Reputation:
665
@Makso
Arduino mora da pusta pulseve steper drajveru. Koliko pusleva Arduino pusti toliko ce steper da napravi koraka. Znaci mozes da napravis jednu promenljivu koju ces tasterima da inkrementiras i dekrementiras, u stvari ona ce da sadrzi broj pulseva. Tako ces moci da menjas broj koraka steper motora. Imas PLUS taster kojim povecavas broj koraka stepera i MINUS taster kojim smanjujes. E sada, kod stepera postoje i polustevoji pa cak i jos nizi podeoci, tako da mozes da dobijes jos manje uglove zaokretanja osovine motora. Mislim da ti je to dovoljno precizno i da mozes da izvuces korake za testere i alate koje ostris. Standardni steperi imaju 200 koraka po krugu, to je 1.8 stepeni po koraku. Preko redukcije ili polukoraka sve to mozes jos da smanjis i da dobijes vecu snagu stepera, mada ovi NEMA17 motori su dosta jaki, tako da mislim da nema potrebe za redukcijom.
LCD biblioteka postoji i jako je prosta tako da to nije problem. Ocitavanje tastera isto nije problem, i to radis preko externih interapta.
Ocitavanje induktivnog senzora isto nije problem, bukvalno isto ide kao tasteri. Mozda bi seznor morao da se veze preko nekog Shmit trigera ali to vec mora da se proba, da ne bi pravio lazne signale zbog motora oshtrilice ili nekih drugi smetnji.
Trebala bi da se vidi samo frekvencija pulseva koje bi arduino slao steper drajveru, znam da ne sme da bude mnogo velika zbog motora, a i vrv drajver ima neka ogranicenja.
Mozes cak da imas neke konstante sa nekim standardnim koracima alata koje ostris, i onda samo da izaberes koj ces korak. Ako postoje neki standardi za korake kod alata (a vrv postoje) napravis konstante za sve te korake i onda ih samo u meniju izaberes. Moze to jako fino da ispadne i voleo bih da to uradis, svidja mi se ideja. Ako treba pomoc, tu sam.
Posts: 1.966
Threads: 29
Joined: Jan 2015
Reputation:
669
03-12-2017, 09:43 PM
(This post was last modified: 03-12-2017, 09:49 PM by Želja.)
Makso,
Iz tvojih zahteva nije baš najjasnije da li taj nosač alata koji pokreće step motor radi linearno ili rotaciono kretanje.
Koliko sam ja ukapirao - treba ti rotaciono kretanje. U tom slučaju na displeju bi bilo pametnije ispisivati poziciju u stepenima.
Gimba ti je dobro predočio da zadavanje (u stepovima. odnosno impulsima sa strane arduina) možeš raditi sa tasterima
koji bi bili kršteni sa UP i DOWN, odnosno svaki od njih bi radio uvećavao ili smanjivao neku promenljivu za odredjeni broj stepova
( ne moraš samo po 1 step, može recimo +10 stepova na svaki pritisak tastera ili već koliko ti odgovara) možeš čak dodeliti i promenljivu
za tu namenu.
Dalje, moment step motora NEMA17 (govorim u holding torque) nije veći od nekih 30-40Ncm
Moraš definisati kada je tebi potreban i koliki moment za svo vreme kretanja motora ili samo dok motor stoji.
Holding torque se odnosi na moment step motora DOK STOJI u mestu.
Steper od 30Ncm u ukočenom stanju treba na polugi dužine 100mm koja je direktno jednim krajem fiksirana na rotor
na drugom kraju te poluge da drži teg odd 300 grama. Konverziju jedinica imaš na: http://www.numberfactory.com/nf_torque.html
Slabašni su NEMA17 motori, nekad su se koristili u starim 5,25 flopi jedinicama a danas pretežno u malim 3D štampačima ...
Dalje, kada steper počne da se obrće , moment rapidno opada.
U Full stepu ( 200 koraka) svaki steper je najjači, u 400 koraka je već slabiji a što ideš dalje u mikrosteping
moment postaje katastrofalno mali. Evo odnosa broja koraka i izlaznog momenta u odnosu na moment razvijen u Full stepu:
200: 100.00%
400: 70.71%
800: 38.27%
1600: 19.51%
3200: 9.80%
U mikrostepingu 1:16 imaš samo 10% momenta koji postoji u full stepu.
Šta ti ovo govori ? - okani se mikrostepinga i ako ti treba finija podela idi na mehaničku redukciju.
Tako će motor ostati u Full stepu gde je i najjači i NAJBRŽI , a ti ćeš imati finiju podelu.
Brzina će biti umanjeno srazmerno stepenu redukcije, a moment isto toliko puta uvećan
pa ti sad vidi šta ti je bolje ?
@Gimba
Što se tiče očitavanja sporih spoljašnjih signala ( Tasteri, induktivni prekidači ) to se NE RADI pomoću interapta.
Interapti su namenjeni detekciji veoma brzih signala i to samo podizanjem flega u interaptu, a kasnije se u programu vrši obrada.
Taster i senzore treba čitati direktno iz main loop-a periodičnim pozivanjem nekog potprograma koji je tome namenjen.
Neće te spasiti Šmit triger od smetnji koje se mogu javiti ( a sigurno će se javiti !)
To rešavaš tako što postaviš optokapler koji otvaraš nekim senzorom ali sa Low Pass filtrom na ulazu optokaplera.
Taj filter čini predotpor optokaplera (koji već imaš) i kondenzator od koju desetinu nF (koji ćeš dodati paralelno predajnoj LED od optokaplera).
Izlazni pull-up otpor (na kolektoru tranzistora optokaplera) treba biti mali , recimo 1kohm.
Takav sklop će uspešno "odseći" smetnje i primenjuje se kod relativno sporih ulaznih signala ( tasteri, krajnji senzori ...)
dok kod brzih signala (taho generator, inkrementalni enkoder itd mora ipak malo drugačije ..)
***
Samo napred
Pozz
Posts: 1.244
Threads: 10
Joined: Apr 2015
Reputation:
509
(03-12-2017, 09:43 PM)Želja Wrote: Što se tiče očitavanja sporih spoljašnjih signala ( Tasteri, induktivni prekidači ) to se NE RADI pomoću interapta.
Interapti su namenjeni detekciji veoma brzih signala i to samo podizanjem flega u interaptu, a kasnije se u programu vrši obrada.
Taster i senzore treba čitati direktno iz main loop-a periodičnim pozivanjem nekog potprograma koji je tome namenjen. Zeljo,
izvini, ali ovo uopste nije tacno. Tastere upravo UVEK treba citati pomocu interapta. Samo na taj nacin mozes da uradis debounce, koji je neophodan. U interaptu mozes da setujes flag kada je taster aktivan, pod uslovom da je prosao debounce, a u main loop ispitujes taj flag. Ako u main-u radis i debounce, zakucavas procesor, sto nije dobro.
(03-12-2017, 09:43 PM)Želja Wrote: Neće te spasiti Šmit triger od smetnji koje se mogu javiti ( a sigurno će se javiti !)
To rešavaš tako što postaviš optokapler koji otvaraš nekim senzorom ali sa Low Pass filtrom na ulazu optokaplera.
Taj filter čini predotpor optokaplera (koji već imaš) i kondenzator od koju desetinu nF (koji ćeš dodati paralelno predajnoj LED od optokaplera).
Izlazni pull-up otpor (na kolektoru tranzistora optokaplera) treba biti mali , recimo 1kohm.
Takav sklop će uspešno "odseći" smetnje i primenjuje se kod relativno sporih ulaznih signala ( tasteri, krajnji senzori ...)
dok kod brzih signala (taho generator, inkrementalni enkoder itd mora ipak malo drugačije ..)
***
Samo napred
Pozz I spore i brze signale mozes uspesno da detektujes uz pomoc schmit-trigger ulaza. Samo je pitanje logike. Ti pricas o galvanskoj izolaciji. Moze RC filter da se postavi i na ulaz ST kola.
Sto se tice brzih signala, ista je prica kao i kod sporih, s'tim sto se onda koriste brza kola i brzi ulazi MCU-a. Nema tu prevelike filozofije. Ne treba koristiti open kolektor, vec iskljucivo totem-pole, itd.
Pozdrav
Posts: 854
Threads: 6
Joined: Feb 2017
Reputation:
665
03-12-2017, 10:35 PM
(This post was last modified: 03-12-2017, 10:40 PM by gimba.)
@Zelja
Zeljo, ranije sam radio ocitavanje tastera na PIC mikrokontroleru bez interapta. To me dosta zezalo jer se desava da je program usao u neku petlju i onda jednostavno ne ocita taster kada je pritisnut. Zato sam napomenuo da treba da ide preko interapta. Isto tako treba da ide i senzor preko interapta jer taj senzor daje najbitniji signal u ovom kolu i on ne sme da bude preskocen.
Sto se tice filtera, hvala za to! Nije mi palo na pamet mada bih vrv probom kola dosao do toga. U svakom slucaju bih stavio Shmit triger, a posle bih se zezao oko detalja. Sto se tice galvanske izolacije, potrebna je jer bih logiku svu odvojio od motora.
Ovo oko obrtnog momenta motora je dosta bitno, znam da im pada moment sve sto vecom brzinom rade i u mikrostepovima. Zato sam malopre naponeuo one reduktore sa nazubljenim kaisem koje moze da nadje za dzabe, iz shtampaca. Nisam se odavno igrao sa steperima pa sam dosta stvari i zaboravio. Nov sam na ovom forumu i bas mi pomazete da naucim dosta stvari i volim ove kreativne razgovore. Hvala na razmeni misljenja.
@Vojin
Vojine, sta je totem-pole?
Posts: 1.966
Threads: 29
Joined: Jan 2015
Reputation:
669
03-12-2017, 10:39 PM
(This post was last modified: 03-12-2017, 10:56 PM by Želja.)
U main loop nikada ne ostajem dok se neki proces ne završi, jer bi tako naravno zakočio program,
već periodično prolazim kroz njega - tako da se debauns tastera veoma uspešno radi i bez interapta.
A interapte korisrtim za druge stvari.
Šmit triger neće odseći smetnju, već će samo stvoriti pravilan četvrtast izlazni TTL impuls u širini koja je jednaka širini smetnje.
Znači imamo lažno okidanje.
Ne mora optokapler, ali je vrlo zgodno da postoji galvanska izolacija, jer i kroz masu "protrči svašta" !
Low Pass je bitan.
http://www.elitesecurity.org/t482695-1-O...kontroleri
Pozz
Posts: 1.966
Threads: 29
Joined: Jan 2015
Reputation:
669
03-12-2017, 10:53 PM
(This post was last modified: 03-12-2017, 10:57 PM by Želja.)
I kroz optokapler 6N137 "protrči svašta" ako nema low pass na ulazu, a ima u sebi integrisan šmit triger.
Čak i da mu dodamo totem pole, imaćemo potpuno istu situaciju pre i posle totem pole.
Ne vredi lečiti posledicu, već uzrok !
Pozz
Posts: 1.244
Threads: 10
Joined: Apr 2015
Reputation:
509
Debounce moze da se radi na 101 nacin. Vrhunac programiranja MCU-ova se ogleda upravo u maksimalnom koriscenju interapta, a main skoro prazan. To je vrhunac koji moze da se dostigne. Ja sam ultra veliki protivnik debaunce-a u main. U programu uglavnom imas neki TMR interapt. Njega mozes da iskoristis za tastere.
Smit triger se koristi da imas ostru ivicu na ulazu. Sto se tice ST i smetnji, sve zavisi kakva je smetnja. Ako je smetnja takva da je u marginama okidanja ST-a, onda na izlazu ST-a nikada nece da se pojavi impuls. To i jeste poenta ST-a (komparator sa histerezisto) da ne okida stalno, vec moraju da se predju definisane granice.
Low-pass filter se stavlja na ulaze iz vise razloga. Jedan je da odsece visokofrekvencijske promene signala na ulazu (da ga malo uoblici), a moze da se koristi i kao ESD zastita. R sluzi kao ogranicavac struje, a C ce da pokupi kolicinu naelektrisanja koja je dovedena i da zastiti ostatak elektronike.
Pri koriscnjeu opto-kaplera mora se voditi racuna o brzini signala koji se izoluje i prema tome se izabrati opto-kapler.
Totem-pole je standardni izlazi stepen digitalnih kola koji se sastoji od dva tranzistora (jedan iznad drugog i tako podsecaju na toteme, pa je zbog toga i dobio ime totem-pole). Iza ta dva tranzistora se nalazi treci koji upravlja radom ta dva. Uvek je aktivan jedan koji radi na granici zasicenja i zbog toga je taj izlazni stepen ultra brz. Problem kod totem pola je taj da kada se vrsi prebacivanje sa logicke nule na logicku jedinicu (jedan se ukljucuje, a drugi iskljucuje), oba tranzostora su kratkotrajno ukljucena. Ovo je zbog postojanja manjinskih nosioca u bazi tranzistora koji se iskljucuje, pa je onda i vreme iskljucivanja duze od vremena ukljucivanja. Ovo kratkotrajno provodjenje ima za posledicu da povuce struju od izvora i samim tim da obori napon napajanja samog kola. Zato se kod digitalnih kola i koriste kondenzatori za rasprezanje (jedan od razloga).
Posts: 854
Threads: 6
Joined: Feb 2017
Reputation:
665
03-12-2017, 11:03 PM
(This post was last modified: 03-12-2017, 11:04 PM by gimba.)
@Vojinilic
Hvala Vojine,
skontao sam od prilike kao push-pull samo sto ne radi u linearnom regionu vec u zasicenju.
@Zelja
Hvala Zeljo za link i za dobre savete.
Posts: 1.966
Threads: 29
Joined: Jan 2015
Reputation:
669
(03-12-2017, 10:55 PM)vojinilic Wrote: Vrhunac programiranja MCU-ova se ogleda upravo u maksimalnom koriscenju interapta, a main skoro prazan. To je vrhunac koji moze da se dostigne.
Onda sam ja u godinama u debeloj zabludi ...
Mene su učili da u interaptima boravim što kraće, i koristim ih samo za brze spoljašnje signale.
A imao sam vrlo sposobnog učitelja !
Posts: 1.244
Threads: 10
Joined: Apr 2015
Reputation:
509
(03-12-2017, 11:06 PM)Želja Wrote: (03-12-2017, 10:55 PM)vojinilic Wrote: Vrhunac programiranja MCU-ova se ogleda upravo u maksimalnom koriscenju interapta, a main skoro prazan. To je vrhunac koji moze da se dostigne.
Onda sam ja u godinama u debeloj zabludi ...
Mene su učili da u interaptima boravim što kraće, i koristim ih samo za brze spoljašnje signale.
A imao sam vrlo sposobnog učitelja !
Lose sam se izrazio. Nisam mislio da program treba da ti bude u interaptima. Logika naravno ide u main. Vise sam mislio na stvari koje se ticu brojaca, komunikacija, deounce itd. Sve te sistemske stvari raditi u interaptima i napraviti takav sistem da se interapti medjusobno ne kolju. To je vrhunac.
Jedno pisem, a drugo mislim, pa me onda ljudi cesto ne razumeju.
Lepo si to rekao, sto krace otajati u int.
Posts: 1.966
Threads: 29
Joined: Jan 2015
Reputation:
669
Duguješ pivo
Posts: 1.244
Threads: 10
Joined: Apr 2015
Reputation:
509
(03-12-2017, 11:13 PM)Želja Wrote: Duguješ pivo
Gajbica!!!!
Posts: 1.517
Threads: 19
Joined: Apr 2013
Reputation:
211
Fino ste se raspisali...
@Ž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:
.
Posts: 8.729
Threads: 138
Joined: Apr 2013
Reputation:
3.629
03-13-2017, 12:49 AM
(This post was last modified: 03-13-2017, 01:03 AM by mikikg.)
Drustvo samo vas pratim ... u nekoj sam neopisivoj guzvi ovih dana ...
Samo sam ovo hteo da dodam, Arduino tj MCU ATmega328 ima SAMO dva hardwerska interapta! Pa sto mislite da sam se onoliko raspisao oko STM32F103C8 koji ima interapte na svim nozicama!
Dalje, to sa steperom, jel' vam "zao" da potrosite jedan MCU recimo koji bi se samo steperom bavio?
Uzmete lepo odvojite jedan Arduino samo za to, spominjao sam GRBL, to je motion controler koji se upravlja preko G-CODE, njega spojite na jos jedan Arduino (opet STM32duino Blue Pill spominjem koji ima da se kupi za 3-4E) i uvezete ga sa glavnim kontrolerom preko seriske veze.
Dakle jedan (master) MCU se bavi sa LCD, tasterima, engkoderom i ostalim potrebnim stvarima dok je drugi zaduzen samo za stepper i njemu lepo kazete "idi napred x.y mm" (naravno preko G-CODE-a) i sve moze da se vrlo elegatno resi za cenu jednog dodatnog ATmega328 koji izvrsava GRBL firmware. Imacete savrsenu kontrolu nad steperom sa tim GRBL (imacete funkcije za ubrzavanje i usporavanje, ima i interpolaciju koja moze da zatreba kod vise osa itd), i to ne na jednom nego citavih 3 stepera moze to cudo da gura.
Takodje ovo je korisno da se malo dublje udje u CNC problematiku, verujte mi znacice vam puno!
Posts: 1.244
Threads: 10
Joined: Apr 2015
Reputation:
509
(03-13-2017, 12:49 AM)mikikg Wrote: Drustvo samo vas pratim ... u nekoj sam neopisivoj guzvi ovih dana ...
Samo sam ovo hteo da dodam, Arduino tj MCU ATmega328 ima SAMO dva hardwerska interapta! Pa sto mislite da sam se onoliko raspisao oko STM32F103C8 koji ima interapte na svim nozicama!
Miki,
ATmega ama na svim nozicama imterapte, a me samo dva. Ima dva int-a koji su asinhroni interapti. Ostali su interrupt on change. Kod atmela je to PCINT.
Pozdrav
Posts: 8.729
Threads: 138
Joined: Apr 2013
Reputation:
3.629
Na asinhrone externe sam i mislio kada sam poredio ATmega sa STM32.
Quote:Most Arduino boards have two external interrupts: numbers 0 (on digital pin 2) and 1 (on digital pin 3).
The Arduino Mega has an additional four: numbers 2 (pin 21), 3 (pin 20), 4 (pin 19), and 5 (pin 18).
On the Maple (STM32), you don’t have to remember which interrupt number goes with which pin – just tell attachInterrupt() the pin you want.
|