Sunteți pe pagina 1din 24

2008 2009

FACULTATEA DE
AUTOMATICA

SISTEME INTEGRATE
INDRUMAR DE LABORATOR

| Cosmin Ionete|

Contents
1.

Laboratorul 1 ................................................................................................................................... 3
1.1

1.1.1

Date Tehnice.................................................................................................................... 3

1.1.2

Configurarea Plcii MCB251 ........................................................................................... 3

1.2
2.

3.

Vision3 - IDE .......................................................................................................................... 7

Laboratorul 2 ................................................................................................................................. 11
2.1

Configurarea interfetei seriale .............................................................................................. 11

2.2

Testarea interfetei seriale ..................................................................................................... 15

Laboratorul 3 ................................................................................................................................. 16
3.1

4.

Prezentarea si Configurarea placii KEIL MCB 251.................................................................... 3

Implementarea unui regulator pe C.................................................................................... 16

Laboratorul 4 ................................................................................................................................. 17
4.1

Implementarea unui PWM .................................................................................................... 17

4.1.1

5.

Timerul 0........................................................................................................................ 17

4.2

Implementarea unei puni H................................................................................................. 22

4.3

Integrarea PWM-ului cu regulatorul ..................................................................................... 23

Laboratorul 5 ................................................................................................................................. 23
5.1

Citirea encoderului pe C...................................................................................................... 23

5.2

Integrarea encoderului cu PWM-ul si regulatorul................................................................. 24

1. Laboratorul 1
1.1

Prezentarea si Configurarea placii KEIL MCB 251

1.1.1

Date Tehnice

Tensiunea necesar : 8V 12V


Intensitatea curentului: 300mA
Ceasul sistemului: 24MHz
Memorie: 256 Kbytes RAM
128 Kbytes Monitor EEPROM
CPU: Atmel T8xC251G2D
Periferice: 2 interfee RS232

1.1.2

Configurarea Plcii MCB251

Configurarea placii MCB251 se face cu ajutorul comutatoarelor DIP si cu


ajutorul jumperilor de configurare.
1.1.2.1 Comutatoarele DIP (Dual In-Line Package)

n continuare vom prezenta funcionalitatea fiecrui comutator:

Uart_INT: Defaul ON
Comutatorul Uart_INT stabilete daca UART-ul extern 16550 genereaz o ntrerupere
pe microcontroller. Daca Uart_INT este pe poziia ON ieirea ntreruperii de la 16550 este
conectat pe pinul 2 al portului 3. Dac Uart_INT este pe poziia OFF ieirea ntreruperii de
la 16550 nu este conectat la microcontroller. Acest comutator este folositor atunci cnd se

folosete o interfa I/O serial sincronizat pe ntreruperi cu UART-ul extern. Uart_INT


trebuie setat pe poziia ON dac se dorete s se opreasc execuia unui program realizat de
utilizator din debugger.

ext_Uart : Defaul ON
Comutatorul ext_Uart determin dac semnalul de selectare a chip-ului pentru
UART-ul extern 16550 este generat. Dac ext_Uart este pe poziia ON semnalul de selectare
a chip-ului este generat i programul Monitor folosete interfaa serial extern pentru
comunicaie. Viteza comunicaiei este de 57600 BPS. Dac ext_Uart este pe poziia OFF
semnalul de selectare a chip-ului pentru UART nu este generat, iar programul Monitor
folosete interfaa serial intern pentru comunicaie. n acest caz viteza comunicaiei poate fi
19200BPS dac frecvena XTAL-ului este de 12MHz sau 38400BPS daca frecvena XTALului este de 24MHz.

SRC/D2: Default ON
Comutatorul SRC/D2 selecteaz modul SURS sau BINAR pentru CPU-ul 251. Dac
SRC/D2 este pe poziia ON modul surs este selectat. Dac SRC/D2 este pe poziia OFF
modul BINAR este selectat. Atunci cnd un dispozitiv 151 sau 8051 este folosit SRC/D2
trebuie s fie pe poziia OFF. Dac placa MCB251 este folosit cu o aplicaie a utilizatorului
n memoria EEPROM atunci comutatorul SRC/D2 trebuie s fie pe poziia OFF.

PAGE: Default OFF


Comutatorul PAGE selecteaz daca Monitorul 151 sau 251 funcioneaz n modul
memorie paginat sau n modul memorie nepaginat. Atunci cnd PAGE este pe poziia ON
o versiune a Monitorului ce folosete memoria paginat este selectat. Cnd comutatorul este
pe poziia OFF o versiune a Monitorului ce folosete memoria nepaginat este selectat.
Pentru funcionarea corect a plcii trebuie setai i jumperii de configurare.
Dac placa este folosit cu o aplicaie a utilizatorulu n memoria EEPROM atunci
comutatorul PAGE trebuie setat pe poziia OFF.

