Sunteți pe pagina 1din 15

Proiectarea unor dispozitive de automatizare

1. Dispozitiv pentru reglarea automat a turaiei unui motor

Schema de principiu a sistemului de reglare automat a turaiei este prezentat n Fig.1

nref
nm

sc
cr

Dispozitiv
de
reglare

EE

nm

TT

Fig. 1
Turaia prescris nref este comparat cu valoarea nm , msurat de traductorul de turaie

TT. Dispozitivul de reglare furnizeaz doi bii de comand care indic sensul n care trebuie
modificat turaia : scdere (sc) sau cretere (cr) i un cuvnt de comand (u) care indic
intensitatea aciunii de modificare a turaiei. n aplicaia de fa se consider un reglaj de tip P
(proporional) cu factor de proporionalitate unitar, astfel nct cuvntul de comand u
reprezint chiar eroarea de reglare, n valoare absolut :

u = | nref - nm |
Aceste mrimi de command acioneaz asupra unui element de execuie ( EE), care
furnizeaz motorului semnalele necesare modificrii turaiei, n sensul i cu intensitatea
necesare.
n Fig.2 se prezint schema-bloc a dispozitivului de reglare. Turaia prescris nref i turaia
msurat nm, reprezentate pe cte 4 bii, sunt ncrcate n registrele latch Reg_1 i Reg_2,
fiind livrate de acestea sub denumirile nr, respectiv n1. Valorile lor sunt comparate de un
bloc comparator (Comp) furniznd cuvntul c de 2 bii, care indic relaia dintre turaia de
referin i turaia msurat. Bitul c2 comand multiplexoarele MUX_1, MUX_2, care

Reg_1

nref
d

nr
q

load

Reg_2

0
h 1

c1
sel

y2

4+
p1

sel
mux_2
g 0
j
1
h

load

Reg_3

c2

mux_1
n1

d q

e v2
f v1

y2

nm

01, e > f
10, e < f
00, e = f

v=

Comp

p2

q5

d4

q4

sc

EE

1
cr
1

Dif

er
df

d5

d(3:0) q(3:0)

TT

load
y1

y1
y2

clk
automat

init

Fig. 2
aduc n mod adecvat operanzii nr i n1 la intrarea de desczut (+), respectiv de scztor (-)
ale dispozitivului de scdere Dif. La ieirea acestuia se obine eroarea de reglare er, n
valoare absolut. Mrimile rezultate ( c2, c1, er ), sunt ncrcate n registrul latch de ieire

Reg_3, care furnizeaz mrimile de comand sc, cr i u, destinate elementului de execuie


EE.
Funcionarea ciclic a dispozitivului este condus de un automat, conform grafului de stri
reprezentat n Fig.3.

init = 1
(asincron)

ncarc
c2, c1, er

ncarc
nref, nm

S2

S1

y = 10

y = 01
Fig. 3

Se propune proiectarea structural a dispozitivului descris. Blocurile funcionale care apar n


schem vor fi definite ca i componente reutilizabile i se vor salva ntr-o bibliotec.
Biblioteca va conine deci : un registru latch generalizat (parametrizat), un multiplexor 2:1 de
4 bii, un comparator i un dispozitiv de scdere. Automatul nu va fi inclus in bibliotec i va
fi descrise comportamental n fiierul VHDL principal.
Crearea bibliotecii de componente
2

1.1. Start Programs => WARP5.1 => Galaxy


1.2. File => New => Project

[Target library]

1.3. Target library name: nume_library


1.4. Project name : nume_library

--compilare pentru bibliotec


-- numele bibliotecii

numele proiectului de creare a bibliotecii

1.5. Project Path: d:\student\...

-- locaia unde se salveaz biblioteca

1.6. Next => Next => Finish


1.7. File => New => Text files =>
=> Save as : componente.vhd

-- numele fiierului care conine


sursa VHDL prin care se definete biblioteca

1.8. Project => Add Files To Project =>


=> componente.vhd=> Add => OK
1.9. n

fiierul

-- se ataeaz fiierul-surs la proiect

componente.vhd se editeaz sursa VHDL prin care se creeaz

