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

Kako kontrolosati smer motora preko daljinskog (PIC18F4680)?

[es] :: Elektronika :: Mikrokontroleri :: Kako kontrolosati smer motora preko daljinskog (PIC18F4680)?

[ Pregleda: 3763 | Odgovora: 14 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Elktro Alek
Student

Član broj: 161268
Poruke: 41
*.vic.bigpond.net.au.



Profil

icon Kako kontrolosati smer motora preko daljinskog (PIC18F4680)?24.03.2008. u 14:51 - pre 195 meseci
Zeleo bih da kontrolisem smer okretanja malog DC motora preko daljnskog i koristeci 18F4680 itd. Kada pritisnem dugme jedan na daljnskom, motor treba da se okrece levo sve dok ne pritisnem dugme broj dva kada bi motor trebao da promeni smer okretanja. Pokusao sam da napisem program za PIC koristeci mikroC ali mi ne ide. Koristio sam RB2 i RB3 za ulaz. Kada se pretisne dugme jedan, jedinica stigne do RB2 i motor bi trebao da pocne da se vrti u odredjenu stanu. Ne zelim da daljinski non stop salje signal PIC-u da je neko dugme pretisnnuto ili nije zbog baterije gde nastaje problem. Sa obzirom da je daljinski samo jednom poslao "high" kada je dugme bilo pritisnuto, kada se dugme odpusti na ulazu RB2 nema vise tog "high" signala i motor se iskljucuje.

Zanima me da li je moguce da se preko programa i mikroC-a nekako "zapamti" stanje dugmeta. Znaci, kad pretisnem dugme jedan (ulaz dolazi na RB2) motor treba da se okrece u jednu stranu sve dok ne pretisnem dugme dva (RB3) kada treba da pocne da se okrece u drugu stranu i obrnuto. Da li neko zna da li postoji neki nacin da se ovako nesto uradi ili moram da sa daljinskog saljem non stop signal?

Pozdrav
 
Odgovor na temu

sander
Aleksandar Golovic
Beograd

Član broj: 21336
Poruke: 211
*.smin-1.sezampro.yu.



Profil

icon Re: Kako kontrolosati smer motora preko daljinskog (PIC18F4680)?24.03.2008. u 17:13 - pre 195 meseci
Nema razloga da se tako nesto ne moze uraditi.
Ajde postavi svoj program pa da vidimo.
 
Odgovor na temu

Elktro Alek
Student

Član broj: 161268
Poruke: 41
*.vic.bigpond.net.au.



Profil

icon Re: Kako kontrolosati smer motora preko daljinskog (PIC18F4680)?25.03.2008. u 04:37 - pre 195 meseci
E ovako, ovo je znaci ceo program sa nekim nacinom kontrolisanja PWM-a (zato sto je potrebno i brzina da se menja)

void init_ports(void); // initilaze the ports
void init_interrupt(); // initilize the interrupts
void Inttostr(int number, char *output); //function to convert intteger to string

signed int requested =0;
signed int error=0;
signed int actual=0;
char pwm_duty=0;
char txt1[6];
char txt2[6];

void main ()
{
CMCON = 0x07;
init_ports(); // initilaze the ports
init_interrupt(); // initilize the interrupts
LCD_Init(&PORTD); // initilaze the LCD, Mikro C function call
LCD_Cmd(LCD_CLEAR); //clear LCD
LCD_Cmd(Lcd_CURSOR_OFF); // Set the LCD cursor off
PWM_Init(1000); // initilaze the PWM, Mikro C function call
PWM_Start();

while(1)
{
// read direction of rotation <= ovako sam ja pokusao da kontrolisem smer, ali ne radi jer ne prima signal non stop!
if(PORTB.F2 == 1) //motor moves in right direction
{ PORTC.F0 = 1;
PORTC.F1 =0;
}
else //motor moves in left direction
{
PORTC.F1 = 1;
PORTC.F0 =0;
}

// display actual and requested speed on LCD
IntToStr(actual, txt1);
Lcd_out(1,1, "Act Speed= " ); // display actual speed on LCD row 1
Lcd_out(1,11,txt1);
IntToStr(requested, txt2);
LCD_out(2,1, "Req Speed= " ); //display requsted speed on LCD row 2
Lcd_out(2,11,txt2);

actual = 0; //clear INTO
Delay_ms(1000); // 1/2 sec. Mikro C function

// Read TMRO => int actual

error = (requested - actual)* 5;

// pwm_duty = char(error) + pwm_duty
pwm_duty = error + pwm_duty;
// new value old value

// output to pwm using Mikro C funcition
pwm_change_duty(pwm_duty);
}
}

void interrupt()
{
if(INT0IF == 1)
{
actual++;
INTCON.INT0IF = 0;
}

//increment
if( PORTB.F7 == 0 && INTCON.RBIF== 1)
{ requested = requested + 2;
INTCON.RBIF = 0;
}

// decrement
if(PORTB.F6 == 0 && INTCON.RBIF == 1)
{
requested = requested - 2;
INTCON.RBIF = 0;
}


PORTB = PORTB;
INTCON.RBIF = 0;
INTCON.INT0IF = 0;
}

void init_ports()
{
TRISB = 0xFF; //PORTB all inputs
TRISC = 0x00; //PORTC all outputs - using RC2 for PWM and RC0&RC1 for H brigde
TRISD = 0x00; //PORTD all outputs - output LCD on port D
}

void init_interrupt(void)
{
//setting the INTCON & INTCON2 register

INTCON.GIE = 1; // Enable interrupt
INTCON.INT0IE = 1; //Enable INTO
INTCON.INT0IF =0; //Clear INTO Flag
INTCON.RBIE = 1; //enable portB rb7..rb4
INTCON.RBIF = 0; //enable RB7..RB4
INTCON2.INTEDG0 = 0; // set the falling edge interrupt
INTCON2.RBPU = 0; //enable pull ups

}
Citat:
sander: Nema razloga da se tako nesto ne moze uraditi.
Ajde postavi svoj program pa da vidimo.
 
Odgovor na temu

sander
Aleksandar Golovic
Beograd

Član broj: 21336
Poruke: 211
*.smin-1.sezampro.yu.



Profil

icon Re: Kako kontrolosati smer motora preko daljinskog (PIC18F4680)?25.03.2008. u 07:54 - pre 195 meseci
Mislim da ti greska u ovom delu:


if(PORTB.F2 == 1) //motor moves in right direction
{ PORTC.F0 = 1;
PORTC.F1 =0;
}
else //motor moves in left direction
{
PORTC.F1 = 1;
PORTC.F0 =0;
}

a trebalo bi promeniti:

if (PORTB.F2) {
PORTC.F0=1;
PORTC.F1=0;
}
if (PORTB.F3) {
PORTC.F1=0;
PORTC.F0=1;
}

Ako hoces da pritiskom na taster 1 ukljucus smer jedan i da motor radi sve dok ne pritisnes taster 2 kada bi promenio smer i tako vrteo do pritiska tastera 1. Mislim da bi u tom slucaju morao da ubacis jos jedan taster za prekid rada motora ili da se uradi da jedan pritisak tastera za smer iskljuci motor dok bi drugi pritisak na isti taster ukljucio motor u datom smeru. Za iskljucenje dodatnim tasterom dodaj:

if (PORTB.F4) { // dodatni taster na RB4
PORTC.F0=0;
PORTC.F1=0;
}
 
Odgovor na temu

Elktro Alek
Student

Član broj: 161268
Poruke: 41
*.vic.bigpond.net.au.



Profil

icon Re: Kako kontrolosati smer motora preko daljinskog (PIC18F4680)?26.03.2008. u 05:40 - pre 195 meseci
Hvala, ali meni jos nesto nije jasno.

Da li ovaj kod radi ono sto meni treba, tj da pritiskom na taster jedan (na daljinskom) koje je povezan sa BR2 vrti u jednu stranu motor, npe levu, sve dok se taster dva ne pritisne koje je povezan sa RB3 kada motor prestaje da se vrti u levo i pocinje da se vrti u desno?


if (PORTB.F2) {
PORTC.F0=1;
PORTC.F1=0;
}
if (PORTB.F3) {
PORTC.F1=0;
PORTC.F0=1;
}

Takodje, motor moze a se vrti u jednu stranu kada se ceo "uredjaj" ukljuci sve dok se dugm za promenu rototacije ne pritisne. Znaci ako se na pocetku vrti u levo, vrtice se u levo sve dok se dugme dva ne pritisne kada menja smer vrtenja.

"Mislim da bi u tom slucaju morao da ubacis jos jedan taster za prekid rada motora ili da se uradi da jedan pritisak tastera za smer iskljuci motor dok bi drugi pritisak na isti taster ukljucio motor u datom smeru."

Mislim da je ova druga varianta bolja, da se dva puta pritisne taster. Da li je moguce da se sve to uradi sa samo 2 tastera, znaci smer okretanja i brzina (za brzinu je potrebno da se povecava i smanjuje)?
 
Odgovor na temu

sander
Aleksandar Golovic
Beograd

Član broj: 21336
Poruke: 211
*.smin-1.sezampro.yu.



Profil

icon Re: Kako kontrolosati smer motora preko daljinskog (PIC18F4680)?26.03.2008. u 08:20 - pre 195 meseci
Jedino sto mi pada na pamet je recimo da sa ta dva tastera ubrzavas i usporavas stim sto ako brzina predje u negativnu vrednost menjas smer. Onda se mora uvesti nova promenljiva.

if (PORTB.F2 && brzina<100) {
if (brzina==0) {
PORTC.F0=1;
PORTC.F1=0;
}
brzina++;
}
if (PORTB.F3 && brzina>-100) {
if (brzina==0) {
PORTC.F0=0;
PORTC.F1=1;
}
brzina--;
}
if (brzina==0) {
PORTC.F0=0;
PORTC.F1=0;
}

U ovom primeru je da se brzina menja od -100 do 100 gde se motor iskljucuje na vrednost brzine na 0. Ako je korak uvecanja i umanjanja mali umesto brzina++ moze i brzina=brzina+10. Takodje treba postavljanjem adekvatnog kasnjenja do sledeceg prolaza kroz proveru pritisaka tastera omoguciti fino podesavanje ubrzanja i usporenja brzine kao i zaustavljanja motora a da se ne desi da ti pritiskom na taster brzine budu maksimalne u jedno i drugom smeru.
 
Odgovor na temu

Elktro Alek
Student

Član broj: 161268
Poruke: 41
*.vic.bigpond.net.au.



Profil

icon Re: Kako kontrolosati smer motora preko daljinskog (PIC18F4680)?26.03.2008. u 11:20 - pre 195 meseci
OK. To isto sam i ja uradio samo na malo drugaciji nacin i pomocu interrupt-ova i jos dva tastera koji odredjuju brzinu.

void interrupt()
{
if(INT0IF == 1)
{
actual++; <= actual je prava brzina motora koje je izmerena pomocu optickih senzora
INTCON.INT0IF = 0;
}

//increment
if( PORTB.F7 == 0 && INTCON.RBIF== 1)
{ requested = requested + 2; <= requested je brzina koju motor treba da postigne, tj zeljena brzina zadata od korisnika preko daljinskog
INTCON.RBIF = 0;
}

// decrement
if(PORTB.F6 == 0 && INTCON.RBIF == 1)
{
requested = requested - 2;
INTCON.RBIF = 0;
}
Da li postoji neka mogunost da, sto se te direkcije tice, se koristi samo jedan taster. Znaci ako je taster bio pretisnut, okreci se levo a ako nije onda se okreci desno. To je ono sto me buni, ne znam da li bi " if(PORTB.F2) " "zapamtio" stanje tastera? Jer kad bih ga ja odpustio, daljinski vise ne bi slao tu potrebnu "jedinicu" PIC-u, tj ne bi slao nista jer on salje samo kad se tajster pritisne, tj kad dodje do promene. Kao recimo ona kola (igracke) sto se kontrolisu peko daljinskog, znas? Jedno dugme da ide levo, jedno da ide desno (plus jos 2 za brzinu).

Znaci, program koji sam ja napisao radi ali kada je signal za stranu okretanja uvek prisutan, u suprotnom ne radi. Kada bih stavio jedan prekidac koji ima 3 polozaja od kojih su 2 povezana sa PIC-om, tj RB1 i RB2 i na 5V i okretanje bi radilo ali radi se preko daljinskog a ne preko prekidaca, tako da ne radi. Tu mi je potrebna pomoc.


Pozdrav

 
Odgovor na temu

sander
Aleksandar Golovic
Beograd

Član broj: 21336
Poruke: 211
*.smin-1.sezampro.yu.



Profil

icon Re: Kako kontrolosati smer motora preko daljinskog (PIC18F4680)?26.03.2008. u 16:09 - pre 195 meseci
Sad mi nije jasno sta tebi treba. Dao si primer koji dok je pritisnut taster vezan na RB2 ukljucuje motor u jednom smeru dok po otpustanju tastera taj smer se menja. Ne znam kakvo ti tu pamcenje pritiska treba kad zelis da posle otpustanja tastera motor promeni smer? Ili mozda hoces da po otpustanju tastera motor staje pa pritiskom na drugi taster da se motor vrti u drugom smeru sve dok je taj taster pritisnut? Ja sam ti dao primer po kom pritiskom na taster vezan na RB2 motor se ukljucuje u jednom smeru sve dok se ne pritisne taster vezan na RB3 kada on pocinje da se okrece u drugom (tako sam ja barem razumeo tvoj zahtev). Kao sto sam ti napisao ova varijanta nema moducnost da zaustavi motor posle njegovog pokretanja vec samo smer okretanja. Druga varijanta koju sam poslao sem smera bi trebalo i da regulise brzinu okretanja motora tako sto bi motor prvobitno bio iskljucen da bi po pritisku na taster vezan na RB2 poceo da se okrece u jednom smeru minimalnom brzinom. Ponovnim pritiskom ili ne otpustanjem tastera za neko vreme, mogao bi da povecavas brzinu ili pritiskom na taster vezan na RB3 tu brzinu smanjujes do zaustavljanja motora i njegovog okretanja u drugom smeru i daljim pritiskom na taster na RB3 tu brzinu povecavao u tom drugom smeru. Znaci koja vrijanta:

1. pritiskom na RB2 motor se vrti ulevo, otpustanjem tastera motor se vrti udesno. (koristi se 1 taster)

2. pritiskom na RB2 motor se vrti ulevo sve dok se ne pritisne taster RB3 kada se motor vrti udesno. (koristi se 2 tastera)

3. pritiskom na RB2 motor se vrti ulevo sve dok se ne pritisne taster RB3 kada motor staje, ponovnim pritiskom tastera RB3 motor se okrece udesno do pritiska tastera RB2. (koristi se dva tastera)

4. pritiskom na RB2 motor se vrti ulevo minimalnom brzinom. za povecanje brzine ulevo potrebno je pritiskati ponovo RB2. za usporenje okretanja motora ulevo potrebno je pritisnuti RB3 do zaustavljanja kada bi ponovnim pritiskom na RB3 motor poceo da se vrti udesno i daljim pritiskom na RB3 ubrzavao u smeru udesno. prtiskanjem na RB2 motor bi usporavao u smeru udesno do zaustavljanja i okretanja motora ulevo. da bi motor iz stanja mirovanja postigao punu brzinu ulevo potrebno je pritisnuti taster RB2 recimo 10 puta pa bi trebalo pritisnuti taster RB3 10 puta da bi motor usporio i zaustavio i pomnovo 10 puta da bi ga zavrteo udesno najvecom brzinom, naravno ako definisemo da ima 10 koraka povecanja brzine (nesto slicno kao podesavanje balansa na audio uredjajima, + i - sa srednjom tackom koja oznacava zaustavljanje motora).
 
Odgovor na temu

Elktro Alek
Student

Član broj: 161268
Poruke: 41
*.vic.bigpond.net.au.



Profil

icon Re: Kako kontrolosati smer motora preko daljinskog (PIC18F4680)?27.03.2008. u 06:14 - pre 195 meseci
Izini, mozda sam ja sve to malo lose objasnio. Varijanta 2 je bila ono sto mi je na pocetku trebalo. Posle sam ja mislio da sa ta dva tastera kontrolisem i smer i brzinu, ali sam na kraju odustao od toga. Znaci varijanta 2 mi treba.

Program koji sam ja napisao koristi "switch" ili prekidac sto nije ono sto meni treba (plus sto sam prekidac nije na daljinskom), znaci meni treba bez prekidaca sa 1, 2 ili vise tastera za kontrolisanje smera. Tako da je varijanta 2 najbolja plus sto cu da dodam 2 tastera za ubrzavanje tj usporavanje motora.

Jos jednom izvini i hvala puno na pomoci.
 
Odgovor na temu

sander
Aleksandar Golovic
Beograd

Član broj: 21336
Poruke: 211
*.smin-1.sezampro.yu.



Profil

icon Re: Kako kontrolosati smer motora preko daljinskog (PIC18F4680)?27.03.2008. u 08:13 - pre 195 meseci
U tom slucaju prvi primer koji sam ti poslao odgovara varijanti 2.
 
Odgovor na temu

Elktro Alek
Student

Član broj: 161268
Poruke: 41
*.vic.bigpond.net.au.



Profil

icon Re: Kako kontrolosati smer motora preko daljinskog (PIC18F4680)?28.03.2008. u 04:38 - pre 195 meseci
Hvala puno na pomoci ali nazalost nije uspelo. Desava se ono sto sam i mislio da ce se desiti. Motor se vrti u jednu stranu, kada pritisnem taster pocne da se vrti u drugu stranu ali i prestaje kada se tasted odpusti, posle cega nastavlja da se se vrti u prvobitnu stranu.

Moracu nesto drugo da pokusam. Jos jednom hvala puno na pomoci.

Pozdrav
 
Odgovor na temu

sander
Aleksandar Golovic
Beograd

Član broj: 21336
Poruke: 211
*.smin-1.sezampro.yu.



Profil

icon Re: Kako kontrolosati smer motora preko daljinskog (PIC18F4680)?28.03.2008. u 07:53 - pre 195 meseci
Kako si vezao tastere, po onom sto sam mogao da zakljucim sa 5V na taster pa drugi kraj na pin mokrokontrolera, da li imas pull-down otpornik sa pina na GND? Ako nemas onda nemas stabilno stanje na ulazu mikrokontrolera pa se moze desiti da iako taster nije pritisnut na ulazu imas stanje logicke 1.

Da li si izbacio deo

else //motor moves in left direction
{
PORTC.F1 = 1;
PORTC.F0 =0;
}

jer ako si ubacio deo programa koji sam prvobitno poslao ne moze da se desi da po otpustanju tastera na RB2 da se ukljuci kontra smer bez pritiska RB3 tastera.
 
Odgovor na temu

Elktro Alek
Student

Član broj: 161268
Poruke: 41
*.vic.bigpond.net.au.



Profil

icon Re: Kako kontrolosati smer motora preko daljinskog (PIC18F4680)?28.03.2008. u 08:56 - pre 195 meseci
U pravu si. Jedna veoma glupa greska. Pogledaj kako je kod napisan. U oba slucaja se vrti u jednu stranu jer su u oba slucaja RC0 = 0 i RC1 = 1. A ono sto se meni javljvo pri prvoj simulaciji je verovatno zato sto sam ja menjao program, ne secam se vise svih kombinacija koje sam probao. Inace, od pocetka sam imao pull-down otpornike mada sam ih i u samom programu aktivirao jer MCU ima tu mogucnosti.

Simulirao sam koristeci PROTEUS i sve radi onako kao si i rekao. Ali doslo je donovog problema. 18F4680 ima samo 3 pina za interaptove, meni treba 4 (jos 2 za brzinu). Moracu da koristim neki drugi MCU ili da radim na malo drugaciji nacin, preko manchestera koji sam u medjuvremenu pogledao malo ali i ne kapiram bas. Imas ti neki predlog?


if (PORTB.F2) {
PORTC.F0=1;
PORTC.F1=0;
}
if (PORTB.F3) {
PORTC.F1=0;
PORTC.F0=1;
}
 
Odgovor na temu

branko_g
Merna tehnika i elektronika

Član broj: 159227
Poruke: 756
*.static-fiber.styrion.net.



+9 Profil

icon Re: Kako kontrolosati smer motora preko daljinskog (PIC18F4680)?28.03.2008. u 09:33 - pre 195 meseci
Citat:
Inace, od pocetka sam imao pull-down otpornike mada sam ih i u samom programu aktivirao jer MCU ima tu mogucnosti.


Pull-Down?
Ja sam mislio da postoje samo uC koji imaju integrisane Pull-Up otpornike*.
Ako je to stvarno tačno onda sam naučio nešto novo.

*to su ustvari MOSFET-ovi sa malom strujom kanala, reda 100-200µA.
 
Odgovor na temu

Elktro Alek
Student

Član broj: 161268
Poruke: 41
*.vic.bigpond.net.au.



Profil

icon Re: Kako kontrolosati smer motora preko daljinskog (PIC18F4680)?30.03.2008. u 10:07 - pre 195 meseci
Branko, integrisane pull-up otpornike sam preko programa aktivirao. Medjutim kada sam pokusao da simuliram to u PROTEUS-u, morao sam da stavim i pull-down otpornike (externalne). U suprotom su mi ti pinovi porta B uvek bili aktivirani a mrzelo me da menjam program. O tome se radi. A i ja ne znam da postoje integrisani pull-down otpornici.


 
Odgovor na temu

[es] :: Elektronika :: Mikrokontroleri :: Kako kontrolosati smer motora preko daljinskog (PIC18F4680)?

[ Pregleda: 3763 | Odgovora: 14 ] > FB > Twit

Postavi temu Odgovori

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