Monitor: Default ON
Comunatorul Monitor selecteaz dac Monitorul este folosit pentru debugging sau
dac MCB251 funcioneaz cu o aplicaie a utilizatorului la IC13. Cnd comutatorul Monitor
este pe poziia ON map-area memoriei de ctre Monitor este activat iar placa trebuie folosit

Monitorul EEPROM standard. Cnd comutatorul Monitor este pe poziia OFF map-area
memoriei de ctre utilizator este selectat si poate fi introdus o memorie EEPROM cu o
aplicaie a utilizatorului.

51/151: Default ON
Comutatorul 51/151 selecteaz dac un microcontroller compatibil cu 251 sau
151/8051 este instalat n socket-ul IC1. Dac un dispozitiv compatibil cu 151/8051 este
instalat atunci comutatorul 51/151 trebuie s fie pe poziia ON. Dac un dispozitiv compatibil
cu 251 este instalat atunci 51/151 trebuie s fie pe poziia OFF.

A17: Default ON
Comutatorul A17 selecteaz dac CPU-ul 251 folosete P1.7 ca linia de adres A17
sau dac P1.7 este folosit ca o linie de I/O a portului. Cnd A17 este pe poziia ON linia A17
este folosit i utilizatorul poate adresa pn la 256KB de memorie folosind dispozitivul 251.
Cnd A17 este pe poziia OFF P1.7 poate fi folosit ca o linie de I/O a portului.

MAP1, MAP0: Default OFF,OFF


Comutatoarele MAP1 i MAP0 selecteaz maparea memoriei pentru MCB251. Maparea
memoriei pentru placa MCB251 depinde de poziia comutatorului Monitor. n tabelele
prezentate n Figura 4. este prezentat maparea memoriei pentru cele 2 setri.

LED: Default ON
Comutatorul LED selecteaz dac Portul 1 este conectat la cele 8 LED-uri care se afl
pe plac. Cnd comutatorul este pe poziia ON Portul 1 este conectat la cela 8 LED-uri. Cnd
comutatorul este pe poziia OFF Portul 1 nu este conectat la LED-uri. Dac comutatorul
Monitor este pe poziia ON i comutatorul LED este pe poziia OFF, Monitorul nu modific
liniile portului 1 la pornire.
Configuraia folosit pentru aceast aplicaie este prezentat n figura de mai jos:

Figura 1. Maparea memoriei


1.1.2.2 Jumperii de configurare

n continuare vom prezenta funcionalitatea fiecrui jumper:

NMI: Default ON
Jumper-ul de configurare NMI selecteaz butonul INT este conectat la pinul NMI de
pe microcontrollerul Temic 251G1. Dac NMI este pe pozii OFF, butonul INT este conectat
la pinul NMI de pe Temic 251G1. Dac NMI este pe poziia ON atunci pinul 34 este conectat
la GND.

INT1: Default ON
Jumperul de configurare INT1 selecteaz dac butonul INT este conectat la pinul 3.3
al microcontrollerului. Daca INT1 este pe poziia ON butonul INT este conectat la pinul 3.3.
Dac INT1 este pe poziia OFF butonul INT nu este conectat la pinul 3.3.

PAGE/NONP: Default NONP


Cei 9 jumperi de configurare selecteaz dac placa MCB251 funcioneaz n modul
memorie paginat sau n modul memorie nepaginat. Cnd aceti jumperi sunt n poziia

PAGE magistrala de adrese/date este configurat pentru modul memorie paginat. Cnd
aceti jumperi sunt pe poziia NONP magistrala este configurat pentru modul memorie
nepaginat.
Configuraia folosit pentru aceast aplicaie este prezentat n figura de mai jos:

Figura 2. Jumperii de configurare

1.2

Vision3 - IDE

Downloadarea aplicaiei pe microcontroller se realizeaz folosind programul Vision


i interfaa serial intern a plcii MCB251. Configurarea programului Vision3 se realizeaz
accesnd csua de dialog Opions for target... din meniul Project. Cele mai importante
opiuni sunt urmtoarele:
-

n csua Device trebuie selectat tipul microcontroller-ului existent pe plac;

Figura 3.

n csua Target trebuie fcute urmtoarele configurri: Xtal: 12 sau 24, CPU
Mode: Source(251 native), Memory Model: Tiny, Code Rom Size: Large 64K
program, 4 Byte Interrupt Frame Size, #1 ROM start 0xFF0000 size 0x8000, #2 RAM
start 0x0000 size 0x0400 (Figura 4.);

n csua C251 trebuie adugate cile unde se gsesc header-ele pe hard-disk (Figura
5.);

