DC-motor s 5 brzina i naravno neaktivnim stanjem

Rasprava o PIC mikrokontrolerima, PIC projekti i drugo vezano za PIC-eve...

Moderators: pedja089, stojke369, [eDo], trax

Post Reply
0leee
Penjem se :)
Penjem se :)
Posts: 68
Joined: 16-08-2011, 20:43

DC-motor s 5 brzina i naravno neaktivnim stanjem

Post by 0leee »

*********************************************************************************
Postovani,evo napravio sam program u hi-tech-c-u za pic 165877,
radio sam ga cisto logicki,u teoriji bi trebalo to raditi,na simulatoru cak radi;
moglo bi se reci da radi donekle jer tih 5 brzina su neke mini brzine,sve otprilike jednake xD
Znam da grijesim i u praksi se to vjerojatno ne moze izvesti ovako,pa bih vas zamolio da me odvedete
na pravi put,recite mi molim vas sto je dobro,sto nije dobro,i ispravite da bude savrseno,ako tko ima vremena,bio bih vam zahvalan ....

**********************************************************************************
//program s jednim tipkalom ubrzava dc motor,a s drugim usporava;
#include<htc.h>
#define _XTAL_FREQ 20000000



main()
{

//deklariranje;//
int counter=0;
TRISA=0b11111111;
TRISB=0b11111111;
TRISD=0b00000000;


while(1){
//LED blinka kad je sklop ukljucen;//
RD5=1;
__delay_ms(100);
RD5=0;
__delay_ms(100);


//povecavanje brzine;//
if(RA4==0){
while(RA4==0)continue;
counter++;
}

//smanjivanje brzine;//
if(RB0==0){
while(RB0==0)continue;
counter--;
}

//izbjegavanje nezeljenih countera;//
if(counter==-1)counter=0;
if(counter==6)counter=5;

//brzina pri odredjenom counteru;//
if(counter==0){RD6=0;}
if(counter==1){RD6=1;__delay_us(2000);RD6=0;__delay_us(8000);}
if(counter==2){RD6=1;__delay_us(4000);RD6=0;__delay_us(6000);}
if(counter==3){RD6=1;__delay_us(6000);RD6=0;__delay_us(4000);}
if(counter==4){RD6=1;__delay_us(8000);RD6=0;__delay_us(2000);}
if(counter==5){RD6=1;}
}
}
0leee
Penjem se :)
Penjem se :)
Posts: 68
Joined: 16-08-2011, 20:43

Re: DC-motor s 5 brzina i naravno neaktivnim stanjem

Post by 0leee »

ispravak:pic 16f877
0leee
Penjem se :)
Penjem se :)
Posts: 68
Joined: 16-08-2011, 20:43

Re: DC-motor s 5 brzina i naravno neaktivnim stanjem

Post by 0leee »

je lo ovo OK,ili treba koristiti tipicni pwm koji bas i ne kuzim? =)
vukboban
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 212
Joined: 05-12-2008, 17:49
Location: Pancevo

Re: DC-motor s 5 brzina i naravno neaktivnim stanjem

Post by vukboban »

prvo ,counter je tipa int,tako da nikad ne moze da bude -1,samo 255.
drugo,kad ispitujes da li je pritisnut taster imas while ra4==0 continue,bez ikakvog delaya,tako da bi u praksi counter bio ili 0 ili 6,nikad ne bi dobio nijednu vrednost izmedju,jednostavno ti taster mozes da drzis pritisnut minimalno 50 ili 100 ms,a za to vreme ode counter u min ili max.
trece u ovom kodu dok blinka dioda motor ne radi,sve bi to trzalo,ne bi islo kontinualno.
cetvrto nemas nikakvu rutinu za tzv debouncing tastera,ukratko ti u praksi ne mozes da pritisnes taster samo jednom,zbog treperenja kontakata,znaci mora ili softverski ili hardverski debouncing.

sve u svemu ne bi radilo ono sto ti ocekujes.
0leee
Penjem se :)
Penjem se :)
Posts: 68
Joined: 16-08-2011, 20:43

Re: DC-motor s 5 brzina i naravno neaktivnim stanjem

Post by 0leee »

ovaj program radi;int nije unsigned,debouncing je napravljen whileom ispod ifa ... pozz

Provjereno;program radi.
0leee
Penjem se :)
Penjem se :)
Posts: 68
Joined: 16-08-2011, 20:43

Re: DC-motor s 5 brzina i naravno neaktivnim stanjem

Post by 0leee »

i di si kod inta izvukao 255,to je kad je u pitanju unsigned char
vukboban
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 212
Joined: 05-12-2008, 17:49
Location: Pancevo

Re: DC-motor s 5 brzina i naravno neaktivnim stanjem

Post by vukboban »

jeste,to za int si u pravu,ali ipak mislim da u simulaciji moze da radi,ali realno...
User avatar
InTheStillOfTheNight
Odlično uznapredovao
Odlično uznapredovao
Posts: 938
Joined: 01-06-2006, 17:54
Location: Zagreb

Re: DC-motor s 5 brzina i naravno neaktivnim stanjem

Post by InTheStillOfTheNight »

vukboban wrote:prvo ,counter je tipa int,tako da nikad ne moze da bude -1,samo 255.
Varijabla tipa "int" može sadržavati negativne brojeve i to u rasponu od:
-32767 do 32768

