Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Arduino - tutorijali, pitanja, primjeri i projekti
(08-10-2017, 02:44 PM)Macola Wrote:
(08-09-2017, 02:31 AM)mikikg Wrote: BTW: Oko price sa FRAM i Dalas RTC/NVRAM za potrebe cuvanja pozicije sa enkodera, da li ste znali da STM32 ima "backup domain" tj pored Real Time Clock koji se napaja sa baterije (Vbat) ima dodatno i 20 bajtova NV memorije (84 bajtova za XL seriju kontrolera), prakticno ceo Dalas-ov chip vec u sebi? : )
Dodatno ima mehanizam za "zakljucavanje" tih memoriskih lokacija kako bi se predupredili problemi sa slucajnim pisanjem posle reseta ...
Pise sve lepo u Reference Manual, onaj dokument od 1000+ strana ...

Treba videti (kad si već na tom delu uputstva) koliki je moguć broj upisa u tih 20 NV bajta.

Mozda nisam lepo to objasnio, u pitanju je SRAM sa baterijom pa to dodje kao NVRAM.
Dakle parce HW-a unutar STM32 koje se napaja iz posebnog izvora preko Vbat pina.
Nisam zapamtio tacno kolika je potrosnja, mislim da je <10uA za tu memoriju + RTC.
Posto je SRAM u pitanju, broj upisa je prakticno neogranicen.
Reply
Inace trenutno iscitavam svu dokumentaciju oko STM32F1 koja ima na ST-ov sajtu ...
Ima mnogo sitnih detalja i vrhunskih caka u tom MCU.
Mnooooogo je dobro osmisljena cela ta ARM arhitektura i napokon su uspeli da gomilu stvari standardizuju, i vezano za interni HW i vezano za SW i razvojno okruzenje.

CubeMX i sve one StdPerif su iskreno "sviranje", ARM je sve to lepo organizovao i raspodelio po bit-banding regionima/adresama gde su moguce "atomske" operacije (read-modify-write) na nivou bita preko 32bitnih registra, otuda potice onih 4GB linearnog adresnog prostora.
Header fajlovi za sve te registre i pojedinacne bitove "ne trose memoriju", oni sluze nama samo da ne pamtimo fizicke adrese nego ih pamtimo po imenima.

ARM takodje lagano ali sigurno preuzima primat i u 8bitnim aplikacijama gde je cena kontrolera kriticna, za to su uveli Cortex M0/M0+ seriju koja po ceni parira 8bitnim MCU ali sa daleko vecim mogucnostima, navescu samo nekoliko vrlo bitnih a to je mogucnost hendlovanja SW gresaka, debug i trace opcije, integrisan bootloader itd.

Ukratko batalite PIC i ostake 8bit MCU i predjite na ARM! Smile
Reply
(08-10-2017, 04:01 PM)mikikg Wrote: Inace trenutno iscitavam svu dokumentaciju oko STM32F1 koja ima na ST-ov sajtu ...

Ti da se zabodeš u neku debelu ladovinu pod drvo i uživaš u pogledu i pivu... A posle da nam prepričavaš šta si vid'o!
Pusti ARM. Da je bio dobar ne bi ih kupila ona japanska banka Smile
Reply
Iz ladovine i citam ???????? Smile
Reply
(08-10-2017, 03:28 PM)mikikg Wrote:
(08-10-2017, 02:44 PM)Macola Wrote:
(08-09-2017, 02:31 AM)mikikg Wrote: BTW: Oko price sa FRAM i Dalas RTC/NVRAM za potrebe cuvanja pozicije sa enkodera, da li ste znali da STM32 ima "backup domain" tj pored Real Time Clock koji se napaja sa baterije (Vbat) ima dodatno i 20 bajtova NV memorije (84 bajtova za XL seriju kontrolera), prakticno ceo Dalas-ov chip vec u sebi? : )
Dodatno ima mehanizam za "zakljucavanje" tih memoriskih lokacija kako bi se predupredili problemi sa slucajnim pisanjem posle reseta ...
Pise sve lepo u Reference Manual, onaj dokument od 1000+ strana ...

Treba videti (kad si već na tom delu uputstva) koliki je moguć broj upisa u tih 20 NV bajta.

Mozda nisam lepo to objasnio, u pitanju je SRAM sa baterijom pa to dodje kao NVRAM.
Dakle parce HW-a unutar STM32 koje se napaja iz posebnog izvora preko Vbat pina.
Nisam zapamtio tacno kolika je potrosnja, mislim da je <10uA za tu memoriju + RTC.
Posto je SRAM u pitanju, broj upisa je prakticno neogranicen.

