Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Merenje impulsa, mala pomoc :)

[es] :: Elektronika :: Mikrokontroleri :: Merenje impulsa, mala pomoc :)

[ Pregleda: 2886 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

zstevovich
Zoran Stevovic
Infogram
Beograd

Član broj: 51518
Poruke: 57
95.180.83.*



+3 Profil

icon Merenje impulsa, mala pomoc :)06.09.2010. u 19:17 - pre 142 meseci
Dragi moji, imam jedan problem, a koji bi zeleo softwerski da resim no nisam siguran kako bi to izveo.
Naime razvili smo jedan modul koji hvata impulse koji se salju na mehanicki brojac, impulsi su 12V, koristim PIC 16F84A, na ulazu plocice doveli smo preko optokaplera vod koji sa uredjaja salje na plocicu impulse 12 V, medjutim ne mogu nikako da sinhronizujem tajminge, tj trajanje impulsa. Da stvar bude jos gora isti uredjaji ne daju uvek impulse sa identicnim trajanjem te nikako ne mogu da unificiram program, npr brojac otkuca 10 impulsa, ja detektujem na modulu 8 ili na drugom uredjaju 12, jednostavno nije precizan rad, kako bi ovo mnogao da predupredim, da registrujem samo promene bez obzira koliko taj impuls trajao, znaci dodje signal registrujem ga, pa tek posle prekida signala da registrujem sledeci signal. Da li je ovo moguce softverski resiti ili postoji izvesna komponenta koja ce ovo da regulise, ostale operacije sa ulaznim podacima u PIC mi nisu problem sve super sljaka izuzev ovog detalja koji me strasno iritira, program sam pisao u Basic-u, koristim Micro Code Studio kao editor.
Hvala svima unapred.
Zoran
 
Odgovor na temu

Stojan Trifunovic

Član broj: 15156
Poruke: 366
*.rs
Via: [es] mailing liste



+8 Profil

icon Re: Merenje impulsa, mala pomoc :)06.09.2010. u 22:20 - pre 142 meseci
Pretpostavljam da su impulsi ipak dovoljne duzine, buduci da ih mehanicki
brojac moze pouzdano detektovati.

Najverovatnije je problem u losem obliku signala.
Niste naveli sa koje komponente se dovodi signal, ali ukoliko su u pitanju
mehanicki kontakti, nije ni cudo sto imate lose ocitavanje.
Bilo koji mehanicki kontakti ce prilikom prebacivanja stanja imati gomilu
smetnji. Zbog toga mozete "cuti" krcanje u televizoru ili radio prijemniku
prilikom ukljucenja obicne sijalice. Fizicki nije moguce da se otpornost
kontakta sa beskonacne smanji na nultu za kratko vreme. U praksi se zbog toga
na izlazima kontakta javlja i preko 10 "prebacivanja" sve dok se stanje
kontakata konacno ne smiri. Preporucujem Vam da pogledate signal
osciloskopom na ulazu i izlazu optokaplera, kako biste videli da li je to
problem (mozda i LED u optokapleru ne dobija dovoljnu pobudu, buduci da modul
kako kazete ponekad ocitava manje impulsa).

Optokapler ce zbog velike brzine ove smetnje bez problema propustiti u PIC.
PIC ce opet zbog velike brzine ocitavanja moze detektovati vise impulsa, iako
se oni javljaju u veoma malom razmaku (obicno se stanje kontakata ustali za
oko 20mS).

Ovo se u praksi (npr. u kompjuterskim tastaturama koje inace imaju najbolje
karakteristike sto se tice laznih prebacivanja) standardno resava visestrukim
ocitavanjem tastera. Promena se dozvoljava tek ukoliko je signal sa kontakta
neko vreme (15-20mS) stabilan. Tacan termin za ovu pojavu naziva se
"debouncing". Proguglajte, i dobicete i kompletne opise resenja. Ili
hardverske (spojite kondenzator paralelno optokapleru) ili softversku
(visestrukim ocitavanjem).

Pretrazite i ovaj forum. Bilo je i ovde reci o tehnikama debouncinga pre par
godina.
 
Odgovor na temu

