background image

Politechnika Rzeszowska im. Ignacego Łukasiewicza 

Mikronapędy w systemach komputerowych

 

Rok studiów:      

IIEF-DI

 

Grupa laboratoryjna:      

L05

 

Numer ćwiczenia:     

4

 

Temat ćwiczenia: 

Programy sterujące pracą silników z komutacją elektroniczną 

Wykonali: 

Łukasz Malec 

Piotr Ławniczek 

Łukasz Marcola 

 

Data wykonania ćwiczenia: 
 

25/04/2016 

 
 

1. Cel ćwiczenia. 

 
Celem ćwiczenia było napisanie programu, który steruje silnikiem z komutacją elektroniczną. 
 

2. Program napisany na laboratorium. 
 

#include<reg515.sfr>

 

#include<lcd.h>

 

  

void

 

czekaj(); //deklaracja funkcji opóŸniaj¹cej

 

//_interrupt 5 void pt2(void); 

 

unsigned int

 

l;

 

unsigned char

 

x;

 

int

 

freq=0;

 

int

 

i=1,j;

 

int

 

li=0;

 

int

 

limp;

 

int

 

kom[3][8]={{8, 2, 4, 1, 8, 2, 4, 1}, {9, 10, 6, 5, 9, 10, 6, 5}, {8, 

10, 2, 6, 4, 5, 1, 9}};

 

int

 

krok=0, komu=0, strona=1;

 

int

 

p1[6]={0xDE,0xDB,0xF9,0xED,0xE7,0xF6};  //tablica stanów tranzystorów

 

int

 

hall[6]={0x03,0x01,0x05,0x04,0x06,0x02};  // tablica stanów po³o¿enia 

wirnika

 

  

_interrupt 5 void

 

int_T2(void){

 

TF2=0;

 

  

for(j=0;j<5;j++)

 

{

 

    if((P4&0x07)==p1[j])

 

    {

 

    krok=j;

 

    }

 

    

  

}

 

if(strona)

 

{

 

krok++;

 

if(krok>5){krok=0;}

 

  

P1=p1[krok];

 

background image

}else

 

{

 

krok-- ;

 

if(krok<0){krok=5;}

 

  

P1=p1[krok];

 

  
  
  
  
  
  

}

 

}

 

  

void

 

main()

 

{

 

  

T2I0=1;

 

T2R1=1;

 

EAL=1;

 

ET2=1;

 

  

l=0;

 

lcd_init(); //funkcja inicjalizacji wyŸwietlacza

 

  

out_instr(0x01); //rozkaz do sterownika kasuj¹cy dane

 

//i ustawiaj¹cy kursor pod adres 0

 

  

while(1)

 

{

 

  

x=get_kb(); // sczytywanie znaku do zmiennej

 

czekaj();

 

  

if(x!='\0') //warunek wciŸniêcia dowolnego klawisza

 

{

 

    if(x>='0'

 

&& x<='9') //warunek wciŸniêcia cyfry

 

    {

 

        out_char(x); // wyŸwietlenie znaku na ekranie

 

        li=(li*i)+(x-48); //zczytywanie czestotliwosci z klawiatury

 

        i=10;

 

    }

 

}

 

if(x=='e') //warunek wciŸniêcia klawisza enter

 

{

 

    if((li<=600)&&(li>=17)){

 

        freq=li;

 

        limp=1000000/freq;

 

        CRCL=65536-limp;

 

        CRCH=(65536-limp)>>8;

 

        while(1)

 

        {

 

        x=get_kb();

 

        

  

        /*if(x=='g')

 

        {

 

            if(komu==2)

 

                komu=0;

 

            else

 

                komu++;

 

        }

 

        if(x=='d')

 

background image

        {

 

            if(komu==0)

 

                komu=2;

 

            else

 

                komu--;

 

        } */

 

        if(x=='l')

 

            strona=0;

 

        if(x=='p')

 

            strona=1;

 

  

    }}

 

    else{

 

    li=0;

 

    i=1;

 

    out_instr(0x01);

 

    czekaj();

 

    x=get_kb(); 

 

    while(x=='\0')                       // oczekiwanie na nowy kod 
programu po

 

    {                                   // wyŸwietleniu wczeŸniej podanego 
kodu

 

        x=get_kb();

 

    } 

 

    }

 

  

    /** out_instr(0xC0); //ustawienie kursora w pierwszym polu nowej linii

 

    out_char(li); // wypisanie znaku

 

    czekaj(); // u¿yta funkcjia opóŸniaj¹ca

 

    x=get_kb(); // "get_kb" oraz pêtla "while" realizuj¹

 

    while(x=='\0') // oczekiwanie na nowy kod programu po

 

    { // wyŸwietleniu wczeŸniej podanego kodu

 

        x=get_kb();

 

    }

 

    out_instr(0x01); // ustawia kursor

 

    li=0; // ustawienie pocz¹tkowych wartoŸci zmiennych

 

    i=1; **/

 

}

 

}

 

}

 

void

 

czekaj() //definicja funkcji opóŸniaj¹cej

 

{

 

    int

 

ieo;

 

    for(ieo=0;ieo<15000;ieo++){}

 

}

 

  

/*_interrupt 5 void int_T2(void){

 

  

TF2=0;

 

  

if(strona){

 

    if(krok>7)

 

    krok=0;

 

    

  

    P1=kom[komu][krok];

 

    krok++;

 

}

 

else{

 

    if(krok<0)

 

    krok=7;

 

    

  

    P1=kom[komu][krok];

 

background image

    krok--;

 

}

 

}

 

  

 */

 

3. Wnioski.

 

 
 

Silnik  prądu  stałego  z  komutacją  elektroniczną  ma  najczęściej  trzy  uzwojenia 

umieszczone na stojanie, zasilane przez trzygałęziowy mostek. Tranzystory mostka sterowane 
są  poprzez  bity  zmiennej  P1.  Na  laboratorium  należało  napisać  program,  który  będzie 
odpowiednio załączał lub wyłączał poszczególne tranzystory. Tranzystor jest załączony, gdy 
przypisany mu bit ma wartość 0. 
 

Pierwszym  zadaniem  było  wyznaczenie  sposobów  komutowania  silnika  poprzez 

określenie  wartości  poszczególnych  bitów  zmiennej  P1  tak,  aby  odpowiednio  sterować 
tranzystorami mostka. Należało uzupełnić tabelę. 
 

Wartości  bitów,  które  wpisane  zostały  to  tabeli  były  niezbędne,  aby  poprawnie 

zaprogramować załączanie tranzystorów. Realizacja sterowania to podstawianie do zmiennej 
P1  wartości  bitów  zgodnie  z  powyższą  tabelą.  Zostało  to  zrealizowane  poprzez  obsługę 
przerwania.  
 

Program napisany na zajęciach najpierw sprawdza czy wirnik znajduje sie w sektorze 

przypisanym  do  danej  kolumny,  następnie  podstawia  odpowiednie  wartości  dla  P1.  Pojawia 
się  też  zmienna  P4,  która  sprawdza  czy  wirnik  wykonał  zadany  obrót.  Program  umożliwia 
wprowadzenie  wartości  częstotliwości  z  klawiatury.  Program  działał  poprawnie  i  został 
zaliczony przez prowadzącego.