n csua Debug : Use:Keil Monitor 251-Driver, Load Application at Startup, Run to


main(), iar opiunile Breackpoint, Watchpoint, Toolbox, Memory Display trebuie
deselectate (Figura 6.). De asemenea in csua de dialog corespunztoare butonului
Settings trebuie selectat portul serial al PC-ului ce va fi folosit pentru a comunica cu
placa precum si viteza (Figura 7. ) (aceasta variaz in funcie de frecvena Xtal-ului,
pentru frecvena de 12MHz viteza corespunztoare este de 19200 iar pentru o
frecven de 24MHz viteza corespunztoare este de 38400)
Compilarea aplicaiei se face fie prin apsarea tastei F7 fie prin accesarea butonului

. Dup ce toate setrilea au fost fcute i aplicaia compilat, dac nu exist nici o eroare,
realizarea conexiunii intre programul Vision si placa MCB251 se face fie prin apsarea
butonului

fie folosind combinaia de taste Ctrl+F5. Pentru pornirea aplicaiei pe

microcontroller este necesar apsarea tastei F5.


Prentru ca aplicaia download-at pe microcontroller sa funcioneze i dup
ntreruperea conexiunii cu programul Vision3 este necesar ca nainte de opri operaiunea de
debug s se nlture conexiunea serial realizat ntre PC si placa de evaluare, iar apoi poate fi
oprit operaiunea de debug prin apsarea butonului

Figura 4.

Figura 5.

Figura 6.

Figura 7.
Compilatorul C251 permite scrierea rutinelor de tratare a ntreruperilor in C. Declararea
rutinelor se face respectnd sintaxa:
Void function_name (void) interrupt interrupt_number [using register_bank]
n tabelul de mai jos sunt prezentate ntreruperile C:
Numrul ntreruperii

Adresa

Numrul ntreruperii

Adresa

0 (EXTERNAL INT 0)

0003h

16

0083h

1 (TIMER/COUNTER 0)

000Bh

17

008Bh

2 (EXTERNAL INT 1)

0013h

18

0093h

3 (TIMER/COUNTER 1)

001Bh

19

009Bh

4 (SERIAL PORT)

0023h

20

00A3h

5 (TIMER/COUNTER 2)

002Bh

21

00ABh

6 (PCA)

0033h

22

00B3h

003Bh

23

00BBh

0043h

24

00C3h

004Bh

25

00CBh

10

0053h

26

00D3h

11

005Bh

27

00DBh

12

0063h

28

00E3h

13

006Bh

29

00EBh

14

0073h

30

00F3h

15

007Bh

31

00FBh

2. Laboratorul 2
2.1

Configurarea interfetei seriale

Portul serial pune la dispoziie att moduri de comunicare sincron ct i asincron.


Funcioneaz ca un receptor/transmitor asincron universal (UART) n trei moduri full-duplex
(modurile 1,2 i 3). Transmisia i recepia asincrone pot aprea simultan i la viteze de transmisie
diferite. Portul serial funcioneaz de asemenea ntr-un singur mod sincron (modul 0).
Modul sincron (modul 0) funcioneaz la o singur vitez de transmisie, modul 2 funcioneaz
la 2 viteze de transmisie iar modurile 3 i 4 funcioneaz la diferite viteze de transmisie ce sunt
generate de timerul 1 i 2.
Semnalele portului serial sunt definite in tabelul 6.1 iar regitrii de funcii speciale (SFR) sunt
descrii n tabelul 6.2.
n cele trei moduri asincrone UART transmite pe pinul TXD i recepioneaz pe pinul RXD.
n modul sincron (modul 0), UART trimite un semnal de ceas pe pinul TXD i trimite i primete
mesaje pe pinul RXD. Registrul SBUF, ce are rolul de a stoca informaia recepionat precum i
informaia trimis, este format din regitrii diferii. Pentru a trimite un byte este scris n registrul SBUF
iar atunci cnd este primit informaie aceasta este citit din registrul SBUF. Un al doilea byte de
informaie poate fi primit chiar dac primul nu a fost citit, ins acesta va fi scris peste informaia din
registru. UART seteaz biii de ntrerupere, TI la transmisie i RI la recepie. Cei doi bii impart o
singur cerere de ntrerupere i un singur vector de intrerupere.

Semnalele Portului Serial


Nume

Tip

Descriere

Port

TXD

Transmisia datelor. n modul 0 TXD trimite semnalul de ceas. n

P3.1

modurile 1,2 i 3 TXD transmite date pe portul serial.


RXD

I/O

Recepia datelor. n modul 0 RXD trimite i recepioneaz date. n

P3.0

modurile 1,2 i 3 recepioneaz date.