Aha. Mislio si na onaj sektor koji se nalazi u RTC modulu.
Ja mislio da si prokljuvio nešto na drugom mestu.

Privatno mi se baterija ni malo ne sviđa i imam je samo na par sopstvenih aplikacija, gde je korisnik eksplicitno tražio realno vreme.
Baterija je ono što šalje u groblje mnogo dobro konstruisanih mašina, koje se polovne prodaju kod nas.
Onda to stoji nekih xy godina i izgubi inicijalne parametre (jbmliga što ih smestaju u ram pod baterijom, osim ako nije baš namerno). Onda potražiš gde to možeš da nađeš i otkriješ da je dotična fabrika na primer bankrotirala pre 15 godina i slično...
Reply
Macola, naravno i ja sam protiv baterija, sponenuo sam onako kao opciju, i dalje je FRAM zakon!
Baterija samo za RTC a i to ce verovatno uskoro da prevazidju sa "power harvesting" jer se sad prave razne MEMS (mikro-elektro-mehanicke) masine koje mogu da izvuku neku mikro-energiju iz raznih oblika (mehanicke vibracije, promena magnetnog polja, promena temperature, EM zracenje i slicno) i sa tim da imaju dovoljno energije makar za te satove.
Reply
Ja stalno razmišljam šta bih mogao odraditi, i odlučio sam da idem na remen koji će biti fiksan a na njemu šetati enkoder sa određenom remenicom.
I onda u jednom momentu proleti mi slika kroz glavu, da bih onda mogao tu i postaviti višeobrtni potenciometar sa remenicom od 10cm obima i tako da bih dobio 1000m na 10 krugova remenice a i potenciometar je sa 10 obrtaja, a ovde na makazama je hod manji od 1000mm, tu bih izbjegao sve probleme što me muče sa memorijom, ali opet neko je elegantnije i bolje i ozbiljnije riješenje sa enkoderom?
Reply
(08-10-2017, 09:39 PM)Makso Wrote: Ja stalno razmišljam šta bih mogao odraditi, i odlučio sam da idem na remen koji će biti fiksan a na njemu šetati enkoder sa određenom remenicom.
I onda u jednom momentu proleti mi slika kroz glavu, da bih onda mogao tu i postaviti višeobrtni potenciometar sa remenicom od 10cm obima i tako da bih dobio 1000m na 10 krugova remenice a i potenciometar je sa 10 obrtaja, a ovde na makazama je hod manji od 1000mm, tu bih izbjegao sve probleme što me muče sa memorijom, ali opet neko je elegantnije i bolje i ozbiljnije riješenje sa enkoderom?

Naravno da može ako se zadovoljavaš tolerancijom takvih potenciometara.
Obično su oni koji spadaju među skupe i odlične, sa toleranciom od 0.5%.
Prevedeno to je greška od 5mm po metru i zavisi od temperature, vlage...
Na boljima piše i stabilnost linearnosti i to je obično lošija cifra od ove prve, što ti tek pravi problem u opsegu od tih 1000mm.

Čini mi se da nisi baš najbolje razumeo šta sam ti pisao.

Relativni (inkrementalni) enkoder je veoma lako očitavati bilo kojim pa i najprostijim MCU.
Teže je čitanje sve četiri ivice ali to ti nije neophodno za makaze sa dovoljnom rezolucijom od recimo 0.1mm (koju sa potenciometrom ni pomoću crtanog filma ne možeš postići). Biće savršeno dovoljno očitavanje jedne ivice i smera.
------------------------------------------------------
Sada pažljivo čitaj ovo što pišem jer ću ti saopštiti kompletan "recept" za takvo merenje sa delovima tipičnog koda u C jeziku.  ("ovo govorim samo jedan put" - iz serije Alo, alo :- )

Već sam radio takve stvari i na abkant presama i na makazama.


Pošto nisi baš precizno opisao mehanizam koji pokreće vretena, dopustiću sebi da pretpostavim jedan od tipičnih mehanizama tog tipa kod Jeljšingrad makaza koje sam viđao.

