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];
}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 wywietlacza
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 wciniêcia dowolnego klawisza
{
if(x>='0'
&& x<='9') //warunek wciniêcia cyfry
{
out_char(x); // wywietlenie znaku na ekranie
li=(li*i)+(x-48); //zczytywanie czestotliwosci z klawiatury
i=10;
}
}
if(x=='e') //warunek wciniê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')
{
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
{ // wywietleniu wczeniej 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
{ // wywietleniu wczeniej podanego kodu
x=get_kb();
}
out_instr(0x01); // ustawia kursor
li=0; // ustawienie pocz¹tkowych wartoci 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];
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.