Sunteți pe pagina 1din 15

AUTOMATUL DE COMANDA A USII

DE GARAJ

Facultatea de Inginerie Medicala


Universitatea Politehnica Bucuresti
Grupa 1423, prof. coord.:Madalin Frunzete
Studenti: Lungu Iulia Ioana, Lepadatu Iulia Luana, Boarca Bianca

CUPRINS

Introducere: Automatul de comanda a usii unui garaj


Diagrame de stare
Completarea tabelelor de tranzitie a starilor si a
marimilor de iesire
Schema electrica cu circuite basculante bistabile de
tip D
Simulare
Programarea

si

implementarea

automatului

finit

utilizand mediul de programare MPLAB

INTRODUCERE
De cele mai multe ori ,solicitarea pentru realizarea unui automat finit
vine din partea unui client care nu are cunostintele de specialitate necesare,
si, in consecinta, va formula problema doar din punctul sau de vedere , ca de
exemplu: Doresc un sistem de activare a usii garajului printr-o telecomanda.
Din formularea sumara a clientului, inginerul proiectant trebuie sa
completeze descrierea automatului astfel ca specificatiile lui sa acopere

functionarea exacta a automatului care urmeaza a fi realizat ca in cele de


mai jos.
Schema bloc a automatului de comanda a usii de garaj este prezentata
in fig. 2.18.Cele trei marimi de intrare sunt: f-semnal de la telecomanda, osemnal senzor capat de cursa usa complet deschisa, z-semnal senzor capat
de cursa usa complat inchisa. Cele doua marimi de iesire m1 si m2 servesc la
comanda motorului de actionare a usii garajului.
Functionarea este urmatoarea:
- Daca usa este complet inchisa, la activarea telecomenzii (semnal f=1) usa
incepe sa se deschida. Pe durata deschiderii (comanda spre motor m1=0,
m2=1), orice alta actionare a telecomenzii va fi ignorata pana la deschiderea
completa a usii (semnalata de senzorul capat de cursa deschis prin o=1).
- Daca usa este complet deschisa, prin actionarea telecomenzii(f=1) incepe
deschiderea acesteia (comanda spre motor m1=1, m2=0). Pe durata
inchiderii orice alta actionare a telecomenzii va fi ignorata pana la inchiderea
completa a usii (semnalata de senzorul capat de cursa inchis prin z=1).

DIAGRAME DE STARE
Se elaboreaza pentru inceput diagram starilo cu denumiri simbolice. Ne propunem sa
realizam aplicatia intr-o variant de automat de tip Moore,si dupa o codificare convenabila a
starilor, rezulta diagram starilor codificate prezentate mai jos.

Starea 0(state0)-reprezinta starea initiala cand usa este complet inchisa.


Starea 1(state1)-din starea 0 se trece in aceasta stare in momentul in care se primeste de la
telecomada un semnal, adica pe intrea f vom avea valoarea 1,iar usa este in curs de dechidere;
Starea 2 (state2)- reprezinta starea in care usa este deschisa complet;stim acest lucru
deoarece se actioneaza senzorul capat de cursa ceea ce inseamana ca pe intrare O vom avea
valoarea 1;
Starea 3 (state3)- in momentul in care usa este deschisa complet iar de la telecomanda
pleaca un alt semnal, adica f va avea din nou valoarea 1, atunci automatul trece in aceasta stare
ce reprezinta ca usa este in curs de inchidere, ceea ce inseamna ca intrarea o va devenii 0 iar
comanda spre motor este m1=1,m2=0;
Starea 4 (state 4)- reprezinta starea in care usa este comlpet inchisa pentru ca s-a actionat
senzorul capat de cursa, adica valoarea pe intrarea z va fi 1; aceasta stare corespunde cu strea
initiala Starea 0 iar daca vom avea o alta actionare a telecomenzii ciclul se va relua.

COMPLETAREA TABELELOR DE TRANZITIE A STARILOR SI


