Politechnika Rzeszowska im. Ignacego Łukaszewicza

Mikronapędy w systemach komputerowych

Rok studiów: II FD

Grupa laboratoryjna: L05

Numer ćwiczenia: 3

Temat ćwiczenia:

Algorytmy komutacji silników skokowych ze sprzężeniem zwrotnym

Wykonali:

Michał Kata

Tomasz Kordas

Data wykonania ćwiczenia:

04/04/2011

1. Cel ćwiczenia.

Celem ćwiczenia było napisanie programu, który obsługuje silnik skokowy wraz z hamowaniem pod koniec zadanej drogi kątowej.

2. Program

#include <reg515.sfr>

#include <lcd.h>

char tab[8];

int j=0;

unsigned char znak, znak2;

unsigned int liczba=0,liczba2, f=1, predkosc, opoznienie=50, obroty=0, liczba_obrotow=400;

int i, count;

void petla(unsigned int n)

{

int i;

for (i=0;i<n;i++)

{}

}

_interrupt 0 void przerwanie(void)

{

petla(opoznienie);

if (j>=8)

j=0;

P1=tab[j];

j++;

if (EX0==1)

{

obroty++;

}

if (liczba_obrotow-obroty<=200)

{

opoznienie++;

}

if (obroty>=liczba_obrotow)

{

EX0=1;

obroty=0;

opoznienie=50;

}

}

void main()

{

int z1;

int komutacja=1;

init();

IT0=1;

EAL=0;

while(1)

{

znak=get_char();

if ((znak!='\0') && (znak2!=znak));

if ((znak>=48) && (znak<=57))

{

if (count==0)

{

put_instr(0x80);

put_char(' ');

put_char(' ');

put_char(' ');

put_char(' ');

put_char(' ');

put_instr(0x80);

}

liczba=10*liczba+(znak-48);

put_char(znak);

count++;

for(i=0;i<20000;i++);

znak2=znak;

}

if((znak=='e') && ( count>0))

{

f=liczba;

predkosc=0xFFFF-1000000/f;

liczba_obrotow=liczba;

CRCH=(predkosc>>8);

CRCL= predkosc;

P1=9;

j++;

petla(2000);

P1=10;

j++;

petla(2000);

EX0=1;

for(i=0;i<20000;i++);

liczba=0;

count=0;

}

if (znak=='g')

if (komutacja<=2)

{

komutacja++;

count++;

z1++;

put_instr(0x88);

}

if (znak=='d')

if (komutacja>=1)

{

komutacja--;

count++;

z1++;

put_instr(0x88);

}

if ((komutacja==1) && ( count>0) && (z1>0))

{

put_char(49);

put_char('/');

put_char(52);

for(i=0;i<20000;i++);

count=0;

z1=0;

}

if ((komutacja==2) && ( count>0) && (z1>0))

{

put_char(49);

put_char('/');

put_char(50);

for(i=0;i<20000;i++);

count=0;

z1=0;

}

if ((komutacja==3) && ( count>0) && (z1>0))

{

put_char(51);

put_char('/');

put_char(56);

for(i=0;i<20000;i++);

count=0;

z1=0;

}

if (komutacja==1)

{

tab[0] = 8;

tab[1] = 2;

tab[2] = 4;

tab[3] = 1;

tab[4] = 8;

tab[5] = 2;

tab[6] = 4;

tab[7] = 1;

}

if (komutacja==2)

{

tab[0] = 9;

tab[1] = 10;

tab[2] = 6;

tab[3] = 5;

tab[4] = 9;

tab[5] = 10;

tab[6] = 6;

tab[7] = 5;

}

if (komutacja==3)

{

tab[0] = 8;

tab[1] = 10;

tab[2] = 2;

tab[3] = 6;

tab[4] = 4;

tab[5] = 5;

tab[6] = 1;

tab[7] = 9;

}

}

}

3. Wnioski.

Do wykonania ćwiczenia wykorzystaliśmy program z poprzednich zajęć. Program uruchamia silnik, jednak nie udało nam się napisać kodu, który wyhamowywałyby silnik przy zadanej prędkości kątowej.