biblioteca de componente :
----------------------------------------------------------------------------------------------------------------library ieee;
use ieee.std_logic_1164.all;
--registru generalizat
package pkg_registru is

unitate de proiect care declara componenta

component registru
generic ( n : integer ) ;
port ( d : in std_logic_vector(n downto 0) ;
q : out std_logic_vector(n downto 0) ;
load : in std_logic);
end component;
end pkg_registru;
library ieee;

unitate de proiect care descrie componenta

use ieee.std_logic_1164.all;
entity registru is
generic ( n : integer );
port (d : in std_logic_vector(n downto 0);
3

q : out std_logic_vector(n downto 0);


load : in std_logic);
end registru;
architecture arch_registru of registru is
begin
proc_registru : process(d,load)
begin
if load = '1' then q <= d;
end if;
end process proc_registru;
end arch_registru;
--comparator
library ieee;

unitate de proiect care declara componenta

use ieee.std_logic_1164.all;
package pkg_comparator is
component comparator
port (e,f : in std_logic_vector(3 downto 0);
v : out std_logic_vector(2 downto 1));
end component;
end pkg_comparator;
library ieee;

unitate de proiect care descrie componenta

use ieee.std_logic_1164.all;
entity comparator is
port (e,f : in std_logic_vector(3 downto 0);
v : out std_logic_vector(2 downto 1));
end comparator;
architecture arch_comparator of comparator is
begin
v <= "01" when e > f else
"10" when e < f else
"00" ;
end arch_comparator;
--multiplexor
4

library ieee;

unitate de proiect care declara componenta

use ieee.std_logic_1164.all;
package pkg_multiplexor is
component multiplexor
port (g,h : in std_logic_vector(3 downto 0);
j : out std_logic_vector(3 downto 0);
sel : in std_logic);
end component;
end pkg_multiplexor;
library ieee;

unitate de proiect care descrie componenta

use ieee.std_logic_1164.all;
entity multiplexor is
port (g,h : in std_logic_vector(3 downto 0);
j : out std_logic_vector(3 downto 0);
sel : in std_logic);
end multiplexor;
architecture arch_multiplexor of multiplexor is
begin
j <= g when sel = '0' else
h;
end arch_multiplexor;
--Dispozitiv de scadere
library ieee;

unitate de proiect care declara componenta

use ieee.std_logic_1164.all;
use work.std_arith.all;

--apeleaza biblioteca aritmetica

package pkg_dif is
component dif
port (a,b : in std_logic_vector(3 downto 0);
df : out std_logic_vector(3 downto 0));
end component;
end pkg_dif;
library ieee;

unitate de proiect care descrie componenta


5

use ieee.std_logic_1164.all;
use work.std_arith.all;

--apeleaza biblioteca aritmetica

entity dif is
port (a,b : in std_logic_vector(3 downto 0);
df : out std_logic_vector(3 downto 0));
end dif;
architecture arch_dif of dif is
begin
df <= a b ;
end arch_dif;
---------------------------------------------------------------------------------------------------------------Se salveaz i se compileaz sursa :

Compile => Project

Prin aceasta s-a creat o bibliotec personal denumit : nume_library, definit prin fiierul
componente.vhd i compus din pachetele

pkg_registru ,

pkg_comparator ,

pkg_multiplexor i pkg_dif, care conin respectiv componentele :

registru,

comparator, multiplexor i dif. Aceste componente pot fi apelate i folosite n orice proiect
ulterior. Structura bibliotecii este prezentat n Fig.4.
bibliotec
nume_library
package
pkg_registru

package
pkg_comparator

component
registru

component
comparator

package

packaget
pkg_dif

pkg_multiplexor
component

component

multiplexor

dif

Fig. 4
Descrierea structural a dispozitivului de reglare a turaiei (Fig.2)
6

1.11. Start Programs => WARP5.1 => Galaxy


1.12. File => New => Project

[Target device]

1.13. Project name: reglare

--compilare pentru implementare


-- numele proiectului

1.14. Project Path: d:\student\ ...

-- locaia unde va fi salvat aplicaia

