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.