TABEL 6.1

Regitrii de funcii speciale ai portului serial


Mnemonica

Descriere

Adres

SBUF

Serial Buffer. Doi regitrii separai formeaz registrul SBUF. Prin scrierea

99h

n SBUF se ncarc bufferul de transmisie; prin citirea din SBUF se


aceseaza informaia recepionat.
SCON

Serial Port Control. Selecteaz modul de funcionare al portului serial.

98h

SADDR

Serial Address. Definete adresa individual pentru un dispozitiv slave.

A8h

SADEN

Serial Address Enable. Specific masca folosit pentru a defini adresa dat

B8h

unui dispozitiv slave


TABEL 6.2
Registrul SCON este folosit pentru configurarea portului serial.
Adres :

SCON

98H

Adresa de reset :00XXX000B


0

FE/SM0
Numrul
bitului

SM1

SM2

REN

TB8

Mnemonica
FE

RB8

TI

RI

Funcie
Framing Bit Error:
Pentru a selecta aceast funcie trebuie setat bitul SMOD0 din registrul
PCON. Este setat de hardware pentru a indica un bit de stop invalid. Este

resetat de software.
SM0

Bitul 0 pentru modul portului serial:


Pentru a selecta aceast funcie trebuie resetat bitul SMOD0 din registrul
PCON. Biii SM0 i SM1 sunt scrii software pentru a selecta modul de
funcionare al portului serial.
Bitul 1 pentru modul portului serial:
Biii SM1 i SM0 sunt scrii software pentru a selecta modul de
funcionare al portului serial.

SM1

SM0

SM1

Mod

Descriere

Frecven

Shift Register

FOSC/12

UART pe 8 bii

Variabil

UART pe 8 bii

FOSC/32 sau FOSC/64

UART pe 8 bii

Variabil

Bitul 2 pentru modul portului serial:


SM2 este scris software pentru a activa sau dezactiva comunicarea
5

SM2

multiprocesor sau recunoasterea automat a adresei. Aceast funcie i


permite portului serial s deosebeasc ntre date i mesaje de comand i
s recunoasc adrese slave.

REN

Bitul de activare a recepiei:


Pentru a activa recepia trebuie setat acest bit. Pentru a activa transmisia

trebuie resetat acest bit.


Transmit Bit 8:
3

TB8

n modurile 2 i 3 acest bit este scris software cu al 9-lea bit trimis. Acest
bit nu este folosit in modurile 0 i 1.
Receiver Bit 8:
n modul 0 nu este folosit.

n modul 1 (SM2 resetat) este setat sau resetat de hardware pentru a arta

RB8

ca s-a primit un bit de stop.


n modurile 2 i 3 (SM2 setat) este setat sau resetat de hardware pentru a
reflecta cel de-al 9-lea bit primit.
Transmit Interrupt Flag Bit:

TI

Este setat de emitor dup ce ultimul bit de date a fost trimis. Resetat de
software.
Receive Interrupt Flag Bit:

RI

Este setat de receptor dup ce ultimul bit de date a fost primit. Este resetat
de software.
SCON: Registrul de funcii speciale al portului serial

Moduri de funcionare
Portul serial de intrare/ieire poate funciona intr-un mod sincron i trei moduri asincrone.
Modul sincron 0
Modul 0 este un mod sincron half-duplex care este utilizat pentru a-i oferi unui dispozitiv
funcionalitatea unui shift register. Pinul (TXD) d la ieire o serie de 8 tacturi de ceas n timp ce pinul
(RXD) trimite sau primeste un byte de date. Cei 8 bii de date sunt trimii sau primii cu LSB primul.
Shiftarea se face n ultima faz (S6P2) a fiecrui ciclu extern, ce corespunde unei frecvene de FOSC/12.
Transmisia (Modul 0)
Pentru a iniia o transmise trebuie urmai paii de mai jos:
1. Se reseteaz biii SM0, SM1 i REN din registrul SCON.
2. Se scrie byte-ul ce trebuie trimis n registrul SBUF. Aceast scriere pornete transmisia.
Hardware-ul execut scrierea n SBUF n ultima faz (S6P2) a unui ciclu extern. La S6P2 al
ciclului urmtor hardware-ul pune LSB pe pinul RXD. La S3P1 al ciclului urmtor pinul TXD se duce
in 0 pentru tact de ceas. Aceast operaie se repet la fiecare ciclu extern. n al noua-lea ciclu dup