Možda si mislio na "unsigned int"? No ni to baš ne stoji jer se naprosto radi o 2 byte-a a ne jednom.
Kada napišeš samo "int" po standardu C-a uvijek se radi o pozitivnim i negativnim brojevima.

Da piše "unsigned int"- onda bi se radilo samo o pozitivnim brojevima u rasponu:
0 do 65535
InTheStillOfTheNight
User avatar
InTheStillOfTheNight
Odlično uznapredovao
Odlično uznapredovao
Posts: 938
Joined: 01-06-2006, 17:54
Location: Zagreb

Re: DC-motor s 5 brzina i naravno neaktivnim stanjem

Post by InTheStillOfTheNight »

0leee wrote: Znam da grijesim i u praksi se to vjerojatno ne moze izvesti ovako,pa bih vas zamolio da me odvedete
na pravi put,recite mi molim vas sto je dobro,sto nije dobro,i ispravite da bude savrseno.
Postoji tu dosta stvari oko savršenog a prva i osnova je dobro napisan post. Kada pišeš bilo koji program u C-u uvijek moraš pravilno tabulirati program. Za nas koji stalno programiramo u C-u takav program ne želimo niti gledati. Koristi "Code" na forumu i program napiši ovim načinom:

Code: Select all

void main(void){
    int counter=0;

    TRISA=0b11111111;
    TRISB=0b11111111; 
    TRISD=0b00000000;
    
    while(1){
        //LED blinka kad je sklop ukljucen;//
        RD5=1;
        //...............   
    }
}
Užasno je teško čitati program koji nije pravilno odvojen tabulatorom. Ne znam kako se na forumu koristi tab, ali zato razmak radi dobro. Jedna od najbitnijih stvari u programiranju je pravilno napisan sam program. Kada program objaviš na svoj način onda mi se čini kao da programiraš u assembleru, a ne C-u i jako se teško snaći u takvom C programu. Tabulatori uvijek odvajaju grananje programa i sam program postaje daleko jednostavniji.

(čitav program je greška!)
U programu imaš previše grešaka, da bi ti bilo tko jednostavno objasnio što te muči.
Postaviti ću prvo pitanje za prvu veliku grešku i dok nju ne shvatiš bezveze ti je nešto dalje tražiti.

Svakih koliko vremena u tvom programu pališ i gasiš motor da bi regulirao njegovu brzinu?
InTheStillOfTheNight
0leee
Penjem se :)
Penjem se :)
Posts: 68
Joined: 16-08-2011, 20:43

Re: DC-motor s 5 brzina i naravno neaktivnim stanjem

Post by 0leee »

ok,
nije mi cilj bio tocno odrediti koliko vremena radi,a koliko ne,cilj mi je bio napraviti postotak,dakle radi 0%brzine,pa 20%brzine itd...
User avatar
InTheStillOfTheNight
Odlično uznapredovao
Odlično uznapredovao
Posts: 938
Joined: 01-06-2006, 17:54
Location: Zagreb

Re: DC-motor s 5 brzina i naravno neaktivnim stanjem

Post by InTheStillOfTheNight »

Nisi shvatio ono što te pitam.
Idemo probati ovako:
Svakih koliko vremena upališ motor u svom programu?????

Uračunaj sve DELAY naredbe i zbroji sva vremena čekanja i izračunaj pri kojoj god hoćeš brzini samo ovu stvar:

Svakih koliko vremena upališ motor?

Ili još jednostavnije:
Resetiraj štopericu kada kada budeš na while(1), i izračunaj koliko ti vremena treba da prvi puta upališ motor?
InTheStillOfTheNight
User avatar
Kizo
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 387
Joined: 01-11-2009, 22:40
Location: Hrvatska

Re: DC-motor s 5 brzina i naravno neaktivnim stanjem

Post by Kizo »

Mislim da te nije skužio pa ću mu odgovoriti.

Npr. ovaj red:

Code: Select all

if(counter==4){RD6=1;__delay_us(8000);RD6=0;__delay_us(2000);}
Vjerojatno misliš da će ti se ovdje motor vrtiti na 80% brzine, no zbog:

Code: Select all

RD5=1;
__delay_ms(100);
RD5=0;
__delay_ms(100);
će ti se vrtiti na samo cca 4% brzine. Posluži se PWM modulom ili koristi timere jer se moraš riješiti __delay naredbi. :roll:

Code: Select all

if(RA4==0){
   while(RA4==0)continue;
   counter++;
}
Ovo u principu radi, no neznam šta će ti continue naredba. Malo proguglaj kako se koristi.
Drugi problem je; dokle je tipka stisnuta motor stoji…
0leee
Penjem se :)
Penjem se :)
Posts: 68
Joined: 16-08-2011, 20:43

Re: DC-motor s 5 brzina i naravno neaktivnim stanjem

Post by 0leee »

E to me je mucilo najvise,pretpostavljao sam da bi se trbalo vrtiti 80% u pocetku,ali sam shvatio da to bas i ne ide tako,znam da trebam koristiti pwm modul,ali ga ne znam koristiti,pa sam taj pwm napravio na zgance :P

PWM
i Timeri ... to ne mogu shvatiti,pa mi se uvijek javlja problem,a na netu ne mogu pronaci nigdje gdje je to lijepo objasnjeno na jednostavnim primjerima ... Ako mi ima tko volje i zelje rijesiti ovaj problem s timerima i pwmmodulom bio bih jako zahvalan,hvala
Post Reply