18
AUTOMATUL DE COMANDA A USII DE GARAJ Facultatea de Inginerie Medicala Universitatea Politehnica Bucuresti

Automatul de Comanda a Usii de Garaj

Embed Size (px)

DESCRIPTION

Referat CPAB

Citation preview

AUTOMATUL DE COMANDA A USII DE GARAJ

Facultatea de Inginerie Medicala Universitatea Politehnica BucurestiGrupa 1423, prof. coord.:Madalin FrunzeteStudenti: 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

INTRODUCEREDe 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, o-semnal 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 STARESe 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 IESIREDin 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 DPentru 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:

porti NOT cu codul 7404

porti NAND cu codul 7400

STIM

bistabile de tip D cu codul 7474

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 LED-ul 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 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 cblock0x20STATE_COUNTER;Registru de numarare a starilor automatuluiSTATE_DEBOUNCE;Registru de numarare a starilor debounce CountHCountL ; 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_D7B'00011011';Definirea variabilei TRIS_D6_D7 prin valoarea ei binara#define D6_ONB'00000100'; Atribuirea valorii binare variabilei D6_ON (LED-OK aprins)#define D7_ONB'00000010'; La fel pentru D7_ON (LED-ERR)

; Initialize: secventa de initializare a SFR-urilor si a celor de uz general

org0x005; Adresa de Start a memoriei programInitialize;call 0x3FF ; Restabilirea factorului de calibrare - instructiune comentariu necesara n cazul ;utilizarii simulatorului.bsfSTATUS,RP0; selectare Bank 1 movwf OSCCAL; ncarcarea registrului OSCCAL cu valoarea factorului de ; calibraremovlw0x7fmovwfOPTION_REG; Validare Weak pull-up generalmovlwB'00111111'movwfTRISIO; Configurarea pinilor I/O ca intrarimovwfWPUclrfANSEL; Dezactivare convertor A/D - setare intrari/iesiri digitalebcf STATUS,RP0; Selectare Bank 0clrfGPIOmovlwB'00000111'movwfCMCON; Dezactivare comparator - setare intrari / iesiri digitaleclrfSTATE_COUNTER; Resetare registru numarator de stareclrfSTATE_DEBOUNCEclrfCountHclrfCountL

; State_Machine: Implementeaza un automat finit cu 6 stari State_MachinecallButton_Press; Apelare de subrutinamovfSTATE_COUNTER,w andlwB'00000111'; Se mascheaza ultimii trei biti din STATE_COUNTERaddwfPCL, f; Program Counter (PCL) este ncarcat cu adresa staii curente; prin intermediul acumulatorului (WORKREGISTER) gotoState0gotoState1 gotoState2gotoState3

State0; Stinge LED-uri si executa citire Inputa1. Seteaza trecerea la starea urmatoare (State1) daca ;Inputa1=1, sau ramne n State0 daca este 0 bsfSTATUS, RP0; Selectare Bank 1movlwTRIS_D6_D7movwfTRISIO; ncarca valoarea binara definita pentru TRIS_D6_D7 n TRISIObcfSTATUS, RP0; Selectare Bank 0movlwD7_ONmovwfGPIO; ncarca valoarea definita pentru D6_ON n GPIObsfSTATUS,RP0movlwb'00111111'movwfTRISIObcfSTATUS,RP0btfssGPIO,0; citeste Inputa1 si sare instructiunea urmatoare daca Inputa1=1gotoState_MachineincfSTATE_COUNTER,f ;Seteaza State1goto 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 bsfSTATUS,RP0movlwb'00111111'movwfTRISIObcfSTATUS,RP0btfssGPIO,4; citeste Inputa1 si sare instructiunea urmatoare daca Inputa1=1gotoState_MachineincfSTATE_COUNTER,f ;Seteaza State2goto State_MachineState2; Stinge LED-uri si executa citire Inputa1. Seteaza trecerea la starea urmatoare (State1) daca ;Inputa1=1, sau ramne n State0 daca este 0 bsfSTATUS, RP0; Selectare Bank 1movlwTRIS_D6_D7movwf TRISIO; ncarca valoarea binara definita pentru TRIS_D6_D7 n TRISIObcfSTATUS, RP0; Selectare Bank 0movlwD6_ONmovwfGPIO; ncarca valoarea definita pentru D6_ON n GPIObsfSTATUS,RP0movlwb'00111111'movwfTRISIObcfSTATUS,RP0btfssGPIO,0; citeste Inputa1 si sare instructiunea urmatoare daca Inputa1=1gotoState_MachineincfSTATE_COUNTER,f ;Seteaza State3goto 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 bsfSTATUS,RP0movlwb'00111111'movwfTRISIObcfSTATUS,RP0btfssGPIO,5; citeste Inputa1 si sare instructiunea urmatoare daca Inputa1=1goto State_MachineclrfSTATE_COUNTERgoto 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_PressbtfssSTATE_DEBOUNCE,0gotoDebounce_1gotoDebounce_2Debounce_1bcfSTATUS,RP0btfscGPIO,3; SW este apasat?gotoDebounce_1; Nu, salt la Debounce_1incfSTATE_DEBOUNCE, f ; Da, incrementeaza STATE_DEBOUNCE

Tempmovlw0x21 ;ncepe initializarea registrelor folosite pentru temporizare.movwfCountH ;Se ncarca reg. CountH cu const.33DM1movlw0x63movwfCountL ;Se ncarca reg. CountL cu const. 99DM2decfszCountL,f ; Se executa decrementarea registrului CountL. Cnd continutul ;acestuia ajunge 00H, se sare instructiunea urmatoare ("goto M2")gotoM2 ;Daca continutul lui CountL este diferit de 0, se executa salt la M2decfszCountH,f ;Decrementare CountH pna cnd continutul acestui registru este 00H ; situatie n care se sare instructiunea urmatoare ("goto M1")gotoM1;Temporizarea obtinuta cu aceasta secventa de program este:; Temp = 2 + 33*(5+3*99) usecbtfssSTATE_DEBOUNCE,0gotoButton_Press retlw0 ;ntoarce n programul principal cu continutul acumulatorului egal 0Debounce_2bcfSTATUS,RP0btfssGPIO,3 ; SW este relaxatgotoDebounce_2 ; Nu, salt la Debounce_2clrfSTATE_DEBOUNCE ;Da, reseteaza registrul STATE_DEBOUNCEgotoTempend ; directiva 'end' a programului

In urma deschiderii programului MPLAB liniile de cod se salveaza intr-un 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.