~K.

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

if(kierunek == 0){

// 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