zstevovich
Zoran Stevovic
Infogram
Beograd

Član broj: 51518
Poruke: 57
95.180.83.*



+3 Profil

icon Re: Merenje impulsa, mala pomoc :)06.09.2010. u 23:42 - pre 142 meseci
"Ovo se u praksi (npr. u kompjuterskim tastaturama koje inace imaju najbolje
karakteristike sto se tice laznih prebacivanja) standardno resava visestrukim
ocitavanjem tastera. Promena se dozvoljava tek ukoliko je signal sa kontakta
neko vreme (15-20mS) stabilan. Tacan termin za ovu pojavu naziva se
"debouncing". Proguglajte, i dobicete i kompletne opise resenja. Ili
hardverske (spojite kondenzator paralelno optokapleru) ili softversku
(visestrukim ocitavanjem)."


Hvala ovo mi prilicno pomaze,

Shvatam da se promena dozvoljava tek tek kada je signal stabilan ali da li to znaci da cu propustiti neki signal na taj nacin, posto zelim da uhvatim svaki impuls koji hvata i brojac, posto uredjaj salje impuls koji dolazi na brojac i na moj modul, da li to znaci da cu visestrukim ocitavanjem samo registrovati cistu promenu, bez smetnji i da li bi imao manje problema da sam izabrao neki malo jaci PIC.
Zoran
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15605
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2351 Profil

icon Re: Merenje impulsa, mala pomoc :)07.09.2010. u 11:11 - pre 142 meseci
neki picovi imaju na schmitt tip ulaza mada ja vise volim da stavim externo 74hc14 (schmitt inverter) i tako resim problem koji Stojan objasnjava (debouncing).

sto se brojanja tice, nadam se da to radis u interaptu a ne tako sto skeniras stanje pinova. stavi taj trigger na B0 i ukljuci EXT interrupt (promena na B0), odaberi odgovarajucu ivicu (padajucu ili rastucu - obrati paznju da je izlaz iz 74hc14 invertovan) i u interaptu samo imas varijabla++; tako ces resiti oba problema - 74hc14 ce ti ocistiti signal dok ce interapt da uhvati svaki impuls i izbroji ga.
 
Odgovor na temu

Stojan Trifunovic

Član broj: 15156
Poruke: 366
*.rs
Via: [es] mailing liste



+8 Profil

icon Re: Merenje impulsa, mala pomoc :)07.09.2010. u 14:51 - pre 142 meseci
Nacin koji Bogdan predlaze pogodan je jedino ukoliko se na ulazu dobija cist
signal (ON/OFF) ili je na odgovarajuci nacin niskopropusno filtriran
(kondenzator uz pomenuti schmitt triger). Sa njim i interaptom necete ni
uspeti da propustite ijedan impuls, cak i da to zelite. Ipak je
mikrokontroler mnogo brzi od bilo kog mehanickog brojaca. Pretpostavljam
naravno da brojanje impulsa ne koristite u kombinaciji sa veoma, veoma
zahtevnim operacijama koje nemilice trose taktove.

U principu, sve zavisi od oblika signala koji pokusavate meriti. 20mS je
prosecno vreme za kontakte koji se prekidaju rucno (tasteri), a u Vasem
slucaju to vreme moze biti vece ili manje, u zavisnosti od tipa i namene
kontakata. Zato sam Vam preporucio prethodno merenje signala osciloskopom.
Ukoliko se opredelite za takvo (hardversko) resenje, sto duzi impuls, veci
kondenzator.

Ukoliko se opredelite za softverski debouncing (visestruko ocitavanje) MORATE
imati bar pribliznu predstavu o duzini impulsa, kako se ne bi dogodilo da
neki propustite. Buduci da je mehanika u pitanju, verovatno moze varirati od
0,1S do 0.5S. Ukoliko je ovo vreme npr. 100mS, mozete izabrati ocitavanje na
svake 2mS i traziti bar 8 (ili 16 - sto vise to bolje) stabilnih impulsa (bez
promena) pre nego sto promenite stanje. Znaci, da bi se impuls ocitao,
potrebno je da svih 8 puta na pinu bude isto stanje. 8*2mS daje 16mS, tako da
imate preko 6 pokusaja ocitavanja za ceo period (100mS). Malo je verovatno da
ce ikakva smetnja biti toliko velika (trajati citavih 16mS) da bi mogla
poremetiti pouzdanost, ali ipak, ponavljam ovo prvenstveno zavisi od oblika
signala.
 