Dakle: zavisno od starosti i tipa makaza, elektromotor sa reduktorom iz kog izlazi lančanik ili zupčasta remenica, na koju je spregnut ili lanac ili zupčasti kajiš sa relativnim španovanjem pomoću kog se može namestiti paralelnost graničnika, tj. faze oba vretena.
Motor je jednobrzinski kod najstarijih mašina, dvo ili tro-brzinski kod tipova srednje starosti, ili pogonjen frekventnim regulatorom kod novijih tipova.
Naravno u svim slučajevima je obezbeđena promena smera motora.
Kada je prisutan elektromotorni pogon, obavezno su prisutni i limit prekidači koji sprečavaju odlazak ose preko dozvoljenih granica, koje bi mogle zaglaviti ili oštetiti vretena. Dodaš još jedan blizu jednog od krajnjih, na strani koja ti odgovara i taj će ti biti "home".

1)
Prva i najbezbolnija solucija (osim možda ekonomskog dela te solucije, ali je to pitanje ako računaš i potrošeno vreme) je kupiti neki od "pametnih" brojača koji mogu čitati i skalirati inkrementalni enkoder. Takva solucija ti obezbeđuje završetak zadatog posla u okviru od nekoliko sati, jer se najviše svodi na mehaničko sprezanje inkrementalnog enkoder, malo vezivanja žica i programiranje gotovog "pametnog" brojača.
Na primer, možeš upotrebiti neki od Omronovih countera iz serije  H7xx, od kojih većina ima mogućnost priključenja inkrementalnog enkodera, preskaler za kalibraciju mere u željenu skalu sa decimalnim mestom koje izabereš.
Naravno da imaju i reset input koji služi za nulovanje. Da ne kopam po Omron uputstvima, jednostavno se obratiš nekom od Omron zastupnika koji je najbliži tvom gradu i tražiš im brojač koji podržava inkrementalni enkoder. Njihov inženjering će ti odgovoriti odmah na zahtev i isporučiti odgovarajući brojač.
Takvih brojača ima i od drugih proizvođača svakako...

Ako izabereš taj put, onda na tu sajlu koja sada pokreće mehanički brojač spregneš spojnicom inkrementalni enkoder i  potom ga priključiš na pametni brojač. Brojaču nakalibrišeš preskaler tako da za pređeni put od 1000mm pokaže na primer 1000,0 (rezolucija 0.1mm).  
Inkrementalni enkoderi (čak i oni jevtini) bez problema podržavaju i do 6000 RPM tako da sigurno nećeš imati problema sa brzinom okretanja te sajle. "Pametni" brojači obično podržavaju do bar 10KHz impulsa na ulazima.
Naravno, ručnim okretanjem (delovanjem na ventilator tog motora u isključenom stanju, a kočnici dovedeš napon da ti oslobodi motor...) saznaš koliko krugova treba za 1mm ili slično tome, ili pogledaš koliko krugova okrene sajla za jedan milimetar ili neku drugu poznatu meru, tako što skineš taj mehanički i okrećeš ga ručno.
Onda izabereš enkoder koji nema preterano veći broj impulsa od potrebnog, da ti frekvencija ne pređe mogućnosti pametnog brojača.
Takvi brojači imaju i programabilne izlaze koje možeš podesiti na neku akciju kod postizanja željene mere...

2)
Ako upotrebiš svoj MCU sa displejem i nekim tvojim programom, onda je takođe lako čitati jednu ivicu enkodera, čim dobiješ onu rezoluciju koja piše na enkoderu, na primer 100 impulsa po krugu ako tako piše na njemu ili bilo koju drugu prema kupljenom enkoderu.

Potrebna ti je neka interrupt rutina koja je izazvana promenom stanja na nekom od pinova MCU koji su predisponirani za tu svrhu.

Evo ovako nešto bi ti to izgledalo u C jeziku:

Code:
#define scale_fact 1234 //neki faktor za skaliranje brojaca
#define ofs_counter 1234 //neki ofset koji ce da ti namesti pocetnu velicinu
long raw_count; //varijabla u kojoj se nalazi sirovo stanje tvog brojaca
long calcul_count; //varijabla u kojoj je izracunata vrednost brojaca za prikazivanje u potrebnoj velicini

void HW_interrupt_handler(void){
/* interrupt handler na promenu stanja nekog specijalizovanog pina koji je vezan na na primer A izlaz enkodera */
   if(bit_dozvole_hw_isr && bit_dogadjaja){ //ako je odobren i dogodio se A input
       if(B_input)raw_count--; //ako vec postoji B onda je smer ka umanjenju
       else raw_count++;          //inace je vec prvi bio A i to je povecanje
       //ako ti treba suprotan smer brojanja, zameniti žice A i B
   }
   bit_dogadjaja=0;              //pocisti bit dogadjaja da bi mogao opet da uhvatiš sledeci
}

void calculate_counter(void){
  calcul_count = raw_count/ scale_fact;
}

