DC-motor s 5 brzina i naravno neaktivnim stanjem
Moderators: pedja089, stojke369, [eDo], trax
DC-motor s 5 brzina i naravno neaktivnim stanjem
*********************************************************************************
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;}
}
}
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;}
}
}
Re: DC-motor s 5 brzina i naravno neaktivnim stanjem
ispravak:pic 16f877
Re: DC-motor s 5 brzina i naravno neaktivnim stanjem
je lo ovo OK,ili treba koristiti tipicni pwm koji bas i ne kuzim? =)
Re: DC-motor s 5 brzina i naravno neaktivnim stanjem
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.
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.
Re: DC-motor s 5 brzina i naravno neaktivnim stanjem
ovaj program radi;int nije unsigned,debouncing je napravljen whileom ispod ifa ... pozz
Provjereno;program radi.
Provjereno;program radi.
Re: DC-motor s 5 brzina i naravno neaktivnim stanjem
i di si kod inta izvukao 255,to je kad je u pitanju unsigned char
Re: DC-motor s 5 brzina i naravno neaktivnim stanjem
jeste,to za int si u pravu,ali ipak mislim da u simulaciji moze da radi,ali realno...
- InTheStillOfTheNight
- Odlično uznapredovao
- Posts: 938
- Joined: 01-06-2006, 17:54
- Location: Zagreb
Re: DC-motor s 5 brzina i naravno neaktivnim stanjem
Varijabla tipa "int" može sadržavati negativne brojeve i to u rasponu od:vukboban wrote:prvo ,counter je tipa int,tako da nikad ne moze da bude -1,samo 255.
-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
- InTheStillOfTheNight
- Odlično uznapredovao
- Posts: 938
- Joined: 01-06-2006, 17:54
- Location: Zagreb
Re: DC-motor s 5 brzina i naravno neaktivnim stanjem
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: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.
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;
//...............
}
}
(č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
Re: DC-motor s 5 brzina i naravno neaktivnim stanjem
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...
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...
- InTheStillOfTheNight
- Odlično uznapredovao
- Posts: 938
- Joined: 01-06-2006, 17:54
- Location: Zagreb
Re: DC-motor s 5 brzina i naravno neaktivnim stanjem
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?
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
Re: DC-motor s 5 brzina i naravno neaktivnim stanjem
Mislim da te nije skužio pa ću mu odgovoriti.
Npr. ovaj red:
Vjerojatno misliš da će ti se ovdje motor vrtiti na 80% brzine, no zbog:
će ti se vrtiti na samo cca 4% brzine. Posluži se PWM modulom ili koristi timere jer se moraš riješiti __delay naredbi.
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…
Npr. ovaj red:
Code: Select all
if(counter==4){RD6=1;__delay_us(8000);RD6=0;__delay_us(2000);}
Code: Select all
RD5=1;
__delay_ms(100);
RD5=0;
__delay_ms(100);
Code: Select all
if(RA4==0){
while(RA4==0)continue;
counter++;
}
Drugi problem je; dokle je tipka stisnuta motor stoji…
Re: DC-motor s 5 brzina i naravno neaktivnim stanjem
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
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
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