background image

 

~K. 

Data wykonania: 11.05.2010 

Data oddania: 25.05.2010 

Mikronapędy w systemach komputerowych 

Laboratorium 

Ćwiczenie 5 

 Sterowanie silnika prądu stałego przy użyciu specjalizowanych mikrokontrolerów. 

2 FDI                          Grupa: L-04 

 

 

Cel ćwiczenia 

Celem ćwiczenia było napisanie programu obsługującego specjalizowany mikrokontroler regulując 

prędkość silnika i wyświetlał aktualny współczynnik wypełnienia wyrażony w procentach, nie 

pozwalając jednocześnie na przekroczenie wartości krytycznej (w naszym wypadku 98%). 

Kod programu 

#include

 

<reg515.sfr> 

#include

 

<lcd.h> 

unsigned

 

char

 x; 

unsigned

 

int

 var = 50, delta; 

void

 opoznienie(

int

 x){ 

  

int

 j; 

  

for

(j = 1; j < x; j++); 


 

int

 main(){ 

  init(); 
  T2R1 = 1; 
  T2I0 = 1; 
  CRCH = 0xFF; 
  CRCL = 0x00; 
  CCH1 = 0xFF; 
  CCL1 = var; 
  

// odpowied

ź

 regulatora inicjowana pocz

ą

tkow

ą

 warto

ś

ci

ą

 pr

ę

dko

ś

ci 

  CCEN = 8; 
  CLK = 1; 
  P3_5 = 0; 
 
  

while

(1){ 

    

int

 a, b; 

    x = get_char(); 
    

if

(x == 

'g'

){ 

    

// spr. czy wci

ś

ni

ę

to strzałk

ę

 w gór

ę

 

      

if

(var < 250) 

 

// spr. czy warto

ść

 pr

ę

dko

ś

ci jest mniejsza od max. dopuszczalnej 

        CCL1 = ++var; 
 

  

// je

ś

li, to zwiekszenie odpowiedzi regulatora 

      put_instr(0x02); 
      delta = CCL1 * 100 / 255; 
 

// wyliczanie wspołczynnika wypełnienia 

      a = delta / 10; 
 

// wyłuskanie warto

ś

ci dziesi

ą

tnych 

      b = delta % 10; 
 

// wyłuskanie warto

ś

ci jedno

ś

ci 

      put_char(a + 48); 

background image

 

      put_char(b + 48); 
      opoznienie(2000); 
    } 
    

if

(x == 

'd'

){ 

    

// spr. czy wci

ś

ni

ę

to strzałk

ę

 w dół 

      

if

(var > 0) 

 

// spr. czy warto

ść

 pr

ę

dko

ś

ci jest wi

ę

ksza od 0 

        CCL1 = --var; 
 

  

// je

ś

li, to zmniejszenie odpowiedzi regulatora 

      put_instr(0x02); 
      delta = CCL1 * 100 / 255; 
      a = delta / 10; 
      b = delta % 10; 
      opoznienie(2000); 
      put_char(a + 48); 
      put_char(b + 48); 
    } 
  } 
  opoznienie(2000); 
  

return

 0; 


 
 

Wnioski 

W ćwiczeniu wykorzystywaliśmy mikrokontroler zawierający w swojej strukturze jednostkę 

generującą przebiegi PWM (ang. Pulse Width Modulation). Cechą takiego układu jest to, że w 

momencie przepełnienia licznika na wyjściu przerzutnika pojawia się stan niski, czyli zmniejszona 

zostaje prędkość. W naszym programie zastosowaliśmy ograniczenie, które nie pozwala przekroczyć 

określonej wcześniej prędkości (czyli maksymalny współczynnik wypełnienia  wynosi 98%) a wszelkie 

kolejne próby zwiększenia wartości są ignorowane – analogicznie program postępuje ze 

zmniejszaniem prędkości dla której dolnym ograniczeniem jest zatrzymanie silnika, czyli ustalenie 

współczynnika wypełnienia na 0). 

Program przyjmuje prędkość początkową 50 (odpowiednio współczynnik wypełnienia wynosi 19%). 

Zwiększanie bądź zmniejszanie prędkości odbywa się za pomocą klawiszy strzałek w górę i dół, a 

każda zmiana (o ile dopuszczalna przez program) jest prezentowana na wyświetlaczu w postawi 

współczynnika wypełnienia. Każda dopuszczalne żądanie zmiany prędkości odbywa się poprzez 

zwiększenie bądź zmniejszenie wartości rejestru 

CCL1

,

czyli wartości odpowiedzialnej za napięcie na 

zaciskach silnika (maksymalna wartość możliwa to 255 a w naszym programie 250).