Odgovor na temu

plc
vladislav
Velika Plana

Član broj: 266870
Poruke: 107
212.200.54.*

Sajt: www.industrijasrbije.rs


+1 Profil

icon Re: Merenje impulsa, mala pomoc :)07.09.2010. u 17:48 - pre 142 meseci
Necu duboko zalaziti u ovu temu ,moram da prenesem iskustva mog kolege koji je pravio brojac za namotaje el.motora.
Isti problem kao i kod tebe,muke i nagadjanja.
Sve je probao i konacno utvrdio da mu mehanicki brojac zbog svoje tromosti nije davao tacan broj taktova .
Probaj sa nekim reed relay ili neki manji induktivni senzor 12-32v mozda prodje.
pozz
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15605
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2351 Profil

icon Re: Merenje impulsa, mala pomoc :)07.09.2010. u 17:56 - pre 142 meseci
16F84A na B0 pinu ako je ukljucen EXT interrupt radi kao schmitt tako da mu cak ne treba ni dodatni 74hc14 ... dakle samo dovedes na B0 ulaz sa tog generatora impulsa, vezes jedan kondenzator paralelno sa izlazom sa optokaplera cisto da mu olaksas malo posao i to je to, stavis interrupt i ne razmisljas. Cak i ako radis neku tesku matematiku, interrupt ce prekinuti matematiku, povecati brojac za jedan i vratiti te nazad gde si bio ...

pogledaj data sheet, imas schmitt ulaze na RA4, RB0, RB6 i RB7.
 
Odgovor na temu

korak
Nis

Član broj: 125522
Poruke: 612
*.dynamic.sbb.rs.



+7 Profil

icon Re: Merenje impulsa, mala pomoc :)07.09.2010. u 18:05 - pre 142 meseci
Stojanova sugestija ti je najbolja.

Ja ti predlazem, iz svog iskustva, da procitano stanje pina stalno usiftavas u jednu jednobajtnu varijablu. Ako to radis u interrupt-u na 2ms onda mozes biti siguran da kada ta varijabla ima vrednost 0xFF da je stabilna jedinica (ili nula zavisno od spoljnih kola), a kada je u toj varijabli 0x00 onda je nula.

Ako tu varijablu zoves ImpSift onda bi bilo:
Code:

if ImpSift = 0xFF then setBit(Imp,Impulsi);
if ImpSift = 0x00 then clrBit(Imp,Impulsi);

Dakle ovim setujes ili klirujes jedan bit (Imp) u varijabli Impulsi. Uvedi novu varijablu pImpulsi koju koristis:
Code:

pImpulsi := Impulsi;
if ImpSift = 0xFF then setBit(Imp,Impulsi);
if ImpSift = 0x00 then clrBit(Imp,Impulsi);

if (not pImpulsi and Impulsi) and 2^Imp <> 0 then BrojImpulsa++; //ovo je na usponsku ivicu Imp bita


ili
Code:

if (pImpulsi and not Impulsi) and 2^Imp <> 0 then BrojImpulsa++; //ovo je naopadajucu ivicu Imp bita

Ako je Imp bit najnize tezine onda je Imp = 0 pa je:
Code:

if (not pImpulsi and Impulsi) and 0x01 <> 0 then BrojImpulsa++; //ovo je na usponsku ivicu Imp bita

not pImpulsi je u C-u ~pImpulsi a za and &

Nadam se da ti je jasno, prvo filtriras impuls na pinu da bi dobio filtriran impuls Imp u varijabli Impulsi. Istovremeno imas i predhodno stanje filtriranog impulsa u varijabili pImpulsi. Ako zelis reakciju na usponsku ivicu, to znaci da treba predhodno filtriran impuls da bude 0, a onaj koji je trenutno filtriran treba da je 1. Za opadajucu je obrnuto.

