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

povezivanje ( programiranje ) digitalnog enkodera sa PIC 18F4550

[es] :: Elektronika :: Mikrokontroleri :: povezivanje ( programiranje ) digitalnog enkodera sa PIC 18F4550

[ Pregleda: 4303 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

gregor1987
student

Član broj: 214641
Poruke: 2
92.36.203.*



Profil

icon povezivanje ( programiranje ) digitalnog enkodera sa PIC 18F455002.03.2009. u 18:01 - pre 184 meseci

Upravljam brzinom istosmjernog motora preko PIC-a 18F4550 i sa digitalnim ekonderom, koji
za jedan puni okretaj daje 500 impulsa ( 5V i 0V ) . Isti je spojen direktno na ulazni ( portB) pin PIC-a.
Problem mi je kako sad u programu rijesiti to. Mislio sam preko timera koji ce odbrojavati...ili...
nisam siguran kako PIC " registruje " te ulazne cetvrtke...

Ima li ko da se je susreo s tim problemom ili kakve prijedloge ( savjete )...

Hvala lijepa !
 
Odgovor na temu

Stojan Trifunovic

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



+8 Profil

icon Re: povezivanje ( programiranje ) digitalnog enkodera sa PIC 18F455002.03.2009. u 20:40 - pre 184 meseci
.
Postoji vise nacina za detekciju. Pogledajte http://www.amqrp.org/elmer160/lessons/index.html (Lesson#15) i http://www.mcmanis.com/chuck/R...rojects/lab-x3/quadratrak.html . Nisu za PIC18, vec za PIC16, ali lako cete prepraviti programe.

[Ovu poruku je menjao Stojan Trifunovic dana 02.03.2009. u 21:50 GMT+1]
 
Odgovor na temu

vukboban
Boban Vukovic
PANCEVO

Član broj: 116735
Poruke: 250
195.252.79.*



+11 Profil

icon Re: povezivanje ( programiranje ) digitalnog enkodera sa PIC 18F455004.03.2009. u 14:30 - pre 184 meseci
impulse ti je najlakse da brojis tako da svaki impuls generise interrupt,u cijoj ces rutini samo da inkrementiras neku promenljivu.
Za to vreme timer podesis da ti odbrojava vreme(recimo 500 ms ili 250 ms),kad izbroji generise interupt u kojem gledas koliko si impulsa primio sa enkodera(naravno pomnozis sa 2 ili 4-za 1 sec,pa mnozis sa 60 za 1 min,i na kraju delis sa 500) da bi dobio RPM.Resetujes timer,resetujes promenljivu koja broji impulse,ubrzas ili usporis motor po potrebi i tako sve u krug.Ako ti program radi jos nesto osim ove kontrole RPM ,koriscenjem interupta ostaje mu dovoljno vremena da odradi i to drugo,a mozes i da namestis timer na 1 sec.
 
Odgovor na temu

gregor1987
student

Član broj: 214641
Poruke: 2
92.36.157.*



Profil

icon Re: povezivanje ( programiranje ) digitalnog enkodera sa PIC 18F455004.03.2009. u 18:23 - pre 184 meseci
Hvala lijepa na ukazanim prijedlozima...
Samo nije mi bas najasnije kako to tacno izvesti ::

Naime, pisem u C-ju i sljedeca f-ja :

void delay10( char n) // PRAVI PAUZU OD n*10 ms ,f=3.278 Mhz
{
char i;
OPTION = 7;
do
{
clrwdt(); // OVO JE POTREBNO SAMO AKO JE UKLJUCEN WatchDog
i = TMR0 + 32; // 256 microsec * 32 = 10 ms
while ( i != TMR0)
;
} while ( --n > 0);
}

Da li ste mislili da koristim "ovu" ( u tom stilu ) f-ju ili neku drugu...Kkako sam razumio, u tacno zadanom unaprijed vremenskom intervalu ( timer ), brojati
interrupt-e i na osnovu broja izbrojanih, generisati upravljacki PWM signal ( grubo objasnjeno, ali mislim da ste upravo na to mislili, ispravite ako grijesim ).. Problem je ako ja pozovem ovu f-ju, ona ce tacno odredjeno vrijeme trajati, pa ne znam kad ikrementirati neku promjenjivu ... jer ako sad ubacim unutar funkcije par linija koda ( interrupts ...)potpuno ce izmjeniti trajanje ove f-je.. sto nije dobro ...
Mozda da ubacim par linija koda ,pa da tacno izracunam koliko ce one vremenski trajati ( pa smanjiti ovaj broj u f-ji 32 )...
Sta mislite Vi o tome,da umjesto interrupt-a testiram log. nivoe na pinu PIC-a pa da na osnovu toga generisem PWM signal?? npr:
{ // timer
...
broj_jedinica==0;
broj_nula==0;
if ( PORTB.2==1) broj_jedinica++;
else broj_nula++;

...
}

HVALA !!!!!!!!!!!!!!!!!!!!!!!!!
 
Odgovor na temu

vukboban
Boban Vukovic
PANCEVO

Član broj: 116735
Poruke: 250
195.252.79.*



+11 Profil

icon Re: povezivanje ( programiranje ) digitalnog enkodera sa PIC 18F455004.03.2009. u 18:44 - pre 184 meseci
mislio sam nesto ovako:
u kodu negde ubacis petlju
while(1) {
if(PORTB.F2==1) x++;
...//ostatak koda gde povecavas ili smanjujes PWM
...
...
}
pre toga startujes TMR0,dozvolis TMR0 interupt,i podesis prescaler u zavisnosti od frekvencije koju koristis(kristal,interni oscilator...)tako da ti TMR0 broji neki odredjeni broj milisekundi(recimo 1000).

ako se svakih 1000ms generise interupt pises nesto ovako:
void interupt(){
INTCON.TMR0IE=0;//trenutno disejblujes TMR0;
if((x/500)>rpmz) pwm--; //gde je rpmz zadati broj obrtaja,a pwm je neka promenljiva koja ti regulise PWM
if((x/500)<rpmz) pwm++;
x=0;
INTCON.TMR0IF=0;//resetujes flag
INTCON.TMR0IE=1;//enablujes TMR0
}

ako ti jos nesto nije jasno slobodno pitaj
Pozz

P.S. ovo je za 18F4520,ali mislim da je isto i za 4550


[Ovu poruku je menjao vukboban dana 04.03.2009. u 20:02 GMT+1]

[Ovu poruku je menjao vukboban dana 04.03.2009. u 20:03 GMT+1]
 
Odgovor na temu

[es] :: Elektronika :: Mikrokontroleri :: povezivanje ( programiranje ) digitalnog enkodera sa PIC 18F4550

[ Pregleda: 4303 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

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