Mikrokontroleri - PIC

Autor:Dragan Andrić

 

Kontakt: andric@mikroelektronika.co.yu

 

Step motor & PIC

Ako ste u svojoj aplikaciji imali potrebu da koristite step motor, a niste znali kako, odgovor potražite u ovom članku. 

U razvoju tehnologije sistema digitalnog upavljanja koračni (step) motor je najzanimljivije otkriće. To je jedini tip motora kojim mikroprocesor može direktno upravljati bez posredstva digitalno/analognog pretvarača. Naravno to ”direktno” nemojte baš bukvalno shvatiti jer, mikroprocesor ne može da obezbedi dovoljno veliku struju za pokretanje motora, pa se zato mora koristi poseban izvor i par komponenata “drajvera” preko kojih mikroprocesor upravlja motorom.

Motor koji smo koristili u ovom primeru je proizvod firme SHINKON. Ovaj motor ima šest izvoda od kojih dva (beli i crni) idu na napon napajanja (+14V) ,a ostala četiri na kolektore tranzistora BD 135 koji su u ovom slučaju drajveri dimenzionisani za ovaj tip motora. Diode 1N4148 imaju ulogu da zaštite tranzistore od povratne struje koja se indukuje u namotajima motora. Broj pozicija u kojim se može naći osovina motora je 200 tj. ugao koji osovina zaklapa između dve susedne pozicije je 360°/200 = 1,8 stepeni. 

Kontrola motora je poverena već poznatom Microchip-ovom mikrokontroleru PIC16F84. Kao što možemo videti sa električne šeme pored obaveznog reset kola i oscilatora, na PORT-u B imamo dva tastera (RB0 i RB1) za smer i dve kontrolne LEDiode (RB6 i RB7), a za upravljanje tranzistorima upotrebljeni su pinovi porta A (RA0 – RA3). 
Suština upravljanja step motorom je u tome da se na krajeve istog namotaja dovode signali koji su međusobno pomereni 180°, dok su signali prvog i drugog namotaja međusobno pomereni za 90°. To znači da bi pokrenuli motor u jednom smeru potrebno je da na port A mikrokontrolera sukcesivno šaljemo vrednosti date u tabeli redosledom (1,2,3,4,1), a ako želimo da promenimo smer redosled slanja je (1,4,3,2,1). 

korak RA3 RA2 RA1 RA0
1 0 1 0 1
2 0 1 1 0
3 1 0 1 0
4 1 0 0 1
1 0 1 0 1


Test program

Program čine dve rutine: LLab koja na izlazni port A šalje vrednisti redosledom (1,2,3,4,1) i DLab koja vrednosti na izlazni port šalje redosledom (1,4,3,2,1). Da bi imali neku kontrolu nad motorom na portu B su dodata dva tastera koje program ispituje svake 2 mS i u zavisnosti od njihovog stanja izvršavaju se rutine LLab ili DLab tj. osovina motora se kreće levo ili desno. 


U ovom primeru dat je samo prncip upravljanja step motorom ali uz male izmene i recimo dodavanjem softverske komunikacije moguće je na vrlo jednostavan i na lak način zadavati broj koraka menjati smer i brzinu motora.

LISTING : Step motor, ARB generator kod-a
#include <stdio.h>
#include "pic16c84.h"

const int Lookup=10;

void Test(flag p){block
#define page0 (rp0=low t;Skip(p);t.Again();tmr0=0;})
#define page1 (rp0=high)

main()
{
  Choice("step.hex",INTEL_HEX);

gpr Step(0x0c);
flag Levo =portB(1);
flag Desno =portB(0);
flag LLed =portB(6);
flag DLed =portB(7);

LC=0;
page1;
trisA=w=0;
trisB=w=0x0f;
option=w="10010011";
page0;
DLed=low;
LLed=low;
portA=0;
tmr0=0;
Step=0;
 Jump(MAIN);
 {
  block table(Lookup);
  pcl=pcl+w;
  Retlw("00000101");
  Retlw("00000110");
  Retlw("00001010");
  Retlw("00001001");
 }
 {
  block m(MAIN);
  Test(tmr0(7);
 }
 {
  enum loop{DLab=100,LLab};
  block k;
  k(DLab);
  Skip(!Desno);
  k.Jump(LLab);
  DLed=high;
  ++Step;
  w=4;
  w=w-Step;
  Skip(status(0));
  Step=0;
  w=Step;
  Call(Lookup);
  portA=w;
  DLed=low;
  Jump(MAIN);
  k(LLab);
  Skip(!Levo);
  Jump(MAIN);
  LLed=high;
  --Step;
  w=3;
  Skip(!Step(7));
  Step=w;
  w=Step;
  Call(Lookup);
  portA=w;
  LLed=low;
  Jump(MAIN);
 }
return 0;
}


LISTING: Step motor, asembler
#include c84.h

#define page0 bcf 3,5 ;Memory page0
#define page1 bsf 3,5 ;Memory page1

Step equ 0x0c ;Temp location
Left equ 1 ;RB1
Right equ 0 ;RB0
LeftL equ 6 ;RB6
RightL equ 7 ;RB7

org 0x00

page1
movlw 0x00
movwf TRISA ;PortA je izlazni
movlw 0x0f
movwf TRISB ;RB0 - RB3 ulazi, RB4 - RB7 izlazi
movlw b'10010111'
movwf OPTION_REG
page0

bcf PORTB,RightL ;Pocetak Inicijalizacije
bcf PORTB,LeftL ;
clrf PORTA ;
clrf RTCC ;
clrf Step ;Kraj Inicijalizacija

goto main

Table addwf PCL,f
retlw b'00000101'
retlw b'00000110'
retlw b'00001010'
retlw b'00001001'

main btfss RTCC,3
goto $-1
clrf RTCC

RightLAB
btfsc PORTB,Right
goto LeftLAB
bsf PORTB,RightL
incf Step,f
movlw .4
subwf Step,w
btfsc STATUS,0
clrf Step
movf Step,w
call Table
movwf PORTA
call delay
bcf PORTB,RightL
goto main

LeftLAB
btfsc PORTB,Left
goto main
bsf PORTB,LeftL
decf Step,f
movlw .3
btfsc Step,7
movwf Step
movf Step,w
call Table
movwf PORTA
call delay
bcf PORTB,LeftL
goto main

delay btfss RTCC,7
goto $-1
clrf RTCC
return

end

 

Pročitajte više o ovoj temi
Povezivanje LCD-a 
Programator za PIC16F84 
PIP02 
Portovi 

C o p y r i g h t  1998 mikroElektronika. All Right Reserved. Za sva pitanja obratite se redakciji