MARIMILOR DE IESIRE
Din diagrama codificata a starilor putem deduce cu usurinta tabelele
de tranzitie a starilor si a marimilor de iesire pentru automatul finit de
comanda a usii unui garaj (Fig 2.21).
Minimizarea functiilor de comanda
Pentru a pune in evident mai bine cele doua functii,separam tabelele
din fig 2.21 in doua,asa cum se vede in fig 2.22 si fi 2.23.

SCHEMA ELECTRICA CU CIRCUITE BASCULANTE BISTABILE DE TIP


D

Pentru realizarea schemei electrice a automatului am folosit programul


OrCAD Capture CIS Lite Edition.Pentru realizarea schemei am folosit circuite
basculante bistabile de tip D si porti NOT si NAND astfel ecuatiile deduse
initial au fost transformate astfel:

Pentru realizarea schemei electrice am folosit urmatoarele component sin


meniul Place-Part:
U 25A
1
2
porti NOT cu codul 7404

7404

U 17A

porti NAND cu codul 7400

2
7400

D S TM 1

S 1

U 31A
Q

C LK Q

5
6

C LR

7474
1

bistabile de tip D cu codul 7474


2

PR E

STIM

PROGRAMAREA SI IMPLEMENTAREA IN MEDIUL DE


PROGRAMARE MPLAB

Programul a fost gandit in urma analizarii cu atentie a diagramei de


stare astfel:
In STATE 0 usa este complet inchisa in cazul acesta se va aprinte LEDul D7;
In momentul in care se primeste un semnal din telecomanda, adica la
actionarea butonului, automatul trece in STATE 1 corespunzator starii de
deschidere a usii, situatie in care toate LED-urile sunt stinse.
In momentul cand senzorul capat de cursa este actionat atunci
automatul trece in STATE 2, moment in care LED-ul D6 se aprinde si ne arata
ca usa este complet deschisa.
Cand se primeste un alt semnal din telecomanda, automatul trece in
STATE 3, moment in care nu avem niciun LED aprins, de unde deducem ca
usa este in curs de inchidere.
Cand usa este inchisa complet (senzorul capat de cursa este actionat),
automatul intra in STATE 0 care aprinde LED-ul D7 de unde deducem ca ciclul
se reia;

In ceea ce priveste partea de simulare in programul MPLAB pentru


scrierea microcontroller-ului PIC12F675 cu ajutorul programului Pickit 1 Flash
Starter am folosit urmatorele linii de cod:
;
;
;

STATE0 = stinge orice LED aprins


- citeste Inputa1 - daca este 0, seteaza STATE0
- daca este 1, seteaza STATE1

;
;

STATE1 = citeste Inputb1 - daca este 0, seteaza STATE1


- daca este 1, seteaza STATE2

;
;
;

STATE2 = citeste Inputb1 - daca este 1, seteaza STATE3


- daca este 0, seteaza STATE2

;
;

STATE3 = citeste Inputb1 - daca este 0, seteaza STATE3


- daca este 1, seteaza STATE0

; Inputa1 si Inputb1 sunt doua microswitch-uri externe, care se vor lega la


GP4, respectiv GP5, ;iar SW1, legat la GP3, va determina prin apasare
intrarea n starea urmatoare. Cablarea celor ;trei comutatoare se realizeaza
astfel nct prin apasarea lor sa genereze 0 logic pe pinul ;microcontrolerului
iar relaxarea lor sa genereze 1 logic.
list
p=12f675
;Directiva de definire a procesorului
#include <p12f675.inc>
errorlevel -302
;Elimina mesajul de tip 302 din fisierul list
__CONFIG
_CP_OFF & _CPD_OFF & _BODEN_OFF & _MCLRE_OFF &
_WDT_OFF & _PWRTE_ON & _INTRC_OSC_NOCLKOUT
;Directiva '__CONFIG' pentru configurarea perifericelor n fisierul sursa.
Semnificatia bitilor de ;configurare:
;
CP_OFF
-Cod Protection,
;
WDT_OFF -WatchDog Timer,
;
BODEN_ON -Brown-Out Detect ENable,
;
PWRTE_ON -PoWeR-up Timer Enable,
;
INTRC_OSC_NOCLKOUT_OFF -INTernal RC_OSCilator
;
MCLRE_OFF -Master CLeaR Enable