void main(void){
//tvoj glavni porogram
//... potrebne inicijalizacije MCU i ostalo oko toga

  while(1){ //beskonacna petlja gde se vrti tvoj program
    
       calculate_counter(); //proracunaj izlaznu velicinu za LCD
       lcd_present(calcul_count); //prikazi je

       if(calcul_count > preset_value) uradi_nesto();  //neka akcija komparacije stanja u odnosu na zadatak

       if(taster_nulovanja) nulovanje(); //neka operacija automatskog nulovanja na primer...

       if(home_prekidac && Z_input){ //ako je nagazen home prekidac nuluj i dodaj ofset za pocetnu vrednost
          raw_count=0; // pocisti sirovu vrednost
          calc_count +=ofs_counter; /* unesi ofset a u sledecoj iteraciji ce funkcija za racunanje sadrzati tu vrednost
            i ako je raw_count poceo od nule */
       }

  }

}

Evo to je neki jednostavan i linearan primer od koga možeš započeti.
Svakako da možeš u program uglaviti i dodatne operacije automatskog pozicioniranja na neke zadate vrednosti, posebno ako raspolažeš frekventnim regulatorom za pogon motora graničnika.
Onda pozicioniranje vršiš na primer dvojnim ili trojnim nagibom, gde ti kod približavanja željenoj veličini motor radi većom brzinom a kada je blizu malom i tačnije.
Može se spakovati i automatsko nulovanje prvi put i slično tome...

Nadam se da sam ti pomogao.

Pozdrav,
Macola

P.S.

Zaboravih:
Čitava operacija nulovanja ti se sastoji od toga da jednom "pregaziš" preko "home" prekidača a nulovanje će ti važiti dok je mašina pod napajanjem.
Reply
Možda sam negde i pogrešio u pisanju koda ali je primer edukativnog tipa i kad počneš da pišeš lako ćeš ispraviti.

P.S.

I nikakva memorija ti ne treba, osim možda nekih presetovanih vrednosti ako želiš korisniku da ih obezbediš za neku serijsku proizvodnju sa automatskim pozicioniranjem.
U svakom slučaju nije teško nikom da na početku nuluje mašinu, jer inače se na 99% makaza to radi i za to ne treba nikakva memorija.
Nula se jednom proglašava gaženjem home prekidača i koincindencijom sa Z enkodera. I to veoma precizna nula.
Naravno, nulovanje se radi sniženom brzinom kretanja da bi ti bilo minimalno kašnjenje i visoka tačnost...
Reply
Nisam ispratio temu skroz ali sam pohvatao da pričate o start poziciji - nuli.Ja baš ništa ne znam o ovome ali što se tiče pozicioniranja nule na svim osama na mašini na kojoj ja radim to radi ovako,svako jutro kad je upalim ona ide prema nulama na svim osama dok je mehanički prekidači ne isključe,tada stane i vrti +3 obrtaja na svim osama na steper motorima (sa enkoderima). Uvek dođe u mrtvu tačku sa tolerancijom od 0.05mm. Znam to jer ako ostavim posao pa ga sutra nastavljam neće nekad da ispolira dobro ili po x ili y osi a taman su mi tolerancije alata tolike pa ponavljam proces ali zadajem manju meru... Ne znam koliko ova informacija vam znači
Devojka me vara sa rođenim mužem!
Reply
@Macola
To znači da takve mašine nemaju pamćenje poslednje mjere nego se svaki put moraju nulovati?
To što se tiče čitanja impulsa sa enkodera to znam kako bih uradio samo me je to bunilo sa memorijom poslednje pozicije, ali to smo sada riješili, nema potrebe za tim već svaki put nulovanje, nisam imao dodira sa tim makazama a da su novijeg tipa pa da vidim kako radi.?
Uglavnom ovde je obični motor bez kočnice sa reduktorom, ali na njoj postoji jedan taster za fino podešavanje svaki pit kada se pritisne on samo trzne motor i napravi mali pomak.
Odoh da vidim kakav enkoder da poručim i remenicu.
Naravno Macola, svaki tvoj post za mene je pomoć i novo saznanje.
Reply
Da Maxo,

Nema potrebe ni za kakvim pamćenjem poslednje pozicije. Nulovanjem mašine na početku rada se ujedno izbegava moguća greška ako je neko ručno pomerio motor dok je mašina bila isključena.

