Sunteți pe pagina 1din 11

Microcontrolere pentru aplicații în robotică

Formularea temei:
Sa se proiecteze un automat programabil care sa simuleze operatiile din cadrul celulei robotizare de
deformare la rece a unor repere de tabla. Pentru implementare se va folosi un microprocesor.
Aplicatia aleasa este prezentata in figura de mai jos:

Diagrama de stare:

Descrierea stărilor pentru robot:


a. Poziție de home 1 – La valoarea TRUE, robotul se deplasează în starea b 0 – La valoarea FALSE,
robotul ramane în starea a
b. Deplasare în zona de preluare reperului de table. 1 – La valoarea TRUE, robotul intra în starea c;
0 – La valoarea FALSE, robotul se deplasează în starea a
c. Efectuare poza prezenta reper de tabla 1 – La valoarea TRUE, se trece la starea d 0 – La valoarea
FALSE, se trece la starea a. Valoarea semnalului este data de semnalul camerei.
d. Preluare tabla 1 – La valoarea TRUE, se trece la starea a; 0 – La valoarea FALSE, se trece la
starea e Valoarea semnalului este data de starea gripperului.
e. Deplasare în zona de depunere table. 1 – La valoarea TRUE, se trece la starea a 0 – La valoarea
FALSE, se trece la starea a. Valoarea semnalului este data de deschidrea gripper-ului.

Tabel cod stari:


Stare Cod
a 000
b 100
c 010
d 110
e 111

Tabel stari

Stare In Stare urmatoare OUT


Q2,Q1,Q0
a 0 a 0
1 b 0
b 0 a 0
1 c 0
c 0 a 0
1 d 0
d 0 e 0
1 a 0
e 0 a 0
1 a 1
Stare In Stare urmatoare OUT
Q2,Q1,Q0
000 0 000 0
1 100 0
100 0 000 0
1 010 0
010 0 000 0
1 110 0
110 0 111 0
1 000 0
111 0 000 0
1 000 1

Diagrame KARNAUGH:

Q2’Q1’Q0’
Q2Q1 \ Q0I 00 01 11 10

00 000 100 x x
01 000 110 x x
11 111 000 000 000
10 000 010 x x

OUTPUT
Q2Q1 \ Q0I 00 01 11 10

00 0 0 x x
01 0 0 x x
11 0 0 1 0
10 0 0 x x

Se rescriu diagramele KARNAUGH pentru a putea determina ecuațiile sistemului electronic


cu bistabili. Diagramele vor fi scrise ca si Q2’, Q1’, Q0’ și Out.
Q2’ :
Q2Q1 \ Q0I 00 01 11 10

00 0 1 x x
01 0 1 x x
11 1 0 0 0
10 0 0 x x

Q2’ = Q́ 0iQ́ 2 + Q2Q1+Q́ 0 í

Q1’ :
Q2Q1 \ Q0I 00 01 11 10

00 0 0 x x
01 0 1 x x
11 1 0 0 0
10 0 1 x x

Q1’ = Q́ 2Q1i + Q2Q́ 1i +Q2Q1Q́ 0 Í

Q0’ :
Q2Q1 \ Q0I 00 01 11 10

00 0 0 x x
01 0 0 x x
11 1 0 0 0
10 0 0 x x

Q0’ = Q2Q1 +Q́ 0 Í


OUT :
Q2Q1 \ Q0I 00 01 11 10

00 0 0 x x
01 0 0 x x
11 0 0 1 0
10 0 0 x x

Out: Q0i
Schemă automat finit, utilizând bistabili – realizată în OrCAD.
De asemenea, pentru aceeasi aplicatie s-au simulat starile utilizant o placuta Arduino.
Schema instalației este următoarea:

1
5432
B1 B2

Instalația conține:

- 1x breadboard;
- 2x butoane;
- 5x LED-uri;
- 1x Arduino Uno;
- Cablu alimentare;
- Cabluri de conectică;
- 7x rezistoare
Modul de funcționare este următorul și va fi prezentat pe baza stărilor fiecărui
LED (1,2,3,4,5) și a apăsării butoanelor (B1, B2):

Stare initiala Led aprins Buton apasat si starea urmatoare


a 1 B1 - b B2 – a
b 2 B1 – c B2 – a
c 3 B1 – d B2 – a
d 4 B1 – e B2 – a
e 5 B1 – a B2 – a

Programul scris în Arduino Studio este următorul:

int push = 0;
int prevPush = 0;
int led = 0;
int nok = 0;
void setup()
{
pinMode(2, INPUT); //initializare pin 2 pentru citire buton B1
pinMode(8, INPUT); // initializare pin 8 pentru citire buton B2
pinMode(3, OUTPUT); // initializare pin 3 pentru scriere led L1
pinMode(4, OUTPUT); // initializare pin 4 pentru scriere led L2
pinMode(5, OUTPUT); // initializare pin 5 pentru scriere led L3
pinMode(6, OUTPUT); // initializare pin 6 pentru scriere led L4
pinMode(7, OUTPUT); // initializare pin 7 pentru scriere led L5
}
void loop()
{
digitalWrite(3, LOW); // led-ul 1 este stins
digitalWrite(4, LOW); // led-ul 2 este stins
digitalWrite(5, LOW); // led-ul 3 este stins
digitalWrite(6, LOW); // led-ul 4 este stins
digitalWrite(7, LOW); // led-ul 5 este stins
push = digitalRead(2); // condiția incepereii counter-ului este apasarea butonului B1

if (push != prevPush) {
prevPush = push;
if (push == 1) {
led++;
if (led == 7){
led = 1;
}
}
}
nok = digitalRead(8); // initializarea functionalitaiti butonului B2 intr-o variabila
if (nok == LOW){ // daca butonul B2 nu este apasat
switch (led) {
case 1:
digitalWrite(3, HIGH); // apasare 1 pe butonul B1 - se aprinde doar led-ul 1
break;
case 2:
digitalWrite(4, HIGH); // apasare 2 pe butonul B1 - se aprinde doar led-ul 2
break;
case 3:
digitalWrite(5, HIGH); // apasare 3 pe butonul B1 - se aprinde doar led-ul 3
break;
case 4:
digitalWrite(6, HIGH); // apasare 4 pe butonul B1 - se aprinde doar led-ul 4
break;
case 5:

digitalWrite(7, HIGH);
delay(150);
digitalWrite(7, LOW);
break;
case 6:
digitalWrite(3, LOW); // apasare butonul B1 - se revine in starea initiala
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
break;
}}
else {
led = 0;}
delay(10);
}

Conform cu Arduino Studio, programul are o dimensiune de 1390 bytes si are un numar de
65 linii de cod.
Microcontroller-ului Arduino Uno, are o viteză de procesare de maxim 16 MHz. Înseamnă
că timpul de răspuns al unui program este următorul: T = 1 / f = 1 / 16 = 6.25 ms.
Datorita necesitatii unui timp scazut de raspuns in cadrul aplicatiilor industriale alegem un
processor cu o viteza de procesare de 20 MHz.
Acesta este modelul MKE02Z16VLD2 de la NPX. Astfel timpul de raspuns al programului
o sa fie: T = 1 / f = 1 / 20 = 5 ms.

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