scrierea in SBUF, MSB va fi pe pinul RXD. La nceputul celui de-al zece-lea hardware-ul pune pinul
RXD n 1 pentru a indica terminarea transmisiei.
Recepia (Modul 0)
Pentru a incepe o recepie n modul 0 trebuie resetai biii SM0, SM1 i RI i setat bitul REN din
registrul SCON.
Hardware-ul scrie n registrul SCON n ultima faz (S6P2) a unui ciclu extern. n al doilea ciclu
extern dup ce a fost scris registrul SCON, TXD se duce n 0 la S3P1 pentru primul semnal de ceas i
LSB este pus pe pinul RXD la S5P2. Bitul LSB este apoi pus in shift register. Dup 8 astfel de
operaii, la S6P2 al fiecrui ciclu extern, LSB este pus n shift register iar hardware-ul scrie in RI
pentru a arta ca s-a terminat recepia. Apoi byte=ul primit poate fi citit din SBUF.

Moduri asincron (modurile 1, 2 i 3)


Portul serial are trei moduri asincrone de funcionare.
Modul 1. Modul 1 este un mod full-duplex asincron. Mesajele trimise au 10 bii: un bit de inceput,
opt biti de date i un bit de sfrit. Datele sunt trimise pe pinul TXD si sunt receptionate pe pinul
RXD. Cnd un mesaj este recepionat, bitul de sfrit este citit din bitul RB8 din registrul SCON.
Viteza de transmisie este dat prin overflow de ctre timerul 1 sau timerul 2.
Modurile 2 i 3. Modurile 2 i 3 sunt moduri asincrone, full-duplex. Mesajele trimise au 11 bii: un
bit de nceput, opt bii de date (trimii i recepionai cu LSB la nceput), un al 9-lea bit de date
programabil i un bit de sfrit. Datele sunt trimise pe pinul TXD i recepionate pe pinul RXD. La
recepie al 9-lea bit este citit din bitul RB8 din registrul SCON. La emisie al 9-lea bit este scris n bitul
TB8 din registrul SCON.
n modul 2 viteza de transmisie este programat la 1/32 sau 1/64 din frecvena oscilatorului.
n modul 3 viteza de transmisie este generat prin overflow de ctre timerul 1 sau 2.
Transmisia (Modurile 1,2 i 3)
Pentru a iniia o transmisie trebuie urmai paii de mai jos:
1. Se scrie n registrul SCON. Se selecteaz modul de funcionare prin biii SM0 i SM1 i se
reseteaz bitul REN. Pentru modurile 2 i 3 trebuie de asemenea scris al 9-lea bit in TB8.
2. Se scrie byte-ul ce trebuie transmis n registrul SBUF, aceast scriere pornind transmisia.
Recepia (Modurile 1,2 i 3)
Pentru recepie trebuie setat bitul REN din registrul SCON. Recepia n sine este iniiat atunci
cnd este sesizat o tranziie din 1 n 0 pe pinul RXD.

2.2

Testarea interfetei seriale

Pentru testarea comunicaiei dintre PC si placa de evaluare MCB251 se va folosi


programul HyperTerminal. Configuratia folosita pentru HyperTerminal trebuie sa fie
asemanatoare cu cea a Vision (Figura 7.).
S se realizeze un program care sa citeasca 4 caractere din HyperTerminal, iar apoi sa
le transmita pn cnd vor fi recepionate 4 caractere noi.
Fiecare caracter este citit din registrul SBUF si stocat ntr-un registru local, de 8 bii,
pentru a putea fi modificat. Cnd cele 4 caractere au fost recepionate ele sunt grupate ntr-o
variabil de tip float (32 bii). Dup realizarea acestei operaii caracterele sunt trimise pe
interfaa serial n aceeai ordine n care au fost recepionate. Att la recepie ct i la
transmisie LSB este primul bit recepionat iar MSB este ultimul bit recepionat.

SERIAL
INPUT

C
Cele 4 caractere sunt preluate din bufferul
SBUF si stocate intr-un buffer local, iar
apoi sunt transmise pe interfata seriala

SERIAL
OUTPUT

PC
SERIAL
OUTPUT

Din HyperTerminal se initiaza comunicatia


prin trimiterea unui mesaj de 4 caractere.
Mesajul trimis este receptionat in continuu.

SERIAL
INPUT

3. Laboratorul 3
3.1

Implementarea unui regulator pe C

Urmtoarea aplicaie realizeaz controlul motorului de curent continuu SRV02


folosind microcontroller-ul T8xC251G2D pentru implementarea unui regulator i mediul de
modelare Simulink pentru citirea poziiei curente a motorului, calculul erorii, trimiterea erorii
la microcontroller i trimiterea unei comenzi ctre motor.

COMANDA

POZITIE

COMANDA

EROARE