;
CPD_OFF -Data Code Protection
;Adresele acestor biti se gasesc n fisierul Pic12F675.inc
; Definirea unor registre specifice aplicatiei cu directiva CBLOCK
cblock
0x20
STATE_COUNTER
;Registru de numarare a starilor automatului
STATE_DEBOUNCE
;Registru
de
numarare
a
starilor
debounce
CountH
CountL
; CountH si CountL sunt registre utilizate n
subrutina DEBOUNCE
endc
; Definirea variabilelor de program pentru comanda LED-urilor D6 si D7 cu
directiva DEFINE
#define TRIS_D6_D7
B'00011011'
;Definirea variabilei TRIS_D6_D7
prin valoarea ei binara
#define D6_ON B'00000100'
; Atribuirea valorii binare
variabilei
D6_ON (LED-OK aprins)
#define D7_ON B'00000010'
; La fel pentru D7_ON (LED-ERR)
; Initialize: secventa de initializare a SFR-urilor si a celor de uz general
org 0x005
; Adresa de Start a memoriei program
Initialize
;call 0x3FF
; Restabilirea factorului de calibrare - instructiune
comentariu necesara n cazul ;utilizarii simulatorului.
bsf STATUS,RP0
; selectare Bank 1
movwf
OSCCAL
; ncarcarea registrului OSCCAL cu valoarea
factorului de
; calibrare
movlw
0x7f
movwf
OPTION_REG
; Validare Weak pull-up general
movlw
B'00111111'
movwf
TRISIO
; Configurarea pinilor I/O ca intrari
movwf
WPU
clrf ANSEL
;
Dezactivare
convertor
A/D
setare
intrari/iesiri digitale
bcf STATUS,RP0
; Selectare Bank 0
clrf GPIO
movlw
B'00000111'
movwf
CMCON
; Dezactivare comparator - setare intrari /
iesiri digitale
clrf STATE_COUNTER ; Resetare registru numarator de stare
clrf STATE_DEBOUNCE
clrf CountH

clrf

CountL

; State_Machine: Implementeaza un automat finit cu 6 stari


State_Machine
call Button_Press
; Apelare de subrutina
movf STATE_COUNTER,w
andlwB'00000111'
; Se mascheaza ultimii trei biti din
STATE_COUNTER
addwf
PCL, f
; Program Counter (PCL) este ncarcat cu
adresa staii curente
;
prin
intermediul
acumulatorului
(WORKREGISTER)
goto State0
goto State1
goto State2
goto State3
State0
; Stinge LED-uri si executa citire Inputa1. Seteaza trecerea la starea
urmatoare (State1) daca ;Inputa1=1, sau ramne n State0 daca este 0
bsf STATUS, RP0
; Selectare Bank 1
movlw
TRIS_D6_D7
movwf
TRISIO
; ncarca valoarea binara definita pentru
TRIS_D6_D7 n TRISIO
bcf STATUS, RP0
; Selectare Bank 0
movlw
D7_ON
movwf
GPIO
; ncarca valoarea definita pentru
D6_ON n GPIO
bsf STATUS,RP0
movlw
b'00111111'
movwf
TRISIO
bcf STATUS,RP0
btfss GPIO,0
; citeste Inputa1 si sare instructiunea urmatoare daca
Inputa1=1
goto State_Machine
incf STATE_COUNTER,f
;Seteaza State1
goto State_Machine
State1
; Stinge LED-uri si executa citire Inputa1. Seteaza trecerea la starea
urmatoare (State1) daca ;Inputa1=1, sau ramne n State0 daca este 0
bsf STATUS,RP0
movlw
b'00111111'
movwf
TRISIO
bcf STATUS,RP0

btfss
Inputa1=1
goto
incf
goto

GPIO,4