--trebuie s fie identic cu cea n care s-a creat biblioteca de componente


1.15. Next => Next => Select Target Device =>
=> CPLD => Flash 370I => C372i 66JC

-- tipul circuitului CPLD

1.16. Finish
1.17. File => New => Text files =>
=> Save as : reglare.vhd

-- se denumete fiierul
care va conine sursa VHDL

1.18. Project => Add Files To Project =>

-- se ataeazsursa la proiect

=> reglare.vhd => Add => OK


1.19. n fiierul reglare.vhd se editeaz sursa VHDL, dup cum urmeaz :
library ieee;

--apeleaza bibliotecile de uz general

use ieee.std_logic_1164.all;
use work.std_arith.all;
library nume_library;

--apeleaza biblioteca de componente creata anterior

use nume _library.pkg_registru.all;

--apeleaza pachetele ce contin componentele

use nume _library.pkg_comparator.all;


use nume _library.pkg_multiplexor.all;
use nume _library.pkg_dif.all;
entity reglare is

declara portul schemei din Fig.2

port (nref,nm : in std_logic_vector(3 downto 0);


clk,init : in std_logic;
cr,sc : out std_logic;
u : out std_logic_vector(3 downto 0));
end reglare;
architecture arch_reglare of reglare is
type stare is (s1,s2);

declara multimea starilor automatului


7

signal s : stare;

declara o stare curenta

signal nr,n1,p1,p2,er : std_logic_vector(3 downto 0);

declara semnalele interne

signal c : std_logic_vector(2 downto 1);


signal y : std_logic_vector(1 to 2);
begin
--descrierea automatului
automat : process(init,clk)

descrie graful starilor

begin
if init = '1' then s <= s1;
elsif rising_edge(clk) then
case s is
when s1 => s <= s2;
when s2 => s <= s1;
end case;
end if;
end process automat;
y <= "01" when s = s1 else

defineste iesirea automatului

"10" ;
--instantierea componentelor
reg_1: registru generic map(3)

registru de 4 biti

port map( d=>nref , load=>y(2) , q=>nr );


reg_2: registru generic map(3)

registru de 4 biti

port map( d=>nm , load=>y(2) , q=>n1 );


reg_3: registru generic map(5)

registru de 6 biti

port map( d(5 downto 4) => c , d(3 downto 0)=>er , load=>y(1),


q(5)=>sc , q(4)=>cr , q(3 downto 0)=>u );
comp : comparator port map( e=>nr , f=>n1 , v=>c );
mux_1: multiplexor port map( g=>nr , h=>n1 , j=>p1 , sel=>c(2) );
mux_2: multiplexor port map( g=>n1 , h=>nr , j=>p2 , sel=>c(2) );
dif : dif port map( a=>p1 , b=>p2 , df=>er );
end arch_reglare;
----------------------------------------------------------------------------------------------------------------8

Ataarea bibliotecii de componente la proiect

1.20

Project => Library Manager =>Assign => Add =>


Library : nume_library
Path : d:\student\ \ nume _library

directorul care contine biblioteca

OK => OK
Compilarea sursei
1.21. Project => Compiler Options =>
=> Timing Model => 1164/VHDL => OK

-- opiunea de compilare
pentru simulare

1.22. Compile => Project


1.23. Analiznd fiierul reglare.rpt

-- se compileaz sursa VHDL


(View => Report File) observai :

- funciile logice generate de algoritmii de sintez i optimizare,


- alocarea pinilor circuitului CPLD ,
- gradul de utilizare a resurselor circuitului ,
- timpii de propagare ai semnalelor prin circuit.
Simularea aplicaiei
1.13. Start Programs => Warp5.1 => Active HDL Sim
1.14. File => New Waveform

se ncarc fiierul de simulare

File=>OpenVHDL => C:\student\..\vhd\reglare.vhd


1.15. Simulation => Initialize

--iniializare ( t = 0 )

1.16. Waveform => Add Signals => Name => clk =>Add

-- se selecteaz semnalele

Waveform => Add Signals => Name => init =>Add

dorite a fi tratate

Waveform => Add Signals => Name => nref =>Add