Blocurile folosite sunt cele din libraria Quanser a programului Simulink. Citirea
pozitiei curente a motorului se face cu ajutorul blocului Encoder Input. Pentru o rotaie
complet encoderul de pe motor furnizeaz valoarea 4096. Deoarece referina este dat n
grade este necesar conversia n grade a valorii date de ctre encoder pentru a se calcula
eroarea. Trimiterea comenzii ctre motor se facecu folosind blocul Analog Output. Dat fiind
faptul c blocul Analog Output lucreaz cu date de tip double va fi necesar introducerea
blocului Data Type Conversion ce realizeaz conversia datelor primite, pe interfaa serial, de
la single la double.
Regulatorul implementat este un regulator de tip PID ideal, cu funcia de transfer
1
H R ( s ) = K _ p + K _ i + K _ d s . Prin anularea factorilor de amplificare K_p, K_i sau
s
K_d, se pot obine diferite tipuri de regulatoare, de exemplu un regulator de tip PD se obine
atunci cnd K_i ia valoarea 0, iar un regulator de tip P se obine atunci cnd K_i i K_d sunt
y y k 1
0. Discretizarea funciei de transfer a regulatorului s-a fcut utiliznd formula: y& = k
.
h

4. Laboratorul 4
4.1

Implementarea unui PWM

Pentru a putea comanda motorul direct de pe microcontroller, n urmtoarea aplicaie


vom implementa funcionalitatea unui PWM.
Cele 2 caracteristici principale ale unui PWM sunt factorul de umplere si perioada.
Factorul de umplere va fi stabilit de comanda dat de regulatorul implementat la Laboratorul
3, iar perioada de baz am stabilit-o la 5ms.
Pentru a realiza aceast funcionalitate am folosit Timer-ul 0 care a fost programat s
funcioneze n modul 2, timer pe 8 bii cu rencrcare automat. n continuare vom face o
scurta descriere a Timerului 0.

4.1.1

Timerul 0

Timerul 0 funcioneaz ca un timer sau ca un numrtor de evenimente n patru moduri de


operare. n figurile 4.2, 4.3 i 4.4 sunt prezentate configuraiile logice ale fiecrui mod de operare.
Timerul 0 este controlat de patru bii din registrul TMOD i de biii 5, 4, 1 i 0 din registrul
TCON. Registrul TMOD selecteaz metoda de timer timer gating (GATE0), operarea ca numrtor
sau timer (T/C0#) i modul de operare (M10 i M00). Registrul TCON furnizeaz funcii de control
ale timerului 0: flagul de depire (TF0), controlul funcionrii (TR0), flagul de ntrerupere (IE0) i
controlul tipului de ntrerupere (IT0).
Pentru funcionarea ca un timer normal (GATE0=0), setarea TR0 permite incrementarea lui
TL0 de ctre intrarea selectat. Setarea GATE0 i TR0 permite pinului extern INT0# s controleze
timerul. Aceast configuraie poate fi folosit pentru a face msurtori n lime de puls. O depire a
timerului 0 seteaz flagul TF0 genernd o cerere de ntrerupere.

Modul 0 (timer pe 13 bii)


Modul 0 configureaz timerul 0 ca un timer pe 13 bii care este setat ca un timer pe 8 bii
(registrul TH0) cu un prescalar modulo 32 implementat cu cei mai de jos cinci bii ai registrului TL0.
Cei mai de sus trei bii ai registrului TL0 sunt ignorai. O depire a prescalarului incrementeaz
incrementeaz registrul TH0.

Modul 1 (timer pe 16 bii)


Modul 1 configureaz timerul 0 ca un timer pe 16 bii cu TH0 i TL0 conectai n cascad.
Intrarea selectat incrementeaz TL0.

Modul 2 (timer pe 8 bii cu rencrcare automat)


Modul 2 configureaz timerul 0 ca un timer pe 8 bii (registrul 0) care se rencarc automat din
registrul TH0. O depire a TL0 seteaz flagul de depire (TF0) din registrul TCON i rencarc TL0
cu coninutul lui TH0, care este presetat de software. Cnd cererea de ntrerupere este tratat TF0 este
resetat hardware. Rencrcarea las TH0 neschimbat.

Modul 3 (dou cronometre pe 8 bii)


Modul 3 configureaz timerul 0 astfel nct regitrii TL0 i TH0 funcioneaz ca i cronometre
separate pe 8 bii. Acest mod este folosit de ctre aplicaiile ce au nevoie de doua cronometre sau
numrtoare pe 8 bii. TL0 folosete biii de control C/T0# i GATE0, ai timerului 0, din registrul
TMOD i biii TR0 i TF0 din registrul TCON. TH0 este blocat ntr-o funcie de timer i folosete biii
de ntrerupere (TF1) i de control (TR1) ai timerului 1.
Adres : S:89H

TMOD

Adresa de reset :00000000B


0

7
GATE1

Numrul
bitului

C/T1#

M11

M01

GATE0

Mnemonica

C/T0#

M10

M00

Funcie
Poarta timerului 1:

GATE1

Cnd GATE1=0, bitul de cotrol al funcionrii TR1 direcioneaz


semnalul de intrare ctre registrul numrtorului. Cnd GATE1=1 i
TR1=1, semnalul extern INT1 direcioneaz intrarea timerului.
Bitul ce selecteaz timerul/numrtorul timerului 1:

C/T1#

C/T1#=0 selecteaz funcionarea ca i timer


C/T1#=1 selecteaz funcionarea ca numrtor (timerul 1 numr
tranziiile negative pe pinul extern T1).

