Data wykonania: 27.04.2010
Data oddania: 25.05.2010
Mikronapędy w systemach komputerowych
Laboratorium
Ćwiczenie 4
Programy sterujące pracą silników z komutacją elektroniczną.
2 FDI Grupa: L-04
Cel ćwiczenia
Celem ćwiczenia jest napisanie programu sterującego pracą silnika z komutacją elektroniczną z poziomu klawiatury. Program ma umożliwiać wprowadzanie zadanej prędkości jak i kierunek obracania silnika.
Kod programu
#include <reg515.sfr>
#include <lcd.h>
unsigned char x;
unsigned int liczba, impulsy, hal, n, kierunek;
unsigned char tablicaP1[6]={222, 219, 249, 237, 231, 246};
// wartości dla zmiennej P1
unsigned char tablicaH[6]={3 ,1 ,5 ,4 ,6 ,2};
// wartości hallotronu dla poszczeglónych położen wirnika void opoznienie(int x){
int j;
for(j = 1; j < x; j++);
}
_interrupt 5 void int_T2(void){
int i;
TF2 = 0;
hal = P4 & 7;
// odczytanie pozycji hallotronu z 3 najmłodszych bitów za pomocą
// AND-a bitowego
for(i = 0; i < 6; i++){
if(tablicaH[i] == hal)
n = i;
// do n przypisujemy indeks pod którym w tablicaH znajduje sie
// odpowiednia pozycja hallotronu
}
if(kierunek == 1){
// spr. czy silnik ma kręcić sie w prawo
if(n == 5){
// spr. czy n jest na ostniej pozycji w tablicy
P1 = tablicaP1[0];
n = 0;
// jeśli, to ustawienie indeksu na 0 i odczyt z tablicy
}
else
P1 = tablicaP1[n+1];
// jeśli nie, to odczyt z tablicy ze zwiększonym indeksem
}
1
// spr. czy silnik ma kręcić się w lewo
if(n == 0){
// spr. czy n jest na pierwszej pozycji w tablicy
P1 = tablicaP1[5];
n = 5;
// jeśli, to ustawienie indeksu na 5 i odczyt z tablicy
}
else
P1 = tablicaP1[n - 1];
// jeśli nie, to odczyt z tablicy ze zmniejszonym indeksem
}
}
int main(){
init();
liczba = 0;
T2R1 = 1;
T2I0 = 1;
EAL = 1;
ET2 = 1;
CRCH = 0;
CRCL = 0;
while(1){
x = get_char();
if((x >= 48) && (x <= 57)){
liczba = 10 * liczba + (x - 48);
put_char(x);
}
// odczyt liczby wprowadzanej z klawiatury
if (x == 'e'){
// spr. czy wciśnięto ENTER
opoznienie(20000);
if((liczba > 100) && (liczba < 600)){
// spr. czy podana liczba jest z przedziału 100..600
impulsy = 1000000 / liczba;
// wyliczenie liczby impulsów
CRCL = -impulsy;
// młodsze bity
CRCH = -(impulsy >> 8);
// starsze bity
liczba = 0;
}
}
if(x == 'p')
kierunek = 1;
if(x == 'l')
kierunek = 0;
opoznienie(20000);
}
return 0;
}
Wnioski
Działanie programu polega na cyklicznym podstawianiu do zmiennej P1 sterującej tranzystorami mostka wartości wyliczonych i wpisanych do tablicaP1 . Schemat postępowania został
zastosowany w kodzie przerwania generowanego przez układ odmierzania czasu , ponieważ odstępy czasu pomiędzy kolejnymi modyfikacjami zmiennej P1 muszą być jednoznacznie określone. By 2
poprawne wartości były przypisywane do zmiennej P1 program musiał również sprawdzać, czy wirnik znajduje się w sektorze przypisanym do danej kombinacji połączeń uzwojeń stojana. Odbywa to się za pomocą sczytania ze zmiennej P4 3 najmłodszych bitów hallotronowego sprzężenia zwrotnego a potem odnalezienie takiej samej wartości w tablicaH i stosując ten sam indeks n podstawiać z tablicaP1 do P1 odpowiednie dane.
3