Professional Documents
Culture Documents
• Von Neuman
• Caracteristici:
• Magistrala comuna
pentru memoria de
program si de date
• Exemplu tipic:
• Motorola HC11
• Arhitectura Harvard
• Caracteristici:
• magistrale distincte
pentru program si date
• Exemplu tipic
• Atmel AVR
Consecinte ale arhitecturii Harvard
– The presence of the second bus makes the following things possible:
− While an instruction is executed, the next instruction can be fetched
from the program memory. This technique is called pipelining and
brings a significant increase of the computer speed.
− The program memory can be organized in words of a different size,
usually larger, than the data memory. Wider instructions mean a
greater data flow to the CPU, and therefore the overall speed is
higher.
− Such architecture, along with reducing and optimizing the instruction
set, allow that most instructions execute in a single machine cycle.
Since the Harvard architecture is often accompanied by the reduction
of the size and complexity of the instruction set, the computers with
this architecture are also called RISC. (Reduced Instruction Set
Computers) For example, some PIC microcontrollers have an
instruction set of only 35 instructions, compared to more than 100 of
HC11. The speed increase is even higher.
Consecinte asupra organizarii spatiului de adrese
• Harta memoriei in
cazul unui
microcontroller HC11
• Harta memoriei
pentru un
microcontroller
din seria Atmel
AVR
• Se observa ca aici
exista 3 spatii de
adrese
Registrele interne ale CPU
• HC11 • AVR
• Doi acumulatori A si B. Pot fi • 32 acumulatori R0-R31
concatenati pentru a forma un • R26-R27, R28-R29, R30-R31
registru dublu D can be concatenated to form the
• Doua registre index X si Y X, Y, Z , registers
• Stack pointer • Stack pointer SP
• Registrul de stare CPU denumit • registrul de stare CPU denumit
CCR SREG
• Numaratorul de program PC • Numaratorul de program
Interfetele periferice
• Any peripheral
interface contains
one or more
control and status
registers, and one
or more data
registers
• These registers are,
normally, located
in the address
space of the data
memory, and are
accessed as RAM
locations
Interfete periferice uzuale
Definitie:
• An interrupt is a mechanism that allows an
external event to temporarily put on hold the
normal execution of the program, forcing the
execution of a specific subroutine. Once the
interrupt service subroutine completes, the main
program continues from the point where it was
interrupted.
Procesul de tratare a unei intreruperi
• The next step is the execution of the interrupt service routine (ISR).
This is a program sequence similar to a subroutine, but ended with a
special instruction called Return from Interrupt (RTI, RETI).
• Observatie importanta: STAREA masinii trebuie salvata prin soft
inainte de executia rutinei de intrerupere si restaurata dupa executia
rutinei de intrerupere.
• The final step in handling an interrupt is the actual return to the main
program. This is done by executing a RTI (RETI) instruction as
mentioned before. When this instruction is encountered, the contents of
PC, saved in step 2, is retrieved from stack and restored, which is
equivalent to a jump to the point where the program was interrupted.
Intreruperi - note importante
The stack is essential for the interrupt system. Both the PC and the
CPU status are saved in the stack when handling interrupts.
Therefore, the SP must be initialized by software before enabling
the interrupts.
The interrupt service routine must save the CPU status and restore
it before returning to the main program.
If two or more interrupt requests occur simultaneously, they are
serviced in a predetermined, order according to a hardwired
priority
Controlul asupra intreruperilor
.......
.ORG $000C
RJMP ANA_COMP ;unconditional jump to the
;interrupt handler
.......
ANA_COMP:
.......
RETI
Porturile de intrare-iesire ale
microcontrollerelor
TFLG1 7 6 5 4 3 2 1 0
RESET 0 0 0 0 0 0 0 0
Exemple de utilizare
Generarea unor intreruperi la
overflow
• Scopul este generarea unor intreruperi la
intervale precise de timp, pentru a ocoli
dezavantajul functiilor de asteptare (ex.
Delay) care blocheaza procesorul pe
durata de asteptare.
• Practic, daca se scrie o valoare in TCNT,
atunci timpul pana la overflow este:
• (Capacitatea_numaratorului-
Cantitatea_scrisa)*Perioada_ceasului
Dialogul pentru initializare
Exemplu de calcul
• Dacă nu se intervine prin program prin scriere directă în
numărătorul de 8 biţi TCNT0 (Timer0 Counter), pentru
un ceas de numărare cu perioada de 64us, depăşirea
capacităţii va surveni la intervale de
(255+1)*64us=16384us=16.384ms.
• Dacă dorim ca întreruperile de overflow de la Timer0 să
se repete la intervale de mai mici de 16.384ms, este
necesar ca în rutina de întrerupere să scriem în
numărătorul TCNT0 o valoare N, (N>0 şi N<255), astfel
încât într-un ciclu de numărare, TCNT0 va parcurge
valorile din intervalul [N,255].
• De exemplu, dacă în rutina de întrerupere scriem
valoarea 100 în TCNT0, următorul overflow va surveni
peste (255-100)+1=156 perioade ale ceasului, adică
peste 156*64=9984us (aproximativ 10ms).
Crearea unor timere soft
WDCTR 7 6 5 4 3 2 1 0
BAUD 7 6 5 4 3 2 1 0
TCLR - SCP1 SCP0 RCKB SCR2 SCR1 SCR0
RESET 0 0 0 0 0 0 0 0
Bitii registrului BAUD - Controlul prescaller-ului
Example
Knowing that the oscillator frequency is 8 MHz, and that the out-
put frequency of the baud generator must be 16 times the actual
baud rate, determine the value to write in the BAUD register in or-
der to obtain 9600 baud communication speed.
The input clock for the prescaller is the system clock E.
fE=fOSC/4=2MHz=2000000Hz
The output clock must have the frequency:
f1=9600*16=153600 Hz
This gives the global division rate: 2000000/153600=13.
Choose the prescaller to divide by 13 (SCP1:SCP0=1:1), and the
secondary counter to divide by 1 (SCR2:SCR1:SCR0=0:0:0). The
resulting value for BAUD register is 00110000b=30H.
SCSR - SCI Status Register
• SCSR 7 6 5 4 3 2 1 0
• RESET 0 0 0 0 0 0 0 0
Bitii de stare din SCSR
• TDRE – Transmitter Data Register Empty
• 0 – SCDR busy
• 1 – SCDR ready for a new operation
• TC — Transmit Complete Flag
• 0 = Transmitter busy
• 1 = Transmitter ready
• RDRF — Receive Data Register Full Flag
• 0 = SCDR empty
• 1 = SCDR full
• IDLE —Rx Idle Line Detected Flag
• 0 = RxD line is active
• 1 = RxD line is idle
• OR — Overrun Error Flag
• 0 = No overrun
• 1 = Overrun detected
• NF — Noise Error Flag
• FE — Framing Error
• All error bits are cleared by reading SCSR followed by a read from SCDR.
Registrul SCCR1
SCCR1 7 6 5 4 3 2 1 0
R8 T8 - M WAKE - - -
RESET 1 1 0 0 0 0 0 0
SCCR2 7 6 5 4 3 2 1 0
RESET 1 1 0 0 0 0 0 0
UCR 7 6 5 4 3 2 1 0
• DTE=Data
Terminal
Equipment (ex.
computer, PLC,
etc.)
• DCE=Data
Communication
Equipment (ex.
Modem)
Standardul RS232
• Multidrop simplex
• Sunt admise pana la 10
receptoare conectate la
acelasi transmitator.
• RS422 nu permite realizarea
unor topologii multipoint, cu
alte cuvinte, pe o linie de
comunicatie poate fi
conectat un singur circuit
driver. Acest neajuns a fost
rezolvat prin introducerea
standardului de interfata
RS485.
Standardul RS485
• Arhitectură HARVARD
• Spatiu de adrese unic desi au bus-uri
diferite pentru ROM, RAM si periferice
• 31 registre generale
– 16 registre vizibile în orice moment
– R14: LR (Link Register)
– R15: PC (Program Counter)
– De obicei, R13 este stack pointer-ul SP
ARM(4)
• Au doua seturi de instructiuni: unul
“normal” pe 32 de biti si unul “thumb” pe
16 biti.
• Se pot combina cele două seturi
• Comutarea între starea ARM şi starea
Thumb: cu instrucţiunea BX (Branch and
eXchange)
• Rolul thumb este sa reduca necesarul de
memorii externe
Exemplu de procesoare ARM7 seria
LPC2xxx de la NXP (Philips)
LPC2103 minimal
LPC2xxx resurse on chip
• PINC.0 intrarea de
armare/dezarmare
• PINC.1 - zona 1 - delayed
• Z2-Z4 zone instant
conectate la PINC.2-
PINC.4
• PORB.0 - LED
semnalizare starea de
armat
• PORTB.1 releu de alrma
Analiza starilor posibile
• Starea de repaus - starea 0 - sistemul este
dezarmat. Se ignora alarmele, dar se testeaza
intrarea ARM/DISARM. Daca aceasta se
activeaza se trece in starea 1 (prearmare) si se
porneste un timer pentru EXIT DELAY.
• In starea 1 (prearmat), zonele instant (Z2-Z4)
genereaza alarma. Zona intarziata este ignorata. Se
testeaza expirarea timerului EXIT DELAY. La
expirare se trece in starea 2 (armare)
Analiza starilor posibile - continuare
• Starea 4 - alarma.
• Se activeaza releul pentru comanda sirenei
• se testeaza timerul asociat cu sirena
• Daca a expirat timerul, sirena este oprita dar
sistemul ramane armat si se revine in starea 2.
• Se testeaza si intarea de dezarmare. Daca aceasta
se activeaza pe durata cat sirena este ON, se
opreste sirena si se revine in starea 0.
Lucruri demne de retinut
• Secventa comanda-confirmare prin limitator sau
time-out cu avarie este foarte raspandita in
practica.
• Modalitatea de a gandi programul ca un automat
finit este extrem de productiva - simplifica analiza,
programul este usor de depanat, si scade sansa de
a scapa din vedere unele aspecte ale evolutiei
sistemului.
Proiectarea sistemelor cu
microprocesoare
Sisteme cu Microprocesoare
EXEMPLE DE PROIECTE
Vehicule autonome
Vehicule autonome
Structura generala
RS232 MCU
MCU
(dynamic MCU
Sensors for
control) obstacle
PWM Right detection
Amplifier
MCU MCU Shaft
MCU
Motor Encoder
Date constructive (1)
Date constructive (2)
Date constructive (3)
Date constructive (4)
Date constructive (5)
Date constructive (6)
Date constructive (7)
Senzori si comunicatie (1)
Senzori (2) - Sonare
Unitatea centrala
Conectarea motoarelor pas cu pas
Conectarea motoarelor pas cu pas
Comanda motoarelor pas cu pas
Comanda motoarelor de curent
continuu
Regim stationar si
di di
L + Ri = V − Kθ& =0 R->0
dt dt
V = Kθ&
Detalii puntea H
Circuitul L298 – punte H integrata
L298 in minirobotul Sumo
L293
L293 in minirobotul Level1
O punte H cu componente discrete
O punte H cu MOSFET-uri
Traductoare de pozitie absolute (1)
Traductoare de pozitie
incrementale
Traductoare de pozitie unghiulara
(magnetic compass)
v R (t ) v (t ) v (t ) − v L (t )
ICC
ω (t ) = = L = R
VL
R +b/2 R −b/2 b
R
v R (t ) + v L (t )
v(t ) = ω (t ) R =
(x,y)
q VR
b
r 2
x
dx(t )
= v(t ) cos θ (t )
dt
dy (t )
= v(t ) sin θ (t )
dt
dθ (t )
= ω (t )
dt
Localizarea prin odometrie
• Formularea problemei:
• Cunoscand pozitia robotului la un moment
dat (x0,y0,θ0) se cere sa se determine
pozitia dupa un interval de timp ∆t, in care
vitezele rotilor au fost VL si VR.
• Se presupune ca la momentul t=0, robotul
se afla in originea sistemului de referinta
(x=0, y=0, θ=0)
Solutia MATLAB
• function new_position=compute_new_position(position,vr,vl,delta_t,bias)
• x0=position(1);
• y0=position(2);
• theta0=position(3);
• if(vr==vl)
• theta=theta0;
• x=x0+vr*delta_t*cos(theta0);
• y=y0+vr*delta_t*sin(theta0);
• new_position=[x,y,theta];
• return;
• end
• theta=theta0+(vr-vl)*delta_t/bias;
• x=x0+bias*(vr+vl)*(sin((vr-vl)*delta_t/bias+theta0)-sin(theta0))/(2*(vr-vl));
• y=y0-bias*(vr+vl)*(cos((vr-vl)*delta_t/bias+theta0)-cos(theta0))/(2*(vr-vl));
• new_position=[x,y,theta];
• end
Simulare MATLAB
MATLAB Simulation for differential drive robot
600
400
Y coordinate
200
-200
-400
A = y ( i +1) − y i )
| Ax 0 + By 0 + C |
B = ( − x( i +1) − xi ) d=
C = x y − x y
( i +1) i i ( i +1) A +B
2 2
Ocolirea obstacolelor – Algoritmul
Bug2
Goal
O
orce
al f
Go
Robot
Resulti
ng mot
e
rc
ion
fo
cle
ta
bs
O
Ocolirea obstacolelor – Algoritmul
ricoseului
G
O1
S
PROIECTAREA SISTEMELOR CU
MICROPROCESOARE
Cursul nr. 11
• Formularea problemei
• Regulatoare bipozitionale
• Regulatoare proportionale
• Regulatoare PI
• Regulatoare PID
• Regulatoare fuzzy
• Exemplu de implementare a unui regulator de
temperatura
• Exemplu de implementare a unui regulator de
turatie pentru motoare de curent continuu
• Exemplu de implementare a unui positioner
Structura generala a unui sistem de reglare
cu microcontroller
INTERFATA DE
COMUNICATIE
VALOARE
PRESCRISA
CIRCUITE CIRCUITE
DE INTER- LINII I/O
DE INTER- ELEMENT
FATA PENTRU UNITATE CENTRALA DIGITALE
FATA PENTRU DE PROCES
INTRARILE CU MICROCONTROLLER
LINIILE I/O EXECUTIE
ANALOGICE DIGITALE
SENZOR
Termostatul – un exemplu de regulator
bipozitional de temperatura
Tm
Tp
t
Starea
iesirii
Tp+DT
Tp
Tp-DT
Starea
iesirii
+Vs Vo
GND
VEDERE DINSPRE
TERMINALE
Vout = K p (T p − Tm )
e(t ) = T p − Tm
Vout = K p e(t )
Raspunsul regulatorul proportional la un salt
al erorii
Se observa ca eroarea de regim staţionar (ess – steady state
error) nu poate fi zero, pentru că, dacă e(t)=0, atunci Vout=0
e(t)
T
ess(t)=Tp-Tss
Tp
Tss
Tm
t
ti tj
Regulatorul proportional - comentarii
Vout = K p e(t ) + K i f (e ss )
Vout = K p e(t ) + K i e ij
tj
1
Vout = K p e(t ) + K i ∫
t j − ti ti
e(t )dt
Regulatorul PI Raspunsul la semnal treapta
Regulatorul PI elimina eroarea stationara cu pretul cresterii timpului de
raspuns
e(t)
T
Bp
Tp
Tm
t
t0 tr
Regulatorul PI Raspunsul la semnal treapta
(2)
Timpul de raspuns se poate reduce marind Kp, dar apare fenomenul de
suprareglaj (overshoot)
e(t)
T
Bp
Tp
Tm
t
t0 tr
Regulatorul PI Calculul integralei
ek = e(ti + k∆t )
t j − ti = N∆t
N
1
tj
1 N ∑e k
∫
t j − ti ti
e (t ) dt = ∑
N∆t k =1
ek ∆t = k =1
N
if(TTAB[0]==0)
{
TTAB[0]=10;
process_temperature=read_adc(0);
setpoint_temperature=read_adc(1);
error=setpoint_temperature-process_temperature;
integral_buffer[ibptr++]=error;
if(ibptr>=N) ibptr=0;
OCR2=PI_control();
}
Regulatorul PI Implementare soft (2)
int proportional_control(void)
{
return(Kp*error);
}
int integral_control(void)
{
int sum=0;
if((process_temperature<setpoint_temperature-
Bp/2)||(process_temperature>setpoint_temperature+Bp/2))
return(0);
for(i=0;i<N;i++) sum=sum+integral_buffer[i];
sum=Ki*(sum/N);
return(sum);
}
Regulatorul PID
e(t)
T
Kd=0
Tp
Tm
t
t0 tr
T
Kd>0
Tp
Tm
t
t0 tr
Regulatorul PID- Observatii
Componenta derivativă este utilă în sisteme unde eroarea
variază relativ rapid în raport cu timpul. În procese lente,
cum sunt cele de reglare a temperaturii, de exemplu,
variaţiile mici ale erorii de la un moment de eşantionare
la altul sunt comparabile cu zgomotul, astfel încât
introducerea unei componente derivative poate chiar
înrăutăţi răspunsul general al sistemului.
Acordarea regulatoarelor
Acordarea (determinarea parametrilor de reglare Kp, Ti, Td) unui
regulator PI/PID este un proces relativ complicat.
Metoda Ziegler-Nichols (empirica)
Se anulează efectul integrativ şi derivativ al regulatorului (Ki=0, Kd=0) şi
se reduce câştigul regulatorului proporţional la valoarea minimă
Kp=1.
Se măreşte treptat Kp, până când sistemul intră în oscilaţie. Se notează
valoarea Kp0, şi perioada T0 corespunzător momentului de intrare
în oscilaţie.
Se stabilesc următoarele valori ale parametrilor de reglare:
Pentru un regulator P, se alege Kp=0.5Kp0
Pentru un regulator PI se aleg valorile Kp=0.45Kp0 şi Ti=0.8T0 (Ki=1)
Pentru un regulator PID se aleg valorile Kp=0.6Kp0 , Ti=0.5T0 şi
Td=0.125T0.
Proiectarea unui regulator de turatie pentru
un motor de curent continuu
• Date generale de proiectare
• Se cere un sistem pentru controlul turatiei unui
motor de curent continuu cu puterea nominala de
50W si Un=12V.
• Masurarea turatiei se face cu un tachogenerator
analogic care furnizeaza o tensiune de 12V la cap de
scala (turatia maxima).
• Valoarea prescrisa a turatiei se defineste cu un
potentiometru cu variatie liniara.
• Nu este necesara schimbarea sensului de rotatie a
motorului.
Analiza problemei
di
L + Ri = V − Kθ&
dt
di Regim
=0 stationar
dt
R→0
V = Kθ& Turatia este proportionala cu
tensiunea la borne
Comanda motorului folosind un semnal PWM
T
=
p
D
T
T
1
Vout = ∫ y (t )dt
T0
Vmax t ∈ [ DT , T ]
y (t ) =
0 t ∈ [0, DT ]
DT
1 DT
Vout = ∫ Vmax dt = Vmax = DVmax
T 0 T
Schema bloc a solutiei hardware
Adaptarea semnalului de la tachogenerator
O valva “butterfly”
Traductorul de pozitie potentiometric
• Acţionarea valvei se face de obicei cu un motor electric, al
cărui ax de rotaţie este cuplat printr-un sistem mecanic cu
cursorul unui potenţiometru folosit ca traductor de poziţie
unghiulară, în aşa fel încât poziţia de minim a cursorului să
corespundă cu poziţia complet inchis a valvei, iar poziţia
100% a potenţiometrului corespunde cu poziţia complet
deschis a valvei
M1 a
b
M
c
M2
Conectarea servomotorului
M
Detalii de implementare a positionerului
• Canalul analogic cu adresa 0 este folosit pentru definirea
valorii prescrise a poziţiei,
• Canalul analogic cu adresa 1 este folosit pentru a măsura
reacţia de pozitie, de la potenţiometrul acţionat de motor,
• Canalele PWM asociate cu Timer1 (OC1A şi OC1B) sunt
folosite pentru a controla turaţia motorului la
deschiderea/închiderea valvei
• PORTB.0 şi PORTB.1 selectează sensul de mişcare a
motorului
• Se observă că motorul funcţionează în buclă deschisă –
este comandat doar ON/OFF iar viteza de rotaţie
(determinată de valoarea scrisă in OCR1AL şi OCR1BL) este
constantă.
• Bucla de reglare se referă la poziţia axului motorului
Implementarea software
while (1)
{
if(TTAB[0]==0)
{
TTAB[0]=10;
process_value=read_adc(1);
setpoint_value=read_adc(0);
if(setpoint_value>=process_value+MARGIN) motor(OPEN);
else if(setpoint_value<=process_value-MARGIN)
motor(CLOSE);
else motor(STOP);
}
}
Implementarea software (2)
void motor(unsigned char param)
{
PORTB=0; //stop motor
TCCR1A=0x01;
delay_us(20); // leave some time for the MOSFETS to turn off
switch(param)
{
case STOP:
PORTB=STOP;
TCCR1A=0x01;
break;
Implementarea software (3)
case OPEN:
TCCR1A=0x21;
PORTB=OPEN;
break;
case CLOSE:
TCCR1A=0x81;
PORTB=CLOSE;
break;
}
}
Implementarea unui controller fuzzy
Multimi vagi (fuzzy) si logica fuzzy
• O multime vaga este o multime compusa din elemente
caracterizate prin grade de apartenenta.
• Deci, pentru orice multime vaga se poate defini o functie
de apartenenta f:A->[0,1]
• Altfel spus, functia de apartenenta descrie proportia in
care afirmatia “x apartine multimii A” este adevarata.
(gradul de adevar al propozitiei “x apartine multimii A”)
Apartenenta in logica clasica vs logica fuzzy
Definirea functiilor de apartenenta este
arbitrara
m SINGLETON
1
ì1 x = x0
m (x) = í
î0 x ¹ x0
x0 x
ì c-x x Î [c - a , c ] m
ï1 - a TRIANGULAR
ïï x - c 1
m ( x) = í1 - x Î [c, c + b ]
ï b
ï 0 x < c -a, x > c + b x
c-a c c+b
ïî
m S SHAPED
ì 0 x < c -s
ï | x-c| 1
m ( x) = í1 - x Î [c - s , c ]
ï s
î 1 x>c
c-s c x
m
Z SHAPED
ì 1 x<c 1
ï | x-c|
m ( x) = í1 - x Î [c, c + s ]
ï s
î 0 x > c +s
c c+s x
m
GAUSSIAN
1
æ 1 x-c 2ö
m ( x ) = exp ç - ( ) ÷
è 2 s ø
c x
Operatii cu multimi vagi Reuniunea
Operatii cu multimi vagi Intersectia
Operatii cu multimi vagi Negatia
Controlul fuzzy al proceselor
Ax + By + C = 0
A = yi +1 − yi
B = − xi +1 − xi
C = xi +1 yi − xi yi +1
Controlul fuzzy al proceselor (7)
Exemplu de implementare – Urmarirea traiectoriei
de catre un vehicul autonom
• Eroarea de pozitionare este distanta de la punctul
curent (xC, yC) la dreapta data:
Axc + By c + C
e=
A2 + B 2
1
N Z P
Z1
P1
e(t)
-M 0 e1 M
Controlul fuzzy al proceselor (9)
Exemplu de implementare – Urmarirea traiectoriei
de catre un vehicul autonom
Dezavantaj evident –
consuma prea multe linii I/O
Dispozitive de afisare (7 segmente 3)
Dispozitive de afisare (7 segmente 4)
Dispozitive de afisare (Module LCD 5)
Dispozitive de afisare (6)