5,4

M11, M01

Selectarea modului timerului 1:

M11

M01

Modul 0: timer/numrtor pe 8 bii (TH1) cu un


prescalar pe 5 bii (TL1)

Modul 1: timer/numrtor pe 16 bii

Modul 2: timer/numrtor pe 8 bii cu rencrcare


(TL1). Este rencrcat din TH1 la depire

Modul 3: timerul 1 este oprit. Reine numrtoarea

Poarta timerului 0:
3

GATE0

Cnd GATE0=0, bitul de control al funcionrii TR0 direcioneaz


semnalul de intrare la registrul timerului. Cnd GATE0=1 i TR0=1
semnalul extern INT0 direcioneaz intrarea timerului.
Bitul ce selecteaz timerul/numrtorul timerului 0:

C/T0#

C/T0#=0 selecteaz funcionarea ca un timer


C/T0#=1 selecteaz funcionarea ca numrtor (timerul 0 numr
tranziiile negative pe pinul extern T0)
Selectarea modului timerului 0:
M11

M01

Modul 0: timer/numrtor pe 8 bii (TH0) cu un


prescalar pe 5 bii (TL0)

1,0

M10, M00

Modul 1: timer/numrtor pe 16 bii

Modul 2: timer/numrtor pe 8 bii cu rencrcare


(TL0). Este rencrcat din TH0 la depire

Modul 3: TL0 este un timer/numrtor pe 8 bii. TH0


este un timer pe 8 bii ce folosete numai biii TR1 i
TF1 ai timerului 1

TMOD: Registrul de control al modului timerului/numrtorului

Adres : S:88H

TCON

Adresa de reset :00000000B


0
7
TF1
Numrul
bitului

TR1

TF0

TR0

Mnemonica

IE1

IT1

IE0

IT0

Funcie
Flagul de depire al timerului 1:

TF1

Este setat de hardware cnd registrul timerului 1 depete. Este resetat


de hardware dup ce este tratat ntreruperea.

TR1

Bitul de control al funcionrii timerului 1:


Este setat/resetat de software pentru a porni/opri timerul 1
Flagul de depire al timerului 0:

TF0

Este setat de hardware cnd registrul timerului 0 depete. Este resetat


de hardware dup ce este tratat ntreruperea.

TR0

Bitul de control al funcionrii timerului 0:


Este setat/resetat de software pentru pentru a porni/opri timerul 0
Flagul ntreruperii 1:

IE1

Este setat de hardware cnd o ntrerupere este detectat pe pinul INT1#.


Este resetat atunci cnd ntreruperea este procesat (daca este edge
triggered).
Bitul de control al tipului ntreruperii 1:

IT1

Setarea acestui bit selecteaz declanarea ntreruperii 1 pe margine (edge


triggered). Resetarea acestui bit selecteaz declanarea pe nivel (level
triggered).
Flagul ntreruperii 0:

IE0

Este setat de hardware cnd o ntrerupere extern este detectat pe pinul


INT0#. Este resetat atunci cnd ntreruperea este procesat.
Bitul de control al tipului ntreruperii 0:

IT0

Setarea acestui bit selecteaz declanarea ntreruperii externe 0 pe


margine (edge triggered). Resetarea acestui bit selecteaz declanarea pe
nivel (level triggered).

TCON: Registrul de control al timerului/numrtorului

Frecvena oscilatorului poate fi de 24Mhz sau 12Mhz n funcie de viteza interfeei


seriale; dac interfaa serial funcioneaz la 38400bps atunci frecvena oscilatorului este de
24Mhz, iar dac interfaa serial funcioneaz la 19200bps atunci frecvena oscilatorului este
de 12Mhz. n acest aplicaie FOSC=24Mhz. Va trebui sa calculati valoarea ce trebuie
incarcata n regitrii TL0 i TH0 pentru ca Timer-ul 0 sa dea o ntrerupere dup 100 tickuri.
n rutina de tratare a ntreruperii date de Timer-ul

0 a fost implementat

