Ratų Encoder, IPS ir pertraukinėja

A

alirezan

Guest
Hi all,

Aš mėginu naudoti ratų koduojančių mano roboto.Aš naudoju PIC18F1320 ir programavimo C.

Aš IPS kurti PWM ir nustatyti uostų nustatyti judėjimo kryptį.Aš pridedamas ratų kodavimo įrangos (kuri veikia tik baudos) ir leiskite PIC gauti nutraukti kaip jutikliai pamatyti skirtingų spalvų pleistras kai ratas sukasi (naudojama PORTB Kaisčiai pakeisti nutraukti).

Aš labai paprasta programa, bet labai keista problema.Kai aš imituoti į MPLAB SIM veikia gerai.

Čia yra problema.Mano kodera, balta pleistras generuoja 0 ir juodos 1.Kai aš pradedu robotas, ratas juda tik truputį ir sustoja.Aš sužinojau, kad kodera šauna juoda pleistras, jis nebebūna visiškai.Kai sukti vairą rankomis padaryti jutiklis pamatyti balta pleistras tada ratas pradeda judėti, ir vėl, kai jis šauna juoda pleistras, jis sustoja!

Ar kas nors žino, kodėl tai vyksta?

Štai mano kodas:

Ačiū

Kodas:/********/# pragma lustą PIC18F1320 / / CC8E Kompiliavimo direktyvos naudoti 18F1320.H

tuščia Start_PWM (void);

tuščia Stop_PWM (void);/************************************************* ********************************************/

/ / 1 MACRO APIBRĖŽIMAI IR KONSTANTOS /

//***********************************`/ / Loginiai apibrėžimai:

//====================/ / PIC18F1320 apibrėžimai:

//=======================

# define F_OSC 8000000 / / dažnis (Hz) ir osciliatorių (Fosc) ir šiuo metu naudojama laikrodis

/ / ROBOT_PIC apibrėžimai:

//======================int distance_to_move;

int rotation_constant / / turėtų būti 1,754

int time_to_turn;

unsigned int skaitiklis;
# pragma kilmės 0x8 / / Nurodykite, kur programa atminties vietą šį kodą

/ / (0x8 atitinka aukšto prioriteto Nutraukiama Vektorius)

pertraukti int_server (void) / / Į nutraukti paslaugų įprastinių yra specialios funkcijos.
Žr CC8E User informacijos

(

int_save_registers / / CC8E Makro išsaugoti W Statusas ir BJR registraijei (RBIF) / / bent vienas iš RB4: RB7 pasikeitė

(

if (! PORTB.5) / / PB5 gavo pertraukti

(

PORTB.2 = 1;

counter ;

)RBIF = 0;)jei (TMR2IF)

(

TMR2IF = 0;

)int_restore_registers / / CC8E Makro atkurti W Statusas ir BJR registrai

)
/************************************************* ********************************************/

/ / PAGRINDINĖS FUNKCIJOS /

//*****************`void main (void)

(/ / Generatorius Initialization:

//==========================

SWDTEN = 0;

OSCCON = 0b01110000 / / konfigūravimas už:! IDLEN, 8MHz INTOSC Dažnis, PRI_RUN galios veiksenos

OSCTUNE = 0x10; / / Šis registras naudojamas kompensuoti oscilator dažnis dreifu klaida/ / Uosto A, B Initialization:

//========================

ADON = 0;

ADCON1 = 0b01111111;

TRISA = 0b10000010;

TRISB = 0b00100000;PORTA = 0x00; / / inicjalizacja Uostai A B 0

PORTB = 0x00;

PORTA.6 = 0;

PORTB.6 = 0;

RBIE = 1;

RBIF = 0;GIE = 1;

PEIE = 1;

Start_PWM ();o (1);

)tuščia Start_PWM (tuščia)

(

CCP1CON = 0;

Pr2 = 199 / / 249 / / 199 DC = 25%, 249 DC = 75%

CCPR1L = 49 / / 186 / / 49 DC = 25%, 186 DC = 75%

TRISB.3 = 0;

T2CON = 0x01;

CCP1CON = 0x3C;

TMR2 = 0;

TMR2ON = 1;

TMR2IE = 1;

)tuščia Stop_PWM (tuščia)

(

TMR2ON = 0;

)/ / Pabaigos failą

 

Welcome to EDABoard.com

Sponsor

Back
Top