Enkoder je najlakše ugraditi čeono na neko od obrtnih vretena, pomoću elastične spojnice (oni koji prodaju enkodere imaju i spojnice). Spojnicom se enkoder spreže na vreteno ukoliko si siguran da možeš ostvariti odličnu saosnost osovine enkodera sa vretenom.
Ukoliko nisi baš siguran u dobru saosnost mašinske izvedbe montaže enkodera, druga opcija je maleni zupčasti kajiš i pripadajuće remenice na enkoderu i vretenu. Ta metoda ima prednost što se njom mogu namestiti drugačiji prenosni odnosi vreteno-enkoder u odnosu na direktnu montažu. Mana je veća mehanička nepreciznost zbog elestičnosti zupčastog kajiša (mada je to od izražaja kod baš preciznih merenja reda nekoliko stotih delova mm) i mana je veće radijalno opterećenje ležaja enkodera (zbog neophodnog zatezanja kajiša), koje mu umanjuje radni vek.
U svakom slučaju sve nabrojane metode su dovoljno visoko zastupljene da možeš odabrati bilo koju od njih (koja ti je najekonomičnija), a obzirom na relativno nisku potrebnu rezoluciju garantovano zadovoljava bilo koja nabrojana metoda.

Pozdrav Maxo
Reply
Ili da postavim enkoder gdje je prethodno bila nekad sajla za mehanički brojač na reduktoru, onda bih tu mogao ići i enkoder sa što manjom rezolucijom tj. manji proj impulsa po krugu?
Reply
Zašto da ne? Ukoliko je krug sajle npr. 1mm imaš rezolucije na pretek sa enkoderom od svega 100 pulsa.
Reply
Mislim da je puno brži, ali to je onda samo stvar matematike.
Jedini problem tu može biti samo ako reduktor ima lufta, onda će morati ići na vreteno ili neka druga kombinacija.
Reply
Vidi Maxo,

Ovako stoje stvari sa tim:
Naravno da svi reduktori imaju zazor pa čak i oni Harmonic Drive, koji imaju zazor od nekoliko lučnih minuta.
Ono što je tebi od interesa je da taj zazor bude u okviru one jedne desete od milimetra koja ti treba. To ćeš lako da utvrdiš tako što ćeš polako i ručno otkriti koliko krugova izvrši ta sajla za neku poznatu veličinu pomeraja graničnika. Potom vidiš koliki ugao je "mrtav", odnosno koliki ugao pomeranja onog dela koji meri ostaje bez uticaja na vretena i graničnik. Sasvim lako je izračunati to.
Improvizuj malo brate.

Ako je mašina imala deklarisanu desetu tačnosti (što je najčešći slučaj kod tih Jeljšingrad) onda su ti svi sumirani zazori ispod te tolerancije.

Ako je mehanički brojač mogao pouzdano, sa tom sajlom, meriti tu desetu, elektronski može sigurno. Baš tu, na toj sajli gde je stajao.
 
Mislim da sam dovoljno toga objasnio i na žalost imam malo vremena da bih zalazio u mikrodetalje ovako na daljinu.
Moraćeš dalje sam.

Pozdrav
Reply
Vidjeću šta i kako, znam da reduktor ima neku toleranciju ali nisam detaljno gledao da li je ovaj u dobrom stanju, moram otići provjeriti u kakvom je stanju reduktor pa onda ostalo, uglavnom snaći ću se nekako.

Taj mehanički brojač je imao čini mi se 4 ili 5 cifri, imao je jednu cifru poslije zareza od 0-9 za precizno mjerenje, ali je problem što je to sve uništeno i treba na novo uraditi, a sajle nema.
Reply
Ja samo potenciram da je relativno merenje tehnoloski nepotreban korak za ovu spravu..
Tolerancija u reduktoru se anulira prednaprezanjem ili preseljenjem efekta zazora na zonu pogona. Prigusenjem osovine ili zupcanika finalno odgovornih za dimenziju.

Bitna mera je rastojanje noza od granicnika, i za to vezati senzor. Lim je to, velike dimenzije, deseta je zona greske, nebitna..
Reply
Mislio sam da poručim ovaj enkoder http://www.ebay.com/itm/Encoder-400P-R-I...SwymxVRuNK.

400ppr, NPN open collector, mislim da neće biti problema ako je više pulsa po krugu?
Koji bi optokapleri bili dobri za izolaciju signala enkodera?
Reply
Makso, da li ti uopste trebaju optikapleri za enkoder? Razmisli. Ako se opredelis za njih imas HCPL seriju ili 4N... ne znam tacno. Zelja je predlagao njih za nesto. Gledaj samo da imaju totem-pole izlaz.
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)