funcionalitatea PWM-ului. Perioada PWM-ului a fost mprit n 100 de pri. La intrarea n


rutina de tratare a ntreruperii se stabilete dac s-a terminat o perioad a PWM-ului; dac s-a
terminat atunci se semnalizeaz nceperea unei noi perioade (pwm_p=multi*100), se stabilete
sensul de rotaie al motorului iar apoi se analizeaz factorul de umplere al semnalului PWM;
dac nu s-a terminat se continua analiza factorului de umplere. Fiecare parte din semnalul
PWM vine dup 100 tick-uri ale Timer-ului 0, deci o perioad PWM este dat dup
100*5*10-5sec = 5ms. Pentru a modifica uor perioada PWM-ului am folosit variabila multi;
n funcie de valoarea acestei variabile perioada PWM-ului poate fi 5ms (multi=1); 10ms
(multi=2); 22ms (multi=4.4)... n Figura 8. este prezentat mecanismul de funcionare.

multi *100

multi * DT

100 tickuri

Figura 8.
Pentru testarea acestei funcionaliti se va folosi un model Simulink si blocurile Serial
Initialization si Serial Output din libraria Quanser. Din Simulink se va trimite un numr pe un
byte reprezentnd factorul de umplere al unei perioade. Vizualizarea semnalului dat la ieirea
pinilor 3 i 4 ai portului 1 se face cu ajutorul unui osciloscop. n figurile de mai jos sunt
prezentate dou posibile forme de und.

perioada

Factor de
umplere de 50%

Factor de
umplere de 20%

Figura 9.

4.2

perioada

Figura 10.

Implementarea unei puni H

Pentru comandarea motorului in ambele direcii s-a construit, din 4 tranzistori BD 337
i 4 rezistene de 1.5 k, o punte H n care vor intra 2 semnale de tip PWM luate de pe pinii
P1.3 i P1.4.
Deoarece cei 4 tranzistori nu pot conduce in acelai timp iar la pornirea plcii att
semnalul de pe pinul P1.3 ct i cel de pe P1.4 sunt n 1 logic nainte de intrarea in puntea H
s-a construit un circuit logic, format dintr-o poart SAU EXCLUSIV i dou pori I,
care scoate la ieire 0 logic atunci cnd ambele intrri sunt 1. Deoarece puntea H este
alimentat la 12 V, pentru a obine o cdere de tensiune pe colector-emitor la tranzistorii BD
337 de 0.2 V, s-a ales alimentarea circuitului logic la 12V.

4.3

Integrarea PWM-ului cu regulatorul

Aplicaia final va trebui s realizeze funcionalitatea din figura de mai jos:

5. Laboratorul 5
5.1

Citirea encoderului pe C

Pentru a ne desprinde complet de mediul MatLab/Simulink va trebui s implementm citirea


encoderului pe microcontroller. In acest fel vom putea realize comanda motorului folosind orice
program ce are acces la interfaa serial.

Un encoder rotativ este un dispozitiv electro-mecanic ce convertete poziia unghiular


a unui ax n cod analogic sau digital. Exist dou tipuri de encodere: absolute i incrementale
(relative).
Encoderul aflat pe servomotorul SRV02 este un encoder rotativ incremental. Acest tip
de encoder poate fi la rndul su de dou feluri: mecanic i optic. Cele optice au dou piste
codate iar cele mecanice au dou contacte ce sunt actionate de camele de pe axul rotativ.
Encoderul furnizeaz dou semnale de ieire defazate cu 90o. Formele de und ale
celor 2 semnale sunt prezentate n Figura 11. Aceste semnale pot fi citite fie folosind
ntreruperi fie prin polling. Pinul P3.3 este folosit ca intrare pentru semnalul A, iar pinul P3.2
este folosit ca pin de intrare pentru semnalul B. Un front descresctor al semnalului A
declaneaz o ntrerupere pe microcontroller. n rutina de tratare a ntreruperii se analizeaz

semnalul B facndu-se polling pe pinul P3.2. Dac valoarea citit de pe pinul P3.2 este 1
atunci se incrementeaz variabila ce d poziia motorului, altfel aceast variabil se
decrementeaz.

Putem spune ca semnalul A furnizeaz o numrtoare iar semnalul B

furnizeaz direcia de deplasare a motorului. La o rotatie complet encoderul furnizeaz 1024


de impulsuri, deci pentru a afla poziia unghiular a motorului variabila ce da pozitia trebuie
nmulit cu 360/1024.

Figura 11.

5.2

Integrarea encoderului cu PWM-ul si regulatorul

Aplicaia final va trebui s realizeze funcionalitatea din figura de mai jos:

REFERINTA
POZITIE

S-ar putea să vă placă și