Waveform => Add Signals => Name => nm =>Add
Waveform => Add Signals => Name => sc =>Add
Waveform => Add Signals => Name => cr =>Add
Waveform => Add Signals => Name => u =>Add

de simulator

1.17. Se configureaz semnalele de intrare ca stimuli :

clk se definete ca semnal de tip clock, cu frecvena de 1 MHz :


Click-dreapta => Stimulators => Stimulator type => clock => 1 MHz => Apply
=> Close
Celelalte semnale se definesc n modul formula :
Click-dreapta => Stimulators => Stimulator type => formula => enter formula
(se introduce formula...) => Apply => Close
Se completeaz rubrica enter formula astfel: <value> <time>, <value> <time>,..etc.
value poate fi 0 sau 1 ; time reprezint momentul de timp n care stimulul i schimb
valoarea. Timpii se ntroduc n picosecunde.
Se definesc stimulii de simulare n conformitate cu cronogramele din Fig.5.

clk
f = 1 MHz

init

1 000 000

nref(3)

nref(2)

nref(1)

nref(0)

nm(3)

nm(2)

nm(1)

nm(0)

t
0

10 000 000

20 000 000 30 000 000

40 000 000

50 000 000

[ ps ]

Fig. 5
1.18. Se simuleaz funcionarea dispozitivului pe un interval de timp acoperitor fa de
stimulii definii n Fig.5 :

Simulation => Run until => 50000ns

1.19. Se verific funcionarea corect a dispozitivului de reglare.


10

2. Dispozitiv pentru reglarea turaiei


i sincronizarea a dou motoare

Schema de principiu a sistemului este prezentat n Fig.6


nm1

nm1
nref

nm1

Dispozitiv
de
reglare 1

Dispozitiv
de
reglare 2

nm2

sc1
cr1
u1

sc2
cr2
u2

TT1

EE1

m1

EE2

m2

nm2

TT2

Fig. 6
Turaia motorului m1 este meninut constant la valoarea nm1 = nref de dispozitivul de
reglare 1, asa cum s-a artat n paragraful anterior. Dispozitivul de reglare 2 folosete ca
valoare de referin turaia nm1 a primului motor, meninnd turaia nm2 a motorului m2 n
sincronism cu aceasta : nm2 = nm1 .
Structura sistemului de reglare i sincronizare a turaiilor este prezentat n Fig. 7. Blocurile
funcionale fiind similare cu cele din dispozitivul proiectat anterior se recomand folosirea
bibliotecii de componente nume_library deja creat . Proiectarea schemei const doar n
redactarea sursei VHDL coninnd descrierea structural a schemei din Fig.7.
Automatul care coordoneaz funcionarea schemei are aceeai structur i acelai mod de
operare ca n cazul precedent. Automatul se va descrie comportamental n sursa VHDL.
Pentru ca bibliteca de componete existent s fie vizibil pentru noul proiect, este obligatoriu
ca acesta s fie localizat n acelai director ca i biblioteca nume_library.

11

Reg_1

nref
4

nr1
q

lload

e v2

f v1

y2

nm1

c1

0
h 1

n1

d q

sel

sel
mux_2
g 0
j
1
h

load
y2

Reg_3

c2

mux_
1
g

Reg_2

01, e > f
10, e < f
00, e = f

v=

Comp1

4+
p1
4

q5

d4

q4

er1
df

d(3:0) q(3:0)

M1
TT1

y1

clk

y1
y2

y2

lload

nm1

nr2
q

y2

nm2

e v2
f v1

Reg_4

d q
Reg_5

c3

0
h 1

n2

c4

1
sel

p3

sel
mux_4
4
g 0
j
1
h
p4

Dif2

er2
df

init

lload

mux_3

load

automat

y1

01, e > f
10, e < f
00, e = f

v=

Comp2

EE1

1
cr1

lload

p2

sc1

u1

Dif1

d5

d5

q5

d4

q4

d(3:0) q(3:0)

sc2
1
cr2
1

EE2
TT2
M2

u2
4

Reg_6