Neznam koj programski jezik koristis, ali verujem da ces se snaci.

Pozdrav.

 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15605
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2351 Profil

icon Re: Merenje impulsa, mala pomoc :)07.09.2010. u 18:41 - pre 142 meseci
korak, ja znam da si ti vise zaboravio o ovome nego sto ja sveukupno znam tako da verovatno ovo sto si napisao ima smisla ali ajde ne bilo ti tesko objasni mi zasto je bolje da napravis interapt u kome ces x puta u sekundi proveravati stanje na portu y, umesto da iskoristis hardware na mcu-u (koji mcu koji je op odabrao vec ima) da signal ocisti (dakle b0 ulaz na tom mcu-u vec ima shmitt) i da iskoristis interrupt da onda izbrojis te signale (b0 je inace ulaz za externi interrupt). iz kog razloga je bolje da izignorisemo schmitt i hw koji ce da trigeruje interrupt na promenu i da to implementiramo uz pomoc tajmera?!
 
Odgovor na temu

korak
Nis

Član broj: 125522
Poruke: 612
*.dynamic.sbb.rs.



+7 Profil

icon Re: Merenje impulsa, mala pomoc :)09.09.2010. u 18:49 - pre 142 meseci
Ja sam samo nastavio Stojanovu ideju gde se on oslanjao na interrupt-e.

Koliko ja znam svi MCU-ovi imaju na ulazima smit trigere, osim nekih starijih. Smit triger cisti signal od smetnji koje su manje amplitude od histerezisa smit trigera. Medjutim, kako je histerezis vrlo mali njegova osnovna uloga se pre svega svodi da eleminise nezeljene efekte koje moze da prouzrokuje signal na ulazu koji se vrlo sporo menja. Ako je ulazni signal relativno duze vreme izmedju pragova za log. nulu i log. jedinicu ulazni tranzistori pina su sve vreme otvoreni (i prema Vcc i prema GND). Ovakva stanja nisu pozeljna kod digitalnih kola.

Jos pre mikroprocesora, dok sam radio sa digitalnim kolima puno puta mi se desavalo da mi nepravilno radi flip-flop samo zato sto okidni impuls nisam proterao kroz smit triger.

No, glavni razlog zasto sam podrzao Stojanovo resenje i dao predlog kako da se realizuje, je taj sto sam razumeo da je mehanicki prekidac takav da prilikom preklapanja zbog mehanickih titraja kontakata generise lazne impulse pune amplitude. Ovakvi impulsi ne mogu da se eliminisu smit trigerom. Za to je potreban NF RC filter ciji izlaz treba obavezno da prodje kroz smit triger, bilo da je on u MCU-u ili spolja.

Realizaciju koju sam ja predlozio samo je softverska i zamenjuje spoljni RC filter. Doduse RC filter je filter sa beskonacnim odzivom, a softverski je sa konacnim impulsnim odzivom. Kasnjenje softverskog filtra je 8 perioda citanja ulaza, i da bi ono bilo konstantno treba i citanje pina da bude u jednakim vremenskim periodama. To je najjednostavnije ostvariti interrupt-om, ali moze i na drugi nacin.

Dakle, nista nije zakucano da mora ovako ili onako.

Pozdrav.
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15605
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2351 Profil

icon Re: Merenje impulsa, mala pomoc :)09.09.2010. u 19:16 - pre 142 meseci
naravno da nije zakucano, ali me bas zanimalo da cujem obrazlozenje ... hvala za isto ... ja sam citanje mehanickih prekidaca uvek radio sa RC+Schmitt i to je uvek radilo 1/1... softwersko resenje je super ali mi je pravilo probleme u nekim krajnjim slucajevima (verovatno bi u nekim extremnim slucajevima i rc+schmitt radio isto ali meni se nije desavalo) ..

ovo za "Svaki mcu", nemam pojma, mnogo cesto sam bio u krivu kada sam rekao "Svaki ..." tako da :)

sve u svemu, hvala jos jednom za razjasnjenje
 
Odgovor na temu

[es] :: Elektronika :: Mikrokontroleri :: Merenje impulsa, mala pomoc :)

[ Pregleda: 2886 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.