; citeste Inputa1 si sare instructiunea urmatoare daca

State_Machine
STATE_COUNTER,f
State_Machine

;Seteaza State2

State2
; Stinge LED-uri si executa citire Inputa1. Seteaza trecerea la starea
urmatoare (State1) daca ;Inputa1=1, sau ramne n State0 daca este 0
bsf STATUS, RP0
; Selectare Bank 1
movlw
TRIS_D6_D7
movwf TRISIO
; ncarca valoarea binara definita pentru TRIS_D6_D7
n TRISIO
bcf STATUS, RP0
; Selectare Bank 0
movlw
D6_ON
movwf
GPIO
; ncarca valoarea definita pentru
D6_ON n GPIO
bsf STATUS,RP0
movlw
b'00111111'
movwf
TRISIO
bcf STATUS,RP0
btfss GPIO,0
; citeste Inputa1 si sare instructiunea urmatoare daca
Inputa1=1
goto State_Machine
incf STATE_COUNTER,f
;Seteaza State3
goto State_Machine
State3
; Stinge LED-uri si executa citire Inputa1. Seteaza trecerea la starea
urmatoare (State1) daca ;Inputa1=1, sau ramne n State0 daca este 0
bsf STATUS,RP0
movlw
b'00111111'
movwf
TRISIO
bcf STATUS,RP0
btfss GPIO,5
; citeste Inputa1 si sare instructiunea urmatoare daca
Inputa1=1
goto State_Machine
clrf STATE_COUNTER
goto State_Machine
; Button_Press: testeaza starea microswitch-ului (SW), executa temporizarea
de 10ms la ;schimbarea starii si ntoarce n programul principal la sesizarea
starii de apasare a lui.
Button_Press

btfss STATE_DEBOUNCE,0
goto Debounce_1
goto Debounce_2
Debounce_1
bcf
STATUS,RP0
btfsc GPIO,3
goto Debounce_1
incf STATE_DEBOUNCE, f

; SW este apasat?
; Nu, salt la Debounce_1
; Da, incrementeaza STATE_DEBOUNCE

Temp
movlw
0x21
;ncepe initializarea registrelor folosite
pentru temporizare.
movwf
CountH
;Se ncarca reg. CountH cu
const.33D
M1
movlw
0x63
movwf
CountL
;Se ncarca reg. CountL cu
const. 99D
M2
decfsz
CountL,f
; Se executa decrementarea registrului CountL.
Cnd continutul
;acestuia ajunge 00H, se sare instructiunea urmatoare
("goto M2")
goto M2
;Daca continutul lui CountL este diferit de 0, se executa
salt la M2
decfsz
CountH,f
;Decrementare CountH pna cnd continutul
acestui registru este 00H
; situatie n care se sare instructiunea urmatoare ("goto
M1")
goto M1
;Temporizarea
obtinuta cu aceasta secventa de program este:
; Temp = 2 + 33*(5+3*99) usec
btfss STATE_DEBOUNCE,0
goto Button_Press
retlw 0
;ntoarce n programul principal cu continutul
acumulatorului egal 0
Debounce_2
bcf STATUS,RP0
btfss GPIO,3
; SW este relaxat
goto Debounce_2
; Nu, salt la Debounce_2
clrf STATE_DEBOUNCE
;Da, reseteaza registrul
STATE_DEBOUNCE
goto Temp
end
; directiva 'end' a programului

In urma deschiderii programului MPLAB liniile de cod se salveaza intrun nou director cu extensia .asm. Se deschide Project Wizard, se urmaresc
pasii, iar dupa executarea acestora se alege Build All. In urma acestei
optiuni, programul compileaza liniile de cod si afiseaza BUILD SUCCEEDED.
Din meniul Debugger se alege functia Stimulus in care se introduc:
GP3, GP0 pentru intrarea f, GP4 pentru intrarea o si GP5 pentru intrarea z.
GP3 va fi intotdeauna setat Toggle in timp ce GP0, GP4, GP5 vor fi setate, in
functie de necesitate, High sau Low.