Fig. 7
Se parcurg succesiv etapele urmtoare :
Descrierea structural a dispozitivului de reglare i sincronizare (Fig.7)
2.1. Start Programs => WARP5.1 => Galaxy
2.2. File => New => Project

[Target device]

2.3. Project name: reglare_sincro


2.4. Project Path: d:\student\ ...

--compilare pentru implementare


-- numele proiectului

-- locaia unde va fi salvat aplicaia

--trebuie s fie identic cu cea n care s-a creat biblioteca de componente


2.5. Next => Next => Select Target Device =>
=> CPLD => Flash 370I => C372i 66JC
2.6. Finish
12

-- tipul circuitului CPLD

2.7. File => New => Text files =>


=> Save as : reglare_sincro.vhd

-- se denumete fiierul
care va conine sursa VHDL

2.8. Project => Add Files To Project =>

-- se ataeaz sursa la proiect

=> reglare_sincro.vhd => Add => OK


2.9. n fiierul reglare_sincro.vhd se editeaz sursa VHDL.

Ataarea bibliotecii de componente la proiect

2.10

Project => Library Manager =>Assign => Add =>


Library : nume_library
Path : d:\student\ \ nume _library

directorul care contine biblioteca

OK => OK
Compilarea sursei
2.11. Project => Compiler Options =>
=> Timing Model => 1164/VHDL => OK

-- opiunea de compilare
pentru simulare

2.12. Compile => Project

-- se compileaz sursa VHDL

2.13. Analiznd fiierul reglare_sincro.rpt

(View => Report File) observai :

- funciile logice generate de algoritmii de sintez i optimizare,


- alocarea pinilor circuitului CPLD ,
- gradul de utilizare a resurselor circuitului ,
- timpii de propagare ai semnalelor prin circuit.
Simularea aplicaiei
2.14. Start Programs => Warp5.1 => Active HDL Sim
2.15. File => New Waveform

se ncarc fiierul de simulare

File=>OpenVHDL => C:\student\..\vhd\reglare_sincro.vhd


2.16. Simulation => Initialize

--iniializare ( t = 0 )
13

2.17. Waveform => Add Signals => Name => clk =>Add

-- se selecteaz semnalele

Waveform => Add Signals => Name => init =>Add

dorite a fi tratate

Waveform => Add Signals => Name => nref =>Add

de simulator

Waveform => Add Signals => Name => nm1 =>Add


Waveform => Add Signals => Name => nm2 =>Add
Waveform => Add Signals => Name => sc1 =>Add
Waveform => Add Signals => Name => cr1 =>Add
Waveform => Add Signals => Name => u1 =>Add
Waveform => Add Signals => Name => sc2 =>Add
Waveform => Add Signals => Name => cr2 =>Add
Waveform => Add Signals => Name => u2 =>Add
2.18. Se configureaz semnalele de intrare ca stimuli :

clk se definete ca semnal de tip clock, cu frecvena de 1 MHz :


Click-dreapta => Stimulators => Stimulator type => clock => 1 MHz => Apply
=> Close
Celelalte semnale se definesc n modul formula :
Click-dreapta => Stimulators => Stimulator type => formula => enter formula
(se introduce formula...) => Apply => Close
Se completeaz rubrica enter formula astfel: <value> <time>, <value> <time>,..etc.
value poate fi 0 sau 1 ; time reprezint momentul de timp n care stimulul i schimb
valoarea. Timpii se ntroduc n picosecunde.
Se definesc stimulii de simulare n conformitate cu cronogramele din Fig.8.
2.19. Se simuleaz funcionarea dispozitivului pe un interval de timp acoperitor fa de
stimulii definii n Fig.8 :
Simulation => Run until => 50000ns

2.20. Se verific funcionarea corect a dispozitivului de reglare-sincronizare.

14

clk
f = 1 MHz

init

1 000 000

nref(3)

nref(2)

nref(1)

nref(0)

nm1(3)

nm1(2)

nm1(1)

nm1(0)

nm2(3)

nm2(2)

nm2(1)

nm2(0)

t
0

10 000 000

20 000 000 30 000 000

Fig. 8

15

40 000 000

50 000 000

[ ps ]